WindowsCE程序设计资料_第1页
WindowsCE程序设计资料_第2页
WindowsCE程序设计资料_第3页
WindowsCE程序设计资料_第4页
WindowsCE程序设计资料_第5页
已阅读5页,还剩245页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

WindowsCE程序设计

作者对如何把Windows、嵌入式程序设计经验应用到WindowsCE.NET环境里做了娴熟的示范。这这个环境

里,可以为支持Windows的PocketPC、Smartphone以及其它下一代设备编写更快,更小的应用。

目录

前言

第一部分-Windows程序设计基础

第1章-"HelloWindowsCE”

第2章-屏幕绘画

第3章-输入:键盘、鼠标和触摸屏

第4章-窗口、控件和菜单

第5章-公共控件和WindowsCE

第6章-对话狂和属性表

第二部分-WindowsCE程序设计

笫7章-内存管理

第8章-文件和注册

第9章-WindowsCE数据库

第10章-模块、进程和线程

笫11章-通知机制

第三部分-通信

第12章-串口通信

第13章-WindowsCE网络通信

第14章-设备间通信

第15章-桌面连接

第四部分设备编程

第16章-浏览器Shell编程

第17章-PocketPC编程

第18章-PocketPC扩展

第19章-Smartphone编程

第20章-游戏API-GAPI

第五部分-WindowsCE高级编程

第21章-系统编程

第22章-设备驱动程序和服务编程

第23章-.NetCF下的程序设计

索引

封底

用这本广受业界推崇的WindowsCE.NET参考书,为最新的智能移动设备设计整洁、高性能的应用程序。在

第3版里,基本内容已经根据WindowsCE.NET4.2和微软.NETCF做了更新。作者DouglasBoling对如

何把Windows、嵌入式程序设计经验应用到WindowsCE.NET环境里做了娴熟的示范。在这个环境里,可以

为支持Windows的PocketPC,Smartphone以及其它下一代设备编写更快,更小的应用。在DouglasBoling

专家级的指导下,可以促进提升你的技术,更快的适应市场变化。

内容要点:

•用特定的技术处理内存、存储和电源限制

•能够和网络、PC、其他设备(包括使用红外线和蓝牙技术的设备)通信

・新内容一为Smartphone的特殊要求编程,包括安全特性。

•新内容一在PocketPCPhone和Smartphone上使用短消息服务(SMS)写面向连接的应用

・新内容一编写自己的设备驱动程序、服务程序和超级服务程序

•配置用户和事件通知

•使用游戏API编程

关于作者

作为一个作家、培训师和顾问,DouglasBoling从WindowsCE初始就开始涉足这个领域了,被公认为这

个平台的权威。他频繁的出现在各种主要的专业开发人员大会上,微软嵌入式开发大会、微软专业开发者

大会以及TechEd都有他的身影。通过他的BolingConsulting公司,Doug为许多在WindowsCE上工作的

一流公司做教学和咨询。

主要的专业开发人员大会上,微软嵌入式开发大会、微软专业开发者大会以及TechEd都有他的身影。通过

他的BolingConsulting公司,Doug为许多在WindowsCE上工作的一流公司做教学和咨询。

前言

几乎是从晅ndowsCE诞生起,我就开始在它上面工作了。作为一个多年的Windows程序员,能够将我的

Windows程序设计经验应用到如此多

的不同而又很小的系统上,使我感到吃惊。这些WindowsCE系统运行在各个领域,从类似PC的迷你膝上

机到蜂窝手机,再到深藏于一些大

型工业设备里的嵌入式设备。WindowsCE里的Win32API使成千上万的哨ndows程序员能够在--个全新的

系统领域里写应用程序。然而,细

微的差别,使得在WindowsCE中编程不同于在桌面版本的Windows中编程。我将在本书里进行讲解的正是

这些差异。

WindowsCE到底是什么?

WindowsCE是最小,也可能是最有趣的微软Windows操作系统。WindowsCE彻头彻尾的被设计成一个基

于ROM的,使用Win32API子集的小

型操作系统。WindowsCE把WindowsAPI扩展到那些不支持大容量XP内核的领域和机器上。

目前逐步消亡的Windows95/98/Me对那些需要向后兼容MS-DOS、Windows2.x和3.x程序的用户来说,

是个大操作系统。虽然它有缺点,

但听ndowsMe还是继承了这个困难的任务。另-方面,WindowsNT/2000/XP是用于企业级的。它牺牲了

兼容性和大小,来达到高级别的稳

定和健壮。WindowsXP家庭版是WindowsXP的一个版本,用于家庭用户,它尽力保持了兼容性,但这相

对于它的基本目标一稳定性来说

,兼容性还是排在第2位的。

WindowsCE并不向后兼容MS-DOS或者Windows.它不是一个为企业级计算设计的全功能的操作系统。相反,

WindowsCE是一个轻量级、多线

程的操作系统,它具有可选的图形用户接口。它的长处在于它的小尺寸、Win32API子集和多平台支持。

WindowsCE也是最初.NETCF版本的基础,.NETCF是.NET在移动和嵌入式设备上的版本。这个精简框架

使用一个更小的类库提供了一个同

样强大的.NET运行时环境,这使得它适合用于电池供电的小型设备上.

WinCE历史简介

为了理解WindowsCE的历史,你需要理解操作系统和使用操作系统的产品之间的区别。操作系统是微软内

部一组核心团队开发的。他们的产品就是操作系统自身。其他团队,比如开发PocketPC的团队,在操作

系统即将发布的时候,获得并使用最新版本的操作系统。这种划分成两部分的方式,可能对理解WindowsCE

是怎么发展的会产生一些混淆。下面让我们分别看一下这两部分的历史一设备和操作系统自身。

设备

首批为WindowsCE设计的是手持式“管理器”设备,配有480*240或640*240的屏幕和Chiclet键盘(计

算机常用的一种键盘,有一个很小的矩形键盘)。这些设备,称为手持式PC,在1996年首次面世。在Fall

Comdex97大会上,WindowsCE2.0,一个进行了显著更新的操作系统版本发布了,和它配套的是类似的

更新一些的硬件,具有640*240的横向屏幕,一些是彩色的,还具有略大一些的键盘。

1998年1月,消费电子展览会上,微软宣布了两个平台,掌上电脑(译者注:Palm-sizePC可以看作Pocket

PC的前身,其中使用WindowsCE2.x的称为Palm-sizePC,使用WindowsCE3.x的称为PocketPC)和

车载PC(译者注:AutoPC是WindowsCE的一种应用模式,多用在一些车载电脑、工业自动控制等场合,

可按客户需要修改输入输出方式而不限定使用原有的程序。)。掌上电脑目标直接瞄准了由Palm0s统治

的基于笔式的管理器市场。掌上电脑具有纵向显示的特点,并配有240*320的屏幕,使用输入笔来作为输

入方式。但是很不幸,对WindowsCE爱好者来说,对这种原始掌上电脑,公众显然缺乏热情。

此后,出现了一种新的迷你膝上式WindowsCE设备,配备了触摸式输入键盘和VGA/SuperVGA屏幕。这种

设备被称为H/PC(专业版),电池可使用10小时,并配备了微软PocketOffice软件改进版。这种设备

中有许多具有内置Modem,一些甚至配备了thenstandard屏幕,移动轨迹垫或者IBM轨迹球设备。

2000年4月,微软宣布了PocketPC,它对老式掌上电脑(Palm-sizePC)做了极大的增强。最初的Pocket

PC使用预发布的具有更多功能的WindowsCE3.0.PocketPC的用户界面也有所不同,具有更加整洁的2

纬外观和修改过的主页-Today桌面。然而,PocketPC最重要的特性是极大的改进了WindowsCE的性能。

微软做了很多工作来调优WindowsCE的性能。这些改进加上更快的CPU,可以让系统像Pocket管理器期

望的那样运行的更快。在这种PocketPC里,摩尔定律使得WindowsCE设备可以跨越这条线:现在硬件已

经有能力提供WindowsCE需要的运算能力了。

手持式PC在2000年时升级到了WindowsCE3.0»虽然这些系统(现在称为手持式PC2000)在消费领域没

有成功,但在工业领域找到了市场。它凭借相对低的费用,大屏幕和长时间电池能力满足了这个机会市场。

2001年晚些时候,PocketPC更新为PocketPC2002»这次发布使用了柜ndowsCE3.0的最终发布版本,

并做了一些用户接口方面的改进。同时也增加了PocketPCPhone版本,在PocketPC设备中集成了蜂窝

电话支持功能。这些设备具有了PocketPC的功能,也具有蜂窝电话的联通功能,形成了新一代的几乎可

以始终连接的移动软件。

微软的另一组人发布了SmartDisplay(译者注:一种具有触摸屏的无线监视器,可以通过802.11b无线网

络连接到个人计算机,并使用WindowsXPProfessional操作系统的"RemoteDesktop”(远程桌面)来

访问主机)。它使用WindowsCE.NET4.1系统,具有平板式设备形式,有无线网络访问能力,有一个底座

可以连接到PC上。当使用底座的时候,它可以做第2个显示器。当不用底座的时候,它可作为PC的移动

显示器。

2003年春季,PocketPC团队发布了升级版的PocketPC,称为PocketPC2003»系统在用户接口方面没

有很多变化,但由于是基于WindowsCE.NET4.2,所以在稳定性和性能方面都有了巨大改进。PocketPC2003

还集成了蓝牙支持功能,OEM厂商可以选择是否包含该功能。

微软还和OEM厂商合作生产基于WindowsCE的蜂窝电话。这些电话中的少部分被称为Smartphone(智能

电话),在2002年末发布了,最初是基于WindowsCE3.0„2003年升级到了WindowsCE4.2,并增加了

一系列特征,包括.NETruntime功能。

新设备一直不断在发布,例如MediatoGo设备,就是使用硬盘来存储的移动视频播放器。WindowsCE操

作系统的强大功能,使应用程序凭借运行在这些设备上的简单操作系统超越了系统能力。

操作系统

虽然面向消费者的产品可以不断产生新闻热点,但最重要的开发工作仍然在操作系统自身。WindowsCE从

1.0之日就开始不断演化,当它还是一个简单的管理器操作系统时就被寄予厚望。从*ndowsCE2.0开始

一直持续到今日,微软不断发布WindowsCE的嵌入式版本,使开发者可以用在他们自定义的硬件上。虽然

像PocketPC等消费平台占据了宣传的主体,但对基本操作系统的改进是使诸如PocketPC和Smartphone

之类的设备能够运做的基础。

在FallComdex1997大会上,WindowsCE2.0随着手持式PC2.0一起发布了。WindowsCE2.0增加了网

络支持,包括Windows标准网络功能,支持NDISminiport驱动模式,以及通用NE2000网络卡驱动支持。

虽然增加的COM被限制在进程内服务,但可以用来支持脚本编写.引入了新的显示驱动模式,可以支持像

素深度,而不再是WindowsCE1.0中原始的每像素2位了。WindowsCE2.0是WindowsCE操作系统中第

一个与诸如H/PC等产品分离,独立发布的版本。开发者可以购买WindowsCE嵌入式工具包(ETK),它可以

让开发者为特殊的硬件平台定制WindowsCE。然而,用过ETK后,开发者会发现,这个产品的功能还没有

达到它所宣称的目标。

随着掌上电脑(Palm-sizePC)在1998年初发布后,WindowsCE又在不断改进。虽然WindowsCE2.01

没有按ETK形式发布,但它在减少操作系统和应用程序大小方面做的努力还是值得称道的。在所ndowsCE

2.01中,C运行时库从每个EXE和DLL都要绑定的静态链接库中去掉了,放到了操作系统里。这极大的减

小了操作系统和应用程序的大小。

1998年8月,微软发布了H/PC,配套的发布了操作系统的新版本-2.11版。WindowsCE2.11是从未正式

发布的WindowsCE2.1的服务升级包。这一年年末,WindowsCE2.11作为WindowsCE平台的2.11版本,

发布给了嵌入式开发者社区。该版本支持改进的对象存储,允许要存储的文件大于4M。还增加了对控制台

程序的支持,同时增加了MS-DOS风格的命令行解释器的WindowsCE支持。WindowsCE2.11还增加了Fast

IR,用于支持IrDA的4M红外线标准,同时增加了一些特殊功能来支持IP多点传送。最初的安全概念被引

入:设备可以检查和拒绝装载没有被认证的模块。

WindowsCE2.12也是作为2.1-白桦(WindowsCE2.1的代号)的服务包发布的。这次发布中最大的亮点

是一个增强的平台Builder工具集,它具有一个图形化的前端界面。用•个新的通知接口调整了系统操作,

新的接口将不同的通知功能进行了组合。通知的用户接口暴露在平台Builder中,允许嵌入式应用开发者

定制通知对话框。微软基于PC的Internet浏览器IE4.0也被引入到WindowsCE中,称为Genie-通用

IE控件。这个HTML浏览器控件完善了简单小巧的PocketInternet浏览器。微软消息队列(MMQ)也被加

了进去。WindowsCE2.11中的安全功能“运行/不运行(go/nogo)”也增加了"运行,但不信任(go,but

don'ttrust)”的选项。这样,不被信任的模块可以运行,但不能调用关键功能集,也不能修改注册表的

某些部分。

期待已久的WindowsCE3.0终于在2000年中发布了。这次发布是跟随同年4月发布的PocketPC的,它

使用了WindowsCE3.0略早一些的内部版本。WindowsCE3.0最大的亮点在它的内核,内核为更好的支

持实时功能而做了优化。增强后的内核,支持256个线程优先级(之前的版本是8个),可调整线程周期,

可嵌套的中断服务程序,并减少了内核等待时间。

WindowsCE3.0改进的地方不仅仅在内核上。一个新的COM组件被加入进来,用来完善2.0就有的进程内

COM功能。新的组件支持完整的进程外COM和DCOM功能。对象存储区域也做了改进,可以支持256MRAM

了。对象存储区域里的文件大小限制也提高到了32M/文件。PlatformBuiIder3.0的附加的软件包加入了

更多的功能,增加了mediaplayer控件,提高了多媒体支持。用PPTP,ICS和远程桌面显示功能改进了网

络支持。还正式引入了DirectXAPI。

WindowsCE接下来的一个版本,改变的不仅仅是新特性,产品的名字也改了。2001年初,WindowsCE.NET

4.0发布了。这个版本里,改变了虚拟内存的管理方式,将每个应用程序的虚拟内存空间扩大了1倍。Windows

CE.NET4.0还增加了新的驱动装载模式,服务(Services)支持,新的基于文件的注册选项,蓝牙功能,802.11

以及1394支持。具有讽刺意味的是,WindowsCE.NET4.0虽然叫.NET,但却不支持.NET精简框架。

2001年末,WindowsCE4.1跟随眄ndowsCE4.0之后发布了,增加了IPv6支持,Winsock2支持,一组

支持applets的新功能,以及一个叫PowerManager的例子。WindowsCE4.1支持.NET精简框架。.NET运

行时库作为一个快速修复包(QFE),在操作系统发布后提供的。

2003第2季度,WindowsCE.NET4.2发布了。这次升级,提供了很棒的、OEM厂商期待的新特性-在嵌入

式系统上支持PocketPC应用程序。PocketPC特有的API,比如菜单条、软输入法以及其它解释器特性,

被移植到基本操作系统里了。为支持名字空间扩展,浏览器Shell被重写。通过在某些CPU上直接支持硬

件分页表功能,内核性能得到了改进.

因为WindowsCE不断在发展,下个版本的WindowsCE正在开发中,一旦有新版本发布的信息,我将更新

到我的网站。

为什么你应该读这本书

《微软WindowsCE程序设计》一书,是为任何想给WindowsCE或.NET精简框架编写应用程序的人写的。

嵌入式系统程序员为特定的应用使用WindowsCE,Windows程序员对写或者移植一个已有的Windows程序

很感兴趣,甚至可管理代码的开发者都可以用本书里的信息来使他们的工作更容易。

嵌入式系统上的程序员,他们或许没有Windows程序员熟悉Win32API,他们可以读本书第1部分的内容

