如果我通过Alt-F4或角落“X”按钮关闭我的应用程序,或者通过自己发布destroywindow(hwnd),应用程序正确关闭,一切都按预期工作。
但最近我意识到,在windows7上,当我通过右键单击任务栏中的图标关闭应用程序,然后单击“关闭窗口”时,窗口关闭,但我的应用程序仍在运行。在调试时,我没有进入任何一个WM_QUIT / DESTROY / CLOSE事件。
通过任务栏关闭窗口时是否有一些特殊行为?我怎么能检测出来?
答案 0 :(得分:1)
通过Alt-F4或角落“X”按钮,或通过自己发布destroywindow(hwnd)
您无法发布DestroyWindow()。确保主窗口的窗口过程类似于:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
// Other cases
//...
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
PostQuitMessage()函数调用确保您的消息循环退出,GetMessage()在收到WM_QUIT消息时返回FALSE。这使得您的主窗口的行为类似于主窗口,关闭它会结束该过程。您可能有其他顶级窗口没有,他们不应该有这个WM_DESTROY消息处理程序。 DesoveWindow()在处理WM_CLOSE消息时已由DefWindowProc()自动调用。
答案 1 :(得分:1)
你应该得到WM_CLOSE
。也许你在一个与你期待的窗口不同的窗口上得到它?虽然除非你有多个顶级窗口,否则不应该发生这种情况。