开发者

not properly closing from taskbar closing event

开发者 https://www.devze.com 2023-03-26 18:34 出处:网络
i开发者_StackOverflow中文版f i close my application via Alt-F4, or the corner \"X\" button, or by posting destroywindow(hwnd) myself, the application closes correctly, and everything works just as exp

i开发者_StackOverflow中文版f i close my application via Alt-F4, or the corner "X" button, or by posting destroywindow(hwnd) myself, the application closes correctly, and everything works just as expected.

but recently i realized, on windows7, when i close the app by right klicking on the icon in the taskbar, and clicking "Close Window", the window closes, but my app is still running. when debugging, i don't get into either of the WM_QUIT/DESTROY/CLOSE events.

is there some special behavior when closing a window via taskbar? how can i detect that?


You should get WM_CLOSE. Maybe you're getting it on a different window that the one you're expecting? Although that shouldn't be able to happen unless you have multiple top-level windows.


via Alt-F4, or the corner "X" button, or by posting destroywindow(hwnd) myself

You can't post DestroyWindow(). Ensure that the window procedure of your main window resembles this:

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;
}

The PostQuitMessage() function call ensures that your message loop exits, GetMessage() returns FALSE when it receives the WM_QUIT message. This makes your main window behave like the main window, closing it ends the process. You may have other top-level windows that don't, they shouldn't have this WM_DESTROY message handler. DestroyWindow() is already called automatically by DefWindowProc() when it processes the WM_CLOSE message.

0

精彩评论

暂无评论...
验证码 换一张
取 消