来熟悉Windows编程。虽然这一部分不如《*ndows程序设计》(CharlesPetzold著)这类书能提供全面

的指南,但它的确提供了一些基本信息,使读者可以读懂后面的内容。它也为嵌入式系统程序员开发复杂

但很有用的WindowsCE程序提供了帮助。

有经验的Windows程序员可以通过本书学习WindowsCE和WindowsXP中Win32API的差异,两者之间

的差异是很显著的。WindowsCE的小巧意味着Win32模式里的很多API不能被支持。Win32API的某些部

分根本不被支持。另一方面,因为WindowsCE的特殊性,WindowsCE在许多领域扩展了Win32API,本书

将讲述这些领域。

本书对使用.NETCF的开发者也很有用。当前的CF在功能上有些缺陷:需要用可管理的应用程序来调用操

作系统来执行某个任务。本书对从操作系统可以获得什么做了很好的指导。书中有一-章节会讨论在基于

WindowsCE的设备中开发可管理代码所涉及的特性。

本书通过例子来进行教学。我专门为本书写了许多WindowsCE示例程序。例子的原代码列在了书中。源代

码及最终编译后的程序可以在附书光盘里找到,这些适合许多WindowsCE支持的处理器。

书中的示例都是直接用API写的,即所谓的“Petzold”编程方式。由于本书的目标是教你如何为Windows

CE编写程序,所以示例都避免使用诸如MFC等类库,应为这会使为WindowsCE写应用程序所涉及的特性

产生混乱。-一些人可能会认为WindowsCE中有MFC,了解WindowsCEAPI的必要性就不那么大了。我并

不这么认为,WindowsCEAPI的知识可以使你更有效的使用MFC。我认为真正了解操作系统能够有效的简

化应用程序的调试。

第3版新内容

第3版本做了比较大的修订,增加了很多重要的内容,包括Smartphone、蓝牙等多个新主题。本书更新了

WindowsCE.NET4.2的新特性。增加了新的章节,覆盖Smartphone和.NETCF。许多章节做了明显扩充,

覆盖了OBEX、蓝牙和服务等主题。另有一些章节做了重新整理以更好的描述主题。

为Smartphone以及PocketPCPhone的通信特性增加了一章内容,涉及如何为Smartphone2003设备写应

用程序。还讲述了在Smartphone和PocketPCPhone上,如何通过SMS系统,使用联接管理器、发送和接

收消息功能来写应用程序。

新增了一章关于.NETCF内容的,涉及如何写WindowsCE上可管理的应用程序。在此之后,集中在.NETCF

的特殊类WindowsForm的应用程序上。本章涉及的一个重要部分是,当可管理类库不能提供应用所需的功

能时,如何在可管理的代码中调用不可管理或者本地代码。

设备之间通信这一章节涉及蓝牙和OBEX。蓝牙是一个无线通信标准,但坦白地说,在许多文章中并没有很

好的解释说明。这一章介绍了蓝牙技术并提供了一个简单易懂的使用示例。本章还包括OBEX内容,OBEX

是蓝牙和红外线数字联盟使用的对象交换标准。本章另外一个例子演示了如何用OBEX通过蓝牙或者红外线

数据方式去传送文件到其他设备。

PocketPC这一章增加了PocketPC2003设备的新特性。本书第2版PocketPC一章中的菜单条例子已经

移到了通用控件这一章,这表明出在最新的WindowsCE版本中,PocketPCAPI将一些功能移到操作系统

中。

驱动程序和服务一章也做了更新,涉及WindowsCE服务。WindowsCE服务在WindowsCE.NET4.0中引

入。WindowsCE服务程序为编写后台运行程序提供了方法,避免为服务使用单独的进程所带来的开销。操

作系统还提供超级服务来监控IP端口,并在客户端连接该端口的时候通知服务。本章提供了一个简单的

WindowsCE服务例子,演示了如何写服务程序和使用超级服务的特性。

对本书第1版的读者来说,本书包含了第2版的所有新特性。更新内容涉及PocketPC和WindowsCE设备

驱动程序,以及第1版发布后,实现的新的内容管理和线程特性。

.NET精简框架

一个开发者没有听说过微软的.NET计划,那他一定是在荒岛上。该计划包括一个运行时环境,把代码从硬

件上隔离开,同时提供一个类型安全的运行时环境以增加安全性。为嵌入式和电池供电的设备编写了更小

一些的运行库。.NET精简框架的最初版本运行在有晅ndowsCE的PocketPC和基于WindowsCE.NET4.1

及以后的嵌入式系统上。

嵌入式设备的特殊要求使得在它上面只用可管理的代码写应用程序成为一项挑战。嵌入式应用和一些移动

应用要求应用程序和设备紧密的集成在一起。因为运行时库的特性之一就是将应用和硬件隔离,所以一个

嵌入式可管理的应用程序有时需要打破运行时库的限制,直接访问某些操作系统的功能。

正如前面所提到的,在精简框架这一章节里,花费了大量时间来讨论如何使可管理的应用程序访问操作系

统。讨论涉及到一些技术,比如通过跨越可管理/本地代码边界来聚集参数等,当然,在精简构架里完成这

个任务比在桌面应用中更困难。

关于MFC

对于问是否该用MFC开发WindomsCE下应用程序的人,过去,我通常的回答是:不要用。老版的windows

CE系统加上比较慢的CPU,运行复杂、全功能的MFC应用会带来很大的压力。但现在,我不再这么绝对了。

