在用.NET CF开发Smartphone/Pocket PC应用时,我们经常需要给应用程序增加提醒功能,比如在下午 两点时提醒用户去开会,或者在手持设备和PC通过ActiveSync连接时提醒用户同步某项重要数据。目前, 实现提醒功能主要有以下几种方式:
Windows CE .NET提供了CeSetUserNotification(在CE 2.11版本及以后又增加了 CeSetUserNotificationEx)这一API,可用于创建或修改提醒。该方法适用于Smartphone和Pocket PC。
Windows CE .NET还提供了另外一条API,SHNotificationAdd,也可以完成提醒的工作。该提醒是以 Pocket PC中的气泡方式显示的,在Smartphone上不予处理。
Windows CE .NET中内置了Pocket Outlook,并提供了POOM (Pocket Outlook Object Model)以便二次 开发。该方法适用于Smartphone和Pocket PC。
以上三种方法在开发时,均不同程度地要用到平台调用 (Platform Invoke) 或COM互操作,这对开发 人员的技术要求非常高,同时也不利于提高开发速度。因此,适当的封装是非常有必要的。幸运的是,目 前OpenNETCF.org (http://www.opennetcf.org) 已经完成了前两项的工作,在由OpenNETCF开发并免费发 放的SDF (Smart Device Framework) 中已经把上述前两项API封装为managed API,从而极大地减少了开 发人员的二次开发难度。同时,InTheHand公司 (http://www.inthehand.com) 也提供了一款非常棒的组 件——Pocket Outlook,用managed code封装了底层的COM互操作,从而使开发人员从细琐的底层细节摆 脱出来。不过,InTheHand这款组件只免费提供测试版,如需要在商业环境中使用还需支付费用。
下面我就通过一系列实例来说明上面几种方法的应用。
1. OpenNETCF.Win32.Notify
OpenNetCF.org在SDF中的OpenNETCF.Win32.Notify命名空间下封装了CESetUserNotification(以及相 应的一套API),使用后只需要短短几行代码就能实现简单的提醒功能,如下例,可以在Smartphone/ Pocket PC 2003上设置一个1分钟后弹出的提醒对话框(需要增加对OpenNETCF.dll的引用):
UserNotification notification = new UserNotification();
notification.Action = NotificationAction.Dialog;
notification.Title = "我的提醒";
notification.Text = "别忘 了锻炼!";
Notify.SetUserNotification("", DateTime.Now.AddMinutes(1), notification);
实现效果如下:
图1: Smartphone上应用OpenNETCF.Win32.Notify的效果
图2: Pocket PC上应用OpenNETCF.Win32.Notify的效果