最小化程式到托盤

2021-09-06 05:51:18 字數 2230 閱讀 3344

引用:

所謂的「托盤」,在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...