MessageBox()
имеет встроенный цикл обработки сообщений Windows для обслуживания сообщений окна.
Где-то в вашем приложении на очень низком уровне в вашем дизайне, вам нужен цикл сообщений Windows для обслуживания сообщений для окна, содержащего ваш контент openGL. Это должно выполняться из потока, который создал окно. Вредные эффекты, которые вы видите в других местах, могут быть легко вызваны побочными эффектами конкуренции, когда MessageBox()
вызывается из другого потока.
Вот введение в работу оконных сообщений в MSDN.
Использование сообщений и очередей сообщений @ MSDN
Проще говоря (через пример кода из wikipedia ), вам нужен постоянный цикл, похожий на следующее:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
while(GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
В зависимости от того, как вы справились с обновлением окна, если вы используете сообщения рисования (WM_PAINT
), вам нужно убедиться, что они отправляются как можно быстрее, или вам может потребоваться полностью их подавить, если вы рисуете прямо к устройству постоянного тока. Я упоминаю об этом, потому что вы можете найти дополнительные ошибки после правильной настройки цикла сообщений.
Сообщение WM_PAINT @ MSDN