引用:
所謂的「托盤」,在windows系統介面中,指的就是下面任務條右側,有系統時間等等的標誌的那一部分。在程式最小化或掛起時,但有不希望佔據工作列的時候,就可以把程式放到托盤區。
一、托盤程式設計相關函式
把程式放到托盤上的本質就是先在托盤區繪製乙個圖示,然後把程式隱藏不見,再對托盤的圖示進行訊息處理,就可以了。
繪製圖示以及確定圖示所傳送訊息的函式只有乙個:
winshellapi bool winapi shell_notifyicon(dword dwmessage, pnotifyicondata pnid);
這個函式負責向系統傳遞訊息,以新增、修改或刪除托盤區的圖示。返回值是個布林型別的。就是說,如果返回0,那就是成仁啦,非0才成功。引數 dwmessage 是表示這個函式的應用功能是哪一方面,是新增、刪除,還是修改圖示。如果是新增,則它的值為nim_add;刪除則是nim_delete;而修改是 nim_modify。引數pnid就是具體的和程式在托盤區的圖示有關係的結構了。它的定義如下:
typedef struct _notifyicondata notifyicondata, *pnotifyicondata;
下面就對該結構各個引數進行刨析:
cbsize : 結構的長度,用「位」來做單位。一般在程式中,我們用(dword)sizeof(notifyicondata) 給它賦值。
hwnd : 乙個控制代碼,如果對托盤中的圖示進行操作,相應的訊息就傳給這個控制代碼所代表的視窗。自然了,大多數情況下是this->m_hwnd嘍。
uid : 在工程中定義的圖示id
uflags : 這個成員標誌著其他哪些成員的資料是有效的,分別為nif_icon, nif_message, nif_tip,分別代表著資料有效的成員是hicon, ucallbackmessage, sztip。當然,三個值可以用「|」聯絡到一起。下面分別對涉及到的成員進行闡述
hicon : 要增加,刪除或修改的圖示控制代碼。如果只知道個uid, 一般可能會用函式loadicon來得到控制代碼。例如loadicon ( afxgetinstancehandle() ,makeintresource (idr_mainframe) )。
ucallbackmessage : 這在對托盤區的操作中,是比較重要的資料成員。這是個訊息標誌,當用滑鼠對托盤區相應圖示進行操作的時候,就會傳遞訊息給hwnd所代表的視窗。所以 說,在uflags中,一般都得標誌它有效。這裡一般都是自定義的訊息。
sztip : 滑鼠移動到托盤圖示上時的提示文字。
二、原理
1、最小化的原理:首先要將視窗隱藏,然後 在右下角繪製圖示。
2、恢復的原理:將視窗顯示,再將托盤中的刪除。
三、程式實現
1、自定義訊息wm_showtask: #define wm_showtask (wm_user +1)
2、在mfc的::onsyscommand(uint nid, lparam lparam)函式體中增加乙個命令響應
if(nid==sc_minimize) totray(); //最小化到托盤的函式
3、在訊息對映中新增 on_message(wm_showtask,onshowtask),其中wm_showtask是訊息名,
onshowtask是自己定義的訊息響應函式,後面有說明。
四、具體函式內容
notifyicondata nid ;
nid.cbsize = sizeof ( notifyicondata ) ;
nid.hwnd = hwnd ;
nid.hicon = loadicon(null,makeintresource(idi_information));/*圖示控制代碼*/;
// nid.uflags = nif_info | niif_user ;
nid.uflags =nif_info|nif_icon|nif_tip;
nid.dwstate =
nid.ucallbackmessage = null ;
nid.utimeout = 5000/*超時毫秒數*/;
ni
最小化到托盤
notifyicon notifyicon1 void inittraymenu 在建構函式時呼叫此函式 void notifyicon1 click object sender,eventargs e private void menuitem1 click object sender,syste...
VC最小化程式到托盤
一 notifyicondata結構 notifyicondata結構包含了系統用來處理托盤圖示的資訊,它包括選擇的圖示 訊息 提示訊息 圖示對應的視窗等內容。其定義為 typedef struct notifyicondata notifyicondata,pnotifyicondata 該結構中...
VS最小化程式到托盤
一 新增notifylcon控制項 二 調整控制項屬性 1.icon 最小化托盤顯示的圖示 一定要設定,否則最小化後無法顯示 2.text 最小化托盤圖示顯示的文字 3.visible true是會一直在托盤顯示圖示,這個自行選擇即可 三 控制項事件 private void notifyicon1...