1. 甚麼是SysTray(System Tray)圖示?
SysTray圖示就是Windows工作列的最右方所看到的小圖示,是為了讓程式能在背景執行時,
使用者仍能透過圖像介面來檢視及控制程式。例如ICQ、防毒軟件、音量控制等,都是背景執
行程式,在大部份時間內都不需要人手操作,使用者需要執行該程式的某功能時,便能從
SysTray中把它點擊還原至視窗模式。
在視窗編程的角度來看,SysTray圖示是 NotifyIcon component(提示圖示元件)的一部份,為
了讓背景程式能有效地與使用者溝通,整個元件除圖示外,還包括選單(Menu)、工具列
(Toolbar)、工具提示(ToolTip)、回傳訊息處理(Callback message handler)等等。
2. 基本SysTray結構
SysTray是屬於視窗作業系統的Shell控制元件(i.e. 使用Shell API),所有關於SysTray圖示的操
作,都會發出工作列狀態區域(Taskbar status area,即右下角載有圖示的區域)的訊息,而這
類訊息包含的所有資料,都由NOTIFYICONDATA這個數據結構封裝起來:
typedef struct _NOTIFYICONDATA {
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
TCHAR szTip[64];
DWORD dwState;
DWORD dwStateMask;
TCHAR szInfo[256];
union {
UINT uTimeout;
UINT uVersion;
};
TCHAR szInfoTitle[64];
DWORD dwInfoFlags;
GUID guidItem;
} NOTIFYICONDATA, *PNOTIFYICONDATA;
NOTIFYICONDATA內的各項說明,請參閱
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/structures/notifyicondata.asp
3. SysTray圖示應用實例要使用NOTIFYICONDATA,必須要在程式碼加入shellapi.h
#include shellapi.h
4. 使用提示本程式的按鈕會讓程式視窗隱藏起來,並即時設置SysTray圖示,當使用者把滑鼠放
上該SysTray圖示時,便會把視窗還原,並且刪除SysTray中的圖示。
當使用者把滑鼠放上圖示時,WM_SYSTRAYNOTIFY(是一個使用者定義的訊息,其名字可以
隨意更改)便會被發出,當時滑鼠的訊息(如 WM_LBUTTONUP、WM_RBUTTONDOWN等)
也會一併送出,並記錄在「lParam」中,而該圖示的uID也會記錄在「wParam」中,程式員
可利用「lParam」及「wParam」作更仔細的SysTray圖示處理,例如功能選單。
5. 後記根據MSDN(Microsoft Developer Network) Library所提及:
The taskbar notification area is sometimes erroneously called the "tray."
沒有留言:
張貼留言