这是我的主循环:
while(TRUE)
{
PeekMessage(&msg,hWnd,0,0,PM_REMOVE);
if (msg.message==WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
这是我的回调程序:
LRESULT CALLBACK WinProc(HWND hWnd,UINT msg1,WPARAM wParam,LPARAM lParam)
{
switch(msg1)
{
case WM_DESTROY :
{
PostQuitMessage(0);
return 0;
}
break;
}
return DefWindowProc(hWnd,msg1,wParam,lParam);
}
我发现当我按下关闭按钮时,WM_NCLBUTTONDOWN 将在下一个循环中由 PeekMessage 函数返回,而没有 WM_QUIT!
最佳答案
correct way做一个消息循环是
BOOL bRet;
MSG msg;
while ((bRet = GetMessage(&msg, hWnd, 0, 0)) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
如果确实需要,您可以使用 PeekMessage
...但是为什么要忽略返回值?
另请注意,这是特定窗口。我相信 PostQuitMessage
是用于一个线程...我不记得了,但你可能需要传递 NULL
而不是 hWnd
。
如果您有任何其他窗口,这也可能劫持它们的消息循环——我认为这通常不是问题,但它可能是一个问题;请记住这一点。
关于c - 我的 Win32 应用程序不会退出主循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10805253/