简体   繁体   English

无限的Windows消息循环

[英]Infinite windows message loop

I have this message loop in my program: 我的程序中有以下消息循环:

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();
    }
}

This loop never ends. 这个循环永远不会结束。 It never displays the message box even though main window disappears. 即使主窗口消失了,它也永远不会显示消息框。 Here is the WndProc code: 这是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;

Could someone please help me? 有人可以帮我吗? I am literally pulling my hairs out. 我实际上是在拔头发。

You're calling PeekMessage(&msg, window, ...) . 您正在调用PeekMessage(&msg, window, ...) If window isn't NULL , you'll never get WM_QUIT , because WM_QUIT is not associated with a window. 如果window不为NULL ,则将永远不会获得WM_QUIT ,因为WM_QUIT与窗口没有关联。

Instead, just call PeekMessage / GetMessage with a NULL HWND . 相反,只需使用NULL HWND调用PeekMessage / GetMessage DispatchMessage will send it to the right WndProc as necessary. DispatchMessage将根据需要将其发送到正确的WndProc (In general, making GetMessage / PeekMessage filter by HWND is a bad idea. ) (通常, 通过HWND进行GetMessage / PeekMessage筛选器是一个坏主意。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM