我想创建2个对话窗口,一个是另一个的子窗口。以下是代码的一部分。 当我点击菜单项“家长”,它创造了2对话框,设置一个作为另一个的孩子,因为图片显示:对话窗口内的子对话窗口
的问题是,它们都是无形的。它们的大小如Spy ++所示。 即使我使用ShowWindow和UpdateWindow,它也没有帮助。
这是我第一次queston:
How to fix this?
现在我想要做的创建子对话框窗口的理由是:看看下面的图片,
它有一个偏好包含子对话框的对话框(由黑线限定的矩形)。这些子对话窗口用于分组相关选项。因此,如果使用在左侧TreeView中选择一个项目,它将隐藏一个子对话框窗口并显示另一个子对话框窗口以提供不同的选项。
现在第二个问题:
Is my code is the correct way to achieve such work?
更新2:
这里是解决方案!
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644996%28v=vs.85%29.aspx
更新:
谢谢你们。
使用CreateDialog
(儿童对话),而不是DialogBox(...)
,使用DS_CONTROL
代替WS_CHILD
,并从子对话框中删除OK
键(及其相应的WndProc)后,我得到了
我甚至可以移动父对话框内的子对话框。删除资源脚本文件中的CAPTION "Child Dialog"
不起作用。
如何(应该使用哪些标志)使Child Dialog无缝地适合父对话框,?这意味着:没有标题栏,没有边框等等。 (在创建子对话框后使用
SetWindowLong
和WS_BORDER
?或者是对话框的其他参数?)父对话框的OK按钮不再有效。如何解决这个问题?我不明白如何管理这个父子对话框中的对话框过程。任何参考?
这里是我的代码:
1. Message handler for dialogs:
INT_PTR CALLBACK Child(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
{
hChild = hDlg;
return (INT_PTR)TRUE;
}
case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
INT_PTR CALLBACK Parent(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
{
hParent = hDlg;
DialogBox(hInst, MAKEINTRESOURCE(IDD_CHILD), hParent, Child);
SetParent(hChild, hParent);
return (INT_PTR)TRUE;
}
case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
2. Dialog Templates in resource file
IDD_CHILD DIALOGEX 0, 0, 70, 50
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU
CAPTION "Child Dialog"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Child Dialog",IDC_STATIC,10,5,35,8,SS_NOPREFIX
DEFPUSHBUTTON "OK",IDOK,10,25,50,14,WS_GROUP
END
IDD_DIALOG_PARENT DIALOGEX 0, 0, 250, 150
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Parent Dialog"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Parent",IDC_STATIC,42 - 20,14,35,8,SS_NOPREFIX
DEFPUSHBUTTON "OK",IDOK,188, 126,50,14,WS_GROUP
END
您需要使用'CreateDialog',而不是'DialogBox'。 'DialogBox'将运行它自己的模态循环。 –
它有很大的帮助,谢谢。 – user565739
昨天有[几乎是重复](http://stackoverflow.com/questions/14031580/group-dialog-items-to-a-single-group-visual-studio/14031634#14031634)与源代码。 –