无限的Windows消息循环

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

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; 

有人可以帮我吗? 我真的把我的头发拉出来。

你正在调用PeekMessage(&msg, window, ...) 。 如果window不是NULL ,则永远不会获得WM_QUIT ,因为WM_QUIT不与窗口关联。

相反,只需使用NULL HWND调用PeekMessage / GetMessageDispatchMessage将根据需要将其发送到正确的WndProc 。 (一般来说, 通过HWND来创建GetMessage / PeekMessage过滤器是一个坏主意。 )