私はこれについて途方に暮れており、どのコードを投稿すればよいかさえよくわかりません。
C++ アプリケーションがあります。初期ウィンドウには、編集コントロール、カスタム コントロール、およびメニューがあります。ユーザーが F5 を押すと、新しいウィンドウが開き、独自のメッセージ ループが表示されます。新しいウィンドウは DialogBox を開き、予想どおりモーダルです。
奇妙な部分は、DialogBox が 2 番目のウィンドウの後ろに隠れているように見えることです。最初のウィンドウに alt-tab で移動し、次に alt-tab で 2 番目のウィンドウに戻り、ダイアログ ボックスに移動する必要があります。
DialogBox をキャンセルすると、2 番目のウィンドウが (予想どおり) 破棄され、MessageBox が (予想どおり) 表示されますが、そのメッセージ ボックスは最初のウィンドウの後ろに隠れているようです。繰り返しますが、メッセージ ボックスを最前面に表示するには、Alt-Tab を 2 回押して、OK を出します。
DialogBox と MessageBox の両方でこの奇妙なポップアンダー動作を引き起こす可能性のあるアイデアはありますか?
ありがとう!
ダイアログ ボックスを作成するコード
INT_PTR ip = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_AMBIGUOUS), this->hWnd, DlgAmbiguous);
DlgAmbiguous プロシージャーのコード
INT_PTR CALLBACK DlgAmbiguous(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
{
HWND hStaticTerm = GetDlgItem(hDlg, IDC_TERM);
SetWindowText(hStaticTerm, lpAmbiguousTerm);
if (wcscmp(lpAmbiguousTerm, L"canvas") == 0)
{
HWND hComboBox = GetDlgItem(hDlg, IDC_MEANING);
SendMessage(hComboBox, CB_ADDSTRING, NULL, reinterpret_cast<LPARAM>(_T("Program Window")));
SendMessage(hComboBox, CB_ADDSTRING, NULL, reinterpret_cast<LPARAM>(_T("Region in Program Window")));
}
return (INT_PTR)TRUE;
}
case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
HWND hComboBox = GetDlgItem(hDlg, IDC_MEANING);
iAmbiguousResult = SendMessage(hComboBox, CB_GETCURSEL, NULL, NULL);
EndDialog(hDlg, iAmbiguousResult + 100);
return (iAmbiguousResult == -1) ? FALSE : TRUE;
}
else if (LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, DLG_CANCEL);
return (INT_PTR)FALSE;
}
break;
}
return (INT_PTR)FALSE;