没有正确关闭任务栏关闭事件

时间:2011-08-07 20:36:31

标签: c++ winapi windows-7

如果我通过Alt-F4或角落“X”按钮关闭我的应用程序,或者通过自己发布destroywindow(hwnd),应用程序正确关闭,一切都按预期工作。

但最近我意识到,在windows7上,当我通过右键单击任务栏中的图标关闭应用程序,然后单击“关闭窗口”时,窗口关闭,但我的应用程序仍在运行。在调试时,我没有进入任何一个WM_QUIT / DESTROY / CLOSE事件。

通过任务栏关闭窗口时是否有一些特殊行为?我怎么能检测出来?

2 个答案:

答案 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。也许你在一个与你期待的窗口不同的窗口上得到它?虽然除非你有多个顶级窗口,否则不应该发生这种情况。