新版的WindowsCE平台足够快,可以用合理的性能运行基于MFC的应用。MFC运行时库包含在这些设备的

ROM中,所以应用程序仅仅是代码,而不再是代码加MFC运行时库。

但正像速度和运行库都已经加到平台里去一样,MFC正逐渐没落。微软不再推荐MFC应用开发,取而代之

的是.NET开发。所以你应该用MFC开发吗?我的回答是不要再用MFC开发新项目。对于旧项目,仍然有机

会用MFC,但仅仅只是因为这些项目没有移植到其他开发平台上。

WindowsCE开发工具

本书假设读者了解C和熟悉微软Windows,在XP下用微软嵌入式VisualC++开发过本地程序。为了编译书

中的例子程序,需要微软嵌入式VisualC++4.0,这可以在附书光盘中找到。需要相关的适合叫ndowsCE

设备的SDK,用于你的目标设备。

每个例子已经有一个预先定义好的工程设置,但你也可以选择从头创建一个工程。对大多数例子来说,简

单创建一个普通WCE应用程序工程就可以了。对于那些要求访问PocketPC上特殊功能的例子,即使整个

工程设置不是特别为PocketPC应用定义的,也可以用特殊的代码链接这些功能。

对那些想为PocketPC2000和2002写应用程序的开发者来说,需要使用嵌入式VisualC++3.0。不幸

的是,附书光盘没有足够的空间同时放eVC3和eVC4,但你可以从微软网站下载eVC3。还需要用于这些老

版本PocketPC系统的SDK。一些例子,例如蓝牙、OBEX和服务等例子,使用了老系统里没有的例子。

用Visual2003可以开发.NET精简框架应用程序。因为太大和非免费,所以没有在光盘里提供。当然,

这个工具是非常高效的开发工具。那些对开发可管理代码感兴趣的人来说,开发效率提高减轻了升级花费

所带来的痛苦。在精简框架这一章,你需要Visual2003来编译里面的例子。该工具为所有的PocketPC

设备以及基于WindowsCE4.1以上的嵌入式版本提供了必要的运行时库。

目标系统

你并不需要WindowsCE目标设备来体验书中提供的例子。各种SDK平台都带有WindowsCE模拟器,让你

可以在WindowsXP对WindowsCE程序下执行基本测试。在你手边没有实际的设备的时候,可以很方便地

使用模拟器。模拟器执行PC模拟器中的WindowsCE版本,而PC模拟器会在PC上执行一个实际的Windows

CE操作系统。

在决定使用哪种WindowsCE硬件来测试的时候,你应该考虑很多因素。首先,如果应用程序式一个商业产

品,你至少应该为每种目标CPU购买一个系统。你需要在所有目标CPU上进行测试,因为虽然源代码可能

相同,但执行结果可能不同,并且每种目标CPU分配的内存大小也不同。

CD里的内容

附书光盘包含了书中所有例子的源代码。我提供了MSeVC的工程文件,你可以打开这些预配置的文件。所

有的例子都是为WindowsCE4.2、PocketPC2003和Smartphone2003设计的。

除了例子,光盘中还包含免费的eVC。这和你从微软站点下载或者通过光盘购买的版本一样,可以把这些

工作看作是赠品。还包括了PocketPC2003的平台SDK。

光盘还包括一个StartCD程序,提供图形化界面,让你可以访问CD里的内容。如果你开了Windows自动运

行功能,当你把光盘插到光驱中,这个程序就会自动运行。如果不能自动运行,进入CD根目录,运行即可。

文件为CD中的内容提供了更多的信息,介绍了包含的工具和SDK的系统要求,以及对包含产品的支持信息。

下面是为了安装和运行MSeVC所需要的系统要求。注意eVC是运行在Windows2000,WindowsXP,或者

WindowsServer2003上的。

*带Pentium处理器的PC:推荐Pentium150MHz或者更高。

*MicrosoftWindowsXP,Windows2000ServicePack2(orlater)orWindowsServer2003

*32MB内存,推荐48MB

*硬盘空间:最小安装360MB,完全安装720MB

*带光驱

*VGA或更高分辨率的显示器,推荐SVGA

*微软鼠标或兼容鼠标设备。

其它资源

虽然我试图将本书做成“一站式”的WindowsCE编程书籍,但没有一本书可以覆盖各个方面的。通常,要

了解更多Windows编程知识,我推荐经典书籍一CharlesPetzold写的Windows编程(微软出版社,1998)

・书。这是迄今为止最好的Windows编程书籍。Charles提供了例子,演示如何解决困难而又常见的Windows

问题。要更多的了解Win32核心API,我推荐JeffRichter的《Windows核心编程》(Programming

ApplicationsforMicrosoftWindows(MicrosoftPress,1999))。Jeff揭示了进程、线程和内存管理

方面的很多细节技术。要了解更多的MFC编程知识,没有比JeffProsise的《MFC程序设计》(Programming

WindowswithMFC(MicrosoftPress,1999).)更好的书籍了。这本书是MFC版的Petzold编程书籍,

可以说是MFC程序员必读。

要更多的了解.NET编程,我推荐CharlesPetzold的《C#Windows程序设计》(ProgrammingWindowswith

C#(MicrosoftPress,2002))。Charles将他令人惊叹的技巧应用到了.NET框架的WindowsForm中。

这是赶上.NET客户端编程发展速度的•本非常的好书。

第1.章HelloWindowsCE

概述

