转自: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类一样:

 

  1. using OpenNETCF.Windows.Forms;  
  2. /// <summary>  
  3. /// 设置任务栏图标。  
  4. /// </summary>  
  5. /// <param name="notifyIcon">通过引用传入一个NotifyIcon实例。</param>  
  6. private void InitNotifyIcon(NotifyIcon notifyIcon)  
  7. {  
  8. // 你可以任意使用单击或者双击事件,为了和WinCE系统保持一致,我选择了双击。  
  9.     notifyIcon.DoubleClick += new EventHandler(notifyIcon_DoubleClick);  
  10.     notifyIcon.Icon = this.Icon; // 这里通过引用窗体的图标对Icon属性赋值。  
  11.     notifyIcon.Text = "你想在托盘图标被按住时显示的提示性文字。";  
  12.     notifyIcon.Visible = true;  
  13.         }  
  14. void notifyIcon_DoubleClick(object sender, EventArgs e)  
  15. {  
  16.     this.Show();    // 显示主窗体。  
  17. }  

 

 

这样使用即可:

 

  1. NotifyIcon nic = new NotifyIcon();  
  2. InitNotifyIcon(nic);  

 

以上代码同时支持Windows CE和Windows Mobile。至此就轻松地完成了为在基于Windows CE系统上开发的.NET程序添加任务栏图标的功能。Smart Device Framework弥补了.Net CF的不足,将所有对操作系统服务的调用封装到了这个类库中,方便基于托管代码平台的开发者直接访问平台服务而不需要繁琐的P/Invoke调用,是.NET CF开发人员的好帮手。

posted on 2010-08-25 10:58  TsingCai  阅读(1100)  评论(0编辑  收藏  举报