未从任务栏关闭事件正确关闭
Posted
技术标签:
【中文标题】未从任务栏关闭事件正确关闭【英文标题】:not properly closing from taskbar closing event 【发布时间】:2011-08-07 20:36:31 【问题描述】:如果我通过 Alt-F4 或角落“X”按钮关闭我的应用程序,或者我自己发布 destroywindow(hwnd),应用程序将正确关闭,并且一切都按预期工作。
但最近我意识到,在 windows7 上,当我通过右键单击任务栏中的图标并单击“关闭窗口”来关闭应用程序时,窗口会关闭,但我的应用程序仍在运行。调试时,我不会进入任何 WM_QUIT/DESTROY/CLOSE 事件。
通过任务栏关闭窗口时是否有一些特殊行为?我怎样才能检测到?
【问题讨论】:
问题在于您在应用程序中编写了代码。请向我们展示说明问题的最少代码。 【参考方案1】:你应该得到WM_CLOSE
。也许您将它放在与您期望的窗口不同的窗口上?尽管除非您有多个***窗口,否则这不应该发生。
【讨论】:
【参考方案2】:通过 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 消息处理程序。 DestroyWindow() 在处理 WM_CLOSE 消息时已经被 DefWindowProc() 自动调用。
【讨论】:
以上是关于未从任务栏关闭事件正确关闭的主要内容,如果未能解决你的问题,请参考以下文章