Окно рендеринга OpenGL не закроется (запись в Visual Studio 2019 на C ++) - PullRequest
0 голосов
/ 19 апреля 2020

Я получил этот массивный пример кода для вращающегося робота в 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 для соответствия сообщению, но ничего не работает. Я все еще застрял и запутался.

...