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
視窗中響應該自定義訊息:
void cmainframe::onmymessage(wparam wparam,lparam lparam)
}return;
}四、程式結束時刪除程式圖示
當程式結束時,需要刪去通告區中的圖示,這時還應該呼叫
shell_notifyicon
函式,只不過第乙個引數是表示刪除圖示的
nim_delete
了:void cmainframe::~cmainframe()
五、程式分析
a.this->hwnd
不是cmainframe
的成員?
b.關於自己定義訊息的具體方法如何?c.
結構體的例項化用到的引數比較多
d.關於字串處理函式
VC程式設計製作系統托盤程式
windows作業系統中的某些程式執行時不顯示執行視窗,只在工作列上顯示乙個圖示,表示程式正在執行,使用者可以通過滑鼠與應用程式互動,比如金山毒霸等應用程式,我們有時也需要編制一些僅在後台執行的類似程式,為了不干擾前台程式的執行介面和不顯示不必要的視窗,應使程式執行時的主視窗不可見。同時將乙個圖示顯...
VC程式設計製作系統托盤程式
windows作業系統中的某些程式執行時不顯示執行視窗,只在工作列上顯示乙個圖示,表示程式正在執行,使用者可以通過滑鼠與應用程式互動,比如金山毒霸等應用程式,我們有時也需要編制一些僅在後台執行的類似程式,為了不干擾前台程式的執行介面和不顯示不必要的視窗,應使程式執行時的主視窗不可見。同時將乙個圖示顯...
VC程式設計製作系統托盤程式
windows作業系統中的某些程式執行時不顯示執行視窗,只在工作列上顯示乙個圖示,表示程式正在執行,使用者可以通過滑鼠與應用程式互動,比如金山毒霸等應用程式,我們有時也需要編制一些僅在後台執行的類似程式,為了不干擾前台程式的執行介面和不顯示不必要的視窗,應使程式執行時的主視窗不可見。同時將乙個圖示顯...