0
異なるメニュー項目が選択されているときに異なるモードレスダイアログボックスを表示するようにプログラムを設定しようとしています。これまでは1を表示する作業しか行っていませんが、この作業を行うことはできません。C++ WINAPI(MFCなし)を使用していくつかのモードレスダイアログを開始する
コードを実行すると、メインウィンドウのフォーカスが失われていることがわかりますが、aboutダイアログボックスが表示されません。私はコードのような大規模なセクションを貼り付けるために謝るが、私はのように気づいていないよ
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_CREATE:
g_hToolbar = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_ABOUTBOX),
hDlg, ToolDlgProc
);
if(g_hToolbar != NULL)
{
ShowWindow(g_hToolbar, SW_SHOW);
}
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_ACTIVATE:
if (0 == wParam) // becoming inactive
hDlgCurrent = NULL;
else // becoming active
hDlgCurrent = hDlg;
return FALSE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDOK)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
のWndProc
でその後、私のコールcase IDM_ABOUT:
CreateDialog(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
:ここ
HWND g_hToolbar = NULL;
HWND hDlgCurrent = NULL;
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
MSG msg;
HACCEL hAccelTable;
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_GUIAPP, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// Perform application initialization:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
while(GetMessage(&msg, NULL, 0, 0) > 0)
{
if(!IsDialogMessage(g_hToolbar, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
は私の程度ボックスのコードですどこに問題があるのかを明らかにする。
これについての助けがあれば助かります!
モーダルダイアログを作成するコードがありません。そして明らかにそのコードはあなたが求めているものです。とにかく、Cの代わりにC++でコード化すれば、はるかに明確かつ安全になります。 'tWinMain'という怪物は、標準Cでも標準C++でもなく、技術的な目的を果たさないことに注意してください。それはMicrosoftの難読化ですので、標準の 'main'を使用してください。また、グローバル変数を使用しないことも役立ちます。一般的にCスタイルのキャストは使用しないでください。 –
なぜあなたの 'WM_CREATE'ハンドラはダイアログをやり直してみますか? – Deanna
私は問題を解決しました。 g_hツールバーがダイアログを作成する必要はありませんでした。私は 'ShowWindow(g_hToolbar、SW_SHOW);を' WM_INITDIALOG'に移動し、私のために働いています。 – L337BEAN