Бесконечный цикл сообщений Windows

0

У меня есть этот цикл сообщений в моей программе:

while (true) {
    if (PeekMessage(&msg, window, 0, 0, PM_REMOVE)) {
        if (msg.message == WM_QUIT) {
            MessageBox(NULL, L"Quit", L"", 0);
            break;
        }
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    } else {
        Render();
    }
}

Этот цикл никогда не заканчивается. Он никогда не отображает окно сообщения, даже если главное окно исчезает. Вот код WndProc:

switch (msg) {

    case WM_CLOSE :
        DestroyWindow(hwnd);
        break;

    case WM_DESTROY :
        PostQuitMessage(0);
        break;

    default :
        return DefWindowProc(hwnd, msg, wParam, lParam);
        break;
}

return 0;

Может кто-нибудь, пожалуйста, помогите мне? Я буквально вытягиваю волосы.

  • 0
    Вы пытались отслеживать сообщения с помощью Spy ++ или аналогичного инструмента?
Теги:
winapi
message

1 ответ

9
Лучший ответ

Вы вызываете PeekMessage(&msg, window, ...). Если window не NULL, вы никогда не получите WM_QUIT, потому что WM_QUIT не связано с окном.

Вместо этого просто вызовите PeekMessage/GetMessage с помощью NULL HWND. DispatchMessage по необходимости направит его WndProc. (В общем, создание GetMessage/PeekMessage фильтра HWND - плохая идея.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню