Windows CE WIN32 编程示例

MicrosoftWindows CE是紧凑的、高效的和可升级的操作系统,它被广泛的应用在各种嵌入式式的产品中,从手持电脑到专门的工业控制器和消费用电子产品中。Windows CE已经通过了其自身的能力证明:它能够满足32位嵌入式式程序开发的需求。同样重要的是: Windows CE使嵌入式式系统的设计者得以充分利用Microsoft的32位基于Windows的开发工具的全部的函数。

嵌入式的应用软件选择Windows CE的首要原因之一是Microsoft Win32应用编程接口(API)的广泛应用。从运行在Microsoft WindowsNT操作系统下的高端服务器到最小的台式机和内嵌式的应用中,WIN32 API几乎是所有为面向Windows开发32位应用软件的内核。

本文的目的是向那些开发基于Windows CE的新的嵌入式式系统的开发者介绍WIN32 事件驱动编写程序。 本文将: 

概述32位Windows操作系统和WIN32编程模型。 
介绍线程,事件和消息是如何操作的。 
给出Win32如何管理Windows CE的内存。 
解释 Win32意外操作的概念。 
比较同步和不同步设备的界面的不同的方法。 
总结明确定义的API的优位。 
本文并不是刻意要完全做Win32的编程指南,而是要介绍用Win32作为嵌入式式应用程序的开发工具。

简介

对于全世界的成千上万的程序开发者来说,Win32程序模式很常见。WIN32是台式机或企业广泛应用的强大目标,而且随着Windows CE的涌现,它也成了嵌入式式系统的理想的程序界面形式。WIN32为Windows CE操作系统提供了一致的,文档完备的并且函数强大的程序界面。

用WIN32在Windows CE平台开发的程序同其他的WIN32程序差不多;这意味着程序开发者在开发新的面向Windows CE操作系统的应用程序的时候,能够应用这些大量的WIN32的程序资源、第三代工具和外部的专门的技术。具有WIN32编程经验的程序员会发现创建新的(维护已有的)面向Windows CE设备(如手持电脑)的应用程序远比创建类似的面向特殊的平台或其他应用不广的嵌入式式的操作系统的应用程序简单。

嵌入式式系统的设计者们很快意识到Windows CE的强大,并且以惊人的快速使这个操作系统与它们的新产品一体化。可是,许多嵌入式式软件的开发者对Windows的事件驱动程序的一般技术不熟悉。对于这些软件开发者来说,在他们开始他们第一次的基于Windows CE的项目之前,了解一些WIN32的基础的知识是有好处的。

什么是WIN32?

“WIN32”表示对于所有的Microsoft 32位平台的一种普通的应用编程接口(API)。这些平台通常指: 

Windows 95, Windows 98 
Windows NT 
Windows CE 
本文我们主要关注Windows CE操作系统,可是需要弄清楚的是大多数 Win32的应用编程接口对上面所有三种平台都适用。这种同用的应用编程接口的优位有很多:容易登录到应用程序中,有大量的已有程序的知识,范例和第三代软件的资源。

平台的差别

WIN32的应用编程接口定义了你作为一个程序员有用的Windows平台。WIN32应用编程接口的目的是提供了一个常用的界面的设置,可是虚拟,不同的平台由于不同的特性及硬件的约束,其应用编程接口也不同。WIN32平台家族的一些成员支持全部的WIN32的应用编程接口(下简称API),而其他的只支持一部分的API。 为紧凑的、嵌入式式的应用软件和小型设备而设计的Windows CE,WIN32的API最受限制。尽管如此, Windows CE 的API也是足够完善的,能够处理实际的大量的高级的嵌入式式应用程序。

WIN32与Microsoft基本类库(MFC)

用WIN32界面设计并不是创建32位基于 Windows的应用程序的唯一的途径。另一种重要的途径是可在WIN32与 Microsoft Visual C++开发环境使用的Microsoft基本类库(MFC)。MFC为许多(不是所有)的WIN32的API进行了高度的封装(图1)。通常,MFC提供了代表重要的WINDOWS的用户界面对象的类,象窗口,对话框,画刷,画笔,和字体。MFC也为没有任何用户界面要求的嵌入式式应用软件提供了相应的类。MFC类的成员函数调用WIN32API的函数,可以使复杂的应用程序的设计巧妙的简化。

