我在我的程序中有这个消息循环:
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
/ GetMessage
。 DispatchMessage
将根据需要将其发送到正确的WndProc
。 (一般来说, 通过HWND
来创建GetMessage
/ PeekMessage
过滤器是一个坏主意。 )