Я получил этот массивный пример кода для вращающегося робота в OpenGL здесь: https://www.cprogramming.com/tutorial/opengl_first_opengl_program.html. (Конечно, мне удалось это исправить, преобразовав const char *
в LPCWSTR
, заменив gl/glaux.h
на gl/glut.h
- работает.) Я заставил рендеринг l oop работать, показывая вращающегося робота на Окно рендеринга OpenGL и отображение приложения консоли рядом с ним.
Проблема: окно OpenGL не закроется. Я продолжал нажимать на кнопку «X», чтобы закрыть окно рендеринга, но безрезультатно. Я заметил, что как только я нажму «X», робот начнет беспрерывно дергаться взад-вперед за волосы.
Я не понимаю, в чем проблема приложения. Есть ли трудности с обработкой оконных сообщений? Я посмотрел внутри и снаружи StackOverflow, но не смог найти ни одной статьи, которая могла бы рассеять мое замешательство.
Любой конструктивный, упреждающий вклад приветствуется.
Редактировать: После нескольких часов отладки в виде комментариев, комментариев и комментариев, вот что я получил:
Не знаю Я не хочу использовать GetMessage(&msg, nullptr, 0, 0)
, потому что в этой симуляции я хочу, чтобы приложение продолжало вращать робота, а не чтобы эта функция ожидала следующего «сообщения» (клавиатура или мышь, как я понимаю).
В следующем фрагменте кода
while(!done)
{
Render();
PeekMessage(&msg, hwnd, NULL, NULL, PM_REMOVE);
if (GetKeyState(27) < 0)
{
done = true;
}
if (msg.message == WM_QUIT) //did we receive a quit message?
{
done = true;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Я думаю, что проблема с msg.message
; Кажется, есть проблема с обработкой сообщений окна. Приложение закроется, когда я нажму клавишу ES C, до и после того, как я нажму на «X», что означает, что после того, как я нажму на «X», я все еще в состоянии while () l oop. Я рассмотрел некоторые аспекты документации MSDN и StackOverflow, касающиеся оконных сообщений , и попробовал различные WM_
define для соответствия сообщению, но ничего не работает. Я все еще застрял и запутался.