MessageBox не отображается - PullRequest
       0

MessageBox не отображается

0 голосов
/ 24 ноября 2018

При попытке отобразить простой 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, что должно означатьЯ нажал кнопку ОК, хотя это не так.GetLastError также не возвращает никаких ошибок.

Кроме того, это происходит только в том случае, если я выбрасываю исключение после инициализации моего окна.Класс Window можно найти здесь: https://github.com/SlidyBat/BatEngine/blob/master/Engine/Window.cpp

После просмотра этой проблемы в Интернете я нашел такой ответ: https://stackoverflow.com/a/41171505/9094644

Достаточно точно, если я очищу очередь сообщений перед отображением сообщениякоробка ( вот так ) работает.Сообщения, которые находятся в очереди при очистке, - это WM_QUIT, WM_TIMER и сообщение с идентификатором 1847 (не уверен, что это такое).

Пока я просто очищаю очередь сообщений перед отображением окна сообщениячтобы убедиться, что это работает, но было бы неплохо выяснить, что именно я делаю неправильно, чтобы вызвать это.

Спасибо.

1 Ответ

0 голосов
/ 24 ноября 2018

Сообщение WM_QUIT сообщает вашему приложению о выходе.Чтобы запретить модалам использовать сообщение или обрабатываться должным образом, Windows автоматически предотвращает завершение создания ряда окон, если в очереди есть сообщение WM_QUIT.

Старая новая вещь в WM_QUIT и модальность

Если это не то поведение, которое вам нужно, тогда вам нужно изменить реализацию класса Window на не PostQuitMessage, когда она выдает ошибку / выходит.


Вся благодарность @Remy Lebeau за нахождение ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...