第12章Windows CE应用程序设计_第1页
第12章Windows CE应用程序设计_第2页
第12章Windows CE应用程序设计_第3页
第12章Windows CE应用程序设计_第4页
第12章Windows CE应用程序设计_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

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

文档简介

1、1 1第7章 Windows CE应用程序设计7.1 Windows CE应用程序开发简介应用程序开发简介7.2 Windows CE系统的开发工具系统的开发工具7.3 Windows CE应用程序开发流程应用程序开发流程7.4 Windows CE应用程序接口应用程序接口7.5 开发开发Windows CE应用程序的注意事项应用程序的注意事项7.6 基于基于VS 2005的应用程序开发简例的应用程序开发简例7.7 本章小结本章小结2 2在Windows CE下,应用程序开发(Application Development)是针对驱动和内核而言的。应用程序开发是指针对给定的Windows CE

2、平台,利用该平台提供的编程接口(API),使用特定工具(如Visual Studio.NET2003、eMbedded Visual C+或Platform Builder 5.0),实现特定功能的程序设计活动。7.1 Windows CE应用程序开发简介应用程序开发简介3 3这里需要指出的是,对于特定的平台,结合图7.1所示的Windows CE体系结构,可知应用程序处于整个Windows CE体系结构的最上层,应用程序直接与操作系统交互。因为Windows CE是一个可高度定制的操作系统,因此基于Windows CE平台提供的API可能会不同。4 4图7.1 Windows CE体系结构5

3、 5对于Windows CE的编程接口,在Windows CE设计之初,微软就决定对桌面Windows和Windows CE采用几乎一样的编程接口。这样做一方面可使Windows下的应用开发人员快速、平滑地过渡到Windows CE平台下,另一方面有利于大量现有的桌面Windows下的应用程序移植到Windows CE平台下。而平台的价值是依赖于运行在其上的应用程序的,这也是我们选择WindowsCE平台的主要原因。为了使读者能对Windows CE系统的开发有一个全面而快速的了解,下面将对Windows CE系统的开发内容、开发工具、开发流程与开发方法进行介绍。6 6Windows CE系统

4、开发本质上属于嵌入式系统开发,而嵌入式系统是由硬件和软件组成的,所以一个完整的Windows CE系统开发也是由硬件开发和软件开发两部分组成的。Windows CE是一个嵌入式操作系统,它本身是软件,但它必须在特定的硬件上面才能运行,Boot Loader、OAL、驱动程序等操作系统软件都直接与硬件打交道,而绝大多数应用程序则不直接与硬件打交道。本章的主要内容是介绍与Windows CE有关的软件开发,并将与Windows CE相关的软件开发划分为与硬件直接相关的软件开发、与硬件间接相关的软件开发和与硬件无关的纯软件开发。其中,应用程序的开发是本章讲述的重点。表7.1给出了Windows CE

5、系统的开发内容。7 7表表7.1 Windows CE系统的开发内容系统的开发内容8 8应用程序开发是Windows CE系统开发最重要的部分,但对于开发者来说也是难度最小的部分。一个嵌入式系统或嵌入式产品之所以区别于其他嵌入式系统或者产品,其关键就在于其应用的不同,两个不同的嵌入式系统或者嵌入式产品,它们的硬件可以完全相同,操作系统定制也可以完全相同,但其应用绝对应该不同。应用程序开发多数情况下是与硬件无关的纯软件开发,对开发者来说没有硬件方面的水平要求,与BSP开发相比,难度自然降低了很多。随着所要开发的嵌入式系统或嵌入式产品的不同,所要开发的应用程序也多种多样,9 9开发者既可以开发没有

6、任何显示界面的通信程序,也可以开发具有完整Windows界面的图形应用程序,开发什么样的程序完全取决于应用的需要。微软为开发者提供了丰富的Windows CE应用程序开发工具,使开发者既可以使用C/C+语言开发本地(Native)应用程序,也可以使用C#.NET或Visual Basic.NET语言开发托管的(Managed)应用程序。10 107.2.1 Windows CE系统的开发工具概要系统的开发工具概要从Windows CE 1.0开始,微软就为在Windows CE下开发应用程序提供了完备的操作系统开发工具和应用程序开发工具,并随着系统版本的不断升级,开发工具也不断升级和完善,功能

7、越来越强大,易用性越来越好。7.2 Windows CE系统的开发工具系统的开发工具11 11在Windows CE 4.X上,微软为应用程序的开发人员提供了三种开发工具:Visual Studio.NET 2003用来开发基于.NET Compact Framework的托管C+代码;eMbedded Visual C+和Platform Builder 4.X用来开发本机代码;此外,还有Embedded Visual Tools 3.0(不提倡,已被废弃,这里不做讨论)。在Windows CE 5.X中,仍可使用Platform Builder 5.X进行应用程序的开发,最大的变化是eMb

8、edded Visual C+的作用已经被Visual Studio 2005替代。 Visual Studio 2005既可用来开发基于.NET Compact Framework 2.X的托管代码,也可以用来开发本机代码。12 12因为Platform Builder的最大作用是用来定制内核,所以应用程序开发完全可通过Visual Studio 2005完成。随着最新的Windows eMbedded CE 6.0的逐步推广应用,未来将是Visual Studio 2005或其后续版本一统天下。因而Windows CE的产品线就更加明晰了:纯应用程序开发采用Visual Studio;内核

9、定制采用Platform Builder。Windows CE.net下的应用开发模型如图7.2所示。13 13图7.2 Windows CE 5.X下的应用开发模型14 14本书中会涉及3种应用程序的开发工具:eMbedded Visual C+、Visual Studio 2005和Platform Builder。表7.2对Windows CE 5.X之后的Windows CE操作系统开发工具和应用程序开发工具进行了总结。15 15表表7.2 Windows CE开发工具总结开发工具总结16 16在介绍每种开发工具的功能和使用方法之前,首先须意识到这些软件在安装过程中其实是有先后顺序的,

10、即各软件之间存在着相互依赖的关系,否则安装过程中会导致出错或者无法安装。图7.3描述了各软件之间的相互依赖关系。其中,虚线代表部分依赖,实线代表全部依赖,依赖关系从下至上。17 17图7.3 各软件之间的依赖关系18 187.2.2 使用使用EVC开发应用程序开发应用程序eMbedded Visual C+(简称EVC)是专门用来开发基于Windows CE的本机应用程序的工具。由于嵌入式系统资源有限,因此选用效率高、性能好、编译出的应用程序结构紧凑的C+作为编译器。EVC的最新版本为4.0,可为Windows CE 4.X和Windows CE 5.X开发应用程序。从此工具的名字上就可以看出

11、,eMbedded Visual C+和桌面Visual C+关系密切。的确,它与Visual C+ 6.0(简称VC 6.0)具有相似的工程管理模式和用户界面,连一些快捷键都是一样的。熟悉VC 6.0的读者可很快上手。eMbedded Visual C+4.0集成开发环境如图7.4所示。19 19图7.4 eMbedded Visual C+ 4.0集成开发环境2020从图7.4中可以看出,eMbedded Visual C+支持Win CE App / DLL / COM / Lib使用Win32 API、MFC、ATL和STL,并且与桌面Visual C+的功能基本相同。这也是Windo

12、ws CE嵌入式操作系统占据优势并迅速成功的重要条件。所以如果熟悉Windows 环境下的编程,再掌握Windows CE编程的特点,很快就会进入Windows CE编程的世界。对于开发人员来说,EVC易于调试和测试,当然,如果想要开发相应的应用程序,则至少需要安装一个SDK,默认eMbedded Visual C+会带有微软提供的Standard SDK。21 217.2.3 使用使用Visual Studio 2005开发应用程序开发应用程序Visual Studio 2005是微软于2005年推出的集成开发环境,是Visual Studio.NET 2003的后续产品。对于嵌入式开发者来

13、说,Visual Studio 2005与Visual Studio.NET 2003最大的区别是增加了本机代码的开发,以及对.NET Compact Framework 2.0的支持。因此,如果希望在Windows CE下开发应用程序,那么建议使用Visual Studio 2005。Visual Studio中的“新建项目”对话框如图7.5所示。2222在Visual Studio 2005中,IDE强化了对图形界面设计的支持。开发人员可以所见即所得的方式设计Pocket PC和Smartphone的应用程序,这样避免了以前在IDE中无法知道目标设备的确切分辨率而导致的图形界面问题。在Vi

14、sual Studio 2005中,所有的Windows CE模拟器都是基于ARMV4体系结构的。这对于开发Pocket PC和Smartphone的应用程序来说有非常重要的意义,因为现在市场上所有的Pocket PC和Smartphone设备的CPU都是清一色的ARM处理器。这样,在模拟器下运行的代码,无须重新编译,即可在真实的Pocket PC和Smartphone上运行。2323图7.5 Visual Studio中的“新建项目”对话框24247.2.4 使用使用Platform Builder开发应用程序开发应用程序Platform Builder(PB)是微软为开发人员进行基于Win

15、dows CE平台的嵌入式操作系统的开发而定制的集成开发环境。在Windows CE 6.0操作系统开发和应用开发都统一到了VS 2005环境。Platform Builder提供了所有进行设计、创建、编译、测试和调试Windows CE操作系统平台的工具。它运行在桌面Windows下,开发人员可以通过交互式的环境来设计和定制内核、选择系统特性,然后进行编译和调试。2525同时,开发人员还可以利用Platform Builder 6.0来进行驱动程序开发和应用程序项目开发,等等。Platform Builder 6.0的强大功能,已使其成为Windows CE平台下嵌入式操作系统开发和定制的必

