2つのダイアログウィンドウを作成したいのですが、1つはもう1つの子です。以下はコードの一部です。メニュー項目「親」をクリックすると、2つのダイアログが作成され、図に示すように、一方が他方の子として設定されます。
問題は、両方が見えないことです。これらは、Spy++で示されるサイズになっています。ShowWindowとUpdateWindowを使用しても、役に立ちません。
これが私の最初の質問です:
How to fix this?
子ダイアログウィンドウを作成したい理由は次のとおりです。次の図を見てください。
子ダイアログ(黒い線で囲まれた長方形)を含む設定ダイアログがあります。これらの子ダイアログウィンドウは、関連するオプションをグループ化するために使用されます。したがって、使用者が左側のTreeViewで項目を選択すると、子ダイアログウィンドウが非表示になり、別の子ダイアログウィンドウが表示されてさまざまなオプションが提供されます。
次に2番目の質問:
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(...)
を使用して、子ダイアログからボタン(および対応するwndproc)を削除した後、DS_CONTROL
WS_CHILD
OK
親ダイアログ内で子ダイアログを移動することもできます。リソーススクリプトファイルでの削除CAPTION "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