程序運行時不在任務欄顯示圖標,僅在系統托盤(通知區域)顯示圖標,類似 QQ 最小化行為。
WS_EX_TOOLWINDOW// 創建窗口時指定擴展風格
HWND hWnd = CreateWindowEx(
WS_EX_TOOLWINDOW | WS_EX_APPWINDOW, // 組合使用
szWindowClass, szTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
// 或運行時修改
SetWindowLong(hWnd, GWL_EXSTYLE,
GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_TOOLWINDOW);
| 風格組合 | 任務欄 | Alt+Tab | 托盤圖標需求 |
|---|---|---|---|
| WS_EX_TOOLWINDOW | 隱藏 | 隱藏 | 需自行創建 NotifyIcon |
| WS_EX_TOOLWINDOW | WS_EX_APPWINDOW | 顯示 | 顯示 | 同上 |
| 無特殊風格 + 隱藏主窗口 | 隱藏 | 隱藏 | 需自行創建 NotifyIcon |
WS_EX_TOOLWINDOW 隱藏任務欄。Shell_NotifyIcon(NIM_ADD, &nid) 添加托盤圖標(NOTIFYICONDATA 結構)。WM_USER+1 消息響應托盤點擊/右鍵菜單。Shell_NotifyIcon(NIM_DELETE, &nid) 移除圖標。NOTIFYICONDATA nid = { sizeof(NOTIFYICONDATA) };
nid.hWnd = hWnd;
nid.uID = 1;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uCallbackMessage = WM_USER + 1;
nid.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYICON));
lstrcpy(nid.szTip, L"我的應用");
Shell_NotifyIcon(NIM_ADD, &nid);
設置窗口擴展風格 WS_EX_TOOLWINDOW 即可從任務欄隱藏。配合 Shell_NotifyIcon 實現托盤常駐,即可達到 QQ 風格的「關閉最小化到托盤」效果。純 Win32 API 實現,無需 MFC。