VisualC++第5章Windows应用程序编程接口教学要点本章内容主要包括API的概念及分类,从API的使用看操作系统所提供的服务,操作系统内核中的文件操作API的使用,网络服务API函数的使用,利用图形设备接口API编写图形用户界面程序的方法。要求了解API的分类及其对应的磁盘上的物理文件.DLL的名称、网络服务API的含义和网络编程的一些基本概念、进程概念及建立新进程的方法、WM_PAINT消息含义。握握API概念和其与操作系统提供的程序员接口的关系、内核中文件操作API的调用,熟悉API编写图形用户界面程序的步骤,熟练掌握API编写的图形用户界面程序的主要组成模块及含义。VisualC++第5章目录5.1API概述5.2内核服务API函数的使用5.3网络接口服务5.4Win32API编写图形界面程序5.5图形设备接口与用户接口服务习题本章以一些API设计的控制台程序和具有图形界面的Win32程序为例,阐述了利用API函数开发程序的过程,重点在于理解操作系统所提供的各种服务以及程序员如何进行调用。VisualC++5.1API概述5.1.1关于WindowsAPI编程模式5.1.2API简介5.1.3Windows核心——三个动态链接库5.1.4WindowsAPI分类*5.1.5操作系统的认识VisualC++WindowsAPI编程是一种原始的开发Windows应用程序模式,它主要使用的是C语言、少量的C++通用类及“原始”的Windows应用程序编程接口API(ApplicationProgrammingInterface)。这些函数都是比较底层的函数,其地位大致相当于字符界面环境下C语言的标准库函数,只不过其运行环境为Windows的图形界面环境。本篇的后多半部分虽然采用的是相对比较简单的MFC编程,但使用底层的API函数编写程序可以看到许多MFC编程看不到的东西,从而对Windows的内部运作有更深入的了解。进行API编程,要求用户对Windows环境比较熟悉,并且熟悉C语言。在API编程中用到大量的有关操作系统的结构体变量和控制操作系统的函数,当在使用API函数遇到问题时,可以随时查阅Windows的API文档,它位于MSDN的PlatformSDK部分。5.1.1关于WindowsAPI编程模式VisualC++Windows操作系统向程序员提供了可以实现开启窗口、绘制图形,使用系统各种设备等的一组函数服务,称之为ApplicationProgrammingInterface(应用程序编程接口),即API函数。利用VC进行Windows应用程序的开发,除了用到各种.h头文件中的库函数及数据结构外,还需要使用WindowsSDK(SoftwareDevelopmentKit,软件开发工具包)提供的使用于Windows应用程序的特殊库函数和数据结构、语句、文件结构。所有这些内容组成了Windows应用程序设计接口API。使用Win32API,应用程序可以充分挖掘出Windows32位操作系统的潜力,Microsoft的所有32位平台都支持统一的API,包括函数、结构、消息、宏及接口。使用Win32API,不但可以开发出在各种平台上都能运行的应用程序,而且还可以充分利用每个平台上特有的功能和属性。5.1.2API简介VisualC++5.1.3Windows核心——三个动态链接库Windows操作系统核心有三个动态链接库(Kernel32.dll,User32.dll,Gdi32.dll),这些动态链接库构成了Win32API函数。1.Windows内核库(Kernel32.dll)内核库中的函数用于处理操作系统功能的所有核心工作,例如多任务管理、内存管理等。另外内核库还管理系统注册表。2.Windows用户界面管理库(User32.dll)用户界面管理库包括了Windows管理、菜单、光标、定时器和通信等有关的函数。在Windows中,窗口的标识被称为“句柄”。3.Windows图形设备界面库(Gdi32.dll)图形设备界面库提供了用于管理系统支持的所有图形设备函数,包括屏幕、打印机等设备的管理。GDI库中的函数为应用程序提供与设备无关的绘图内容。应用程序中通过GDI库中的函数绘图,不是直接面向硬件操作,而是通过“设备描述表”来进行操作,它通过句柄hDC来跟踪。Windows三个核心库中的API函数的原型声名在windows.h中有说明,这就是我们在编写Win32应用程序时要在程序开头放#include“windows.h”语句的原因。VisualC++5.1.4WindowsAPI分类根据WindowsAPI函数完成的功能,可以将其分为如下的类别:1.内核服务通过内核服务函数,应用程序可以使用计算机中的资源和操作系统的特性,例如内存,文件系统、设备、进程、线程等。拿一个简单的文件输入输出函数来说,通过这些函数,程序员可以存取本地计算机或网络中某台计算机中的文件、目录、输入输出设备,并且这些文件函数支持各种各样的文件系统,包括FAT、NTFS的文件系统。内核服务体现了Windows操作系统“服务”的观点。作为一个程序员我们应该利用这些服务函数来充分发挥操作系统的功能。对于这部分API函数的使用,我们可以在基于控制台的应用程序中编写,因为这些函数都是一些与Windows图形用户界面无关的,在字符方式下操作比较简单。后面有关这方面函数的操作就是在基于控制台的应用程序中使用的。内核服务的函数大部分包含在Windows内核库——Kernel32.dll中。VisualC++5.1.4WindowsAPI分类(续)2.图形设备接口图形设备接口是Windows最原始的图形输出库(最原始意味着除了GDI外,还有工业界用的OpenGl和游戏界用的DirectX,VC都对他们提供支持)。当看到图形或文本显示在屏幕上时,这就是GDI的功劳。它提供了在显示器、打印机或其它设备上生成图形的函数与相关的数据结构。利用GDI函数,你可以画直线、曲线、文本、位图等。你还可以使用各种各样的绘图对象如笔、画刷、字体等,使得所绘制的图形更加丰富多彩。另外,Windows本身也是通过GDI来绘制其用户界面,包括窗口、菜单和对话框。顾名思义,图形设备接口是与图形界面有关的,因此这些函数的使用要在图形用户界面下操作。即必须建立基于Win32的应用程序,建立的步骤如4.4节所示。图形设备接口的函数是包含在Windows图形设备界面库——Gdi32.dll中。VisualC++5.1.4WindowsAPI分类(续)3.用户接口服务用户接口服务函数可以创建和使用Windows来显示输出、提示用户输入和执行与用户交互的任务。用户接口服务是通过一些常见的Windows对象来实现的,例如按钮、组合框、编辑框、菜单、键盘输入、定时器等。用户接口服务的函数是在Windows用户界面管理库——User32.dll中。4.网络服务网络服务允许分布在网络中不同计算机上的应用程序进行通讯。通过这些函数可以创建和管理共享资源,例如共享目录和网络打印机。网络服务的函数是在网络接口函数库——Mpr.dll、Wininet.dll和Winsock32.dll中。5.多媒体服务多媒体技术是指利用计算机综合处理多媒体信息——文本、图形、图象和声音等,使多种信息建立逻辑连接,集成为一个系统并具有交互性。多媒体服务提供了数字音频、视频、图形、图象等服务。该服务的函数主要包含在多媒体函数库——Winmm.dll中。VisualC++5.1.4WindowsAPI分类(续)6.客户/服务方式存取服务在客户/服务方式存取模式中,客户可以连接到服务器上以使用服务器的功能和数据,服务器通过客户端的标识和权限来决定客户端可以使用的功能。Win2K提供了一套函数来限制和允许客户端对服务端的访问。这些函数扩展了Win2k的存取控制模型来使用服务端的私有对象和使用服务端的功能。客户/服务方式存取服务又称操作系统高级编程接口,这些函数包含在高级编程接口函数库——Advapi32.dll中。7.版本服务版本服务主要提供有关文件的版本信息。这些服务所对应的函数包含在版本函数库——Version.dll中。8.公共对话框服务公共对话框,又叫通用对话框,是Windows预定义的对话框,可以使用通用对话框来执行六种标准操作,选择文件,指定字体、选择颜色、打印设置、查找文本、保存文件。这些服务所对应的函数包含在公共对话框函数库——Comdlg32.dll中。VisualC++5.1.4WindowsAPI分类(续)9.打印管理服务在Windows操作系统下,可以实现在各种设备下的打印。打印管理服务提供了完整的函数集支持这些操作,例如检索打印机,准备打印等。这些服务所对应的函数包含在打印管理函数库——Winspool.drv中。10.解/压缩文件服务该服务提供了对文件的压缩和解压服务。这些服务所对应的函数包含在函数库——Lz32.dll。在VC6.0中提供了一个文件Win32api.csv。它是一个Win16与Win32函数的对照表。通过它读者可以浏览到Windows各种版本下API函数的原型说明。VisualC++5.1.5操作系统的认识操作系统有两个接口:一个是用户接口,另一个是程序员接口。VC开发工具的强大,其中很重要的一个方面就是对于WindowsAPI的直接调用,其它任何开发工具中的函数都是对其的一个封装。凡是在Windows工作环境下执行的应用程序,都可以通过某种特定方式调用WoindowsAPI函数。可以毫不夸张地说,WindowsAPI函数是构建整个Windows框架的基石,在它下面是Windows操作系统核心,在它上面则是所有华丽的Windows应用程序。事实上,任何开发工具提供的类库和构件都是架构在Win32API函数基础上,是封装了的API函数集合。这些类库和构件简化了程序的开发,但其功能有限。在实际应用中,如果我们希望开发出更灵活、更实用、更具效率的程序时,则必须要涉及直接使用API函数。虽然类库和构件使应用程序的开发简单了,但它们只提供Windows的常用的一般功能,对于比较复杂和特殊的功能来说,使用类库和构件中提供的方法是非常难以实现的,这时就需要直接调用特定的API函数。VisualC++5.2内核服务API函数的使用内核服务是最能体现API函数威力的地方,通过这些函数,用户能够使用操作系统内核所提供的核心功能。操作系统的进程管理、文件管理、内存管理都是属于内核的功能。5.2.1文件管理内核服务5.2.2进程操作5.2.3计算机系统信息操作VisualC++VC下提供了对文件操作的四种方式:(1)使用C语言中的fopen()、fprintf()、fread()等基本的函数进行文件操作;(2)使用C++中的流式文件接口fstream中的函数进行操作;(3)使用面向对象的类CFile进行操作;(4)使用有关的文件API进行操作。5.2.1文件管理内核服务1.文件操作2.驱动器操作VisualC++API为一般的文件操作提供了三个函数:移动、复制和删除。文件拷贝的API函数如下所示:BOOLCopyFile(//从源文件向目标文件复制内容LPCTSTRlpExistingFileName,//源文件名称LPCTSTRlpNewFileName,//目标文件名称BOOLbFailIfExists/*目标文件存在时的操作模式,为true时,函数调用失败,为False时,现有文件将被覆盖*/);文件移动和文件删除的API函数是MoveFileEx()和DeleteFile()【例5-1】调用API函数CopyFile实现文件拷贝实例。Windows的内核功能的实现不一定要在Windows的图形界面下完成,在字符方式下也可以。由于目前Windows图形用户接口程序的开发还没有讲(5.4节和5.5节中讲),并且我们目前掌握的重点是利用API函数实现Windows内核功能的演示,所以下面的