未从任务栏关闭事件正确关闭

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() 自动调用。

【讨论】:

以上是关于未从任务栏关闭事件正确关闭的主要内容,如果未能解决你的问题,请参考以下文章

win10怎么关闭任务栏里的人脉

Winform 最小化 最大化 关闭 点击任务栏隐藏显示 点击鼠标左键移动窗体

win7下怎样关闭任务栏中的进度条,但不关掉窗口预览

从屏幕底部滑动时,任务栏应该可见 - UWP [关闭]

Electron应用在任务栏中创建闪烁窗口

如何使用 C# 从 Windows 任务栏中删除新闻和兴趣? [关闭]