c++ - 单击菜单未出现在屏幕上时显示 MessageBox

标签 c++ menu window messagebox

我刚刚制作了一个简单的 C++ 窗口并添加了一个菜单,但是当我点击菜单时,特别是“关于”我想显示一个简单的 MessageBox 但我不能 - 因为它没有显示。

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;

        }
}

菜单有效,因为我添加了一个退出等,所以我知道它会响应菜单上的点击,但是当我单击“关于”按钮时,您会听到弹出声音,但没有显示 MessageBox。

有什么想法吗?

最佳答案

MessageBox 的第一个参数是父级的 hWnd。请注意,MessageBox 调用是同步的,因此在用户单击“确定”按钮之前,控件不会返回到您的 WndProc。 (因此您的窗口没有响应。)虽然您没有提供父级 hWnd,因此消息框可能是在您的窗口下方创建的。

尝试将 hwnd 作为第一个 MessageBox 参数传递,看看是否有帮助。

关于c++ - 单击菜单未出现在屏幕上时显示 MessageBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11308530/

相关文章:

c++ - 用于桌面应用程序的轻量级 html 控件 (C++/Windows)

c++ - 使标题图标成为资源管理器窗口中的拖动源

css - 菜单布局改变,初始加载时垂直而不是水平

javascript - 将参数传递给 Window[callback] 函数

c++ - QTabWidget 内容不展开

c++ - 数据成员访问歧义和菱形继承(钻石问题)

javascript - 在 JavaScript 中创建下拉菜单/div

Javascript,垂直折叠/展开菜单-页面更改后记住

java - Android Studio 向导未显示

C++ Win32 背景图像