这是我的主循环:
while(TRUE) { PeekMessage(&msg,hWnd,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); }
我发现当我按下关闭按钮时,下一个循环中的PeekMessage函数将返回WM_NCLBUTTONDOWN,而没有WM_QUIT!
correct way做一个消息循环是
原文链接:https://www.f2er.com/windows/364566.htmlBOOL bRet; MSG msg; while ((bRet = GetMessage(&msg,0)) != 0) { if (bRet == -1) { // handle the error and possibly exit } else { TranslateMessage(&msg); DispatchMessage(&msg); } }
如果你真的需要,你可以使用PeekMessage ……但为什么你忽略了返回值?
另请注意,这是特定于窗口的.我相信PostQuitMessage是一个线程…我不记得它在我的头顶,但你可能需要传递NULL而不是hWnd.
如果你有任何其他窗口,也可能劫持他们的消息循环 – 我不认为这通常是一个问题,但它可能是一个;记在脑子里.