软最近推出下一代移动设备操作系统Windows Mobile 5。Windows Mobile 5在用户体验方面做了很多改善,但更多的改进还是在应用程序编程接口方面。在这篇文章中,我们会向您介绍Windows Mobile 5在开发方面的一些新特性,其中包括3D图形编程、新控件、新的API函数等。
开发工具
Windows Mobile 5的开发工具是Visual Studio 2005。如果要开发Windows Mobile 5的应用程序,还需要装Windows Mobile 5的SDK和ActiveSync 4.0。
我们要在Windows Mobile 5设备上开发出托管应用程序就需要借助.NET Compact Framework 2.0的强大功能。.NET Compact Framework 2.0在1.0的基础上做了较大的改进,为我们提供了更多的用户控件,比如DateTimePicker、OpenFileDialog、WebBrowser、LinkLabel和Notification等控件。这些控件都是在.NET CF 1.0中所没有提供的,但是因为他们在实际开发过程中会经常用到,到了.NET CF 2.0中,这些功能终于被加了进来。
在数据访问方面,.NET CF 2.0支持SQL Mobile 2005的访问支持。SQL Mobile 2005的功能增强了很多,支持多用户同时访问数据库,也支持在PC上创建SQL Mobile数据库。Windows Mobile 5的Smartphone版本也支持SQL Mobile数据库了。在XML支持方面,.NET CF 2.0支持XML的Schema、Serialization、XPath等。
在远程访问方面,.NET CF 2.0支持MSMQ和.NET Remoting,而在对Socket支持方面,IPv6已经得到了很好的支持。
.NET CF 2.0还有一个重要的特性:支持COM互操作性。我们可以在.NET程序中可以访问COM组件,也可以将Callback函数传递给COM组件。但是我们不能调用ActiveX控件。
在C++移动设备程序开发方面,Visual Studio 2005支持MFC 8.0、ATL 8.0和标准C++库8.0。我们也可以在Windows Mobile 2003设备上支持.NET CF 2.0,但必须要将.NET CF 2.0的运行库安装到设备上。
用户界面
Windows Mobile 5的Pocket PC用户界面发生了很大改变。为了和Smartphone界面类似,Pocket PC的程序菜单被改成了左右两个,在实际设备上也添加了两个硬件按键和这两个菜单相对应。这样的变化可以让用户方便地通过硬件按键操作应用程序,而这样的修改也便于应用程序在Pocket PC和Smartphone之间的移植。为了保持兼容性,Pocket PC仍然支持多于两个一级菜单的菜单结构,但是新开发的程序建议还是采用新的菜单结构。
Windows Mobile 5的应用程序很方便地支持Notification通知机制。当应用程序发生改变的时候,我们可以通过Notification方式来通知用户。
下面我们就来通过一个示例,来了解一下.NET CF应用中如何使用Notification控件。我们首先来创建一个Windows Mobile 5的应用程序。打开Visual Studio 2005,选择File-New-Project,我们选择Visual C#中的Pocket PC Magneto,来创建一个Windows Mobile 5 Pocket PC应用程序。需要提醒的是在创建项目前,必须安装好Windows Mobile 5的SDK。
在创建好项目后,我们在界面编辑器中,为窗体添加MainMenu和Notification两个控件。我们在MainMenu的一个子菜单的响应函数中添加下面的代码:
private void menuItem5_Click(object sender, EventArgs e)
{
StringBuilder HTMLString = new StringBuilder();
HTMLString.Append("<html><body>");
HTMLString.Append("Submit data?");
HTMLString.Append("<form method=\''GET\'' action=notify>");
HTMLString.Append("<input type=''submit''>");
HTMLString.Append("<input type=button name=''cmd:2'' value=''Cancel''>");
HTMLString.Append("</body></html>");
//Set the Text property to the HTML string.
notification1.Text = HTMLString.ToString();
notification1.Caption = "Notification Demo";
notification1.Critical = false;
// Display icon up to 10 seconds.
notification1.InitialDuration = 10;
notification1.Visible = true;
}
Notification控件支持HTML格式的文本,所以我们的示例创建了两个Input控件。然后设置Notification控件的Visible属性为true就可以了。
编译执行后的效果如上图所示。我们可以看到,Notification已经从Windows Mobile 2003的气泡型窗体变成了从下边出现的形式。输入法图标也从右下角移到了中间。
Microsoft.WindowsMobile.Forms
Windows Mobile 5为开发者提供了Microsoft.WindowsMobile.Forms类库,该类库为用户提供了调用各种系统功能的对话框。目前该类库为我们提供了三种自定义对话框,分别是提供照相机功能的CameraCaptureDialog、提供选择联系人的ChooseContactDialog和提供选择图片的SelectPictureDialog。
我们用一个示例来演示Microsoft.WindowsMobile.Forms类库的功能。首先来创建一个Windows Mobile 5的应用程序,平台类型可以是Pocket PC或Smartphone。为了使用Microsoft.WindowsMobile.Forms类库,我们需要首先添加引用。我们在解决方案资源管理器里右击项目名称,在右键菜单中选择添加引用。我们在添加引用对话框中,我们选择“Microsoft.WindowsMobile.Forms”。
我们在菜单的响应函数中添加ChooseContactDialog的使用。
private void menuItem1_Click(object sender, EventArgs e)
{
ChooseContactDialog contactPicker = new ChooseContactDialog();
contactPicker.Title = "Choose a Contact below:";
contactPicker.ChooseContactOnly = true;
contactPicker.ShowDialog();
}
其实我们看到ChooseContactDialog的方法十分简单,只需要设置Title后,调用ShowDialog方法就可以显示出下边的对话框。
下边我们来添加对SelectPictureDialog的引用。
SelectPictureDialog pickerDialog = new SelectPictureDialog();
pickerDialog.Filter = "Image Files(*.BMP;*.JPG)|*.BMP;*.JPG";
pickerDialog.InitialDirectory = @"\My Device\My Images";
pickerDialog.Title = "Select an image file";
pickerDialog.ShowDialog();
我们首先来设置SelectPictureDialog的过滤器,允许显示JPG和BMP的图片;然后设置初始文件夹;最后调用ShowDialog方法。
下边是SelectPictureDialog显示的效果。
电话、短信和电子邮件
在Windows Mobile 2003中,如果要在.NET程序中拨打电话的话,就需要通过P/Invoke来调用API。到了Windows Mobile 5中,Microsoft.WindowsMobile.Telephony类库为我们提供了拨打电话的功能。
在使用这个功能之前,我们必须添加Microsoft.WindowsMobile.Telephony引用。调用电话功能的代码如下:
Phone phone = new Phone();
phone.Talk("1234567");
程序运行效果如下:
Phone类的方法只有一个Talk方法,所以也只能简单的进行电话拨打。我们如果想实现一些复杂的功能,比如监视拨入的电话等,还需要去调用TAPI来实现。
发送短信息和发送电子邮件都需要Microsoft.WindowsMobile.PocketOutlook类库的支持。PocketOutlook是一个很复杂的命名空间,包括对很多系统功能的支持,而支持发短信的类是SmsMessage。
public void SmsMessageSend()
{
SmsMessage smsMessage = new SmsMessage();
//Set the message body and recipient.
smsMessage.Body = "Would you like to meet for lunch?";
smsMessage.To.Add(new Recipient("John Doe", "2065550199"));
smsMessage.RequestDeliveryReport = true;
//Send the SMS message.
smsMessage.Send();
return;
}
我们可以看到SmsMessage的Body属性是SMS短信的内容,而To属性,则是收件人的姓名和电话号码,因为支持多个收件人,所以在添加收件人的时候需要调用To属性的Add方法。RequestDeliveryReport属性是一个Bool值,设置是否要求得到发送报告。最后调用SmsMessage的Send方法。
发送Email的代码与发送短信息的代码大致相似,但是需要使用的是EmailMessage类。
public void EmailSend()
{
EmailMessage message = new EmailMessage();
message.Subject = "The picture you requested";
message.BodyText = "Attached is the picture we discussed";
Recipient client = new Recipient("John","john@test.com");
message.To.Add(client);
Attachment image = new Attachment("\test.jpg");
message.Attachments.Add(image);
message.Send("ActiveSync");
}
EmailMessage的Subject属性是电子邮件的标题,BodyText属性是邮件正文。To属性中可以添加收件人的名称和地址。我们还可以在Attachments属性中添加附件。最后我们调用Send方法。
联系人、约会和任务
Windows Mobile中有三个很重要的程序:联系人、约会和任务。我们可以使用Microsoft.WindowsMobile.PocketOutlook类库,来调用系统中的联系人、约会和任务信息。我们可以通过自己的程序添加信息。
我们先来看一下Microsoft.WindowsMobile.PocketOutlook命名空间中很重要的一个类OutlookSession。该类的一个对象就表示了一个Pocket Outlook 对象模块,以前我们需要调用POOM实现的功能,现在可以通过PocketOutlook来实现。
属性 | 说明 |
---|---|
Appointments | 得到约会(Calendar)目录的信息。 |
Contacts | 得到联系人目录信息。 |
EmailAccounts | 得到Email帐号的集合。 |
SmsAccount | 得到SMS帐号的信息。 |
Tasks | 得到任务目录信息的集合。 |
在使用OutlookSession的时候要先创建一个OutlookSession的对象,然后创建相应的对象并添加到OutlookSession相应属性中去。我们来看下边的例子。
OutlookSession session = new OutlookSession();
// 添加约会
Appointment appointment = new Appointment();
appointment.Subject = "test";
appointment.Body = "testtest";
appointment.Start = DateTime.Now;
appointment.End = new DateTime(2005, 7, 17, 16, 25, 0);
session.Appointments.Items.Add(appointment);
// 添加联系人
Contact contact = new Contact();
contact.FirstName = "John";
contact.LastName = "Lee";
contact.CompanyName = "Microsoft";
contact.Email1Address = "John@test.com";
contact.MobileTelephoneNumber = "1234567";
contact.IM1Address = "John@hotmail.com";
session.Contacts.Items.Add(contact);
// 添加任务
Task task = new Task();
task.Subject = "task1";
task.Body = "task1 body";
session.Tasks.Items.Add(task);
我们创建Appointment、Contact和Task对象,然后设置相应的属性,然后添加到OutlookSession对象的相应的属性中。
其他新特性
Windows Mobile 5除了支持上面的特性外,还支持一些其他的新特性。比如在图象显示方面,Windows Mobile 5支持DirectX 3D Mobile。.NET应用程序可以通过Microsoft.WindowsMobile.DirectX类库来调用D3D Mobile,而C++应用程序可以通过COM接口的方式来调用。
在Windows Mobile设备上普遍使用的GPS全球定位系统也得到了更好的支持。Windows Mobile 5提供了GPS Intermediate Driver,使应用程序可以使用统一的API接口来调用GPS系统。
Windows Mobile 5提供了一个叫做“ExitWindowsEx”的函数,允许软件重启操作系统。Pocket PC使用该函数可以重启系统,而Smartphone支持关机和重启两种功能。
在数据库方面,SQL Mobile虽然被广泛使用,但是因为SQL Mobile没有被安装到ROM中。所以如果需要SQL Mobile就需要占用一部分RAM内存空间,对于一些轻量级的应用就显得不是很合适了。所以Windows Mobile中还包括一个轻量级的数据库EDB,该数据库是CEDB的升级。
写在最后
在这篇文章里,我们领略了Windows Mobile 5为开发者提供的新特性。很多常用的特性都被加入到了API中。但是我们还要看到,许多新特性对于复杂的应用来说,还比较简单。如果想实现比较复杂的功能,还需要依靠自定义控件来实现。
最后也希望这篇文章能够帮助开发者们了解Windows Mobile 5的开发新特性。