当试图显示一个简单的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的消息(不确定该消息是什么)。
目前,我只是在显示消息框之前清除消息队列以确保其正常工作,但是最好找出导致该问题的确切原因。
谢谢。
答案 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来查找链接。