我刚刚开始使用对话框,我真的很喜欢在资源文件中定义布局的可能性。但是可以设置一个对话框并将其嵌入另一个对话框(即没有浮动对话框)吗?
使用普通窗口,我创建了一个带有一个子窗口的主窗口。然后,我创建了更多的窗口(如“编辑”,“静态”,......)并将它们添加到孩子身上。我这样做是为了将这几个窗口组合到一个窗口中,这样我就可以轻松控制所有编辑和静态的可见性。有点像分组(但它没有GroupBox的边框)。
是否可以重写上述内容,但是在.rc文件中写下了对话框?
我正在使用普通的C和Win32。
我所做的例子:
main = CreateWindow(...);
container = CreateWindow(... hWndParent = main ...);
label = CreateWindow("static", ... container);
edit = CreateWindow("edit", ... container);
现在,如果我可以隐藏或调整标签和编辑,只是控制container
。
我想要的例子:
MAIN_DIALOG DIALOG 10, 20, 30, 40 STYLE ...
BEGIN
CONTROL "container" ...
END
如何将“标签”和“编辑”添加到“容器”控件?
答案 0 :(得分:3)
此外,在资源编辑器中,将对话框样式设置为“child”,将border设置为“none”。
答案 1 :(得分:2)
您想要做的可能与选项卡式对话框有点类似。有一些控件是通过外部对话框从不同的资源嵌入的。然后,您可以通过仅为子对话框调用ShowWindow来显示/隐藏选项卡中的所有控件:
在主对话框Callback中添加类似
的内容HWND SubDlgHwnd; // Global or probably within a struct/array etc.
case WM_INITDIALOG:
{
HRSRC hrsrc;
HGLOBAL hglobal;
hrsrc = FindResource(sghInstance, MAKEINTRESOURCE(SubDlgResId), RT_DIALOG);
hglobal = ::LoadResource(sghInstance, hrsrc);
SubDlgHwnd = CreateDialogIndirect(sghInstance, (LPCDLGTEMPLATE)hglobal, hDlg, ChildDialogCallback);
SetWindowPos(SubDlgHwnd, HWND_TOP, x, y, 0, 0, SWP_NOSIZE);
break;
}
case WM_COMMAND:
{
...
if(UpdateVisibility)
ShowWindow(SubDlgHwnd, showSubDialog ? SW_SHOW : SW_HIDE);
}
This可能是一个很好的微软开源文档。
答案 2 :(得分:2)
您还必须将DS_CONTROL
样式添加到要嵌入的对话框中。如果没有它,嵌入式对话框窗口将显示窗口标题,这是很难想要的。