首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

讓程式最小化至系統匣並顯示圖示

     編輯:關於C++

在 Windows 開發中,讓應用程式最小化至系統匣(System Tray)是常見需求。透過 Shell_NotifyIcon API,我們可以在通知區域顯示自訂圖示,並處理滑鼠事件。本文說明如何封裝一個可重用的函式,將視窗最小化為圖示。

核心原理

系統匣圖示本質上是一個 NOTIFYICONDATA 結構體,包含視窗句柄、圖示資源、提示文字與自訂回呼訊息。當使用者點擊圖示時,系統會將自訂訊息(如 MYWM_ICON)傳送至指定視窗程序,開發者可在 switch(lParam) 中處理 WM_LBUTTONDOWN、WM_RBUTTONDOWN 等事件。

實作步驟

  1. 定義自訂訊息:#define MYWM_ICON (WM_APP + 100)
  2. 在視窗程序中回應 MYWM_ICON,解析 lParam 判斷滑鼠動作。
  3. 若只想以圖示形式存在,可將視窗樣式設為 WS_EX_TOOLWINDOW 或 POPUP。
  4. 呼叫 Shell_NotifyIcon(NIM_ADD, ...) 加入圖示,再呼叫 NIM_MODIFY 更新圖示與提示。

程式碼範例

void PutToTaskBar(HWND hWnd, UINT uId, HICON hIcon, LPCTSTR s)
{
    TrayMessage(hWnd, NIM_ADD, uId, NULL, s);
    TrayMessage(hWnd, NIM_MODIFY, uId, hIcon, s);
}

BOOL TrayMessage(HWND hDlg, DWORD dwMessage, UINT uID, HICON hIcon, LPCTSTR lpszTip)
{
    BOOL res;
    NOTIFYICONDATA tnd;
    tnd.cbSize = sizeof(NOTIFYICONDATA);
    tnd.hWnd = hDlg;
    tnd.uID = uID;
    tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
    tnd.uCallbackMessage = MYWM_ICON;
    tnd.hIcon = hIcon;
    wsprintf(tnd.szTip, lpszTip);
    res = Shell_NotifyIcon(dwMessage, &tnd);
    if (hIcon)
        DestroyIcon(hIcon);
    return res;
}

注意:TrayMessage 中若傳入 hIcon,呼叫 Shell_NotifyIcon 後會銷毀該圖示控制代碼,避免資源洩漏。實際專案中建議將圖示載入為資源並妥善管理生命週期。

進階應用

  • 右鍵選單:在 WM_RBUTTONUP 彈出 TrackPopupMenu。
  • 氣球提示:NOTIFYICONDATA 的 dwInfoFlags 與 szInfo 可顯示資訊泡泡。
  • 圖示動畫:定時器切換多張圖示實現動畫效果。

掌握此技巧,即可打造專業的背景常駐應用程式。

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