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

How to hide a window, instead of exiting, when the top right cross button is pressed?

默认情况下,标准 window 使用以下方法创建:

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

会关闭,导致程序退出,当我们点击右上角的叉号时:

我的程序有一个这样的 window,但在 系统托盘通知区域 .

中也有一个始终存在的图标

如何让点击右上角的叉号使这个window隐藏,但不退出程序?

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

switch (msg) 
{
    case WM_CLOSE:
        ShowWindow(hWnd, SW_HIDE);
        break;
}

DefWindowProc 在收到 WM_CLOSE 时调用 DestroyWindow,因此您所要做的就是不将消息传递给 DefWindowProc:

switch (msg) 
{
    case WM_CLOSE:
        ShowWindow(hWnd, SW_HIDE);
        return 0;
}
单独

DestroyWindow 不会退出带有 "normal" 消息循环的程序。通常是您在主 windows WM_DESTROYPostQuitMessage 中生成的 WM_QUIT 消息导致消息循环停止并退出程序...