16、备工具。在Platform Builder中选择FileNew Project or File命令可打开“新建项目”对话框,如图7.6所示。2626图7.6 “新建项目”对话框2727使用Platform Builder的优点是显而易见的:它支持Win CE App / DLL / Lib,使用Win32 API开发,应用程序将被链接到OS内核中,这样做的好处是容易调试OS内核,可以把应用程序直接集成到操作系统映像中,使应用程序与操作系统一起发布,这样就避免了应用程序的安装部署。但是同时也带来了一些问题:(1) 一旦修改了代码,必须重新编译镜像。(2) 上述做法虽然容易调试OS内核,但是却不容

17、易调试应用程序。主要表现在首先必须创建一个debug版的OS,然后才能Debug Zone。28287.2.5 各种开发工具的比较各种开发工具的比较至此,已经详细介绍了4种应用程序的开发工具:eMbedded Visual C+、Visual Studio.NET 2003、Visual Studio 2005和Platform Builder。至于如何选择开发工具,可以参考表7.3。2929表表7.3 几种开发工具对比几种开发工具对比3030一般来说,使用eMbedded Visual C+开发本机码。当效能和控制是应用程序的最大需求时,开发工程师应使用Embedded Visual C+开

18、发本机码应用程序。选择本机码或是托管代码来开发应用程序,牵涉到的选择非常广泛,还包括开发工具、平台支持、应用程序需求及应用领域、开发者习惯、共享及时效性等。31 31Windows CE系统的开发大致可以分为三个阶段:硬件开发阶段、操作系统开发阶段和应用程序开发阶段。硬件开发阶段的开发包括硬件设计开发、Boot Loader开发、OAL开发和BSP开发;操作系统设计阶段的开发包括开发定制驱动、创建最小内核、定制操作系统组件以及测试与集成等;应用程序开发阶段的主要任务是开发特定的应用程序及中间件。Windows CE系统的开发流程如图7.7所示。7.3 Windows CE应用程序开发流程应用程

19、序开发流程3232图7.7 Windows CE下应用程序开发流程3333在Windows CE下开发应用程序也可划分为3个步骤:(1) 获得特定Windows CE平台的SDK;(2) 在Windows CE 模拟器上编辑和调试代码;(3) 在实际目标平台上编译和运行程序,如果需要在设备上调试程序,可以通过ActiveSync进行。34347.3.1 安装安装SDK大多数应用程序开发者会选用Visual Studio 2005或者EVC开发应用程序,如果是这样,那么安装合适的SDK是第一步工作。SDK(Software Development Kit)是一系列头文件、库文件、文档、平台管理器

20、和运行时库的总称。开发人员可使用SDK为某个特定的平台开发应用程序。使用Visual C+为桌面Windows开发应用程序同样须安装SDK,微软也会在自己的网站上提供最新的开发桌面应用程序的SDK(称为Platform SDK)供用户下载。但是绝大多数桌面Windows开发人员却对此一无所知。主要原因有两个:第一,桌面Windows是不可定制的。3535桌面Windows中包含的组建和功能模块相对固定,因此桌面Windows的SDK内容也就相对固定,我们几乎可使用同一套Platform SDK为所有桌面Windows开发应用程序。第二,Platform SDK已经被集成到了Visual C+中

21、。在安装Visual C+时,开发人员可能并不知道Platform SDK也同时被安装。Windows CE不能像桌面Windows一样,有一个统一的SDK。Windows CE是一个可以定制、裁剪的操作系统,每一个Windows CE平台包含的功能都不尽相同,因此每个平台向应用程序提供的API集合都不相同。3636Visual Studio和eMbedded Visual C+都依赖特定的SDK开发应用程序,只有安装了特定的SDK后,在开发工具的“新建项目向导”中才会有相应的选项。在eMbedded Visual C+中,提供了Platform Manager来管理已经安装的SDK,从菜单T

22、oolsConfigure Platform Manager命令可打开“Platform Manager”对话框,如图7.8所示。3737图7.8 EVC环境中的QQ2440SDK3838在Visual Studio中,可从菜单ToolsOptionsDevices ToolsDevices中查看已经安装的SDK,如图7.9所示。有些读者可能注意到,在安装开发工具时,默认会安装一个称做“Standard SDK”的SDK。前面已经介绍过,由于Windows CE操作系统的特性,不可能存在“标准”的SDK。所谓Standard SDK,只不过是微软把Windows CE中最常用的一些功能取出来作

