WINDOWS系統托盤是一個特殊區域,通常在桌面的右下角,也就是工作列的右邊。系統常駐在托盤的程式有時鐘,音量控制,輸入法,網絡狀态等。第三方應用如QQ程式也是一個典型的托盤程式,當最小化時企鵝會乖乖的待在螢幕右下角等待主人的呼喚。
系統托盤的友善之處在于,程式在暫時不用時,将它放到托盤裡,随用随叫,不必将其關閉。而QQ在接收到消息後,也會在托盤中閃動提示,十分人性化。
那麼如何用VC++來開發托盤程式呢?下面會用一個例子來玩轉WINDOWS托盤程式。
程式最小化到托盤。
右鍵點選,顯示一個菜單。
滑鼠左鍵輕按兩下托盤圖示,打開程式。
程式中點選一個按鈕,改變托盤圖示。
好了,就這麼簡單的Demo,下面看看如何實作。
其次,歸納一下用到的技術點。
托盤相關API
MFC對滑鼠操作消息的接收
先來說說托盤相關的API。MFC并沒有直接提高便利的類來支援系統托盤程式設計,我們需要用到SHELLAPI中的Shell_NotifyIcon函數。原型為:
函數很簡單清晰,隻有兩個參數。參數一dwMessage用來指定托盤的動作,這是一個四位元組的值。如下:
NIM_ADD(0X00000000):添加一個系統托盤
NIM_MODIFY(0X00000001):系統托盤的修改
NIM_DELETE(0X00000002):系統托盤的删除
NIM_SETFOCUS(0X00000003):令系統托盤獲得焦點
NIM_SETVERSION(0X00000004):系統托盤設定版本
參數二PNOTIFYICONDATA是專門為此服務的結構體。原型如下:
其實上面的調查結果一出,這個問題也就迎刃而解了。關鍵在uCallbackMessage。我們會自定義一個消息,比如就叫做WM_ICON_NOTIFY,當此托盤圖示有滑鼠滑過,懸停或點選,鍵盤操作時回調這個接收自定義消息的函數來處理。這一切都被安排好了,我們照着做就可以了。
1.最小化到托盤
建立托盤的函數ToTray:
視窗最小化在OnSysCommand中判斷:
2、3功能都可以在獲得托盤事件函數處理:
4.修改圖示
這個就比較容易了,直接修改參數即可:
完整的例子請下載下傳,借用了網上比較流行的封裝好的TrayIcon類。
參考:
MSDN上的詳細解釋:
Vckbase: