首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 隱藏任務欄圖標,僅在系統托盤顯示:WS_EX_TOOLWINDOW 風格

     編輯:程式設計疑難解答

需求

程序運行時不在任務欄顯示圖標,僅在系統托盤(通知區域)顯示圖標,類似 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

完整托盤實現步驟

  1. 主窗口設置 WS_EX_TOOLWINDOW 隱藏任務欄。
  2. 調用 Shell_NotifyIcon(NIM_ADD, &nid) 添加托盤圖標(NOTIFYICONDATA 結構)。
  3. 處理 WM_USER+1 消息響應托盤點擊/右鍵菜單。
  4. 主窗口關閉時 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。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved