微軟中國公司與1993年推出的Visual C++1.0後,Visual C++已成為專業程序員進行軟件開發的首選工具,隨著時代的進步科技的發展Visual C++版本也快速的提升與升級,Visual C++開發也變成了一件容易的事情了。
這些程序運行時不顯示運行窗口,只在任務欄上顯示一個圖標,表示程序正在運行,用戶可以通過鼠標與應用程序交互,程序開發人員有時也需要編制一些僅在後台運行的類似程序,為了不干擾前台程序的運行界面和不顯示不必要的窗口,應使程序運行時的主窗口不可見。
同時將一個圖標顯示在任務欄右端靜態通告區中並響應用戶的鼠標動作。本實例就介紹Visual C++開發這類程序的設計方法,該程序編譯運行後,如果雙擊托盤圖標,程序會彈出一個消息列表窗口,只要鼠標在托盤圖標上移動或點擊無論是左右鍵的單擊或雙擊),產生的消息都會顯示在這個窗口裡;當鼠標光標移到托盤圖標上時,在圖標附近會顯示提示信息;
單擊右鍵時彈出上下文菜單,這個菜單中應包含打開屬性頁的命令或者打開與圖標相關的其它窗口的命令,另外,該程序還可以動態的改變托盤的圖標。參照這個例子,相信讀者能輕松自如地在自己的程序中應用系統托盤。
一、實現方法
為了實現拖盤程序,首先要使程序的主窗口不可見,這點實現起來十分容易,只要調用ShowWindow(SW_HIDE)就可以了,本實例采用的就是這種方法,還有一種思路是通過分別設置主邊框窗口的風格和擴展風格來隱藏主框架:
- BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
- {
- cs.style =WS_POPUP;//使主窗口不可見;
- cs.dwExStyle =WS_EX_TOOLWINDOW;//不顯示任務按鈕;
- return CFrameWnd::PreCreateWindow(cs);
- }
在任務條上顯示圖標是利用系統API函數Shell_NotifyIcon)來將一個圖標顯示在任務欄的通告區中。該函數的原型為:
- BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
- {
- cs.style =WS_POPUP;//使主窗口不可見;
- cs.dwExStyle =WS_EX_TOOLWINDOW;//不顯示任務按鈕;
- return CFrameWnd::PreCreateWindow(cs);
- }
在該結構的成員中,cbSize為該結構所占的字節數,hWnd為接受該圖標所發出的消息的窗口的句柄鼠標在任務欄上程序圖標上動作時圖標將發出消息,這個消息用戶要自己定義),uID為被顯示圖標的ID,uFlags指明其余的幾個成員hIcon、uCallBackMessage和szTip)的值是否有效。
uCallbackMessage為一個用戶自定義的消息,當用戶在該圖標上作用一些鼠標動作時,圖標將向應用程序的主框架窗口hWnd成員中指定的窗口)發出該消息,為了使程序的主框架得到該通知消息,Visual C++開發需要設置NOTIFYICONDATA 結構的flag成員的值為NIF_MESSAGE。hIcon為將在任務欄上顯示的圖標句柄,szTip鼠標停留在該圖標上時顯示的提示字符串。