前幾天有網友問.NET CF中怎麼實現NotifyIcon,我這才知道原來.Net CF並沒有提供NotifyIcon控件。
於是偶想PC上可以用Shell_NotifyIcon和MessageWindow來實現托盤圖標,只是不知道.NET CF支持不支持這兩個東東了。仔細看了一下.Net CF中可疑的命名空間,沒想到在Microsoft.WindowsCE.Forms命名空間裡面竟然有一個MessageWindow 類,太好了,只剩下一個Shell_NotifyIcon 函數了。接著 在Window CE的SDK的幫助文件裡,又發現Window CE Platform API已經包含了Shell_NotifyIcon函數。兩大“主料”都齊了,只剩下鍋了。
先看一下MessageWindow類,這個類提供了 WndProc 方法,用於處理窗口消息,並公開了可能傳遞給本機窗口函數的有效窗口句柄。要使用它,派生一個新類,並重寫的 WndProc 方法,這樣才能截獲特定的窗口消息。這裡主要用來處理click事件。
Shell_NotifyIcon的用法如下:
[DllImport("coredll.dll")]
internal static extern int Shell_NotifyIcon(int dwMessage, ref NOTIFYICONDATA pnid);
其中,NOTIFYICONDATA結構如下:
struct NOTIFYICONDATA
{
int cbSize;
IntPtr hWnd;
uint uID;
uint uFlags;
uint uCallbackMessage;
IntPtr hIcon;
}
Pnid參數的生命需要注意,是按引用傳遞的,因為Shell_NotifyIcon 需要一個指向 NOTIFYICONDATA 結構的指針。
hWnd是用來接收任務欄中圖標單擊消息的窗口的句柄。
運行示例的時候由於窗體最大化,擋住了任務欄,把窗體最小化之後就能看到托盤圖標了。(效果圖片竟然貼不上來,改天再貼吧)
該類和示例的下載地址:http://www.cnblogs.com/Files/ttinfo/NotifyIconCf.rar