我想創建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)與源代碼。 –