轉自:http://blog.csdn.net/porscheyin/archive/2009/12/08/4960518.aspx
由於項目需要,需要為在WinCE 5.0的系統中開發的程式加上一個工作列表徵圖,以實現單擊或者雙擊表徵圖即可使最小化的程式複原。由於.NET Compact Framework不支援完整版.NET的NotifyIcon類。所以我準備採用P/Invoke來調用系統的dll來實現,當在網路上搜集到一些資料後,發現採用此方法可能會導致程式結束後工作列表徵圖位置左移的弊端。於是決定採用OpenNetCF推出的Smart Device Framework(SDF)類庫中的NotifyIcon類來完成。
OpenNetCF的官方網址是http://www.opennetcf.com/,你可以點擊這個地址http://www.opennetcf.com/Products/SmartDeviceFramework/tabid/65/Default.aspx下載Smart Device Framework(SDF)最新版本2.3,它分為社區版(免費),標準版($50),專業版($500),後兩個版本只支援Visual Studio 2008,而免費的社區版同時還支援Visual Studio 2005。社區版與收費版本最大的區別我認為是沒有設計時支援,而SDF中只有少量的控制項類,所以設計時支援也顯得不是那麼必要了,在我看來社區版已經足夠用了,如果你有充足的資金,可以選擇標準版或專業版,你將會得到更好的開發體驗。是各版本的比較。
檔案很小,只有1.99M,下載後進行安裝,然後在Visual Studio中添加對OpenNETCF.Windows.Forms.dll的引用,路徑為···\Smart DeviceFramework\Bin。(如)(在SmartDevice Framework目錄下還有一個Samples檔案夾,裡面有很多優秀的例子以供學習。)
添加引用後,在VS方案總管的引用節點內會出現如所示的OpenNETCF.Windows.Forms。
實現的代碼很簡單,就像在.NET Framework中使用NotifyIcon類一樣:
view plaincopy to clipboardprint?
- using OpenNETCF.Windows.Forms;
- /// <summary>
- /// 設定工作列表徵圖。
- /// </summary>
- /// <param name="notifyIcon">通過引用傳入一個NotifyIcon執行個體。</param>
- private void InitNotifyIcon(NotifyIcon notifyIcon)
- {
- // 你可以任意使用單擊或者雙擊事件,為了和WinCE系統保持一致,我選擇了雙擊。
- notifyIcon.DoubleClick += new EventHandler(notifyIcon_DoubleClick);
- notifyIcon.Icon = this.Icon; // 這裡通過引用表單的表徵圖對Icon屬性賦值。
- notifyIcon.Text = "你想在托盤表徵圖被按住時顯示的提示性文字。";
- notifyIcon.Visible = true;
- }
- void notifyIcon_DoubleClick(object sender, EventArgs e)
- {
- this.Show(); // 顯示主表單。
- }
using OpenNETCF.Windows.Forms;/// <summary>/// 設定工作列表徵圖。/// </summary>/// <param name="notifyIcon">通過引用傳入一個NotifyIcon執行個體。</param>private void InitNotifyIcon(NotifyIcon notifyIcon){// 你可以任意使用單擊或者雙擊事件,為了和WinCE系統保持一致,我選擇了雙擊。 notifyIcon.DoubleClick += new EventHandler(notifyIcon_DoubleClick); notifyIcon.Icon = this.Icon; // 這裡通過引用表單的表徵圖對Icon屬性賦值。 notifyIcon.Text = "你想在托盤表徵圖被按住時顯示的提示性文字。"; notifyIcon.Visible = true; }void notifyIcon_DoubleClick(object sender, EventArgs e){ this.Show(); // 顯示主表單。}
這樣使用即可:
view plaincopy to clipboardprint?
- NotifyIcon nic = new NotifyIcon();
- InitNotifyIcon(nic);
NotifyIcon nic = new NotifyIcon();InitNotifyIcon(nic);
以上代碼同時支援Windows CE和Windows Mobile。至此就輕鬆地完成了為在基於Windows CE系統上開發的.NET程式新增工作欄表徵圖的功能。Smart Device Framework彌補了.Net CF的不足,將所有對作業系統服務的調用封裝到了這個類庫中,方便基於Managed 程式碼平台的開發人員直接存取平台服務而不需要繁瑣的P/Invoke調用,是.NET CF開發人員的好幫手。