MessageBox未显示

时间:2018-11-24 15:19:44

标签: c++ windows winapi

当试图显示一个简单的MessageBox时,它根本不会显示。

代码:

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pCmdLine, int nCmdShow )
{
    try
    {
        Window wnd( { 50, 50 }, Graphics::ScreenWidth, Graphics::ScreenHeight, "Bat Engine", Graphics::FullScreen );
        throw std::exception( "test" );
    }
    catch( const std::exception& e )
    {
        MessageBox( NULL, e.what(), "Error", MB_ICONWARNING | MB_OK );
    }

    return 0;
}

MessageBox的返回值为IDOK,这意味着我单击了OK按钮,即使不是这种情况。 GetLastError也不会返回任何错误。

此外,只有在初始化Window之后抛出异常时,才会发生这种情况。可以在以下位置找到Window类:https://github.com/SlidyBat/BatEngine/blob/master/Engine/Window.cpp

在网上查找此问题后,我找到了这个答案:https://stackoverflow.com/a/41171505/9094644

如果在显示消息框(like this)之前清除消息队列,果然可以正常工作。清除队列中的消息是WM_QUIT,WM_TIMER和ID为1847的消息(不确定该消息是什么)。

目前,我只是在显示消息框之前清除消息队列以确保其正常工作,但是最好找出导致该问题的确切原因。

谢谢。

1 个答案:

答案 0 :(得分:5)

SELECT `Node`, Date(`DOR`) as "Date of Report", SUM(CASE WHEN `Color` = 'Green' THEN 1 ELSE 0 END) 'Pass' , SUM(CASE WHEN `Clor` = 'Red' THEN 1 ELSE 0 END) 'Fail' , SUM(CASE WHEN `Color` = 'Green' or `Color` = 'Red' THEN 1 ELSE 0 END) 'Total Checks' FROM Monitor Where date(`TOI`) >= DATE(NOW()) - INTERVAL 7 DAY Group by `Node` 消息告诉您的应用程序退出。如果队列中有WM_QUIT消息,则为了防止任何模式占用消息或对消息进行适当处理,Windows会自动阻止许多窗口完成创建。

The Old New Thing on WM_QUIT and modality

如果这不是您想要的行为,则需要在错误/退出时将WM_QUIT类实现更改为非Window


所有归功于@Remy Lebeau来查找链接。