23、为一个“标准”的SDK,使用Standard SDK开发的应用程序,可在大多数Windows CE平台上运行。但是Standard SDK也并不是万能的,例如,Standard SDK不支持中文和DirectX等。3939图7.9 Visual Studio环境中的QQ2440SDK4040应用开发人员可由两种途径获得SDK:(1) 从微软或者第三方处获得SDK;(2) 通过Platform Builder导出自己的SDK。如果开发人员希望该平台可扩展,其他应用可在该平台运行,则基本原则是谁建谁就负责提供,即谁构建了该Windows CE平台,谁就应该负责提供该平台的SDK。当然,有些平台是没

24、有必要扩展的,也就没有必要为它提供SDK。典型的代表是便携式视频播放器(Portable Media Center)。41 41如果应用程序所运行的平台不是由自己构建的,而是由第三方提供的,那么第三方应该负责提供该平台上网SDK。Pocket PC和Smartphone是这类平台的典型代表。微软构建了基于Windows CE的Pocket PC和Smartphone平台,自然应该由微软提供Pocket PC和Smartphone的SDK。如果应用程序所运行的平台是由自己构建的,那么开发人员可通过Platform Builder的 导出SDK功能创建自己的SDK,被导出的SDK由头文件、库文件、

25、运行文件、平台的外延和帮助文件等组成。应用程序开发人员可以利用这个SDK去关联Microsoft embedded Visual C+ 4.0 或 Microsoft Visual Studio .NET,4242为特定平台开发应用,也可把导出的SDK发布给其他用户安装。PB、SDK和开发工具之间的关系如图7.10所示。4343图7.10 PB、SDK和开发工具之间的关系44447.3.2 代码编写和调试代码编写和调试1. 代码编写代码编写在安装好合适的SDK后,就可通过Windows CE中的开发应用程序的工具eMbedded Visual C+或Visual Studio编写应用程序了。编

26、码过程与桌面Windows应用程序开发没有太大的区别。在编码的过程中要明白两个概念:本机码和托管码。4545(1) 本机码。一般来说,使用eMbedded Visual C+开发的应用程序代码又称为本机码(Native Code)。本机码应用程序使用一套特定软件平台的应用程序开发接口(API)来开发,并且被编译成一个特定处理器(Microprocessor)的目的码(Object Code)或机器码(Machine Code)。一般情况下,本机码提供较高的效能(Performance)和最小的资源需求,但是被编译好的本机码或可执行文件(Executable)却只能在此特定软件平台和特定处理器上

27、运行。此外,开发本机码应用程序常需要应用程序开发者自行处理类似内存管理、资源管理、安全性管理等事务,而这些通常必须要由经验丰富的C+应用程序开发工程师来处理。4646(2) 托管码。利用Visual Studio.NET的Visual C#.NET或Visual Basic.NET开发出来的.NET Compact Framework应用程序代码称为托管代码(Managed Code)。托管码应用程序是通过使用一套运行时环境(Run-time Environment)的应用程序开发接口(API)来开发的。一般情况下,托管码应用程序的开发会比较简单和快速,并且可跨软件平台和处理器来运行,所以开发

28、出的托管码也能重新使用并有较高的可移植性(Portable)。4747另外,内存管理、资源管理、资源收集(Garbage Collection)、安全性管理等琐碎的工作都由运行时环境来处理,应用开发工程师无须费心处理。托管码应用程序在目标机器上运行时,通过目标机器端的实时编译器(Just-in-Time Compiler)来实时地把托管代码编译成目标机器码后在目标机器上运行。48482. 代码调试代码调试在Windows CE下调试代码比较繁琐。虽然Windows CE和Windows使用相同的可执行PE文件格式,但是Windows CE下的可执行文件是无法直接在桌面Windows中运行的(用

29、.NET Compact Framework为Windows CE生成的托管代码可直接在装有.NET Framework的Windows中运行,但这对于开发和调试没有任何意义)。因此,要调试Windows CE下的代码,有两种选择:使用模拟器(Emulator)调试或者使用Windows CE设备调试。4949图7.11 Windows Mobile 5.0模拟器5050(1) 使用模拟器调试。eMbedded Visual C+和Visual Studio都带有Windows CE的模拟器。模拟器是一个Windows应用程序,它在Windows操作系统下为Windows CE提供了虚拟的硬件

30、执行环境,使Windows CE可在Windows中作为一个Windows进程执行。图7.11所示为Windows Mobile 5.0模拟器的界面。模拟器给开发人员带来的最大好处是在一台机器上就可完成Windows CE下的软件编码与调试,而无需Windows CE硬件设备,可省去繁琐的硬件连接与昂贵的硬件设备。51 51和桌面Windows应用开发一样,可通过在代码中设置断点以及单步跟踪代码等方式进行调试。在Windows CE 5.X之前,Windows CE的模拟器都是在模拟X86 CPU上运行的。Windows CE 5.X中新增加了基于ARM CPU的模拟器。这样,如果应用程序最终

31、运行的平台是ARM,那么开发人员就可选用基于ARM的模拟器,进一步减小因为模拟器与真实设备体系结构不同造成的错误。模拟器不但可用来测试代码,还可方便地访问Windows中的文件和用来测试定制的Windows CE操作系统。使用模拟器的优点非常明显,但是模拟器毕竟只是一个虚拟的执行环境,其缺点也是显而易见的。5252模拟器只是模拟Windows CE可运行的部分硬件,因此,与红外、蓝牙、Wi-Fi、USB及IEEE 1394等硬件设备相关的应用程序无法在模拟器上运行。所以,本书仅仅在应用程序开发部分使用模拟器,其余部分都使用硬件设备。建议读者在学习Windows CE时也尽量使用真实硬件,以免产

32、生“模拟器依赖”。5353(2) 使用Windows CE设备调试。使用基于Windows CE的设备调试类似于传统的嵌入式开发调试。有了开发机和目标机的概念,PC机和Windows CE设备就分别充当开发机和目标机的角色。这里先向大家介绍一款非常有用的工具ActiveSync。它是由微软提供的并且可以让Windows CE设备和桌面Windows的PC机十分方便地进行通信连接,从而实现文件上传、远程调试等功能。可以说,ActiveSync是桌面Windows 与Windows CE之间的纽带。ActiveSync的主界面如图7.12所示。5454当看到图7.12所示窗口跳出后,可以注意到PC

33、任务栏右下角的ActiveSync变成了绿色,这说明一切准备就绪。5555图7.12 ActiveSync的主界面5656在物理层,ActiveSync可通过串口、红外、USB端口和以太网与Windows CE设备进行连接。因此,要使用ActiveSync与Windows CE设备成功连接,必须确保Windows CE设备与PC机至少有一条可用的串口、USB或以太网连接。在完成上述连接之后,就可以使用ActiveSync下载编写的应用程序和进行代码调试。只要能够在目标设备和开发机之间正确地建立连接,通过设备调试与通过模拟器调试的方法就基本一致了。57577.4.1 Windows程序设计基础程

34、序设计基础Windows程序设计是一种事件驱动的程序设计模式。在程序提供给用户的界面中有许多可操作的可视对象。用户从所有可能的操作中任意选择,被选择的操作会产生某些特定的事件,这些事件发生后的结果是向程序中的某些对象发出消息,然后这些对象调用相应的消息处理函数来完成特定的操作。7.4 Windows CE应用程序接口应用程序接口5858Windows应用程序最大的特点就是程序没有固定的流程,而只是针对某个事件处理有特定的子流程,Windows应用程序可以说是由许多这样的子流程构成的。 Windows应用程序在本质上是面向对象的。程序提供给用户界面的可视对象在程序的内部一般也看做一个对象,用户对

35、可视对象的操作通过事件驱动模式触发相应的消息处理函数。程序的运行过程就是用户的外部操作不断产生事件,这些事件又不断被处理的过程。5959图7.13 Windows程序工作原理6060Windows这种事件驱动模型的实质源于Windows的消息响应机制。在Windows应用程序中,事件产生消息,消息对应着事件。所谓事件响应,其实就是对各种消息的响应。用户要操作Windows程序,必须借助鼠标或者键盘(在Windows CE中为触摸笔、按键等)等人机交互工具。Windows系统以特定的频率捕捉各种消息,当捕捉到发往本应用程序的消息时,Windows应用程序将消息传递给相关的消息处理函数做相应的处理

36、。这种等待消息,响应消息的操作方式就是Windows特有的处理机制,称为消息处理机制。61 61在Windows系统中,使用者与系统、系统与应用程序、应用程序之间主要就是采用了这种消息响应的处理机制。Windows程序工作原理如图7.13所示。62627.4.2 Win32 API在介绍Win32 API之前,有必要了解Windows应用程序的两个概念:句柄(Handle)和Windows消息(Message)。一个句柄是指Windows使用的一个唯一的整数值,用于标识应用程序中不同的对象和同一对象的不同实例。诸如一个窗口、图标、菜单、滚动条、输出设备或者文件等均有一个对应的句柄值。Windo

37、ws应用程序利用Windows消息(Message)与其他Windows应用程序及Windows系统进行信息交换。由于Windows应用程序是消息或事件驱动的,因此Windows消息的工作机制就显得很重要了。6363Windows消息由三部分组成:消息号、字参数(wParam)和长字参数(lParam)。消息号由事先定义好的消息名标识;字参数(wParam)和长字参数(lParam)用于提供消息的附加信息,附加信息的含义和具体的消息号的值相关。在Windows中,消息往往用一个结构体MSG来表示,结构体MSG的定义如下:Typedef struct tagMSG /结构体MSG HWND hW

38、nd; UINT message; WPARAM wParem; LPARAM lParam;6464 DWORD time; POINT pt;MSG;6565其中,定义如下: hWnd:用以检索消息的窗口句柄,若此参数为null,则可检索所有驻留在消息队列中的消息; message:代表一个消息的消息值,每一个Windows消息都有一个消息值,该值由Windows.h头文件中的宏定义来标识; wParam和lParam:包含有关消息的附加信息,它随不同的消息而有所不同; time:指定消息送至队列的时间; pt:指定消息发送时,屏幕光标的位置。pt的数据类型POINT是一个结构体。6666

39、POINT的定义如下:Typedef struvt tagPOINT LONG x; /点在屏幕上的横坐标 LONG y; /点在屏幕上的纵坐标POINT;6767将系统定义的消息进行分类,前缀符号经常用于消息宏,以识别消息所属的类。系统定义的消息宏前缀如下: BM:按钮控件消息; CB:组合框控件消息; DM:默认下压式按钮控件消息; EM:编辑控件消息; LB:列表框控件消息; SBM:滚动条控件消息; WM:窗口消息。6868关于Windows中各条消息的具体定义可以参考相应的帮助文件或者程序设计参考手册。除系统定义消息外,应用程序还可以定义其自己的消息,供内部应用程序和系统内其他进程通

40、信用。不同类型的Windows消息的取值范围如表7.4所示。6969表表7.4 不同不同Windows消息类型的取值范围消息类型的取值范围7070为使用户定义的外部消息在整个系统中保持有效,应用程序可以调用函数RegisterWindowMessage注册消息。此函数保证有效消息值,并防止同一随机值被用于两个或更多进程内用户定义的外部消息而产生冲突。Windows应用程序接收以各种形式输入的消息。这些消息包括键盘的当前状态、光标位置、鼠标状态以及产生消息的时间等。0 x07FF系统监视着所有的设备并将输入的消息放入消息队列中,随后将系统队列中的输入消息复制到相应的应用程序队列中,应用程序的消息

41、循环便从消息队列中检索消息并将每一个消息发送到相应的窗口函数中。71 71在了解了句柄和Windows的概念之后,我们将进一步了解Win32 API的功能和特点。Win32 API是微软32位Windows平台的应用程序接口(Application Programming Interface)。微软所有的32位操作系统平台都支持统一的API,包括函数、结构体、消息、宏以及接口等。也就是说,所有在Win32平台上运行的应用程序都会直接或者间接地调用这些函数。正是由于Win32 API接口的良好定义,所以使用Win32 API编写的应用程序可在不同的Windows平台之间基本实现代码级的兼容。可以

42、说,Win32 API是认识Windows操作系统的一面镜子,通过它,用户可以深入系统地掌握Windows的方方面面。7272很难想象,一个程序员在没有掌握Win32 API的情况下,能编制出很好的基于Windows的应用程序来。在实际的开发流程中,可以把许多的Windows下的应用程序移植到Windows CE上,而且所需的工作量远小于重新开发这些程序。将程序移植到Windows CE的过程中要注意Win32 API和Windows CE API之间的不同,具体介绍如下: Windows CE API是Win32 API的一个子集,而且其中部分函数的功能已经精简。例如对颜色和字体的支持更加有

43、限。7373 Windows CE API具有对Windows CE的特定扩展功能,其中的一些功能,如触摸屏(Touch Screen)和通知(Notification)需要设备在硬件功能上的支持。 对异常处理的使用具有限制。虽然支持Win32的结构化异常处理,Windows CE却并不支持C+异常处理。当从PC平台移植已有的Win32应用程序到Windows CE时,主要的问题通常是找不到合适的Windows CE API来替换原有的Win32 API。应用程序需要满足Windows CE API以及目标系统功能上的限制。74747.4.3 MFCWin32 API接口基本上使用C语言描述。

44、使用C语言调用Win32 CE API是Windows下最简单、最直接的编程办法。但是随着面向对象技术,尤其是C+语言的广泛使用,Win32 API的编程模型受到了面向对象技术的冲击。为了适应Windows下面向对象程序设计技术的要求,微软推出了MFC(Microsoft Foundation Classes)。MFC是一个基于C+语言的面向对象的程序设计框架,它是微软随Visual C+一起提供的基础类库并经过优化和严格测试,封装了大量的Windows SDK函数和典型Windows应用程序的默认处理。7575用户只需要进行较少的编程即可完成开发任务,从而大幅度提高了程序开发的效率和速度。M

45、FC提供了大量的基类供程序员使用,常用的有CwinApp、CframeWnd、CMDIFrameWnd、Cview、CDC、Cdocument等。使用MFC类库的好处是:一方面,MFC提供了一个标准化的结构,这样开发人员可从一个较高的起点编程,从而节省大量的时间;另一方面,它提供了大量的代码,对程序的控制主要由MFC框架完成,而且MFC也完成了大部分的功能,可预定义或实现许多事件和消息处理等等。MFC框架可由其本身处理事件,无须依赖程序员的代码,也可调用程序员的代码来处理应用程序特定的事件。7676MFC的优越性主要体现在以下几个方面:(1) 完整地封装了Windows API函数。MFC为经

46、常使用的Windows API函数提供支持,包括窗口函数、消息、控件、菜单、对话框、GDI对象、对象链接和多文档界面等。同时,也提供了具有共性的应用程序的支持,如打印、状态条、工具条、数据支持和OLE支持等。(2) 支持多线程。所有的应用至少有一个线程,这个线程由CwinApp类的对象使用,被称为主线程。为了便于多线程编程,MFC还提供了同步对象类。(3) MFC提供了消息自动处理。MFC自动处理每个Windows消息,替代了Switch case语句。7777(4) 在同一个程序中可同时使用MFC类和Windows API调用。(5) MFC使用与Windows API相同的命名约定。用户可

47、根据类名知道类的功能。(6) 大大减少应用程序的编程量。使用MFC创建一个窗口所需的代码大约只是传统方法编程的1/3,这可以使程序员只花很少的时间与Windows打交道,把更多精力集中在开发自己的程序代码上。7878为了适应嵌入式和Windows CE的要求,Windows CE中的MFC对桌面MFC做了一定的改动。Windows CE中的MFC增加了一些Windows CE特有的类,如Windows CE中一个重要的新特性命令条(Command-bar)控制类;同时删除了对其他一些类的支持。如果应用程序是用标准MFC编写的,需要仔细检查应用程序所用的类、方法和属性,并确认它们在Windows

48、 CE MFC中是否兼容。至于MFC类库中的类,其实绝大部分是从基类CObject派生出来的,只有少部分例外。具体内容可以参考相关书籍。79797.4.4 ATL活动模板库(ATL,ActiveX Template Libray)是一套C+模板库。它是一个基于C+的框架,使用它可以大大简化组件的开发过程并提高代码的效率。ATL同微软的MFC有异曲同工之处。MFC的存在已经有十来个年头,它已经成为了占主导地位的Windows应用程序框架。然而在很多情况下,ATL在开发基于Windows的软件上已呈现出后来居上的趋势。尤其是ATL提供了实现基于COM组件内核的支持,使得原本被认为高不可攀的COM编

49、程变为现实。ATL模板类可以完成一些非常繁琐的实现细节。下面简单介绍ATL所提供的一些功能。8080 具有AppWizard工具,其负责创建起始的ATL工程。 具有Object Wizard工具,其为基本的COM组件创建代码。 对低级别的COM功能的内置式支持,如IUnknown、类工厂和自注册(Self-registration)功能。 支持微软的接口定义语言(IDL,Interface Definition Language),它提供了对自定义的Vtable接口的调度(Marshaling)支持,以及通过类型库进行描述(Self-description)的功能。 支持自动化(IDispat

50、ch)和双向接口(Dual Interfaces,也称为双重接口)。81 81 可以支持开发效率更高的ActiveX控件。 提供了对基本的视窗功能的支持。Windows CE所支持的ATL是桌面Windows中ATL的一个子集。对于ATL 的具体使用请参阅相关书籍。82827.4.5 .NET Compact Framework.NET Compact Framework是.NET Framework的子集,应用程序开发者可以使用相同和熟悉的Visual Studio.NET技术来开发Windows CE.NET装置的应用程序。Visual Studio.NET 2003(含)之后的版本支持应

51、用程序开发者在Visual Studio.NET中使用.NET Compact Framework来开发和执行。开发环境对.NET Compact Framework的支持已经由Visual Studio.NET来完成,而Windows CE.NET装置也必须支持.NET Compact Framework,以确保使用Visual C#和Visual Basic.NET程序语言开发的应用程序可在装置上执行。8383Windows CE.NET是一个简洁、可靠、实时和多任务的嵌入式操作系统。而.NET代表的是它实现(支持)了.NET的技术。Windows CE.NET版本的.NET技术,我们把它

52、称为.NET Compact Framework。顾名思义, Compact表示.NET Compact Framework是.NET Framework 的简洁版。简单地说,.NET Framework主要由两大部分组成:Common Language Runtime(公共语言运行时,CLR)和.NET Framework class library。它提供了一个新的应用程序运行平台,一个高度管理的运行平台。8484使用者所开发的.NET Framework应用程序在运行时通过.NET Framework的运行平台展现出该应用程序的功能,并且被.NET Framework的运行平台严格控制管

53、理以减少应用程序出错而导致系统不正常的状况。另外,.NET Framework也大大地简化了应用程序的开发和部署,开发出的应用程序是与硬件无关(Hardware Independent)的而且可跨机器平台执行。8585.NET Compact Framework目前有1.0和2.0两个版本。对于平台来说,Windows Mobile 2003中自带了.NET Compact Framework1.0版本,Windows Mobile 5.0附带了.NET Compact Framework2.0版本;对于开发工具来说,Visual Studio.NET 2003附带了.NET Compact

54、Framework1.0版本,Visual Studio.NET 2005附带了.NET Compact Framework 2.0版本。下面详细介绍.NET Compact Framework的两个主要组件。8686(1) Common Language Runtime(下文简称CLR)可看成是一个运行时(Runtime)或者一个代理(Agent)。它负责管理程序代码的执行、管理内存(Memory Management)、管理线程(Thread Management)、转换和类型校验(Type Checking)等,以确保系统强固、稳定和安全。所以,那些通过CLR运行的应用程序或者程序代码(

55、用.NET Compact Framework、Visual C#.NET或Visual Basic.NET开发出的应用程序)又称做“被管理的程序代码”(Managed Code);反之,那些不需通过CLR运行的应用程序或程序代码(EVC开发出的应用程序)又称做“不被管理的程序代码”(Unmanaged Code),或称做本机码或内驻码(Native Code)。8787(2) .NET Compact Framework类库。.NET Compact Framework类库是与公共语言运行时(CLR)紧密集成的可重复使用类的集合,是提供给开发者的编程接口。前面我们已经说过,.NET Comp

56、act Framework只是.NET Framework的简洁版,这里的简洁是指扩展的子集。一方面,.NET Compact Framework去掉了一些不适于嵌入式应用或者无关紧要的功能和类;另一方面,.NET Compact Framework中增加了一些特有的类库支持。要查看.NET Compact Framework是否支持.NET Framework类函数库中的某个类或者成员,可在参考技术文件中查看“Requirements”叙述的“Platforms”中是否列出“.NET Compact Framework”。8888但要注意的是,技术文件中所附的范例程序并未在.NET Comp

57、act Framework中测试过,有可能完全兼容,可以运行,也有可能需要做小部分修改才能运行。89897.4.6 接口选择原则接口选择原则Win32 API、MFC和.NET Compact Framework三种应用程序的开发选择各有优劣。根据前面介绍的内容,读者应该对本机码应用程序和托管码应用程序有初步的了解。表7.5列出了使用标准Win32 API或MFC来开发本机码与使用.NET Compact Framework来开发托管码的优缺点。对于开发者来说可以作为参考。9090表表7.5 使用使用Win32 API或或MFC来开发本机码与来开发本机码与91 91Win32是操作系统提供的应

58、用程序开发接口,可用来开发应用程序、驱动程序、控制面板程序和动态链接函数库等,并且开发出来的程序可以有最小的文件大小。因为Win32是操作系统提供的最低阶的应用程序开发接口,所以使用Win32开发应用程序需要较长的开发时间。当要开发驱动程序、控制面板程序、低阶程序代码或实时程序代码等时,Win32是唯一的选择。当开发应用程序时,除了Win32,还可以使用MFC或.NET Compact Framework。我们可以把一台Windows CE装置看成是由层次化的软件组成的:最底层是使用Win32本机码所开发出的驱动程序;9292最底层上面是由许多个类似数据解析(Data-analysis)、DL

59、L和COM组件等的中介层(Middle-tier)程序组成的中间层,该层各部分可用Win32本机码、MFC或ATL来开发;最上层则是提供用户接口和图形窗口接口的应用程序,这些用户应用程序除了使用Win32、MFC和ATL来开发外,还可以使用.NET Compact Framework来开发。9393在掌握了以上Windows CE应用程序的开发工具和方法后,剩下的就是一些对细节的把握。在这里要提醒读者一些在Windows CE下开发应用程序和一般桌面Windows系统开发应用程序的不同之处和注意事项,如表7.6所示。7.5 开发开发Windows CE应用程序的应用程序的注意事项注意事项9494表表7.6 开发应用程序的不同之处及注意事项开发应用程序的不同之处及注意事项9595除了上述强调的部分外,使用eMbedded Visual C+为Win

温馨提示

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

评论

0/150

提交评论