微软公司随Windows操作系统发布的应用程序接口(application programming Interface),即通常所说的API,是Windows系 统为其下运行的各类应用程序提供的重要服务功能微软的所有Win32平台都支持统一的API调用,包括函数、结构、消息、宏 及接口。通过Windows系统提供的API服务功能,应用程序可以充分挖掘Windows系统的潜力。 API的核心是一组用C语言编写的供外部应用程序调用的函数过程。通过调用动态库文件中的函数,程序员可以在自己开发的应 用中方便地向系统请求或执行更低级的设备访问,利用和控制系统资源,实现与系统相同或相似的功能。由此可以降低应用系 统开发的复杂性,提高开发效率,并且无论是应用供应商还是最终用户都无需支付额外的费用。 当Windows操作系统开始占据主导地位的时候,开发Windows平台下的应用程序成为现实的需要。而在Windows程序设计领域处于 发展的初期,程序员所能使用的编程工具惟有API函数,这些函数是Windows提供给应用程序与操作系统的接口,它们犹如儿童 搭积木一样,可以构建出各种界面丰富、功能灵活的应用程序。所以可以认为它API是构筑整个Windows框架的基石,在它的下 面是Windows操作系统的核心,而在它的上面则是所有华丽的Windows应用程序。 在Visual C++、Visual Basic、PowerBuilder、Delphi这些优秀可视化编程工具的诞生之前,程序员想开发Windows下的应用就 必须借助API。由于API固有的复杂性和程序员缺乏对其深刻的了解,令许多人在其面前望而却步。然而随着软件技术的不断推 陈出新,在Windows平台上出现了很多优秀的可视化编程环境,程序员可以采用“即见即所得”的编程方式来开发具有精美用户 界面和功能强大的应用程序。 可视化编程工具提供了大量的类库和各种控件,它们替代了API的神秘功能。事实上这些类库和控件都是构架在Win32 API函数 基础之上的,是封装了的API函数的集合。它们把常用的API函数组合在一起成为一个控件或类库,并赋予其方便的使用方法, 极大地加速了Windows应用程序开发的过程。有了这些控件和类库,程序员便可以把主要精力放在企业业务逻辑的实现和应用整 体功能的设计上,而不必过于关注界面设计、设备控制、系统资源访问等技术细节。 实际上,如果要开发出更灵活、更实用、更具效率的应用程序,就必然要涉及到直接使用API函数。虽然类库和控件简化了应用 程序的开发,但它们只提供Windows的一般功能,对于比较复杂和特殊的功能,当使用类库和控件难以实现时,就需要借助于 API来实现。操作系统提供的API由函数、消息、数据结构、数据类型以及语句组成静态链接与动态链接的区别: 静态库包含完成一些特定功能的子过程,在程序开发中可以通过链接将它们包含到应用中,它将成为应用不可分割的一部分, 在程序运行时,一次性整体装入。 指出被调用函数属于那个动态链接库。因此,在应用程序可执行文件中,存放的不是被调用函数的代码,而是DLL中该函数的内 存地址。这样,当多个应用程序调用DLL库中的同一个函数时,不会在内存中产生该函数的多个复制,而是只有一份复制,从而 可以节省大量的内存资源,提高系统的运行效率。同时,由于应用程序与DLL库文件的相互分离,当DLL库更新后,无需修改和 重新发布原有的应用的可执行文件。 不同类别的API函数分别位于Windows系统不同的动态链接库中, 事实上,Windows系统就是构建在众多的DLL库之上的。 功能或更正系统的错误时,只要添加新的动态库或更新原有的动态库文件即可。 Windows动态库及支持的API服务 择通用对话框、打印相关对话框等 表框、文本框、树型控件都属于该控件集 等 源访问功能 回调函数 处理异步事件。应用程序把回调函数的地址指针告诉DLL,而DLL在适当的时候会调用该函数。回调函数必须遵守事先规定好的 参数格式和传递方式,否则DLL一调用它就会引起程序或系统的崩溃。 消息 Windows系统本身而言,却是以消息处理为其控制机制。 句柄
句柄是Windows系统用来标识被所有应用程序建立或使用的对象的惟一整数。Windows要使用各种各样的句柄来标识诸如应用程 序实例、窗口、菜单、控件、分配的内存空间、设备场景、文件及GDI绘图对象等。 hBrush表示GDI绘图对象刷子的句柄,hDC表示设备场景的句柄等。 Windows系统常用的一些对象句柄 字体、图标、光标等 应的句柄Windows系统常用的一些对象句柄对 象 标 识 符 描 述 Bitmap(位图) hBitmap 标识用于存储位图信息的内存区域对象 Brush(刷子) hBrush 标识用于填充区域的刷子对象 Cursor(光标) hCursor 标识光标对象 Device Context(设备场景) hDC 标识设备场景对象 File(文件) hFile 标识磁盘文件对象 Font(字体) hFont 标识字体对象 Icon(图标) hIcon 标识图标位图对象 Instance(实例) hInstance 标识Windows应用程序实例对象 Memory(内存) hMem 标识一个内存块对象 Menu(菜单) hMenu 标识窗口菜单栏或弹出式菜单对象 Metafile(图元文件) hMetafile 标识图元文件对象 Module(模块) hModulehLibModule 标识一个代码模块对象,如DLL或Exe模块等,常用于访问一个模块里的资源,如 字体、图标、光标等 Object(Kernel)(对象-内核) hObject 标识Win32定义的一系列同步对象,如事件、信号机、MUTEX等,每个对象都有相 应的句柄 Windows中的句柄有点像通常的C程序设计中使用的文件句柄,其实就是内部表格的索引值。Windows通过句柄到内部表格中去存 取相关信息,而应用程序则总是通过调用一个 Windows函数来获取一个句柄,其他的Windows函数可使用这个句柄以引用相应的 对象。句柄的实际值对应用程序并不重要,但向应用程序提供句柄的Windows模块知道如何使用该句柄去引用对象,这种处理方 式就不会破坏Windows的多任务环境。 图形设备接口 输出结果。使用GDI函数可以绘制直线、曲线、闭合图形、路径、文本以及位图图像。所绘制的图形的颜色和风格依赖于所创建 的绘图对象,即画笔、笔刷和字体。用户可以使用画笔来绘制直线和曲线,使用笔刷来填充闭合图形的内部,使用字体来书写 文本。 的信息,比如它的操作方式及当前的选择。应用程序可使用设备场景函数来创建DC。GDI将返回一个设备场景句柄,在随后的调 用中,该句柄用于表示该设备。例如,应用程序可以使用该句柄来获取有关该设备性能的一些信息,诸如它的类型(显示器、 打印机或其他设备),它的显示界面的尺寸和分辨率等。 文件(meta file)。逻辑设备向应用程序所提供的保存输出结果的格式,可以很容易地将其发送到物理设备上。一旦应用程序 将输出结果记录到了一个元文件中,那么该元文件就可以被使用任意多次,并且该输出结果可以被发送到任意多个物理设备上 |
|