从经典的《TheCProgrammingLanguage》一书开始,传统上编程方面的书都是从"Hello,world”程序

开始的。这是一个合理恰当的开始。每个程序都有一个基本底层结构,分析它可以揭示所有运行在这个操

作系统上的应用程序都具有的基础,避一些设计复杂的任务将结构搞的难以理解。

在本书"Hello,world”一章里,包含了关于设置和使用编程环境的细节。用于开发微软WindowsCE应

用程序的环境与开发标准微软Windows应用程序的环境有些不同,因为WindowsCE程序是在运行XP的PC

机器上编写,却主要在独立的基于WindowsCE的目标机器上进行调试的。

经验丰富的旧ndows程序员可能会跳过这一章进入有更多内容的主题,但我建议你至少浏览一下本章,

了解标准叫ndows编程和WindowsCE编程之间的区别。两个开发过程中许多细微而又重要的不同之处和

WindowsCE应用程序的基本构架包含在第一章里。

1.1WindowsCE不同之处

WindowsCE有许多特性使得它不同于其它Windows平台。首先,运行WindowsCE的系统,大多数可

能不使用Intelx86兼容微处理器。实际上,WindowsCE运行在4种不同的CPU系列里:SHx,MIPS,ARM,

和x86o幸运的是,开发环境几乎将各种不同CPU的所有差异与程序员隔离开了。

WindowsCE程序事先不能确定屏幕或键盘。PocketPC设备有一个240*320的纵向屏幕,而其它系统

具有传统的480*240,640*240,640*480像素分辨率的横向屏幕。一些嵌入式设备则根本没有显示器。一些

目标设备可能不支持彩色,并且大部分WindowsCE设备用触摸屏替代了鼠标。一些在触摸屏设备上,轻触

屏幕,表示鼠标左键点击,没有明显的方法代表鼠标右键。为了能处理右键,Windows约定,当轻触屏幕

的时候,按下Alt键,由眄ndowsCE程序把这个组合序列解释为鼠标右键点击。

WindowsCE设备具有更少的资源

运行晅ndowsCE系统的目标设备上,各种资源变化极大。当写一个标准Windows程序的时候,程序

员可以对目标设备做许多假定,并且设备几乎都是IBM兼容机。目标设备通常有硬盘用于存储,同时虚拟

内存系统用硬盘作为交换设备来模拟一个儿乎没有数量限制的虚拟内存。程序员知道用户有键盘、双键鼠

标以及可以当前支持256色、至少有800*600分辨率的显示器。

WindowsCE程序所运行的设备儿乎都没有硬盘作为大容量存储。没有硬盘不仅仅意味着没有地方存储

大量文件,也意味着不能交换数据到磁盘上来创建虚拟内存。所以WindowsCE程序几乎总是在少量内存环

境里运行的。因为资源缺乏,内存分配经常失败。当空闲内存达到一个严重低的级别,EndowsCE可能会

自动终止一个程序。RAM的限制对WindowsCE程序有很大的影响,并且是将现有的Windows应用程序移植

到WindowsCE过程涉及的主要挑战之一。

Unicode

在写哨ndowsCE程序时,程序员可以使用的一个特性是Unicode.Unicode是一个字符编码标准,使

用16位表示一个字符,相对的,ASCII标准是用单个8位编码一个字符。Unicode允许相当简单将程序移

植到不同的国际市场,因为世界上所有己知的字符都可以用65,536个Unicode值里的一个来表示。处理

Unicode相对容易,只要避免假设字符串是用ASCII代表和字符是按单个字节存储的。

使用Unicode的一个结果是每个字符占2个字节而不是一个,字符串长了一倍。程序员必须小心计算

缓冲区和字符串的长度。你不能再假设260字节可以存储259个字符和一个0结尾符。作为标准char数据

类型的替代品,你应该使用TCHAR数据类型。TCHAR在MSWindows95和98中定义为char型,在听ndows

2000,XP,WindowsCE中,使用Unicode功能的程序里,TCHAR定义为unsignedshort类型。这些类型定义,

允许在基于ASCII和Unicode的操作系统上源代码级的兼容。

新控件

WindowsCE上有许多为特殊环境设计的新控件。包括命令条、菜单条控件,提供类似菜单和工具条的

功能,在具有更小屏幕的WindowsCE设备上,这些为了节省空间都合并一行里。其它控件也为WindowsCE

做了改进。WindowsCE里的编辑控件(editcontrol)可以设置为自动将单词首字母大写,这对在无键盘

的PDA上进行设计是很重要的。对于Windows桌面版本里的控件,呵ndowsCE则提供了大部分。例如,日

期和时间调整控件、日历控件使日历和管理器应用程序更加适合诸如H/PC和PocketPC等手持设备。其它

Windows标准控件做了功能裁减,这反应了WindowsCE特殊的硬件系统配置所具有的紧凑简洁特性。

组件化

WindowsCE编程中另一个需要注意的方面是WindowsCE可以被微软或OEM厂商分解和重新配置,以

更好地适应目标市场或设备。Windows程序员通常只是检查Windows版本,看是否是Windows95/98,Me

系列或者2000,XP系列。通过获得版本,程序员可以判断哪些API函数可以使用。然而,WindowsCE可

以按无数种方式配置。

迄今为止,WindowsCE最流行的配置是PocketPC。微软定义了具体WindowsCE组件集合,这些都体

现在所有称为PocketPC的设备上。然而,一些用WindowsCE生产的OEM产品一PDA设备,并不叫Pocket