作为WIN32的程序员,你可以自由的选取使用C或C++和WIN32 API, 或者用C++与MFC。VISUAL C++开发系统对于所有的,包括 Windows CE 的WIN32的目标操作系统都支持以上的两种开发系统。

本文直接介绍WIN32 API。应用 Windows CE下的MFC的详细的消息,参阅 Windows CE SDK文档。

WIN32程序模型

WIN32是超越所有32位WINDOWS平台的常用和一致的(尽管并不全部相同)API。为了对WIN32 API有一个透彻的了解,以便高效的使用它的函数,了解一些底层操作系统的基础十分重要。本节总结了32位操作系统和 Win32 API的最重要的概念,为你更深入的学习提供基础。要得到更多更详细的关于32位WINDOWS的体系结构、 Win32 API、以及其他的程序设计的主题,你可以读一本关于那个主题出版的书。Microsoft出版社能提供一些这样的书籍;在本文的最后,列着部分这些书的条目。

Windows CE的内核和 Win32 API

那些对WINDOWS CE的人可能会有一个错觉,认为它仅仅是现有的操作系统(如WINDOWS95)降级版。但事实上Windows CE是以小型的、高度用户化的面向嵌入式式应用程序的操作系统开发起来的。在WINDOWS CE排除(或代替)了一些基于WINDOWS CE的应用软件所不需要的操作系统特性的同时,它的内核也具有大量的其他Microsoft 32位的操作系统的最精华的东西。例如在Windows NT下, 所有的在Windows CE下运行所应用软件都运行在有优先权的多任务处理环境下,在被全保护的内存空间里。还有,象 Windows NT一样,Windows CE支持本地统一的字符编码标准码字符串,使它更适于国际推广。可是,不象其他的32位WINDOWS平台,, Windows CE是十分紧凑和用户化的,仅仅占用小于200K的内存。

Windows CE的WIN32 API比其他的32位的Windows操作系统的WIN32 API要小;它只包括大约相当于Windows NT的半数的API。但是 Windows CE的WIN32 API也有其他系统所没有的特性。例如:通知API,它能够操作系统的层次,而不是在运行的应用程序的层次上处理通知事件(如时钟)。触屏的API和对Windows CE的数据库的内置的支持是其他的操作系统所没有的。触屏的API使用于触觉敏感显示器的屏幕校正和用户交互的管理容易实现,而数据库的API提供了快速简捷的访问紧凑的、一般用途的数据库的工具。另一个关于Windows CE的鲜为人知的方面是它的高度的模块化;嵌入式式系统开发者(用Microsoft Windows CE内含的面向Visual C++的软件包)能够创建一个对于它们的独特的硬件平台和应用软件用户化了的Windows CE的版本。

Windows CE操作系统为设计提供了全新的设计环境。Windows CE的开发者几乎不需要支持原有的应用程序或设备,所以操作系统在设计时可以考虑到应用一些最新的思想和应用程序,并且应用最先进的嵌入式式的32位微处理器产品作为它的硬件目标平台。

这对于一个使用Windows CE平台的WIN32 API的用户来说意味着什么呢?这意味着对于现代的、32位的嵌入式式系统,它是一种更简单的API,更加优化的目标操作系统。下面,我们将研究一些重要 的WIN32 API和Windows CE操作系统的内部的内容。

程序和线索

了解WIN32 API和Windows CE操作系统的底层内容的第一步就是了解多任务和多线索索应用程序是如何组织的。WIN32术语中,程序被定义成一个正在运行中的程序实例。象其他的32位Windows 平台一样,Windows CE是一个多任务的操作系统,在一个运行中的程序里,它支持执行多个线索所。

对于嵌入式式的应用程序,Windows CE的多线索索执行能力是它函数的重要的体现。这样就使WIN32嵌入式式程序开发者优先考虑WIN32的线索索的创立与同步。

WIN32的线索索的处理同其他常用的嵌入式式的操作系统是有区别的。不象Unix或其派生的系统,32位Windows平台从一开始设计就支持多线索索应用程序。线索索管理(时序安排,同步和资源管理)由内核来完成,程序开发者利用函数装入内核(通过WIN32 API访问)来建立和管理他们应用程序中的线索索。

例如,如果一个嵌入式式应用程序必须监视多个输入设备并且在监视到一个或多个设备上不同步发生的事件的时候要作出恰当的反映。更进一步,如果这样一个程序也需要更新一些共享的资源(如全局数据结构,磁盘上的文件,或其他设备)来作为与相关设备事件的反映。象这样的一个程序需要一个可靠的线索索管理系统。这恰恰是WIN32 API能够提供的函数:多个线索索能够快捷并且容易的用WIN32 API线索索创建界面建立;同步线索索(多个线索索同时访问一个数据)可以通过不同的方式完成,包括关键的段,有名称和没有名称事件,以及互斥的目标。 

Windows CE 被设计成在执行这些同步时占用最少的程序资源。这位对那些函数不强大的开发者来说十分重要;因为内核来负责线索索的管理,不需要使用另外的处理器来循环检测程序或线索索完成,以及执行其他的无用的应用程序层次上的线索索管理。内核已构建好如何管理若干的线索索并且使程序高效地进行的程序。

对于包括若干个程序的应用程序,WIN32 向用于线索索、程序管理和同步提供了一套的完备的处理方法。这些线索索管理特性非常适于嵌入式式应用程序软件,并且对Windows CE开发者是容易得到的。 

消息

在32位windows平台上运行的程序更专门化,程序的线索依赖于消息来初始化程序,控制系统资源并且与操作系统和用户通信。 windows消息有各种各样来源 ,包括操作系统,用户活动诸如键盘输入、鼠标、触到屏幕,以及其它运行的程序或者线索。

当消息被送到线索时,这条消息被放置在消息队列中等待最后处理(图3)。每一条线索拥有完全不独立于其它线索所拥有的消息队列的消息队列。线索一般有不断运行的消息循环,恢复和处理消息。当队列地没有消息,并且线索不从事于其它任何活动,系统挂起线索,以节省中央控制器资源。

消息也能用于控制目的,初始化你的应用程序中各种类型的程序,并且他们能利用消息参数传递数据。例如,线索可能收到触屏被激活的消息,消息参数可以表明X和Y为用户行动的坐标。 在另一种类型的消息中,参数可以包括指针或者指向数据结构、窗口或其他对象的句柄。

中断处理 

作为一嵌入式的的软件开发者,你可能最关心windows CE消息的处理规则是如何影响你的外部系统接口的时序的。windows CE通过细心设计和准确的衡量以保证其中断时序以及其它相关的特位与嵌入式式的系统设计是适用的。

嵌入式应用程序经常有时间临界的设备接口需要,需要发现并且在一最小的规定的时间之内对设备和系统事件作出反应。 为了支持这样应用程序, windows CE包括高度优化中断传送,优先级和服务系统。

在windows CE内核中 ,中断处理分成两个明显的部分:中断服务程序(ISR )以及中断服务线索(IST )。这个系统的目的是使ISR 尽可能小和快。在硬件的层次上,每一中断要求(IRQ )线索路与一特定的软件ISR联系。当被触发时,给定的ISR除了通知内核IST的位置外,还做少量的工作。一旦IST 被初始化(尽管没必要完成),系统便准备好接受下一中断并且处理下一中断。 

每一个中断有一个优先级与他们相联系。 windows CE为确定的线索时时序,利用基于优先级的时间片段算法。与每一ISR 被联系的IST 是正常的线索,因此为IST设置优先级以满足应用程序的时序需要是应用程序软件开发者的责任。

这种将ISR 和IST在中断程序中分开处理最终结果是,典型的中断等待时间被大大地减少了,在中断程序中发生不可接受的延迟的可能性也大大减少。此外, 嵌入式式软件包 和windows CE内核的特性使有可能按习惯定制中断时序和优先级,以满足特定应用程序的需要。 

Windows CE和其使用的时间临界、实时应用程序在另一篇文章中包括比本文更详细的内容,文章名为《 Real-time Systems with Microsoft Windows CE》。

内存管理

WIN32 API为向开发者提供了一套完备的和一致的接口。 当开发绝大部分应用程序的时候,软件开发者不需要考虑特定内存结构。 然而对于许多嵌入式应用程序,特别是那些有严格的内存资源约束或者临界时序的要求的,对内存被管理的方法有好的理解是重要的。 

Windows的内存的一般结构对于不同的32 位Windows平台是不同的,并且特殊的细节结构在同一32 位Windows操作系统下不同的处理机之间也不同。 (例如,Windows NT的内存结构在X86 平台上与在DEC Alpha 平台上的用法十分不同 。) 对于这段的讨论,我们将专门集中在Windows CE操作系统的部分中进行。

Windows CE的存储结构

像其它的32 位Windows平台一样,Windows CE操作系统也有虚拟内存的特性。内存总在某一时间被分配给应用程序一页,页的大小由系统设计者决定(并在操作系统为目标硬件平台创建时被指定)。例如 在手持电脑,内存页大小是典型的1KB 或者4KB 。 

在初始化期间(导入),Windows CE创造一个独立的被所有程序共享的4GB 虚拟地址空间。当程序引用一个虚拟的地址时,它被内核记录在物理的内存上。 这使得应用程序软件开发者不必去考虑目标系统内存的物理的布局。虽然所有程序共享单一地址空间,应用程序仍然可避免相互误用。Windows CE 通过改变每页的保护来保护程序内存,而不是分配给每一程序不同地址空间。 作为应用程序开发者,你可能不会太在乎目标系统的内存的物理的结构。 内存可以全部是随机存取内存,或者它可能包括闪存卡或者硬盘驱动器。Windows CE操作系统为你管理内存资源,同时WIN32 API 向你提供必要的分配、使用和释放的内存的接口。 

然而,作为一个嵌入式的系统的设计者,你将需要细心考虑将在你新的硬件平台上执行的应用程序的内存需要,并且全面考虑成本、速度和可靠性,平衡各种目标的冲突。 如果你为使用Windows CE开发一个新的硬件平台 ,Windows CE的面向Visual C++ 的嵌入式软件包包括资源可以帮助你做出这些决策,并且从而构成操作系统。 

无论你的系统内存的配置如何,ROM(只读内存)将占用十分重要的地位。不同于其它的32位Windows操作系统,Windows CE操作系统的代码在只读内存中,并且在那个只读内存中原地执行。 依据你的产品需要,你也能选择在只读内存中放置应用程序代码。 例如,Pocket Word,Pocket Excel和其它应用程序程序,包括在手持电脑只读内存中被提供的。 

存储在ROM中的程序组在Windows CE下当地执行,所以嵌入式系统的设计者能够只占用很少的RAM用于堆栈存储的需要。相应地,你的嵌入式应用程序可以利用RAM既作为程序的内存又可作临时存储空间。

为了进一步的增加应用程序软件的性能, Windows CE采用按需求将内存分叶;操作系统仅仅需要解压缩并且装入基于RAM的一小部分程序准备执行。ROM和 基于RAM的程序的灵活性与速度意味着基于Windows CE的设备能够被构造成各种内存结构形式。 

手持电脑的内存结构

典型的Windows CE的硬件平台的内存结构是与基于 Windows系统的台式电脑的内存结构十分不同的。 为了知道内存通常如何在Windows中被处理的 ,考查基于Windows CE的最普通的代表性的设备-手持电脑,是很有用的。 

在手持电脑中,RAM被分割成两个主要的部分:存储内存和程序内存。 向两部分分配的RAM的量能被手持电脑用户修改(在限制范围内)。 这个RAM的划分图如图4所示。 

在手持电脑中的存储内存类似于台式电脑的硬盘RAM。 它被用来存储数据和非系统应用程序。它的三段中每一段被不同的一套WIN32 API 访问函数: 

Windows CE系统寄存器类似于Windows NT和Windows 95的操作系统的寄存器。你能利用WIN32 寄存器函数来操纵寄存器中键和数值。 
被用户安装的应用程序和数据在一般文件存储段中。Windows CE文件系统API 是标准WIN32 文件系统的子集函数。 
对于数据库应用程序,由Windows CE 数据库API来存储被管理存储。这API 对Windows CE是唯一的 ,并且在其它的WIN32 平台中没有。 
程序内存被用于系统和非系统程序的堆栈存储。 非系统应用程序从存储内存(或者或许PC卡)被取得,非压缩的并且被装入要执行程序内存中。 

意外情况处理

的意外情况处理是强大的编程技术,相应一套的WIN32 API 起函数能容易的发现未预料到的错误状况,并且使之恢复。结构化的意外情况处理,允许危险的段的代码可能由于硬件资源的问题、设备的冲突和微小的编码错误而导致失败,以使这部分程序与其余的应用程序分开。这保护了应用程序,使之免于过早的终止或者产生敏感的系统问题。 

结构化的意外情况处理包括定义一系列声明作为保护,并且为第一套的声明定义了另一个套声明作为意外情况句柄。 意外情况句柄定义了一个或多个声明来保障系统的运行,而不管保护声明的现有的状态。

在大多数32 位Windows平台上应用WIN32 API 的程序员在运用意外情况句柄的时候通常有两种选择,用C或 C++ 编写应用程序,并且利用WIN32提供的处理意外情况的宏,或者利用C++ 编写应用程序,并且使用C++ 语言定义的意外情况处理函数。 

对于这种程序的编写,Windows CE的开发者因无法访问C++的(面向Windows CE的Visual C++ 目前还不支持意外情况处理,所以必须使用WIN32 API的意外情况处理宏。 

为了应用WIN32意外情况处理,你将使用一套在WIN32 API 中被定义的宏。 下面一段代码显示其基本概念:

__try { 

// The statements in here have a possibility of failure 

// and so are guarded. 



__finally { 

// This is the exception handler. This code will execute 

// after the guarded statements, no matter what happened 

// in the guarded block of code above. 



// This code will execute normally if the program flow allows 

// it (no goto, exit, etc.) 

__try 以及__finally 宏产生了使用意外情况句柄的所必要的底层代码。 

意外情况的处理对诸如在嵌入式的应用程序中的那些普通的多线程序是有用的。WIN32结构化意外情况处理宏 是一种容易并且强大的保护应用程序使之免受未预料到的失败的方法。 

设备处理

有无数硬件设备(外围设备)与应用Windows的平台(Windows NT以及 Windows 95)台式机是兼容的,并且每一年都有更多的东西在市场上涌现。而Windows CE的平台,通常不支持台式计算机支持的设备的很多品种的外围硬件。 然而,为一嵌入式的的系统创造可靠的设备接口在嵌入式的程序设计的过程中,是比较富有挑战性的部分。 这部分地因为典型的嵌入式的系统接口的时序与其它可操作性的需要远比台式电脑计算系统和应用程序的更难。 

幸运地,WIN32 API 提供了一套丰富使设备接口方法,使得设备接口程序写起来更容易并适合于特定嵌入式的系统的需要。 

WIN32 API是如何帮助的 WIN32 API在你的硬件平台为你提供一套一致的基于流的接口。 为了使用设备,你首先利用适合于设备类型的函数打开它。 对于大多数设备,你利用的函数是在下列例子中的CreateFile 函数:

HANDLE hPort = CreateFile("COM1"); // Open the serial port

CreateFile函数打开规定的设备(串口)并且返回用于以后在该种设备上的操作(例如读和写)的句柄。 各种各样函数的(包括ReadFile ,WriteFile ,LockFile 和其他)接受这个句柄为参数,并且允许你(例如)读写数据,检查设备状态,并且将从其它程序的存取被锁住的设备或者文件列入清单。 文件输入输出操作被处理成与其它设备类型利用同样的API 函数,并且在文件之内包括随机的访问的函数。 被若干程序或线索同时访问的设备和文件可以分区域地利用LockFile 函数锁定。 

在你的应用程序已完成设备或者文件之后,它将调用CloseFile 函数关闭设备,并且进行必要的清除设备的工作。 

同步和异步的设备的处理

嵌入式系统的经常有关键的设备有时序需要。 对于这个理由,对底层的操作系统的软件接口必须能够在软件层次上管理同时(或者几乎同时)的系统中不同类型的设备的事件。 WIN32 API 支持对设备的同步和异步的访问,并且用复杂的设备接口设计。

同步的接口是那些在软件需要从设备得到动作的要求,然后等候结果。在同步的设备接口中,最常用的是前面已经提到的ReadFile 以及WriteFile函数。当在同步I/O中使用的时候,不论你与磁盘上的文件、并口或是串口、一个通道或其它类型的设备接口时,都是公用的并且是兼容的。

异步的接口是那些设备要求应用程序为之服务的接口。一个异步的设备的好的例子是键盘。适当和适时的处理异步事件,对于许多嵌入式应用程序是至关紧要的。幸运的是,为Windows CE编写的设备驱动程序能支持同时的多线索访问驱动器。这大大地简化异步输入设备的处理。 

你所访问的给定的设备的方法,取决于那个设备的特性和你开发的特定的应用程序的要求。如果你在基于你的Windows CE的硬件平台上创建一个全新的设备(和设备驱动程序),你可以既从你的硬件设备和驱动器的层次,又可以从应用程序的层次有许多选择。

定制设备和WIN32

尽管嵌入式系统可以支持较小数量的设备,嵌入式系统能形成唯一的和挑战型的设备接口问题。当你开发一个新的硬件平台并且它支持输入输出设备,在模你设计的不同层次上,你将不得不作出决策和折衷方案。例如,除非你只使用通常的off-the-shelf硬件,你必然套写用户设备驱动程序支持你的新外围设备。 你也能需要配置你的Windows CE来包含一些设备处理必要的组件。同时从应用程序的层次,为满足新的设备的需要,你将需要写接口代码。在有如此多变量的情况下,你如何保持你的设备的一定程度的一致行呢?答案就在WIN32 API 中。在WIN32 API环境下,写你的目标驱动程序,你有理由自信的认为那些新设备的接口的应用程序开发者能够创造可信的,可检验和可维护的基本代码。Windows CE设备驱动程序开发工具包,或者简称DDK ,提供了如何创造WIN32功能强大的设备驱动程序信息和范例。

设备的类型

Windows CE支持两种基本类型的设备驱动程序,内置固化的驱动程序和可安装的驱动程序。 如同名字所暗示的,内置固化的驱动程序是被指定用于一个给定的Windows CE的硬件平台的设备。Windows CE的嵌入式系统设计者有责任提供一个内置固化的驱动程序来驱动系统所包括的设备。例如,许多Windows CE平台有一个LCD 触摸屏。这些平台的制造厂为他们的设备提供设备驱动程序,使此硬件可以用于Windows CE操作系统。在完备的系统中,这些内置固化的驱动程序位于Windows CE只读内存中内核的周围。 

可安装的设备驱动程序是被设定为为了任何与Windows CE 硬件平台临时连接的外围的设备。这个类型的设备包括:调制解调器,打印机,数字的照相机,PC卡,以及任何数量的其它外部的设备。 可安装的设备驱动程序可能位于只读内存中,但是更典型与临时性的设备的接口的应用程序软件一同装载。 

总结

本文已为概略地介绍了面向Windows CE的WIN32 API,其目的是为了突出这种被广广泛应用的并且十分重要的API的一般的特点和优点。有许多其它的细节你需要在第一次使用Windows CE嵌入式产品之前来学习掌握;幸运的是,有很多的WIN32 API 的信息的资源。 
这些资源包括Microsoft开发网络(MSDN ),文章(诸如本文)和报纸,以及大量出版的书。



在世界范围WIN32 API 的广泛应用(其用户今天已得到成千上万),其众多的用户基础保证你将不会在你嵌入式的系统中编制的废弃的过时的程序(至少在软件层次上不会被废弃),并且你将机会访问已存在的大量的信息。 

面向Windows CE的 WIN32 API使嵌入式的系统设计具有功能强大的技术。它通过提供一套丰富的、协调的、具有良好的文献支持界面,允许你访问使用Windows CE操作系统的高级的特性。其结果是开发快速,更灵活的硬件和软件的选择,以及更以及更强壮的最终产品。

目录 第一部分 Windows编程基础 第1章 HelloWindowsCE 1.1 WindowsCE标准Windows的差别 1.1.1 WindowsCE和标准Windows的差别 1.1.2 资源有限的WindowsCE设备 1.1.3 Unicode编码 1.1.4 组件化设计 1.1.5 Win32子集 1.2 仍然是Windows编程 1.3 第一个WindowsCE应用程序 1.3.1 创建第一个WindowsCE应用程序 1.3.2 运行程序 1.3.3 出了什么问题 1.4 Hello2程序 1.5 剖析窗口应用程序 1.5.1 窗口 1.5.2 窗口类 1.5.3 窗口过程 1.5.4 消息的生命期 1.5.5 注册窗口 1.5.6 创建窗口 1.5.7 消息循环 1.5.8 窗口过程 1.6 HelloCE 1.7 运行HelloCE 第2章 在屏幕上绘图 2.1 绘图基础 2.1.1 合法和非法区域 2.1.2 设备上下文 2.2 文本输出 2.2.1 设备上下文属性 2.2.2 TextDemo示例程序 2.2.3 字体 2.2.4 未完成的任务 2.3 位图 2.3.1 设备相关位图 2.3.2 设备无关位图 2.3.3 DIB区域 2.3.4 绘制位图 2.3.5 AlphaBlending 2.4 线和形体 2.4.1 线 2.4.2 形体 2.4.3 填充函数 2.4.4 Shapes示例程序 第3章 输入:键盘、鼠标和触摸屏 3.1 键盘 3.1.1 输入焦点 3.1.2 键盘消息 3.1.3 键盘函数 3.1.4 KeyTrac示例程序 3.2 鼠标和触摸屏 3.2.1 鼠标消息 3.2.2 使用触摸屏 3.2.3 TicTacl示例程序 第4章 窗口、控件和菜单 4.1 子窗口 4.2 窗口管理函数 4.2.1 枚举窗口 4.2.2 寻找窗口 4.2.3 移动窗口 4.2.4 编辑窗口结构的内容 4.3 窗口控件 4.3.1 使用控件工作 4.3.2 按钮控件 4.3.3 编辑控件 4.3.4 列表框控件 4.3.5 组合框控件 4.3.6 静态文本控件 4.3.7 滚动条控件 4.3.8 控件和颜色 4.4 菜单 4.5 资源 4.5.1 资源脚本 4.5.2 图标 4.5.3 加速键 4.5.4 位图 4.5.5 字符串 4.6 DOIView示例程序 第5章 通用控件与WindowsCE 5.1 通用控件编程 5.2 通用控件 5.2.1 命令栏 5.2.2 其他菜单控件 5.2.3 日历控件 5.2.4 时间日期选择器控件 5.2.5 列表视图控件 5.2.6 CapEdit控件 5.3 其他一些通用控件 5.4 不支持的通用控件 第6章 对话框和属性表 6.1 对话框 6.1.1 对话框资源模板 6.1.2 创建对话框 6.1.3 对话框过程 6.1.4 非模态的对话框 6.1.5 属性表 6.1.6 通用对话框 6.2 DlgDemo范例程序 第二部分WindOWSCE编程 第7章 内存管理 7.1 内存基础知识 7.1.1 关于RAM 7.1.2 关于ROM 7.1.3 关于虚拟内存 7.1.4 应用程序的地址空间 7.2 不同类型的内存分配 7.2.1 虚拟内存 7.2.2 堆 7.2.3 本地堆 7.2.4 独立堆 7.2.5 栈 7.2.6 静态数据 7.2.7 字符串资源 7.2.8 选择适当的内存类型 7.2.9 管理低内存状态 第8章 模块、进程和线程 8.1 模块 8.2 进程 8.2.1 创建进程 8.2.2 终止进程 8.2.3 其他进程 8.3 线程 8.3.1 系统调度器 8.3.2 创建线程 8.3.3 设置和查询线程优先级 8.3.4 设置线程时间片 8.3.5 挂起和恢复线程 8.4 纤程 8.5 线程本地存储 8.6 同步 8.6.1 事件 8.6.2 等待 8.6.3 信号量 8.6.4 互斥量 8.6.5 复制同步旬柄 8.6.6 临界区 8.6.7 互锁变量访问 8.7 进程间通信 8.7.1 查找其他进程 8.7.2 WM-COPYDATA 8.7.3 命名内存映射对象 8.7.4 点对点消息队列 8.7.5 使用文件和数据库通信 8.8 XTalk示例程序 8.9 异常处理 8.9.1 C++异常处理 8.9.2 Win32异常处理 第9章 WindLOWSCE文件系统 9.1 WindowsCE文件系统API 9.1.1 标准文件VO 9.1.2 内存映射文件 9.1.3 文件系统浏览 9.2 存储处理 9.2.1 对象存储 9.2.2 使用文件API来访问卷 9.2.3 存储管理器 第10章 注册表 10.1 注册表组织 l0.2 注册表API l0.2.1 打开和创建主键 10.2.2 读取注册表值 10.2.3 写人注册表值 10.2.4 删除注册表主键和值 10.2.5 枚举注册表主键 l0.2.6 刷新注册表主键 10.2.7 注册表改动通知 10.2.8 RegView示例程序 第11章 WindowsCE数据库 11.1 两种数据库 11.2 基本概念 11.3 数据库.API 第12章 通知 12.1 用户通知 12.2 计时器事件通知 12.3 系统事件通知 12.4 NoteDemo示例程序 12.5 查询已设定的通知 12.6 气泡通知 12.6.1 添加气泡通知 12.6.2 修改气泡通知 12.6.3 删除气泡通知 第三部分高级WindOWSCE 第13章 windOWSCE网络 13.1 Windows网络支持 13.1.1 WNet函数 13.1.2 ListNet示例程序 13.2 TCP/IP编程 13.2.1 套接字编程 13.2.2 阻塞套接字与非阻塞套接字 第14章 设备间通信 14.1 红外通信 14.1.1 红外基础 14.1.2 设备发现 14.1.3 发布红外服务 14.1.4 查询和设置红外套接字选项 14.1.5 MySquirt示例程序 14.2 蓝牙 14.2.1 蓝牙协议栈 14.2.2 蓝牙发现 14.2.3 发布一个服务 14.2.4 通过WinSock进行蓝牙通信 14.2.5 通过虚拟COM端口进行蓝牙通信 14.2.6 BtSquirt示例程序 第15章 系统程序设计 15.1 WindowsCE的内存体系结构 15.1.1 应用程序的地址空间 15.1.2 内核态的地址空间 15.2 编写跨平台WindowsCE应用程序 15.2.1 平台与操作系统版本 15.2.2 编译时的版本确定 15.2.3 显式链接 15.2.4 运行时的版本检测 15.3 电源管理 15.3.1 关机的含义 15.3.2 查询电源状态 15.3.3 电源管理器 15.3.4 不使用电源管理器来管理电源 第16章 串行通信 16.1 基本串行通信 16.1.1 打开和关闭串行端口 16.1.2 读写串行端口 16.1.3 异步串行I/O 16.1.4 配置串行端口 16.1.5 设置端口的超时值 16.1.6 查询串行驱动程序的能力 16.1.7 控制串行端口 16.1.8 清除错误并查询状态 16.1.9 保持活动状态 16.2 CeChat示例程序 第17章 设备驱动程序和服务 17.1 驱动程序基础 17.1.1 驱动程序的名称 17.1.2 设备驱动加载过程 17.1.3 枚举活动的驱动? 17.1.4 读写设备驱动 17.2 编写WindowsCE流式设备驱动 17.2.1 流式驱动的入口函数 17.2.2 缓冲区管理 17.2.3 驱动程序接口类 17.2.4 设备驱动程序的电源管理 17.3 设备驱动程序的构建 17.3.1 DebugZone 17.3.2 Gentle驱动程序示例 17.4 服务 17.4.1 服务的体系结构 17.4.2 服务的生命周期 17.4.3 应用程序对服务的控制 17.4.4 服务DLL的人口函数 17.4.5 服务的IOCTL命令 17.4.6 超级服务 17.4.7 Services.exe的命令行 17.4.8 TickSrv示例服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值