0

シンプルな C++ ウィンドウを作成してメニューを追加しましたが、メニューをクリックすると、具体的には「About」というメッセージボックスだけを表示したいのですが、表示されないため表示できません。

LPCWSTR App_Name = TEXT("TestApp");
LPCWSTR App_Title = TEXT("TestTitle");

const int windowWidth = 480;
const int windowHeight = 480;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow)
{
    WNDCLASS wc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
    wc.hCursor = LoadCursor( NULL, IDC_ARROW );
    wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
    wc.hInstance = hInstance;
    wc.lpfnWndProc = WndProc;
    wc.lpszClassName = App_Name;
    wc.lpszMenuName = MAKEINTRESOURCE(MNU_MAINMENU);
    wc.style = CS_HREDRAW | CS_VREDRAW;

    RegisterClass(&wc); 

    RECT rc;
    GetWindowRect(GetDesktopWindow(), &rc);

    long screenWidth = rc.right;
    long screenHeight = rc.bottom;

    HWND hwnd = CreateWindow
    (
        App_Name,
        App_Title,
        WS_MINIMIZEBOX | WS_SYSMENU,
        (screenWidth / 2) - (windowWidth / 2), (screenHeight / 2)-(windowHeight/2),
        windowWidth, windowHeight,
        NULL, NULL,
        hInstance, NULL
    );


    ShowWindow(hwnd, iCmdShow );
    UpdateWindow(hwnd);

    MSG msg;

    while( GetMessage( &msg, NULL, 0, 0 ) )
    {
        TranslateMessage( &msg );
        DispatchMessage( &msg );
    }

    return msg.wParam;
}

そしてメッセージボックス...:

LRESULT CALLBACK WndProc(HWND hwnd,UINT message, WPARAM wparam, LPARAM lparam)
{   
        switch( message )
        {

        case WM_COMMAND:
            id = LOWORD(wparam);
            event = LOWORD(wparam);
            switch(id)
            {
                case MNU_HELP_ABOUT:
                MessageBox(NULL, TEXT("TEXT"), TEXT("TITLE"), MB_OK | MB_ICONINFORMATION);
                break;
            }
        break;

        }
}

メニューは機能します。Quitなどを追加したため、メニューのクリックに応答することはわかっていますが、[バージョン情報]ボタンをクリックするとポップアップ音が聞こえますが、メッセージボックスが表示されません。

何か案は?

4

2 に答える 2

1

MessageBox の最初のパラメーターは、親の hWnd です。MessageBox 呼び出しは同期的であるため、ユーザーが [OK] ボタンをクリックするまでコントロールは WndProc に戻りません。(したがって、ウィンドウは応答しません。)ただし、親 hWnd を指定していないため、ウィンドウの下にメッセージ ボックスが作成されている可能性があります。

最初の MessageBox パラメータとして hwnd を渡してみて、それが役立つかどうかを確認してください。

于 2012-07-03T10:05:02.467 に答える
0

私はそれを理解しました、どういうわけか。問題は、私が WM_CREATE で何もしていなかったか、その「何も」がフォーム上になかったためでした-白い背景、または何か。ウィンドウにコントロール (ボタン) を追加し始めるとすぐに、以前にはなかった場所に突然表示されました。ただ変...

于 2012-07-11T15:31:43.383 に答える