1.何为Smart Device
Smart Device的中文意思就是“智能设备”,泛指Smart Phone、Pocket PC等使用了Windows CE操作系统的移动的、嵌入式的或者具有人机交互功能的电子产品。Pocket PC(以下简称PPC)想必大家已经都很熟悉了,现在国内已经有相当的用户群体。国际大厂如卡西欧、康柏等的产品早已进入中国市场,国内公司如联想也积极推出类似产品,争夺这片未来很有潜力的市场。令人值得高兴和意外的是,在微软网站的推荐的PPC页面上,发现了一款由联想推出的PPC,如下图所示:
这款PPC的型号是天玑XP100,推出的时间较早,配置已经有些落后。我们在此衷心的祝愿国内厂商能够在PPC的道路上越走越远。
这里要明确一点概念,PPC并不是PDA。PDA的全称是Personal Digital Assistant(个人数字助理)。市面上一般2000元以下的产品都属于PDA的范畴。PDA较PPC来说功能很弱,屏幕是单色的(当然,有一些高端的产品是彩色的),只能完成一些诸如电话簿、日程安排、小游戏等简单功能。但最主要的一点是,一般PDA使用的是开发商自行开发的嵌入式管理系统(不敢称其为操作系统)。由于没有统一的标准和接口,这种管理系统的扩展性很差,也根本没有兼容性。所以造成了每种PDA的使用方法、界面、功能都不一样,更没听说过不同品牌的PDA之间能够共享资料、传递数据,也没有谁能够写完了游戏、软件可以放到各种PDA上运行的吧。
可是,PPC就不一样了。PPC统一使用Windows CE操作系统,从上面联想的PPC的介绍页面来看,你可以发现PPC也使用CPU、主频、内存和显示屏幕等数据衡量性能,所以不同厂家、不同型号的PPC可以很清楚地衡量出性能的高低,这就有点好像普通的电脑。另外Windows CE操作系统中包含有IE、Pocket Word、Pocket Excel、MSN Messenger等应用程序,你可以用IE上网、MSN Messenger和朋友们聊天、Media Player看视频文件、听MP3,就像用普通电脑一样,当然也可以用Pocket Word、Excel处理台式机上的Word、Excel文件。最重要的是,程序员们可以开发自己的软件、游戏,在各种PPC上都可以运行。这样,PPC的世界就更加精彩了,像什么电子书、翻译软件、游戏修改器、开发工具等等。总之,你可以把PPC想成简化了的普通电脑,把Windows CE想成简化了的Windows,在普通电脑上完成的任务,PPC上都有类似的办法。
Smart Phone目前国内还比较少,只是在欧洲和美国发售了一些。简单来说Smart Phone就是在手机里装上了Windows CE,具有一些PPC功能的电话。记得以前摩托罗拉推出过一款类似于PDA的手机,个子挺大,绿油油的屏幕。Smart Phone就是这样,丰富了手机的功能。
最近又推出了一种叫Pocket PC Phone Edition的东西,干脆就是把PPC加上了手机的功能,也就是Pocket PC Phone Edition = Pocket PC + Smart Phone。以下是这三种产品的比较:
2.何为Windows CE
上面说了这么多好像都是在给PPC或Smart Phone做广告,但是我们今天主要谈的就是针对这两类产品的开发。可能有的朋友说了,这PPC我都没有,Smart Phone见都没见过,怎么开发啊?这一点大家都不用担心,我相信看完这篇文章,我相信只要您有电脑,会.NET编程,就可以针对PPC或者Smart Phone,甚至其他Smart Device开发了。
首先咱们要来谈一下Windows CE这个东西。诸位可能都发现了,上面咱们谈到的各种设备都集成了Windows CE操作系统。Windows CE是我们开发的基础。那么Windows CE到底是什么呢?Windows CE是一种开放的、可扩展的、32位操作系统,它被专门用于安装在从工业控制器、通信集线器、自动售货终端等企业设备到诸如数字照相机、电话和家庭娱乐设备等个人消费品上。Windows CE给开发人员提供了类似于Windows下的开发环境,它具有以下类似于Windows的内建功能:Microsoft Win32 Application Programming Interface (API)、ActiveX Controls、消息队列(MSMQ)、组件对象模型(Component Object Model、COM)、动态模版库(Active Template Library、ATL)和MFC。在Windows CE中集成了ActiveSync功能,用户可以通过串行接口、红外接口或者网线把嵌入式设备和普通台式PC方便的连接起来。另外Windows CE还提供了内建的多媒体功能(包括DirectX)、通信功能(TCP/IP, SNMP, TAPI等)。
所以可以看出Windows CE就是微软专门给嵌入式或移动电子设备使用的操作系统,那末我们给Windows CE开发的程序就可以给各种嵌入式设备使用。当然,代码在编译之前要选择Target Platform(目标平台),不过代码是不用改动的,编译器会自动把它编译成目标平台上的可执行文件。
3.何为.NET Compact Framework
微软为了实施.NET战略,在一年前推出了面向Windows平台的.NET Framework 1.0,我想这一点大家已经很熟悉了。在2003年4月份,微软又推出了Windows Server 2003和Visual Studio .NET 2003。其中Windows Server 2003中更是集成了.NET Framework 1.1,而VS.NET 2003中也增加了不少新鲜的开发模版。
其中,在VS.NET 2003中一个最大的新特性就是集成了.NET Compact Framework 1.0,我们可以通过浏览\Program Files\Microsoft Visual Studio .NET\2003\CompactFrameworkSDK目录里的文件确认是否安装了.NET Compact Framework。那么.NET Compact Framework是什么呢?
.NET Compact Framework的中文名称就是.NET Framework精简版。简单来说如果Windows CE操作系统是嵌入式或移动电子设备上的Windows,那么.NET Compact Framework就是这些设备上的.NET Framework。实际上.NET Compact Framework是.NET Framework针对嵌入式或移动电子设备的子集和补充。.NET Compact Framework有两个主要组件:公共语言运行库和 .NET Compact Framework类库。
公共语言运行库
公共语言运行库提供了管理 .NET Compact Framework代码的执行环境。代码管理的形式可以是内存管理、线程管理、安全性管理、代码验证和编译以及其他系统服务。
运行时是为了增强性能而设计的。它使用实时 (JIT) 编译的方法,使托管代码能够以运行应用程序的平台的本机语言运行。这样,您就可以创建适用于多种平台的应用程序,而不用再担心如何分别为每个平台重新编译或重新生成可执行程序了。
即使您的移动应用程序与托管代码一样都是用 Visual Basic .NET 或 C# .NET 编写的,仍然可以集成存储在动态链接库(DLL,包括 Windows CE API)外部的功能和子例程。.NET Compact Framework提供的数据类型以及对结构的支持使您能够轻松地将 Windows CE API 的功能集成到您的应用程序中。
.NET Compact Framework类库
.NET Compact Framework类库是与公共语言运行库紧密集成的可重复使用类的集合。您的应用程序将利用这些库来派生出所需的功能。就像其他面向对象的类库一样,.NET Compact Framework类型可用于完成许多常见的编程任务,包括界面设计、利用 XML、数据库访问、线程管理和文件输入/输出等。
.NET Compact Framework 实现了 System.Windows.Forms 和 System.Drawing 类的子集,使您能够为设备应用程序创建一个基于 Windows CE 的丰富的用户界面。Visual Studio.NET 中的 Form Designer(窗体设计器)将替您管理与这些类进行的大部分交互。可以在 .NET Compact Framework下实现的 Windows 窗体包括:窗体支持、.NET Framework 中的大多数控件以及集成的第三方控件、位图和菜单。下面表中列出了 .NET Compact Framework中包括的控件。
控件 | 说明 |
Button | 简单的命令按钮 |
CheckBox | 常见的复选框 |
ComboBox | 包含多个项目的下拉列表 |
ContextMenu | 实现上下文相关菜单 |
DataGrid | 可以绑定到数据源的网格 |
DomainUpDown | 可以通过滚动条浏览的项目列表 |
HScrollBar | 水平滚动条 |
ImageList | 存储图像的容器 |
InputPanel | 控制软键盘输入面板 (SIP) |
Label | 用于显示文本的简单控件 |
ListBox | 提供项目列表 |
ListView | 提供四种数据视图:大图标、小图标、列表和详细资料 |
MainMenu | 实现窗体上的菜单 |
NumericUpDown | 包含滚动条的数字输入字段 |
OpenFileDialog | 访问本机上的打开文件对话框 |
Panel | 用于保存其他控件的容器 |
PictureBox | 显示图像 |
ProgressBar | 可视的任务进度指示器 |
RadioButton | 常见的单选按钮 |
SaveFileDialog | 访问本机上的保存文件对话框 |
StatusBar | 用于显示文本的简单面板 |
TabControl | 为应用程序提供选项卡界面 |
TextBox | 标准的文本输入字段 |
Timer | 基本的计时器组件 |
ToolBar | 实现窗体上的工具栏 |
TrackBar | 数字数据使用的滑块界面 |
TreeView | 以层次结构的形式显示数据 |
VScrollBar | 垂直滚动条 |
由于 .NET Compact Framework是 .NET Framework 完整版的子集,因而精简版包括的控件也是完整版的功能的子集。出于规模和性能方面的考虑,.NET Compact Framework未包括某些控件属性、方法和事件。但如果需要,您只要完成少量的编码工作,就可以自己实现这些未包含的功能。这是因为 .NET Compact Framework允许用户根据基础控件类创建自己的控件。这样,您就可以通过添加自己的属性、方法和事件来创建您自己真正需要的控件。
当然,.NET Compact Framework类库还实现了其他一些名字空间的子集,如System.Data、System.Xml、System.Web、System.Drawing、System.Threading、System.Net、System.IO、System.Net.IrDA等。由于篇幅有限,就不在这里介绍了,有兴趣的朋友可以通过查阅MSDN获得相关资料。
4.编写一个简单的HelloWorld
在这里,我们通过编写一个简单的HelloWorld程序,演示如何编写一个基于.NET Compact Framework的程序,并且将它放到Pocket PC 2002模拟器上运行。
首先新建一个工程(File->New->New Project),选中一种开发语言(这里使用C#为例),在Templates中选中Smart Device Application,然后填写好Name,点击OK。
在弹出的对话框中选中默认值,单击OK。
然后,我们拖动一个Label和一个Button到窗体上,把label1的Text属性内字符删除,把button1的Text属性改外Say。如下图所示:
单后在窗体上双击button1,打入如下代码:
private void button1_Click(object sender, System.EventArgs e) { label1.Text = "Hello Wordl!"; } |
然后我们在菜单上选择Debug->Start,或者直接按F5。这时候出现如下画面:
这是让我们选择要在那个设备上进行调试,如果选择第一个就是在VS.NET 2003的自带模拟器中进行调试,如果选择第二个,将会在一个物理的PPC上调试。如果选择第二个,您需要保证物理PPC已经与PC连接好,并且在VS.NET 2003的Tools->Options->Device Tools->Devices菜单中已经设置好相关参数。如果调试设备上没有.NET Compact Framework,在调试的时候,.NET Compact Framework将会被自动部署在目标设备上。在这里,我们选择使用模拟器调试。
这时候,VS.NET 2003会自动启动模拟器,并且将.NET Compact Framework及所要调适的程序部署在模拟器中。VS.NET的状态兰将会陆续出现如下状态:
尝试与模拟器建立连接
完成建立连接
将.NET Compact Framework部署到目标设备上
(如果目标设备上有.NET Compact Framework,将会略过这一步)
部署.NET Compact Framework完成
这时候模拟器中会自动开始安装.NET Compact Framework,出现如下画面:
这个安装好后,还会安装一些其他调试所需要的文件。最后,会将我们所编写的程序部署到PPC上。当状态栏出现Ready的时候,程序就完全部署好了,出现如下画面。当我们单击Say按钮时,屏幕中央会出现Hello World!字样。
程序调试完成之后,当你点击PPC里面时间右方的叉子时,发现VS.NET 2003并没有退出调试状态。这是因为PPC为了优化程序运行速度,并不会把关闭的程序直接从内存中撤出,而是暂时“最小化”了。我们可以通过PPC中菜单(就是那个Windows标志)里的Settings->System->Memory->Running Programs查看正在运行的程序,当我们在这里点Stop后,程序就真正意义上的退出了,同时VS.NET 2003也回到了编辑环境。
当然,你也可以直接在VS.NET 2003中点Stop停止调试,并且会使PPC中正在调试的程序自动完全退出。关闭调试的程序后,被调试的程序并没有从模拟器中删除,而是在
\My Device\Program Files\项目名称目录里。大家可以用过菜单->Programs->File Explorer来访问和再次运行这些程序。最后,不想使用PPC时,可以点击模拟器本身外面的“叉子”关闭程序,会出现如下的提示。
如果你选择了“Save Emulator State”,那么PPC目前的状态、已经部署的程序和改动的设置将会被保存下来,下回启动PPC也不用经过漫长的自检,调试程序时也不用先装.NET Compact Framework了,能够大大节省我们的时间。如果选择了“Turn off Emulator”,则目前的状态全部丢失了,下回启动PPC就像第一次使用一样。
5.Pocket PC 2002模拟器使用经验
模拟器运行条件
为了模拟器能够与物理的操作系统建立连接,您的电脑必须拥有一个独立的IP(127.0.0.1不算)。您可以通过使用IPConfig查看是否具有独立的IP。如果没有也没有关系,我们可以装一块虚拟网卡(环回网络适配器)。
在 Windows 2000 下安装环回适配器, 在 Windows 2000 下,安装 Microsoft 环回网络适配器的过程如下:
1. | 在控制面板中,单击“添加/删除硬件”。 |
2. | 在“添加/删除硬件向导”的“欢迎”页面上,单击“下一步”。 |
3. | 单击“添加/排除设备故障”,然后单击“下一步”。系统扫描即插即用设备时,安装过程将暂停。 |
4. | 在“选择一个硬件设备”页面上,单击“添加新设备”,然后单击“下一步”。 |
5. | 在“查找新硬件”页面上,单击“否,我想从列表选择硬件”,然后单击“下一步”。 |
6. | 在“硬件类型”页面上,单击“网卡”,然后单击“下一步”。在生成网络适配器列表时,将有短暂的延迟。 |
7. | 在“选择网卡”页面上,先在“制造商”列表框中单击“Microsoft”,然后在“网卡”列表框中单击“Microsoft Loopback Adapter”。单击“下一步”按钮。 |
8. | 在“开始硬件安装”页面上,单击“下一步”。即开始安装环回适配器。 |
在 Windows 2000 下配置环回适配器,与任何网络适配器一样,安装环回适配器只是完成了整个过程的一半,您还需要配置新的适配器。请执行以下步骤来配置环回适配器:
1. | 在“开始”菜单上单击“设置”,指向“网络和拨号连接”,然后双击“本地连接”。将显示“本地连接状态”对话框。 |
2. | 单击“属性”。将显示“本地连接属性”窗口。注意:请确保处理的是正确的连接。此对话框的“连接时使用”字段应显示“Microsoft Loopback Adapter”。 |
3. | 选择“Internet 协议 (TCP/IP)”,然后单击“属性”。将显示“Internet 协议”窗口。 |
4. | 配置 IP 地址属性。 |
5. | 单击“确定”关闭“Internet 协议”窗口。 |
6. | 单击“确定”关闭“本地连接属性”窗口。 |
7. | 单击“关闭”关闭“本地连接状态”窗口。 |
更换皮肤
可能您打开的模拟器界面和我的不太一样,因为我把原有模拟器的那些冗余的皮肤给去掉了。您可以通过在PPC的菜单中选择Help->Emulator for Windows CE Help查看帮助,了解换肤的方法。PPC的皮肤都在这个目录里:
\Program Files\Microsoft Visual Studio .NET 2003\CompactFrameworkSDK\ConnectionManager\Bin\Images\PocketPC\2002\1033
进程限制
在一个操作系统上只可以运行一个PPC模拟器的进程。这样说来就是您无法在一台电脑中同时运行两个PPC模拟器,所以在您切换用户和远程登录桌面的时候不要使用PPC模拟器。
与物理操作系统交换文件
有时候我们需要模拟器与物理操作系统交换一些其他的文件,但是Visual Studio .NET 中的模拟器把我们带回到了封闭的模拟器环境中。更麻烦的是,Visual Studio .NET 与 eMbedded Visual Tools 的早期版本不同,它不包括模拟器文件管理工具。这就要求您自己想出一些有创造性的解决方法。
在模拟器环境中交换文件一般有三种方法。一种方法是通过模拟器上运行的应用程序创建文件。这种方法在此就不再赘述了。您可以使用标准的 .NET 编程技术创建文本、XML 或数据库文件。
另外两种方法,即向项目添加文件以及从共享中复制文件,则需要在此作进一步的解释。
1.向项目添加文件
将文件移到模拟器中的最简单方法是将它们包括为项目的一部分。使用这种方法的一个优点是,当在模拟器上执行强制重设时(Turn off模拟器后再重新打开,PPC模拟器中所有的内容都会被复原成初始样子),只需重新部署项目即可恢复文件内容。
使用此方法的过程如下:
1. | 在 Visual Studio .NET 中打开项目。 |
2. | 在 Project(项目)菜单上,单击 Add Existing Item...(添加现有项...)。 |
3. | 在 Add Existing Item(添加现有项)对话框中,选择要复制到模拟器中的文件。 |
4. | 单击 Open(打开)。该文件即被添加到项目中。 |
5. | 在 Solution Explorer(解决方案资源管理器)窗口中,选择添加的文件。 |
6. | 在Properties(属性)窗口中,验证 Build 属性是否已设置为 Content(内容)。配置为 Content(内容)的项将作为单个文件复制到目标设备中。配置为 Embedded Resource(内嵌资源)的项则是应用程序可执行文件的一部分。 |
7. | 建立项目。文件将随应用程序一起复制到设备中。 |
2.从共享复制文件
第二种方法提供了更大的灵活性,而且几乎不需要额外工作。该方法使用 Pocket PC 操作系统内置的网络文件共享功能,而这个功能随后是通过 Visual Studio .NET 中包括的模拟器提供的。
此方法分为两个部分:在开发计算机上设置共享,然后通过模拟器的 File Explorer(文件资源管理器)访问共享。设置共享需要三个配置。首先,必须配置计算机以启用共享。其次,必须配置要共享的文件夹。最后,还要更改模拟器的设备名称。
在运行 Windows 2000 的开发计算机上启用共享
1. | 在“开始”菜单上单击“设置”,指向“网络和拨号连接”,然后双击“本地连接”。 |
2. | 在“本地连接状态”窗口中,单击“属性”。 |
3. | 在“本地连接属性”窗口中,启用“Microsoft 网络的文件和打印机共享”。 |
4. | 单击“确定”关闭“本地连接属性”窗口。 |
5. | 单击“关闭”关闭“本地连接状态”窗口。 |
此时,您已经完成对开发计算机的配置,可以进行文件共享了。下一步,即共享要复制到模拟器中的文件所在的文件夹。在 Windows 2000 下共享文件夹:
1. | 启动 File Explorer(文件资源管理器)。 |
2. | 在 File Explorer(文件资源管理器)中,在要共享的文件夹上单击鼠标右键,然后单击 Properties(属性)。 |
3. | 在 Properties(属性)窗口中,单击 Sharing(共享)选项卡。 |
4. | 在 Sharing(共享)选项卡上,选择共享文件夹,并提供共享名称。 |
5. | 单击 OK(确定)关闭 Properties(属性)窗口。 |
更改PPC模拟器中的设备名称:在模拟器中选择菜单->Settings->System->About->Device ID->Device Name,更改Device Name。改成什么无所谓,只要不是默认设置就可以。现在您已经完成配置,可以复制文件了。首先需要将所有要复制到模拟器中的文件放置到共享文件夹中。然后执行以下步骤,将文件移到模拟器中:
1. | 启动模拟器。 |
2. | 从模拟器中启动 File Explorer(文件资源管理器)。 |
3. | 在 File Explorer(文件资源管理器)菜单上,单击 Open(打开)。 |
4. | 屏幕上将显示 Open(打开)对话框。按照 \\mycomputer\myshare 格式指定开发计算机的名称以及您创建的共享名称。 |
5. | 点击 OK(确定)。 |
根据开发计算机上的安全设置,计算机可能会在允许访问共享之前提示您输入用户名和密码。此时,您已经可以向/从开发计算机和模拟器上的共享中复制文件了。
复制的时候,把鼠标按在需要复制的文件名上不放,一会就会出现一个红圈,剩下的就和Windows里一样了。不过需要注意一点,PPC模拟器里不支持中文,所以中文的目录名和文件名会变成方块。
模拟器内存容量限制
打开菜单->Settings->System->Memory可以查看模拟器的虚拟内存。模拟器的虚拟内存容量即被当作的存储文件的空间有当成了模拟的内存。
当Storage满了的时候,就再也无法向PPC中复制文件,当Program满了就无法再运行程序。我们可以通过调节中间的滑竿进行分配的平衡设置。也可以通过VS.NET菜单中的Tools->Options->Device Tools->Devices->Configure->System->Memory Size修改模拟器的虚拟内存大小。
但是要注意,修改完设置后要重新启动PPC模拟器才能生效。
使用PPC模拟器上网
在模拟器里选择菜单->Settings->Connetions->Connections,改成如下配置。
在IE里打入网站的IP地址就可以访问网站了。
很可惜的是模拟器是英文的,所以看不见中文字符。而且由于没有DNS,所以只能通过IP地址访问。