VC程式設計製作系統托盤程式

2021-06-17 16:05:56 字數 1529 閱讀 8780

vc程式設計製作系統托盤程式

windows作業系統中的某些程式執行時不顯示執行視窗,只在工作列上顯示乙個圖示,表示程式正在執行,使用者可以通過滑鼠與應用程式互動,比如金山毒霸等應用程式,我們有時也需要編制一些僅在後台執行的類似程式,為了不干擾前台程式的執行介面和不顯示不必要的視窗,應使程式執行時的主視窗不可見。同時將乙個圖示顯示在工作列右端靜態通告區中並響應使用者的滑鼠動作。下面介紹visual c++開發這類程式的設計方法。

一、隱藏程式的主視窗

首先,要使程式的主視窗不可見,並且不在工作列上出現任務按鈕,要做到這兩點,需分別設定主邊框視窗的風格和擴充套件風格:

bool cmainframe::precreatewindow(createstruct& cs)

二、將表示程式執行的圖示加入工作列

在主框架視窗的cmainframe::oncreate()函式中呼叫上述函式,就可以在任務條上顯示圖示這一步是利用系統api函式shell_notifyicon()將乙個圖示顯示在工作列的通告區中。該函式的原型為:在呼叫該函式之前,需要確定其引數的取值。其中shell_notifyicon()函式的第乙個引數是乙個預定義的訊息,可以取如下值之一:nim_add、nim_delete或nim_modify,分別表示新增圖示、刪除圖示或修改圖示。另乙個引數為指向notifyicondata型別的指標。其原型為:

typedef struct _notifyicondata

notifyicondata

在該結構的成員中,cbsize為該結構所佔的位元組數,hwnd為接受該圖示所發出的訊息的視窗的控制代碼(滑鼠在工作列上程式圖示上動作時圖示將發出訊息,這個訊息使用者要自己定義),uid為被顯示圖示的id,uflags指明其餘的幾個成員(hicon、ucallbackmessage和sztip)的值是否有效,ucallbackmessage為乙個使用者自定義的訊息,當使用者在該圖示上作用一些滑鼠動作時,圖示將向應用程式的主框架視窗(hwnd成員中指定的視窗)發出該訊息,。hicon為將在工作列上被顯示圖示的控制代碼,sztip滑鼠停留在該圖示上時顯示的字串。

int cmainframe::oncreate(lpcreatestruct lpcreatestruct)

三、使用者與程式互動的實現

使用者進行互動,也就是當使用者在該圖示上單擊或雙擊滑鼠左鍵或右鍵時要執行相應的操作,至少也要響應使用者終止該程式的意願。上面已經提到,當使用者在圖示上進行滑鼠動作時,將向hwnd成員中指定的視窗發出自定義的訊息,該訊息為ucallbackmessage成員所指定的wm_myessage,取值為wm_user+101(如何自定義訊息,我就不多說了)。我們要實現任務就是在hwnd視窗中響應該自定義訊息:

四、程式結束時刪除程式圖示

當程式結束時,需要刪去通告區中的圖示,這時還應該呼叫shell_notifyicon函式,只不過第乙個引數是表示刪除圖示的nim_delete了:

void cmainframe::~cmainframe()

VC程式設計製作系統托盤程式

windows作業系統中的某些程式執行時不顯示執行視窗,只在工作列上顯示乙個圖示,表示程式正在執行,使用者可以通過滑鼠與應用程式互動,比如金山毒霸等應用程式,我們有時也需要編制一些僅在後台執行的類似程式,為了不干擾前台程式的執行介面和不顯示不必要的視窗,應使程式執行時的主視窗不可見。同時將乙個圖示顯...

VC程式設計製作系統托盤程式

windows作業系統中的某些程式執行時不顯示執行視窗,只在工作列上顯示乙個圖示,表示程式正在執行,使用者可以通過滑鼠與應用程式互動,比如金山毒霸等應用程式,我們有時也需要編制一些僅在後台執行的類似程式,為了不干擾前台程式的執行介面和不顯示不必要的視窗,應使程式執行時的主視窗不可見。同時將乙個圖示顯...

VC程式設計製作系統托盤程式

windows 作業系統中的某些程式執行時不顯示執行視窗,只在工作列上顯示乙個圖示,表示程式正在執行,使用者可以通過滑鼠與應用程式互動,比如金山毒霸等應用程式,我們有時也需要編制一些僅在後台執行的類似程式,為了不干擾前台程式的執行介面和不顯示不必要的視窗,應使程式執行時的主視窗不可見。同時將乙個圖示...