我的程序中有这个消息循环:
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 :(得分: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.)