无限的Windows消息循环

时间:2012-05-18 19:44:52

标签: c++ c windows winapi message

我的程序中有这个消息循环:

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;
有人可以帮帮我吗?我实际上是在拉我的头发。

1 个答案:

答案 0 :(得分:9)

您正在呼叫PeekMessage(&msg, window, ...)。如果window不是NULL,则永远不会获得WM_QUIT,因为WM_QUIT与窗口无关。

相反,只需使用PeekMessage GetMessage致电NULL / HWND即可。如有必要,DispatchMessage会将其发送到右侧WndProc。 (一般来说,making GetMessage/PeekMessage filter by HWND is a bad idea.