天天看點

玩轉VC++系統托盤程式(WIN8)



        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: