当按下右上角的十字按钮时,如何隐藏窗口而不是退出?

Bas*_*asj 0 c++ windows winapi system-tray

默认情况下,使用以下命令创建标准窗口:

HWND hwnd = CreateWindowEx(0, CLASS_NAME, L"Test", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, nCmdShow);
Run Code Online (Sandbox Code Playgroud)

当我们点击右上角的十字时,将被关闭,导致程序退出:

在此输入图像描述

我的程序有一个这样的窗口,但在系统托盘通知区域中也有一个始终存在的图标。

如何使单击右上角的十字使该窗口隐藏,但不退出程序?

这在主窗口消息循环中不起作用,应用程序仍在退出。

switch (msg) 
{
    case WM_CLOSE:
        ShowWindow(hWnd, SW_HIDE);
        break;
}
Run Code Online (Sandbox Code Playgroud)

And*_*ers 5

DefWindowProcDestroyWindow当它得到时调用WM_CLOSE,所以你所要做的就是不要将消息传递给DefWindowProc

switch (msg) 
{
    case WM_CLOSE:
        ShowWindow(hWnd, SW_HIDE);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

DestroyWindow单独使用不会退出具有“正常”消息循环的程序。通常是WM_QUIT您在主窗口中生成的消息WM_DESTROY导致PostQuitMessage消息循环停止并退出程序......