PC。这些设备同PocketPC设备在API上略微不同。如果你没有意识到这一点,你很容易写一个程序能运

行在一个平台,却不能运行在另一个平台。在嵌入式平台上,OEM厂商决定包括什么组件,并可以为它特

定的平台创建一个SDK开发包。如果OEM厂商对第三方开发感兴趣,它会为它的设备提供一个可定制的SDK

包。新的平台不断出现,它们有许多共同的地方,也有许多不同之处。程序员需要了解目标平台,在尝试

用一个可能不被设备支持的功能集时,需要让程序检查在特殊平台上什么函数可用。

Win32子集

最后,因为WindowsCE比XP小很多,它不能像它大块头的兄弟XP那样支持所有的函数调用。当你面

对一个不支持打印功能的操作系统,比如原始模式下的WindowsCE时,不要调用任何打印函数,WindowsCE

还去除了一些XP中支持的冗余功能。虽然呵ndowsCE可能不支持你喜欢的功能,但其它不同的函数集可

能会工作的很好。有时WindowsCE编程似乎主要是用WindowsCE中稀少的API来找出实现一个特性的方

式,虽然成千上万的函数很少被调用。

1.2依然是Windows编程

虽然WindowsCE和Windows的其它版本之间确实存在差异,但不应该夸大这种差异。编写WindowsCE

应用程序依然是编写Windows应用程序。

有同样的消息循环,同样的窗口,大部分情况下,具有同样的资源和控件。差异并不会掩盖相同的地

方。匈牙利命名方式是重要的相同点之-o

匈牙利命名方法

自从CharlesPetzold写<Windows程序设计》一书开始,大部分Windows程序都采用了匈牙利命名

方法,这是一种传统和良好的命名方法。这种编程风格是CharlesSimonyi多年前在微软发明的,它给程

序里每个变量用1到2个字母的前缀来表示变量的类型。例如,命名为Name的字符串数组应该命名为

szName,前缀sz表示变量类型是以0做终止符的字符串。匈牙利命名法的价值在于极大的提高了源程序的

可读性。其它的程序员,或者你看一段代码,不应该重复的看变量声明来判定变量的类型。表1T列出了

变量典型的匈牙利前缀。

表1-1变量的匈牙利前缀

变量类

型匈

牙利前缀

Integer

iorn

Word

(16-bit)wors

Doubleword(32-bitunsigned)Dw

Long(32-bitsigned)L

Char

C

String

Sz

Pointer

P

Long

pointerIp

Handle

h

Windowhandlehwnd

Struct

sizecb

你可以看到晅ndows早期的一些痕迹。Ip或者长指针,在Intel16位编程模式下,指针分位短指针

(16位偏移)和长指针(附加偏移段)。其它前缀由类型的缩写构成。例如,刷子的句柄通常是hbr。前

缀可以是组合的,就像Ipsz,指出一个以0结尾的长指针。WindowsAPI中大部分结构是采用匈牙利表示

法来给它们的域命名的。本书通篇使用这种命名法。我鼓励你在你的程序里用这种命名方法。

1.3第一个WindowsCE程序

说了这么多,就让我们一起看一下你的第一个WindowsCE程序吧。列表1-1显示了Hellol一为Windows

CE写的一个简单的Hell。World应用程序。

Listing1-1:Hellol,一个简单的Windows应用程序

〃================================—=

//Heilol-Asimpleapp1icationforWindowsCE

//WrittenforthebookProgrammingWindowsCE

//Copyright(C)2003DouglasBoling

〃=_=_=================—=======

#include"windows.h〃

//Programentrypoint

intWINAPIWinMain(HINSTANCEhlnstance,HINSTANCEhPrevInstance,

LPWSTRIpCmdLine,intnCmdShow){

printfC'HelloWorld\n,/);

return0;

)

如您所见,除了程序入口点外,代码看上去十分类似经典的Kernighan和Ritchie版程序。在注释之

后,有一行代码

ttinclude"windows,h”

这个文件包含了一组文件,它们中定义了WindowsAPI及其用到的结构和常量。

程序的入口点是本程序和标准C程序之间最大的差别。作为C标准入口intmain(char**argv,int

argc)的替代品,WindowsCE通过标准Windows入口点[注1]intWINAPIWinMain(IIINSTANCEhInstance,

HINSTANCEhPrevInstance,LPWSTRIpCmdLine,intnCmdShow);构建程序环境。

WindowsCE在•些方面不同于桌面版的Windows。

第1个参数,hlnstance为其它应用程序指明具程序实例,也为需要验证这个EXE的WindowsAPI函

数提供了程序实例。

参数hPrevInstance是从旧的Win16Api(Windows3.1及更早的系统)遗留下来的。包括WindowsCE

在内的所有Win32操作系统中,hPrevInstance始终是0,可以忽略掉。

参数IpCmdLine指向一个Unicode字符串,包含了命令行文本。从微软WindowsCE浏览器启动的应用

程序没有命令行参数,但在某些情况下,例如当系统自动启动一个程序时,系统包含一个命令行参数来说

明程序为什么被启动。参数IpCmdLine是WindowsCE与XP出现差异的情况之一,在WindowsCE里,命

令行字符串是Unicode字符串,在其它版本的Endows里,命令行字符串总是ASCII的。

最后一个参数,nCmdShow,指明了程序主窗口的初始状态。由父进程,通常是浏览器传递这个参数到

程序里。它对应用程序如何配置主窗口给出了说明。该参数可能会规定窗口最初显示成图标

