[英]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.