[翻译]-WinCE 程序设计 (3rd 版)--1.1 Windows CE有什么不同之处

Windows CE有什么不同之处
Windows CE有许多特性使得它不同于其它Windows 平台。首先,运行Windows CE的系统,大多数可能不使用Intel x86兼容微处理器。实际上,Windows CE运行在4种不同的CPU系列里:SHx, MIPS, ARM, 和 x86。幸运的是,开发环境几乎将各种不同CPU的所有差异与程序员隔离开了。

Windows CE程序事先不能确定屏幕或键盘。Pocket PC设备有一个240*320的纵向屏幕,而其它系统具有传统的480*240,640*240,640*480像素分辨率的横向屏幕。一些嵌入式设备则根本没有显示器。一些目标设备可能不支持彩色,并且大部分Windows CE设备用触摸屏替代了鼠标。一些在触摸屏设备上,轻触屏幕,表示鼠标左键点击,没有明显的方法代表鼠标右键。为了能处理右键,Windows 约定,当轻触屏幕的时候,按下Alt键,由Windows CE程序把这个组合序列解释为鼠标右键点击。

Windows CE设备具有更少的资源
运行Windows CE系统的目标设备上,各种资源变化极大。当写一个标准Windows 程序的时候,程序员可以对目标设备做许多假定,并且设备几乎都是IBM兼容机。目标设备通常有硬盘用于存储,同时虚拟内存系统用硬盘作为交换设备来模拟一个几乎没有数量限制的虚拟内存。程序员知道用户有键盘、双键鼠标以及可以当前支持256色、至少有800*600分辨率的显示器。

Windows CE程序所运行的设备几乎都没有硬盘作为大容量存储。没有硬盘不仅仅意味着没有地方存储大量文件,也意味着不能交换数据到磁盘上来创建虚拟内存。所以Windows CE程序几乎总是在少量内存环境里运行的。因为资源缺乏,内存分配经常失败。当空闲内存达到一个严重低的级别,Windows CE可能会自动终止一个程序。RAM的限制对Windows CE程序有很大的影响,并且是将现有的Windows应用程序移植到Windows CE过程涉及的主要挑战之一。

Unicode
在写Windows CE程序时,程序员可以使用的一个特性是Unicode. Unicode是一个字符编码标准,使用16位表示一个字符,相对的,ASCII标准是用单个8位编码一个字符。Unicode 允许相当简单将程序移植到不同的国际市场,因为世界上所有已知的字符都可以用65,536个Unicode 值里的一个来表示。处理Unicode相对容易,只要避免假设字符串是用ASCII代表和字符是按单个字节存储的。

使用Unicode的一个结果是每个字符占2个字节而不是一个,字符串长了一倍。程序员必须小心计算缓冲区和字符串的长度。你不能再假设260字节可以存储259个字符和一个0结尾符。作为标准char数据类型的替代品,你应该使用TCHAR数据类型。TCHAR在MS Windows 95和98中定义为char型,在Windows 2000,XP,Windows CE中,使用Unicode功能的程序里,TCHAR定义为unsigned short类型。这些类型定义,允许在基于ASCII和Unicode的操作系统上源代码级的兼容。

新控件
Windows CE上有许多为特殊环境设计的新控件。包括命令条、菜单条控件,提供类似菜单和工具条的功能,在具有更小屏幕的Windows CE设备上,这些为了节省空间都合并一行里。其它控件也为Windows CE做了改进。Windows CE里的编辑控件(edit control)可以设置为自动将单词首字母大写,这对在无键盘的PDA上进行设计是很重要的。对于Windows 桌面版本里的控件,Windows CE则提供了大部分。例如,日期和时间调整控件、日历控件使日历和管理器应用程序更加适合诸如H/PC和Pocket PC等手持设备。其它Windows标准控件做了功能裁减,这反应了Windows CE特殊的硬件系统配置所具有的紧凑简洁特性。

组件化
Windows CE编程中另一个需要注意的方面是Windows CE可以被微软或OEM厂商分解和重新配置,以更好地适应目标市场或设备。Windows程序员通常只是检查Windows 版本,看是否是Windows 95/98,Me系列或者2000,XP系列。通过获得版本,程序员可以判断哪些API函数可以使用。然而,Windows CE可以按无数种方式配置。

迄今为止,Windows CE最流行的配置是Pocket PC。微软定义了具体Windows CE组件集合,这些都体现在所有称为Pocket PC的设备上。然而,一些用Windows CE生产的OEM产品--PDA设备,并不叫Pocket PC。这些设备同Pocket PC设备在API上略微不同。如果你没有意识到这一点,你很容易写一个程序能运行在一个平台,却不能运行在另一个平台。在嵌入式平台上,OEM厂商决定包括什么组件,并可以为它特定的平台创建一个SDK开发包。如果OEM厂商对第三方开发感兴趣,它会为它的设备提供一个可定制的SDK包。新的平台不断出现,它们有许多共同的地方,也有许多不同之处。程序员需要了解目标平台,在尝试用一个可能不被设备支持的功能集时,需要让程序检查在特殊平台上什么函数可用。

Win32子集
最后,因为Windows CE比XP小很多,它不能像它大块头的兄弟XP那样支持所有的函数调用。当你面对一个不支持打印功能的操作系统,比如原始模式下的Windows CE时,不要调用任何打印函数,Windows CE还去除了一些XP中支持的冗余功能。虽然Windows CE可能不支持你喜欢的功能,但其它不同的函数集可能会工作的很好。有时Windows CE编程似乎主要是用Windows CE中稀少的API来找出实现一个特性的方式,虽然成千上万的函数很少被调用。

发布了2 篇原创文章 · 获赞 1 · 访问量 26万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章