(SW_SHOWMINIMIZE),或者显示最大化(SLSHOWMAXIMIZED)来覆盖整个桌面,或者显示为普通(SW_RESTORE)

大小来表明窗口按标准可变大小方式显示在屏幕上。其它值规定窗口初始状态对用户不可见,或者规定窗

口可见但不能成为活动窗口。在WindowsCE里,这个参数的值被限制成3个状态:普通(SW'_SH(W)、隐

藏(SWJ1DE)和非激活显示(SN1SHOWNOACTIVATE)。除非应用程序需要强制它的窗口预先确定状态,在

程序主窗口被创建后,这个值是不加修改,只是简单的传递给ShowlVindow函数的。

下一行是这个应用程序唯一的功能行:printf("Hell。World'n");

WindowsCE支持大部分标准C库,包括printf,getchar等等。这―•行有趣的地方在于它不像Windows

CE其它任何地方,这个串不是Unicode而是ANSI。下面是对这个现象的合理解释:对于用ANSI标准编译

的C标准库,printf和诸如strcpy等其它字符串库函数用的是ANSI字符串。当然,WindowsCE支持这些

标准函数的Unicode版,例如wprintf,getwchar,和wcscpy。

最后,用return0;结束程序。

其它进程可以用Win32API函数GetExitCodeProcess获取返I可值。

构建第一个应用程序

要在你的系统上从头创建Hellol,可以启动MSeVC++,在[File]菜单上选择[新建]创建一个新工程。

当看到新工程的对话框,可以明显的看到WinCE编程与标准Win32编程的变化。你有机会选择在图1-1中

所显示的各种平台。对于非MFC或ATL工程,首选是WCEPocketPC应用(用于PocketPC)和WCE应用

(用于其它WindowsCE系统)。您还可以选择适当的目标CPU。例如,选择Win32(WCEMIPI)来为使用MIPS

CPU的WindowsCE平台编译程序。无论是何种目标设备,都要确保选择WCE模拟器。这样你就可以在用XP

下的模拟器中运行例子程序了。

图1T平台列表使eVC++能够面向不同的WindowsCE平台。

接下来,eVC++会询问您是否想创建一个空的工程、一个简单程序或者一个Hell。World应用。时本

书里所有的例子,都选择空工程。这样做是为了避免代码向导向例子添加任何额外的代码。在[File]菜单

选择[New],创建新文件。

当为Hell。1创建或从CD复制了合适的源文件,选择眄n32(WCEx86em)Debug作为目标平台,之后

build这个程序。这一步会编译源代码,如果没有编译错误的话,系统自动启动模拟器,并把EXE程序放

到模拟器文件系统里,接下来你可以启动Hellol。如果你在眄ndows98或Me系统下,模拟器系统能够会

显示一个错误信息,因为模拟器只能在Win2000或XP下运行。

如果你有WindowsCE系统,比如PocketPC(PPC),把PPC连接到PC上,方法和同步PC的内容到PPC

一样。打开微软ActiveSync,建立PPC和PC的链接。为了WindowsCE设备能够运行,虽然ActiveSync

链接并不是必须的,但我发现让它运行可以为开发环境和WindowsCE系统之间建立一个更稳定的链接。

一但PC和WindowsCE设备之间的链接成功和运行,切换回eVC++,选择合适的目标设备(如适合iPaq

PocketPC的Win32[WCEARM]Debug)进行编译和rebuild。和为模拟器创建程序一样,如果没有错误,

eVC++自动下载编译程序到远程设备上。程序要么被放到对象存储的根目录上,要么放在\windows\start

菜单目中。

运行该程序

要在嵌入式WinodowsCE设备H/PC上运行Heilol,单击手持式PC的MyComputer图标,找到根目录

下的文件,之后双击应用程序图标启动程序。

要在PocketPC上运行程序,从设备的Start菜单选择程序就可以了。因为eVC++已经把程序下载到

\windows\start菜单所在的目录了。这种方式下,下载的应用程序自动显示在Start菜单里。

有问题?

如果在PocketPC上点击图标或开始菜单选择Hellol程序,似乎没什么反应。在手持式PC上,程序

似乎只是刷新了一下屏幕。这是因为程序启动、写到控制台并结束了。除非你从一个已经创建的控制台启

动程序,否则WindowsCE会在Heilol执行printf语句时,创建一个控制台窗口,并且在He11o1结束的

时候自动关闭控制台。

在PocketPC上,应用程序可以运行,但PocketPC并不为诸如printf之类的输出提供控制台显示的

功能。通过把驱动程序放到PocketPC的Windows目录里,可以为PocketPC增加控制台支持。驱动程序

从驱动程序接口获取输入,创建屏幕窗口,打印输出字符串。控制台启动程序可以从手持式PC和嵌入式版

本的WindowsCE获得。

注1:虽然从技术上可以改变入口点原型来匹配C的标准入口点,但通常不值得这么麻烦的。

1.4Hello2

既然已经有了基础,那么是时候把Hellol升级一下,至少应该让人可以看见它。因为很多WindowsCE

系统没有控制台驱动程序,Hello2创建一个消息框而不是用printf来显示"HelloCE”文字。Hello2的

程序如下表1-2所示:

列表1-2:Hello2,使用MessageBox函数的简单应用程序

//Heilo2-Asimpleapp1icationforWindowsCE

//WrittenforthebookProgrammingWindowsCE

//Copyright(C)2003Doug1asBoling

〃=================================================

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论