当按下右上角的十字按钮时,如何隐藏 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_DESTROY
和 PostQuitMessage
中生成的 WM_QUIT
消息导致消息循环停止并退出程序...
默认情况下,标准 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_DESTROY
和 PostQuitMessage
中生成的 WM_QUIT
消息导致消息循环停止并退出程序...