Windows API参考大全

第一章 Win32 API概论
1.1为什么使用 Wu32 API
    在Windows程序设计领域处于发展初期时,Windows程序员可使用的编程工具唯有API
函数。这些函数在程序员手中犹如“积木块”一样,可搭建出各种界面丰富、功能灵活的应
用程序。不过,由于这些函数结构复杂,所以往往难以理解,而且容易误用。
    随着软件技术的不断发展,在Windows平台上出现了很多优秀的可视化编程环境,程序
员可以采用“所见即所得”的编程方式来开发具有精美用户界面和功能的应用程序。这些可
视化编程环境操作简便、界面友好,比如:Visual C++,Delphi,Visual Basic等等。在
这些工具中提供了大量的类库和各种控件,它们替代了API的神秘功能。事实上,这些类库
和控件都是构筑在Windows API的基础上的,但它们使用方便,加速了Windows应用程序的
开发,所以受到程序员的普遍采用。有了这些类库和控件,程序员们便可以把主要精力放在
整体功能的设计上,而不必过于关注具体细节。不过,这也导致了非常多的程序员在类库面
前“固步自封”,对下层API函数的强大功能一无所知。
实际上。程序员要想开发出更灵活、更实用、更具效率的应用程序,必然要涉及到直接
使用API函数。虽然类库和控件使应用程序的开发容易得多,但它们只提供Microsoft 
Windows的一般功能,对于一些比较复杂和特殊的功能来说,单使用类库和控件是难以实现
的,必须直接使用API函数来编写。API函数是构筑整个Windows框架的基石,只有充分理
解和利用API函数,才能深入到Windows的内部,充分发挥各种32位平台的强大功能和灵
活性,才能成功地扩展和突破类库、控件和可视开发环境的限制。
1.2   Win32 API 简介
    Win32 API即为Microsoft 32位平台的应用程序编程接口(Application Programming 
Interface)。所有在Win32平台上运行的应用程序都可以调用这些函数。
    使用Win32 API,应用程序可以充分挖掘Windows的32位操作系统的潜力。 Mircrosoft
的所有32位平台都支持统一的API,包括函数、结构、消息、宏及接口。使用 Win32 API
不但可以开发出在各种平台上都能成功运行的应用程序,而且也可以充分利用每个平台特有
的功能和属性。
    在具体编程时,程序实现方式的差异依赖于相应平台的底层功能的不同。最显著的差异
是某些函数只能在更强大的平台上实现其功能。例如,安全函数只能在Windows NT操作系
统下使用。另外一些主要差别就是系统限制,比如值的范围约束,或函数可管理的项目个数
等等。
标准Win32 API函数可以分为以下几类:
    窗口管理
    窗口通用控制
    Shell特性
    图形设备接口
    系统服务
    国际特性
    网络服务
在下面各节中,我们分别介绍这7种类型的API函数。
1.2.1  窗口管理函数
    窗口管理函数向应用程序提供了一些创建和管理用户界面的方法。你可以使用窗口管理
函数创建和使用窗口来显示输出、提示用户进行输入以及完成其他一些与用户进行交互所需
的工作。大多数应用程序都至少要创建一个窗口。
    应用程序通过创建窗口类及相应的窗口过程来定义它们所用窗日的外观和行为。窗口类
可标识窗口的缺省属性,比如窗口是否接受双击鼠标按钮的操作。或是否带有菜单。窗口过
程中包含的代码用于定义窗口的行为,完成所需的任务,以及处理用户的输入。
    应用程序可使用GDI函数来产生窗口的输出。由于所有的窗口都共享显示屏幕,所以应
用程序不接受对整个屏幕的访问。系统管理所有的输出内容,并对它们进行排列和剪裁,使
其能够适合相应的窗口。应用程序可以在处理输入消息时,或为了响应系统的需求而在窗口
中绘图。当窗口的大小或位置发生变化时,系统通常会向应用程序发送一个消息,要求它对
该窗口中原来未显露的区域进行重画。
    应用程序以消息的形式接受鼠标和键盘输入。系统将鼠标移动、鼠标按钮操作转换为输
入消息,并将这些消息放入该应用程序的消息队列中。系统为每个应用程序都自动提供一个
消息队列。应用程序使用消息函数从消息队列中获取消息,并将它们分派给适当的窗口过程
进行处理。
    应用程序可以直接处理鼠标和键盘输人,也可以让系统使用菜单和键盘加速健将这些低
级输入转换成命令消息。你可以使用菜单向用户展现一个命令列表。系统对所有菜单操作所
需的动作进行管理,包括让用户选择一个命令,然后再向窗日过程发送一个标识该选择的消
息。键盘加速键是应用程序定义的按键操作组合,系统可将其转换为消息。加速键通常对应
于菜单中的某个命令,并与该命令产生相同的消息。
    应用程序通过在对话框中向用户提示附加信息来响应命令消息。对话框实际是一个临时
的窗口,用于显示信息或提示输入。一个对话框通常由一些表示按钮和方框的控制组成,可
供用户进行选择或输入信息。对话框中可包括用于输入正文、滚动正文、从列表中选择列表
项等操作的控制。对话框管理和处理来自这些控制的输入,使应用程序可使用这些信息,来
完成所要求的命令操作。
    通过使用“资源”可以共享很多有用的数据,比如位图、图标、字体和字符串等,只需
将这些数据作为“资源”添加到应用程序或DLL文件中。应用程序通过使用资源函数,找到
资源并将它们加载到内存来获取这些数据。
    窗口管理函数还提供了其他一些与窗口有关的特性,比如插入标记(Caret)、剪贴板、
光标、挂钩(Hook)、图标以及菜单等函数。
    窗口管理函数包括以下几类:
    易用特性函数(Accessibility Features)
    Win32 API提供的一系列易用特性使得有残疾的人也能很容易的使用计算机,Win32 API
提供了一些函数和结构来控制这些特性。
    按钮函数(Button)
    Microsoft提供了对话框和控制来支持应用程序与用户之间的交互通讯。按钮就是一种
控制,用户可通过点击按钮来向应用程序提供输入信息。
    插入标记函数(Caret)
    一个插入标记是位于窗口绘图区中的一个闪动的直线、方块或图标。插入标记通常用于
指示文本或图形将插入的位置。Win32应用程序可以使用插入标记函数来创建一个插入标
记,改变它的闪动频率,显示、隐藏插入标记,或重新设置插入标记的位置。
    组合框函数(Combo Box)
    组合框是由COMBOBOX类定义的一种控制,综合了列表框和编辑控制的很多功能。使用
组合框函数可以在组合框中显示或获取不同类型的数据。
    通用对话框函数(Common Dialog Box)
    通用对话框是在通用对话框库中定义的,其功能是用来完成一些通用的任务,比如打开
文件、打印文档等。通用对话框为用户提供了一个统一的用户界面,使用户在不同的应用程
序中完成通用任务时的操作都相同,不必每次都学习不同的操作过程。
    光标函数(Cursor)
    光标是显示屏幕上的一个小图形,其所在的位置由指点设备比如鼠标、光笔或轨迹球等
控制。当用户移动鼠标时,系统就会随之移动光标的位置。应用程序使用Win32光标函数可
以创建、加载、显示、移动、限制和删除光标。
    对话框函数(Dialog Box)
    对话框是应用程序创建的一个临时窗口,用于获取用户的输入。应用程序通常使用对话
框向用户显示一些命令提示信息。一个对话框一般由一个或多个控制(子窗口)组成,这些
控制可用来输入文本、选择选项或执行命令动作。
    编辑控制函数(Edit Control)
    编辑控制是一个矩形窗口,通常用在对话框中,用户可通过键盘向编辑控制中输入和编
辑文本。系统对Unicode文本(字符采用双字节编码)和ANSI(字符采用单字节编码)文
本都支持。
    图标函数(Icon)
    图标是一个图片,由一个位图图像组成,并和一个掩码组合构成该图片的透明区域。当
提到图标时,可以是下列两种情况:
    1)单个图标图像。资源类型为RT_ICON。
    2)一组图标图像,系统或应用程序可从中选择。资源类型为RT_GROUP_JCON。
    应用程序使用图标函数可以创建、显示、删除和复制图标。
    键盘加速健函数(Keyboard Accelerator)
    键盘加速键(或简称为加速键)是一个按键操作或多个按键操作的组合,可向应用程序
发送WM_COMMAND或WM_SYSCOMMAND消息。
    使用键盘加速键函数可以拷贝、创建、加载或删除加速键表,*    图标是一个图片,
由一个位图图像组成,并和一个掩码组合构成该图片的透明区域。当提到图标时,可以是下
列两种情况:
    1)单个图标图像。资源类型为RT_ICON。
    2)一组图标图像,系统或应用程序可从中选择。资源类型为RT_GROUP_JCON。
    应用程序使用图标函数可以创建、显示、删除和复制图标。
    键盘加速健函数(Keyboard Accelerator)
    键盘加速键(或简称为加速键)是一个按键操作或多个按键操作的组合,可向应用程序
发送WM_COMMAND或WM_SYSCOMMAND消息。
    使用键盘加速键函数可以拷贝、创建、加载或删除加速键表,还可以将加速键消息转换
为命令消息。
    键盘输入函数(Keyboard Input)
    键盘输入函数提供了接受和处理键盘输入的方法。
    列表框函数(List Box)
    Microsoft的Win32 API提供了对话框和控制来支持应用程序与用户之间的交互通讯。
列表框是一个控制窗口,其中包含一系列选项,可供用户进行选择。使用列表框函数可以在
列表框中显示或获取不同类型的数据。
    菜单函数(Menu)
    菜单函数向Win32应用程序提供了一系列创建、管理和使用菜单的方法,包括对菜单条、
菜单项。
于菜单等的处理。
    消息和消息队列函数(Message and Message Queue)
    消息和消息队列函数向Win32应用程序提供了一系列使用消息和消息队列的方法,包括
对消息进行
传播、发送、获取、转换等操作。
    鼠标输入函数(Mouse Input)
    鼠标输入函数提供了接受和处理鼠标输入的方法。
    多文档接口函数(Multiple Document Interface)
    多文档接口(MDI)是应用程序定义用户界面的一种规范,在这种界面下,用户可以同
时使用多个文档。
    资源函数(Resource)
    一个资源是一些二进制数据,可以添加到Win32应用程序的可执行文件中。资源既可以
是标准的,也可以是自己定义的。标准资源中的数据包括图标、光标、菜单、对话框、位图、
增强元文件、字体、加速键表、消息表入口、字符串表入口或版本。应用程序定义的资源(也
称为定制的资源)可以包含特
殊应用程序所需的任何数据。
    使用资源函数可以添加、删除、拷贝、替换或加载各种资源数据。
    滚动条函数(Scroll Bar)
    在Win32应用程序的窗口中,可以显示比该窗口的显示区更大的数据对象,比如文档或
位图。当窗口提供了滚动条时,用户就可以通过拖动滚动条来浏览该数据对象中位于显示区
外面的部分。
    滚动条包括水平滚动条和垂直滚动条。使用滚动条函数可以创建和管理这两种滚动条。
    窗口函数(Window)
    在图形化的Win32应用程序中,窗口是屏幕上的一个矩形区域,应用程序可在该区域中
显示输出结果,并接受用户输入。因此,一个图形化的Win32应用程序的首要任务之一就是
创建一个窗口。
    一个窗口与其他窗口共享显示屏幕,也包括其他应用程序所创建的窗口。一次只能有一
个窗口接受用户的输入。用户可以使用鼠标、键盘或其他输人设备与该窗口及拥有该窗口的
应用程序进行交互。使用窗口函数可以创建和管理窗口。
    窗口类函数(Window Class)
    一个窗口类是一个属性的集合,系统将该属性集合用作创建窗口的模板。每个窗口都是
某个窗口类的一个成员。使闲置或删除窗口属性。
1.2.2  窗口通用控制
    系统Shell提供了一些控制,使用这些控制可以使窗口具有与众不同的外观。由于这些
控制是由DLL支持的,是操作系统的一部分,所以它们对所有的应用程序都可用。使用通用
控制有助于使应用程序的用户界面与系统Shell及其他应用程序保持一致。由于开发一个控
制需要花费一定的时间,所以直接使用通用控制也可以节省大量的开发时间。
通用控制是由通用控制库COMCTL32.DLL支持的一个控制窗口集。与其他控制一样,一
个通用控制也是应用程序的一个子窗口,它与其他窗口联合使用,完成I/O操作。通用控制
DLL包括一个编程接口,应用程序可使用其中的函数创建和管理控制。以及从控制中接受用
户输入。
1.2.3  Shell特性
    Win32 API中包含一些接口和函数,应用程序可使用它们来增强系统Shell的各方面功
能。
    一个名字空间是一个符号集合,比如文件和目录名字,或数据库关键字。Shell使用一
个单层结构的名字空间来组织用户关心的所有对象,包括文件、存储设备、打印机及网络资
源。名字空间类似于文件系统的目录结构,只不过名字空间中包含的是对象,而不是文件和
目录。
    快捷键(也称为一个Shell连接)是一个数据对象,它包含的信息可用于访问位于Shell
名字空间的任何位置的其他对象。使用快捷键时,应用程序不必知道对象的当前名字和位置
就可以访问该对象。可以通过快捷键访问的对象包括文件、文件夹、磁盘驱动器、打印机及
网络资源。
    有几种方法可以扩展Shell。系统使用图标来表示Shell名字空间中的文件。缺省情况
下,系统对具有相同文件扩展名的所有文件都显示相同的图标。可以用一个图标句柄来改变
某特殊文件的缺省图标。使用上下文相关菜单句柄可以修改一个上下文相关菜单的内容,这
也是一种Shell扩展。当用户用鼠标右键点击或拖动一个对象时,系统会显示一个上下文相
关菜单。该上下文相关菜单中所包含的命令只应用在被点击或拖动的对象上。大多数上下文
相关菜单都包含一个Properties命令,用于显示所选中项目的属性表。一个属性表由一系
列重叠的窗口组成(每个窗口称为一页),用于显示有关某个对象的信息。属性表句柄是一
种Shell扩展,使用它可以向系统定义的属性表中添加页,或替换控制面板的属性表的某些
页。一个拷贝挂钩(Hook)句柄是一种 Shell扩展,可以允许或拒绝对一个文件对象的移
动、拷贝、删除或重命名。
    系统Shell包含一个快速查看(Quick View)命令,使用户可以直接查看一个文件的内
容.而不必运行创建该文件的应用程序。文件浏览器提供了一个用于查看文件的用户界面。
Shell使用文件扩展名来确定应运行哪个浏览器。你可以为新的文件格式提供文件浏览器,
或用具有更强功能的浏览器来替换原来的浏览器。文件浏览器与文件分析器联合使用,后者
的功能是对文件名进行分析,以便确定应生成哪种类型文件的 QUck View。你还可以提供其
他的文件分析器来支持新的文件类型。
1.2.4  图形设备接口
    图形设备接口(GDI)提供了一系列的函数和相关的结构,应用程序可以使用它们在显
示器、打印机或其他设备上生成图形化的输出结果。使用GDI函数可以绘制直线、曲线、闭
合图形、路径、文本以及位图图像。所绘制的图形的颜色和风格依赖于所创建的绘图对象,
即画笔、笔刷和字体。你可以使用画笔来绘制直线和曲线,使用笔刷来填充闭合图形的内部,
使用字体来书写文本。
    应用程序通过创建设备环境(DC),可以直接向指定的设备进行输出。设备环境是一个
GDI管理的结构。其中包含一些有关设备的信息,比如它的操作方式及当前的选择。应用程
序可使用设备环境函数来创建DC。GDI将返回一个设备环境句柄,在随后的调用中,该句柄
用于表示该设备。例如,应用程序可以使用该句柄来获取有关该设备性能的一些信息,诸如
它的类型(显示器、打印机或其他设备),它的显示界面的尺寸和分辨率等。
    应用程序可以直接向一个物理设备进行输出,比如显示器或打印机;也可以向一个“逻
辑”设备进行输出,比如内存设备或元文件。逻辑设备向应用程序所提供的保存输出结果的
格式,可以很容易地将其发送到物理设备上。一旦应用程序将输出结果记录到了一个元文件
中,那么该元文件就可以被使用任意多次,并且该输出结果可以被发送到任意多个物理设备
上。
    应用程序可以使用属性函数来设置设备的操作方式和当前的选择。操作方式包括文本和
背景颜色,混色方式(也称为二元光栅操作,用于确定画笔或笔刷的颜色与绘图区域现有的
颜色如何进行混色),映射方式(用于指定GDI如何将应用程序所用的坐标映射到设备坐标
系统上)。当前的选择是指绘图时使用哪个绘图对象。
    图形设备接口函数包括以下几类:
    位图函数(Bltmap)
位图是一个图形对象,可将图像作为文件进行创建、处理(比例缩放、滚动、旋转和绘
制)和存储。
位图函数提供了一系列处理位图的方法。
    笔刷函数(Brush)
    笔刷是一种绘图工具,Win32应用程序可使用它绘制多边形、椭圆形和路径的内部。绘
图应用程序使用笔刷绘制图形;字处理应用程序使用笔刷绘制水线;计算机辅助设计(CAD)
应用程序使用笔刷绘制截面视图的内部;电子表格应用程序使用笔刷绘制饼图的扇形和直方
图的方条。笔刷函数提供了一系列创建和使用笔刷的方法。
    剪裁函数(Clipping)
    剪裁是一种处理过程,它将输出到某个区域或路径中的内容限制在应用程序窗口的显示
区内。剪裁函数提供了一系列处理剪裁区域的方法。
    颜色函数(Color)
    颜色是组成Win32应用程序所生成的图片和图像的一个重要元素。 Win32 API提供了
一系列管理和使用画笔、笔刷、文本和位图的颜色的函数。
    坐标空间及映射函数(Coordinate Space and Transformation)
    Win32应用程序使用坐标空间和映射函数对输出的图形进行比例缩放、旋转、转换、剪
裁和反射。
坐标空间是基于笛卡尔坐标系统的一个平面空间。该坐标系统要求有两个垂直相交的、长度
相等的坐标轴。共有4种坐标空间:现实坐标、页面坐标、设备坐标、物理设备坐标(显示
区,或桌面,或打印纸的页面)。映射方式就是改变(“映射”)对象的大小、方向和形状的
一种算法。
    设备环境函数(Device Context)
    设备环境是一个结构,它定义了一系列图形对象及其相关的属性,以及会影响输出结果
的绘图方式。这些图形对象包括:画笔(用于画直线),笔刷(用于绘图和填充),位图(用
于屏幕的拷贝或滚动),调色板(用于定义可用的颜色集),剪裁区(用于剪裁和其他操作),
路径(用于绘图和画图操作)。设备环境函数用于对设备环境进行创建、删除或获取信息。
    填充图形函数(Filled Shape)
    填充图形是一些几何图形,其轮廓由当前的画笔绘制,内部由当前的笔刷填充。共有5
种填充图形:椭圆,弦图,饼图,多边形,矩形。填充图形函数用于对填充图形进行操作。
    字体和文本函数(Font and Text)
    字体用于在视频显示器或其他输出设备上绘制文本。Win32 API提供了一系列用于安装、
选择和查询各种字体的字体和文本函数。
    ICM 2.0函数
    Microsoft Windows 98和Windows NT 5.0所使用的颜色管理方案称为 Image Color 
Management版本 2.0,或ICM2.0,由一系列函数组成。
    直线和曲线函数(Line and Curve)
    直线和曲线用于在光栅设备上绘制输出图形。一条直线是光栅显示器上的一系列高亮像
素点(或打印纸上的一系列点),由两个点进行标识:起点和终点。一条规则曲线也是光栅
显示器上的一系列高亮像素点(或打印纸上的一系列点),符合某个二次曲线段的周界(或
一部分)。不规则曲线则是由不符合二次曲线段的一系列像素点组成。
    元文件函数(Metafile)
    元文件是一个结构的集合,这些结构是以与设备无关的格式存储图像。设备无关是元文
件与位图的差异之一。与位图不同,元文件保证是与设备无关的。不过,元文件有一个缺点:
它通常比位图的绘图速度慢。因此,如果一个应用程序要求有较快的绘图速度,而不需要具
有设备无关性,则应该用位图代替元文件。
    元文件函数提供了一些对元文件进行操作的方法。
    多显示器支持函数(Multple Display Monltors)
    每个Windows工作站所支持的显示器个数是不受限制的。可以用创建邻接区域的方式安
排多个显示器。每个显示器的大小和颜色深浅都可以独立设置。
    所有的显示器屏幕一起构成了一个虚拟屏幕。桌面窗口覆盖整个虚拟屏幕,而不仅仅是
某个显示屏幕。由于现有的应用程序都要求显示器具有一个原点坐标(0,0),所以虚拟屏
幕必须在某个显示器上包含原点坐标(0,0),这个显示器就被看作是主显示器。
    每个物理显示设备都由一个HMONITOR类型的显示器句柄表示。一个显示器在它的整个
生存期间具有相同的HMONITOR值。
    任何显示设备环境(DC)的Win32函数所返回的值都是主显示器的DC。要想获取其他
显示器的DC,可使用EnumDisplayMonitors函数。系统对每个显示器调用回调函数,为该
显示器传入一个DC值。用户可以使用该DC在该显示器上绘图。
    绘图和画图函数(Painting and Drawing)
    绘图和画图函数为应用程序提供了一系列在窗口中绘图的方法,以及如何创建和使用显
示设备环境(DC)的方法。
    路径函数(Path)
    一个路径是指一个或多个被填充、被绘制轮廓或既被填充又被绘制轮廓的图形(或形
状)。Win32应用程序将路径用作很多用途,在绘图和画图应用程序中使用路径。计算机辅
助设计(CAD)应用程序用路径来创建唯一剪裁区,绘制不规则形状的轮廓,以及填充不规
则形状的内部。路径函数用于创建、改变和绘制路径。
    画笔函数(Pen)
    画笔是Win32应用程序用于绘制直线和曲线的图形工具。画图应用程序使用画笔来画手
画线、直线以及曲线。计算机辅助设计(CAD)应用程序用画笔来画可见线、隐藏线、截面
线、中心线等等。字处理和桌面出版应用程序用画笔来画边界和水线。电子表格应用程序用
画笔来指明图表的趋向,以及勾勒直方图和饼图的轮廓。画笔函数提供了一系列使用画笔的
方法。
    打印和打印假脱机函数(Printing and Print Spooler)
    Microsoft Windows和Windows NT提供了一套完整的函数,使应用程序可以在不同的
设备上进行打印,如激光打印机,向量绘图仪,光栅打印机,以及传真机等。
    矩形函数(Rectangle)
    Win32应用程序使用矩形来指定显示屏幕上或窗口中的一个矩形区域。矩形函数用于对
矩形进行操作。
    区域函数(Region)
    区域是指一个可被填充、着色、转换和加外框的形状,包括矩形、多边形或椭圆(或这
几种形状的组合),用于完成击键测试(测试光标位置)。
区域函数用于对区域进行操作。
1.2.5  系统服务
    系统服务函数为应用程序提供了访问计算机资源以及底层操作系统特性的手段,比如访
问内存、文件系统、设备、进程和线程。应用程序使用系统服务函数来管理和监视它所需要
的资源。例如,应用程序可使用内存管理函数来分配和释放内存,使用进程管理和同步函数
来启动和调整多个应用程序或在一个应用程序中运行的多个线程的操作。
    系统服务函数提供了访问文件、目录以及输入输出(I/O)设备的手段。应用程序使用
文件I/O函数可以访问保存在指定计算机以及网络计算机上的磁盘和其他存储设备上的文件
和目录。这些函数支持各种文件系统,从FAT文件系统,CD-ROM文件系统(CDFS),到NTFS。
    系统访问函数为应用程序提供了一些可以与其他应用程序共享代码或信息的方法。例
如,可以将一些有用的过程放到DLL中,使它们对所有的应用程序都可用。应用程序只需使
用DLL函数将动态链接库加载进来并获取各过程的地址,就可以使用这些过程了。通讯函数
用于向通讯端口写入数据及从通讯端口读出数据,并控制这些端口的操作方式。有几种内部
通讯(IPC)的方法,比如DDE、管道(Pipe)、邮槽(Mailslot)和文件映射。对于提供安
全属性的操作系统来说,应用程序可使用安全函数来访问安全数据,并保护这些数据不会被
有意或无意地访问或破坏。
    使用系统服务函数可以访问有关系统和其他应用程序的信息。应用程序可用系统信息函
数来确定计算机的特别属性,比如是否出现鼠标、显示屏幕上的元素具有多大尺寸。注册和
初始化函数用于将应用程序的特殊信息保存到系统文件中,以便于该应用程序的新实例对
象,甚至其他应用程序都可以获取和使用这些信息。
    应用程序使用系统服务函数可以处理执行过程中的的一些特殊情况,比如错误处理、事
件日志、异常处理。还有一些属性可用于调试和提高性能。例如,使用调试函数可对其他进
程的执行过程进行单步控制,而性能监视函数则可对某个进程的执行路径进行跟踪。
    系统服务函数还提供了一些特性,可用于创建其他类型的应用程序,比如控制台应用程
序和服务。
    系统服务函数包括以下几类:
    访问控制函数(Access Control)
    Microsoft Windows NT所提供的安全功能对Win32应用程序是自动使用的。在系统中
运行的每个应用程序都受由Windows NT的特殊配置所提供的安全功能所影响。Windows NT
是支持Win32安全功能的唯一平台。
    Windows NT的安全功能对大多数Win32函数的影响都是最小的,不需要安全功能的Win32
应用程序不必合并任何特殊代码。不过,你可使用Windows NT的安全属性向Win32应用程
序提供一些服务。
    访问控制函数提供了一系列控制访问Win32对象(比如文件)、管理函数(比如设置系
统时间或审核运行动作的函数)的Windows NT安全模型。
    原子函数(Atom)
    原子表格是一个系统定义的表格,用于保存字符串和相应的标识符。应用程序将一个字
符串放到原子表格中,并接受一个16位的整数(称为一个原于),用于访问该字符串。放到
原子表格中的字符串被称为原子名字。
    原子函数提供了一系列对原子进行添加、删除、初始化等的操作。
    客户服务器访问控制函数(Client/Server Access Control)
    客户/服务器访问控制函数包括三类:
        用于模拟客户机。
        用于检查和设置私有对象上的安全描述符。
        用于生成安全时间日志中的审核消息。
    剪贴板函数(Clipboard)
    剪贴板是由一系列函数和消息组成,Win32应用程序可使用它来传输数据。由于所有的
应用程序都可以访问剪贴板,所以数据可以很容易地在应用程序之间或一个应用程序内部进
行传输。
    通讯函数(Communication)
    通讯资源是一个物理或逻辑设备,用于提供双向的异步数据流。例如,串行端口、并行
端口、传真机以及调制解调器都是通讯资源。对于每个通讯资源都有一个服务供应程序(包
含一个库或驱动程序),使应用程序可以访问该资源。通讯函数是通讯设备所使用的函数。
    控制台函数(Console)
    Microsoft Windows和Windows NT提供了控制台函数,用于管理字符模式的应用程序
(这种应用程序未提供自己的图形用户界面)的输入和输出(I/O)
    数据解压库函数(Data Decompression Library)
    数据解压库函数在LZEXPAND.DLL中声明,用于对压缩的文件进行解压。
    调试函数(Debugging)
    调试器是一个应用程序,开发人员可使用它来检查和改正编程错误。Win32 API的调试
函数为用户提供了一系列的调试手段。
  设备输入和输出函数(Device Input and OutPut)
    Win32应用程序使用设备输入和输出控制与设备驱动程序进行通讯。被访问的设备由设
备句柄标识;而设备驱动程序要完成的动作则由控制代码来指定。
    动态数据交换函数(Dynamic Data Exchange)
    Win32 API为不能使用“动态数据交换管理库(DDEML)”的应用程序提供了一系列实现
动态数据交换的函数。
    动态数据交换管理函数(Dynamic Data Exchange Management)
    动态数据交换(DDE)是一种内部通讯方式,即使用共享内存在应用程序之间交换数据。
应用程序可以使用DDE进行一次性的数据传输,以及数据的即时交换和更新。
    动态数据交换管理函数为用户提供了一系列管理动态数据交换的手段。
    动态链接库函数(Dynamic-Link Library)
    动态连接库(DLL)是由函数和数据组成的一些模块。一个DLL是由它的调用模块(.EXE
或.DLL)在运行时加载的。当一个DLL被加载后,它就被映射到其调用进程的地址空间中。
    DLL可以定义两种函数:外部的和内部的。外部函数可以被其他模块调用,内部函数只
能在声明它的OLL内部被调用。尽管DLL可以输出数据,但它的数据通常只能由它的函数使
用。
    DLL提供了一种使应用程序模块化的方法,这样就可以更容易地更新和重用程序的功
能。DLL也有助于在几个应用程序同时使用相同的功能时减少内存开销,因为虽然每个应用
程序都拥有一份数据的备份,但它们可以共享代码。
    错误函数(Error)
    写得好的应用程序应包括一些能够处理意外错误并可从错误中顺利恢复的代码。当发生
错误时,应用程序可能需要用户进行干预,或自己恢复。在一些极端情况下,应用程序对能
会将用户从系统中退出或关机。错误函数为用户痰腛LL内部被调用。尽管DLL可以输出数
据,但它的数据通常只能由它的函数使用。
    DLL提供了一种使应用程序模块化的方法,这样就可以更容易地更新和重用程序的功
能。DLL也有助于在几个应用程序同时使用相同的功能时减少内存开销,因为虽然每个应用
程序都拥有一份数据的备份,但它们可以共享代码。
    错误函数(Error)
    写得好的应用程序应包括一些能够处理意外错误并可从错误中顺利恢复的代码。当发生
错误时,应用程序可能需要用户进行干预,或自己恢复。在一些极端情况下,应用程序对能
会将用户从系统中退出或关机。错误函数为用户提供了一些进行错误处理的方法。
    事件日志函数(Event Logging)
    很多应用程序都在不同的属性错误日志中记录错误和事件。这些属性错误日志具有不同
的格式,并显示不同的用户界面,而且无法将数据合并起来得到一个完整的报告。因此,用
户必须要检查各种数据来诊断问题。Windows NT的事件日志为应用程序(和操作系统)提
供了一种标准、集中的方法,来记录重要的软件和硬件事件。事件日志服务将事件从不同的
地方保存到一个称为“事件日志”的集合中。Windows NT还提供了一个事件浏览器和编程
接口,用于查看日志和检查日志。事件日志函数提供了一系列编写和检查事件日志的方法。
    文件函数(File)
    文件是计算机存储信息的基本单位,不同的信息可分别存放在不同的文件中。应用程序
可使用文件函数对文件进行输入和输出(I/O)操作。
    文件安装库函数(File Installation Library)
    Win32 API包含一个文件安装库,应用程序使用它可以更容易地安装文件,使安装程序
能分析当前已安装的文件。
    文件映射函数(File Mapping)
    文件映射函数用于对文件映射对象进行操作。
    文件系统函数(File System)
    Win32应用程序依赖文件系统来保存和获取存储设备上的信息。文件系统提供了应用程
序在与存储设备相关的个别卷上创建和访问文件及目录时所需的底层支持。
    每个文件系统都由一个或多个驱动程序和所支持的动态链接库(定义文件系统的数据格
式和特性)组成。它们确定了文件名的约定、安全性及可恢复性的级别,以及输入输出(I/O)
操作的一般性能。文件系统函数用于对文件系统进行操作。
    句柄和对象函数(Handle and Object)
    对象是一个表示系统资源的数据结构,比如表示一个文件、线程或图像。应用程序不能
直接访问对象所表示的对象数据或系统资源,而是必须使用对象句柄。对象句柄可用于检查
和修改系统资源。每个句柄在一个内部维护的表中都有一项。在这些项中包含资源的地址以
及标识资源类型的方法。句柄和对象函数用于对句柄和对象进行操作。
    Hook函数
    Hook是系统消息处理机制中的一部分。在系统消息处理机制中,应用程序可安装一个
子程序来监视系统中的消息传送情况,并可处理某些类型的消息(在这些消息到达目的窗口
过程之前)。Hook函数用于对Hook进行操作。
    lmageHlp函数
    lmageHlp函数由IMAGEHLP DLL提供。lmageHlp函数可用于PE格式的图像。PE图像由
一个兼容的Win32连接程序提供,比如由Microsoft Developer Studio提供。
    超大整数操作函数(Large Integer Operations)
    Win32 API提供了一系列超大整    邮槽是一种单向的内部处理通讯(IPC)机制。Win32
应用程序可以在邮槽中保存消息,邮槽的所有者可以获取保存在其中的消息。这些消息通常
是通过网络发送到一台指定的计算机上,或发送到某个指定域中的所有计算机上。域是一组
工作站和服务器,共享一个组名。
    可以选择使用命名管道来代替邮槽进行内部处理通讯。命名管道是两个进程交换消息的
一种简单方法。而邮槽则是一个进程向多个进程广播消息的一种简单方法。需要考虑的重要
一点是邮槽使用邮包,而命名管道则不用。邮槽函数可用于创建邮槽、设置或获取邮槽信息。
    内存管理函数(Memory Management)
    内存管理函数用于分配和使用内存。
    管道函数(Pipe)
    管道是一段共享内存,用于进程通讯。创建管道的进程称为管道服务程序。连接管道的
进程称为管道客户程序。某个进程向管道中写入信息,然后其他进程从管道中读出信息。管
道函数用于创建、管理和使用管道。
    电源管理函数(Power Management)
    电源管理函数用于对计算机的电源进行管理。
    进程和线程函数(Process and Thread)
    一个Win32应用程序由一个或多个进程组成。在最简单的条件下,一个进程就是一个可
执行程序,在该进程的环境中运行一个或多个线程。线程是操作系统分配处理器时间的基本
单位。一个线程可以执行进程代码的任何部分,包括正被其他线程执行的部分。一个“纤度”
(Fiber)是一个执行单位,必须由应用程序手工调度。“纤度”在调度它的线程环境中运行。
    作业对象允许进程组被作为一个单位进行管理。作业对象是可命名、可得到及可共享的
对象,用于控制与其相关的进程的属性。在作业对象上完成的操作会影响所有与该作业对象
相关的进程。
    进程和线程函数包括三类函数:进程和线程函数、作业对象函数、“纤度”函数。
    注册函数(Registry)
    注册表是一个系统定义的数据库,应用程序和系统构件可使用它来保存和获取配置数
据。注册函数用于对注册表进行操作。
    字符串处理函数(string Manipulation)
    字符串处理函数用于对字符串进行处理。
    结构化的异常处理函数(Structured Exception Handling)
    异常是在程序执行过程中发生的一种事件,发生异常时需要执行正常的控制流程以外的
代码。共有两种异常:硬件异常和软件异常。硬件异常是由CPU引发的,可能由于执行了某
些指令序列而产生,比如除零操作,或访问一个无效的内存地址。软件异常是由应用程序或
操作系统显式地引发。例如,当系统检测出一个无效的参数值时就会引发一个异常。
    结构化的异常处理是一种同时处理软件异常和硬件异常的机制。因此,在程序中可用作
对硬件和软件异常一起进行处理。使用结构化的异常处理使用户可以完全控制对异常的处
理,为调试器提供支持,并且对所有编程语言和机器都是可用的。
    同步函数(Synchronization)
    Win32 API提供了各种方法来调整执行过程中的多个进程。同步函数为线程提供了一系
列对资源访问进行同步的机制。
    系统信息函数(System Information)
    系统信息函数用于修改系统的配置、设置和属性。
    系统消息函数(System Message)
    系统消息函数用于向一些系统部件发送系统消息,比如应用程序、网络驱动器、系统级
设备驱动器等。
    系统关机函数(System Shutdown)
    应用程序可使用系统关机函数将当前的用户退出系统、关机,或锁定工作站。
    磁带备份函数(Tape Backup)
    备份应用程序可使用磁带备份函数从磁带中读取数据,向磁带中写入数据,初始化磁带,
以及获取磁带或磁带驱动信息。
    时间函数(Time)
    Microsoft Windows和Windows NT提供了各种日期和时间函数,用于获取和设置系统
及个别文件的日期和时间。
    使用时间函数可以检查和修改日期及时间。
    计时器函数(Timer)
    计时器是一个内部例程,它反复地测量一个指定的时间间隔(以毫秒为单位)。
    计时器函数用于对计时器进行操作。
    工具帮助函数(Tool Help)
    由“工具帮助库”所提供的函数可使用户更容易地获取有关当前正在执行的Win32应用
程序的信息,为用户提供工具帮助服务。
    窗口站和桌面函数(Window Station and Desktop)
    窗口工作站和桌面函数主要是为Win32服务的开发人员提供的,用于对新的窗口工作站
和桌面功能进行操作。开发由登录用户使用的典型应用程序的开发人员不必考虑窗口工作站
和桌面。
    Windows NT 4.0访问控制函数(Windows NT 4.0 Access-Control)
    Windows NT 4.0访问控制函数用于对安全描述符和访问控制列表(ACL)进行操作。在
更高版本的Windows NT中也支持这些函数。
    Windows NT 4.0访问控制函数是Microsoft Win32提供的三套访问控制函数之一。
    WinTrust函数
WinTrust函数用于对指定的主题进行指定确认。
1.2.6  国际特性
    这些特性有助于用户编写国际化的应用程序。Unicode字符集使用16位的字符值来表
示计算过程中所用的字符,比如各种符号,以及很多编程语言。国家语言支持(NLS)函数
可帮助用户将应用程序本地化;输入方法编辑器(IME)函数(在Windows亚洲版中可用)
用于帮助用户输入包含Unicode和DCBS字符的文本。
    国际特性函数包括以下几类:
    输入方法编辑器函数(Input Method Editor)
    输入方法编辑器(IME)有助于简化用户的文本输入过程(文本中包含Unicode字符和
双字节字符DBCS)。
    输入方法编辑器函数用于创建和管理IME窗口。
    国家语言支持函数(National Language Support)
    使用国家语言支持函数可以帮助Win32应用程序支持世界各地的不同语言,满足不同地
区用户的特殊需要。
    Unicode和字符集函数(Unicode and Character Set)
    Win32 API通过Unicode和传统字符集可以支持国际上的很多不同的书写语言。Unicode
是一种世界通用的字符编码标准,它使用16位的字符值来表示各种字符,包括技术符号和
出版所用的特殊字符。传统字符集是指以前所用的字符编码标准,比如Windows ANSI字符
集,它是使用8位的字符值或8位值的组合来表示在指定的语言或地理区域中所用的字符。
Unicode和字符集函数用于对字符集进行操作。
1.2.7  网络服务
    网络函数允许网络上的不同计算机的应用程序之间进行通讯。
    网络函数用于在网络中的各计算机上创建和管理共享资源的连接,例如共享目录和网络
打印机。
    网络接口包括Windows网络函数、Windows套接字(Socket)、NetBIOS、RAS、SNMP、Net
函数,以及网络DDE。Windows 95只支持这些函数中的一部分。
    网络服务函数包括以下几类:
    DLC函数(DLC)
    数据连接控制(DLC)接口是一个具有特殊目的的、不可路由的协议。它不是用于运行
Windows和Windows NT的计算机之间的通讯,而是为运行Windows或Windows NT的计算机
与IBM主机或直接连接到网络上的打印机之间提供了连通性。
    网络函数(Net)
    对于基于OS/2的服务器来说,Microsoft LAN Manager所支持的Net函数提供了很多
网络操作系统所需的功能,这些功能在本地操作系统中被忽略了。Windows NT、Windows 95
和Windows 98具有很多内置的网络功能,因此,有些原始的Net函数就不再支持了。
    Windows NT、Windows 95和Windows 98支持多种网络函数。Net函数集提供了一些其
他网络函数来覆盖的附加功能。另外,还可以使用这些函数来监测和管理基于OS/2的LAN 
Mansger服务器。
    NetBIOS函数
    Win32应用程序可以使用Network Basic Input/Output System(NetBIOS)接口与网络
中的其他计算机上的应用程序进行通讯。
    NetBIOS接口包括一系列显式命令,由一个被称为网络控制块(NCB)的结构提供。应
用程序可以对任何支持NetBIOS接口的协议发出NetBIOS命令。
    网络DDE函数(Networking DDE)
    一个进程可以使用Win32 API提供的网络动态数据交换(DDE)函数与在网络中的不同
计算机上运行的进程建立会话。
    RAS服务器管理函数(RAS Server Administration)
    在Windows NT 4.0上,可使用RAS服务器管理函数来实现RAS服务器管理功能。Windows 
95不提供RAS服务器支持。
    远程访问服务函数(Remote Access Service)
    使用远程访问服务(RAS)可以使远程用户犹如直接连接到计算机网络上一样地访问一
个或多个RAS服务器。
    远程访问服务函数用于实现远程访问服务功能。
    服务函数(Service)
    Win32 API提供了一套完整的服务函数。这些函数应该可以代替NetService函数,除
非需要控制LANManager2.x服务器上的服务。
    服务函数用于控制服务。一个服务就是一个应用程序,管理员可以使用服务控制程序接
口来控制服务。
    Windows网络函数(Windows Networking)
Windows提供的Windows网络(Wnet)函数使用户可以在应用程序中实现网络功能,而
不需使用特殊的网络供应程序或物理的网络实现。原因是Wnet函数是网络无关的。
1.3综述
出于篇幅和普适性考虑,本书将只收录5大类函数说明,它们分别是:窗口管理,图形
设备接口,系统服务,国际特性,网络服务。
第二章 窗口管理函数(Window Control Function)
2.1  易用特性函数(Accessibility Features)
2.1.1  SoundSentryProc
函数功能:该函数是一个库定义的回调函数,当SOUNDSENTRY易用特性存在,并且一个基于
win32的应用程序(或者在窗口内运行的应用程序)通过计算机的内置扬声器发声时,它产
生一个控制的可视化消息。
函数原型:LRESULT CALLBACK SOUNDSENTRYProc(DWORD dwMillisec,DWORD fdwEffect);
参数:
Millisec:指定可视化消息的持续时间,以毫秒为单位。该消息是在一个基于win32的应用
程序(或运行在窗口的应用程序)发声时显示出来的。
tdwEffect:指定要显示的可视化消息的类型。当前值通常应为SSWF_CUSTOM。
返回值:如果可视化消息已经或将要正确显示,那么返回值为TRUE,如果消息异步,并当
调用该函数时其状态无效,那么应该返回TRUE。如果出错使得消息无法显示,那么返回值
为FALSE。若想获得更多错误信息,请调用GetLastError函数。
备注:包含SOUNDSENTRYProc函数的库必须是一个32位的DLL,并且该 DLL必须导出名为
SOUNDSENTRYProc的函数,即供外部调用和连接。SOUNDSENTRYProc函数只是在应用程序或
库调用SystemParameterslnfo函数之后才调用。SystemParameterslnfo函数指定
SPI_SETSOUNDSENTRY项的值以及SOUNDSENTRY结构的地址,在SOUNDSENTRY结构中,成员
iWindowsEffect的值设为SSWF_CUSTOM。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;库
文件:用户自定义。
2.1.2  SystemParametersinfo
函数功能:该函数查询或设置系统级参数。该函数也可以在设置参数中更新用户配置文件。
函数原型:B00L SystemParametersinfo(UINT uiAction,UINT uiParam,PVOID pvParam,
UINT fWinlni);
参数:
uiAction:该参数指定要查询或设置的系统级参数。其取值如下;
SPI_GETACCESSTIMEOUT:检索与可访问特性相关联的超时段的信息,PvParam参数必须指向
某个ACCESSTIMEOUT结构以获得信息,并将该结构中的cbSjze成员和ulParam参数的值设
为sizeof(ACCESSTIMEOUT)。
SPI_GETACTIVEWINDOWTRACKING:用于Windows 98和Windows NT 5.0及以后的版本。它表
示是否打开活动窗口跟踪(激活该窗口时鼠标置为开状态),pvParam参数必须指向一个BOOL
型变量(打开时接收值为TRUE,关闭时为FALSE)。
SPI_GETACTIVEWNDTRKZORDER;用于Windows 98和Windows NT 5.0及以后版本。它表示通
过活动窗口跟踪开关激活的窗口是否要置于最顶层。pvParam参数必须指向一个BOOL型变
量,如果要置于顶层,那么该变量的值为TRUE,否则为FALSE。
SPI_GETACTIVEWNDTRKTIMEOUT:用于Windows 98和 Windows NT 5.0及以后版本。它指示
活动窗口跟踪延迟量,单位为毫秒。pvParam参数必须指向DWORD类型变量,以接收时间量。
SPI_GETANIMATION:检索与用户活动有关的动画效果。pvParam参数必须指向ANIMATIOINFO
结构以接收信息。并将该结构的cbSize成员和ulParam参数置为sizeof(ANIMATIONINFO)。
SPI_GETBEEP:表示警告蜂鸣器是否是打开的。pvParam参数必须指向一个BOOL类型变量,
如果蜂鸣器处于打开状态,那么该变量的值为TRUE,否则为FALSE。
SpI_GETBORDER:检索决定窗口边界放大宽度的边界放大因子。pvParam参数必须指向一个
整型变量以接收该值。
SPI_GETDEFAULTINPUTLANG:返回用于系统缺省输入语言的键盘布局句柄。pvParam参数必
须指向一个32位变量,以接收该值。
SPI_GETCOMBOBOXANIMATION:用于Windows 98和Windows NT 5.0及以后版本。它表示用于
组合柜的动打开效果是否允许。pvParam参数必须指向一个BOOL变量,如果允许,那么变
量返回值为TRUE,否则为FALSE。
SPI_GETDRAGFULLWINDOWS:确定是否允许拖拉到最大窗口。pvParam参数必须指向BOOL变
量,如果允许,返回值为TRUE,否则为FALSE。对于Windows 95系统,该标志只有在安装
了Windows plusl才支持。
SPI_GETFASTTASKSWITCH:该标志已不用!以前版本的系统使用该标志来确定是否允许Alt
+Tab快速任务切换。对于Windows 95、Windows 98和Windows NT 4.0版而言,快速任务
切换通常是允许的。
SPI_GETFILTERKEYS:检索有关FILTERKEYS(过滤键)易用特征信息。pvParam参数必须指
向接收信息的filterkeys结构,并将该结构中的cbSze成员和ulParam参数的值设为sizeof
(FILTERKEYS)。
SPI_GETFONTSMOOTHING:表示字体平滑处理特征是否允许。该特征使用字体保真技术,通过
在不同灰度级上涂上像素使字体曲线显得更加平滑。参数pvParam必须指向BOOL类型变量,
如果该特征被允许,那么返回值为TRUE,否则为FALSE。对于Windows 95系统,该标志只
有在安装了Windows plusl才支持。
SPI_GETFOREGROUNDFLASHCOUNT:用于Windows 98和Windows NT 5.0及以后版本。它表示
在拒绝前台切换申请时系统闪烁任务条按钮的次数。参数pvParam必须指向DWORD变量,以
接收该值。
SPI_GETFOREGROUNDLOCKTIMEOUT:用于Windows NT 5.O及以后版本或Windows 98。它表示
在系统禁止应用程序强行将自己进入前台期间的时间量,单位为毫秒.参数pvParam必须指
向DWORD变量以接收时间值。
SPI_GETGRADIENTCAPTIONS:用于Windows 98和Windows NT 5.0及以后版本。它表示是否
允许有用于窗口标题栏的倾斜效果。参数pvParam必须指向BOOL变量,其值在允许时为
TRUE,禁止时为FALSE。
SPL_GETGRIDGRANULARITY:检索桌面大小网格的当前颗粒度值。参数pVparam必须指向一个
整型变量以接收该值。
SPI_GETHIGHCONTRAST:用于Windows 95及更高版本、Windows NT 5.0及以后版本。检索
与HighContrast易用特征有关的信息。pvParam参数必须指向用于接收该信息的
HIGHCONTRAST结构,该结构中的。cbSize成员和ulParam参数的值应设为sizeof
(NIGHCONTRAST)。
SPI_GETICONMETRICS:检索与图标有关的度量信息。参数pvParam必须指向一个ICONMETRICS
结构以接收信息。该结构中的。cbSize成员和ulParam参数的值应设为sizeof
(ICONMETRICS)。
SPI_GETICONTITLELOGFONT:检索当前图标标题字体的逻辑字体信息。参数ulParam规定了
logfont结构的大小,参数pvParam必须指向要填充的Iogfont结构。
SPI_GETICONTITLEWRAP:确定是否允许图标标题环绕。pvParam参数必须指向一个BOOL类
型变量,该变量的值在允许时为TRUE,否则为FALSE。
SPI_GETKEYBOARDDELAY:检索键盘重复击键延迟设置,该值范围从0(大约25Oms延迟)到
3(大约1秒延迟)。与该范围里每一个值相关的实际延迟时间可能与硬件有关。pvParam参
数必须指向一个整型变量以接收设置值。
SPI_GETKEYBOARDPREF:用于Windows 95及以后版本。Windows NT 5.O及以后版本。它确
定用户是否依赖键盘而非鼠标,是否要求应用程序显示键盘接口,以免隐藏。pvParam参数
必须指向一个BOOL类型变量,如果用户依赖键盘,那么该变量取值为TRUE,否则为FALSE。
SPI_GETKEYBOARDSPEED:检索键盘重复击键速度设置情况,该值范围从0(大约30次/秒)
至31(大约25次/秒)。实际的击键速率与硬件有关,而且变动的线性幅度有可能高达20%。
参数pvParam必须指向DWORD变量以接收设置值。
SPI_GETLISTBOXSMOOTHSCROLLING:用于Windows 98和Windows NT 5.0及以后版本。表示
是否允许有列表栏的平滑滚动效果。pvParam参数必须指向BOOL变量,如果允许,则该值
为TRUE,否则为FALSE。
SPI_GETLDWPOWERACTIVE:确定是否允许屏幕保护的低电压状态。如果允许,那么指向BOOL
变量的pvParam参数会接收到TRUE值,否则为FALSE。对于Windows 98,该标志对16位和
32位应用程序都支持。
对于Windows 95,该标志只支持16位应用程序。对于Windows NT,在Windows NT 5.0及
以后版本中支持32位应用程序,对16位应用程序则不支持。
SPI_GETLOWPOWERTIMEOUT:检索用于屏幕保护的低电压状态超时值。pvParam参数必须指向
一个整型变量,以接收该值。对于Windows 98该标志支持16位和32位应用程序。对于
Windows95,该标志只支持16位应用程序。对于Windows NT,该标志支持Windows NT 5.0
及以后版本上的32位应用程序。不支持16位应用程序。
SPI_GETMENUDROPALIGNMENT。确定弹出式菜单相对于相应的菜单条项是左对齐,还是右对齐、
参数pvParam必须指向一个BOOL类型变量,如果是左对齐。那么该变量值为TRUE,否则为
FALSE。SPI_GETMINIMIZEDMETRICS:检索最小化窗口有关的度量数据信息。参数pvParam必
须指向MINIMIZEDMETRCS结构,以接收信息。该结构中的cbSize和ulParam参数的值应设
为sizeof(MINIMIZEDMETRICS)。
SPI_GETMOUSE:检索鼠标的2个阈值和加速特性。pvParam参数必须指向一个长度为3的整
型数组,分别存储此值。
SPI_GETMOUSEHOVERHEGHT:用于Windows NT 4.0及以后版本或Windows 98。获得在
TrackMouseEvent事件中,为产生WM_MOUSEOVER消息而鼠标指针必须停留的矩形框的高度,
以像素为单位。参数pvParam必须指向一个UINT变量以接收这个高度值。
SPI_GETMOUSEHOVERTIME:用于Windows NT 4.0及以后版本、Windows 98,获得在
TrackMouseEvent事件中,为产生WM_MOUSEOVER消息而鼠标指针必须停留在矩形框内的时
间,单位为毫秒。参数pvParam必须指向一个UINT变量以接收该时间值。
SPI_GETMOUSEHOVERWIDTH:用于Windows NT 4.0及以后版本、Windows 98。获得在
TrackMouseEvent事件中,为产生WM_MOUSEOVER消息而鼠标指针必须停留的矩形框的宽度,
以像素为单位。参数pvParam必须指向一个UINT变量以接收这个宽度值。
SPI_GETMOUSEKEYS:检索与MOUSEKEYS易用特征有关的信息,pvParam参数必须指向某个
MOUSEKEYS结构,以获取信息。应将结构的cbSize成员和ulParam参数设置为sizeof
(MOUSEKEYS)。
SPI_GETMOUSESPEED:用于Windows NT 5.0及以后版本、Windows 98。检索当前鼠标速度。
鼠标速度决定了鼠标移动多少距离,鼠标的指针将移动多远。参数pvParam指向一个整型变
量,该变量接收1(最慢)至20(最快)之间的数值。缺省值为们10。这个值可以由最终
用户使用鼠标控制面板应用程序或使用调用了SPI_SETMOUSESPEED的应用程序来设置。
SPI_GETMOUSETRAILS:用于WpvParam必须指向一个BOOL类型变量,如果是左对齐。那么该
变量值为TRUE,否则为FALSE。
SPI_GETMINIMIZEDMETRICS:检索最小化窗口有关的度量数据信息。参数pvParam必须指向
MINIMIZEDMETRCS结构,以接收信息。该结构中的cbSize和ulParam参数的值应设为sizeof
(MINIMIZEDMETRICS)。
SPI_GETMOUSE:检索鼠标的2个阈值和加速特性。pvParam参数必须指向一个长度为3的整
型数组,分别存储此值。
SPI_GETMOUSEHOVERHEGHT:用于Windows NT 4.0及以后版本或Windows 98。获得在
TrackMouseEvent事件中,为产生WM_MOUSEOVER消息而鼠标指针必须停留的矩形框的高度,
以像素为单位。参数pvParam必须指向一个UINT变量以接收这个高度值。
SPI_GETMOUSEHOVERTIME:用于Windows NT 4.0及以后版本、Windows 98,获得在
TrackMouseEvent事件中,为产生WM_MOUSEOVER消息而鼠标指针必须停留在矩形框内的时
间,单位为毫秒。参数pvParam必须指向一个UINT变量以接收该时间值。
SPI_GETMOUSEHOVERWIDTH:用于Windows NT 4.0及以后版本、Windows 98。获得在
TrackMouseEvent事件中,为产生WM_MOUSEOVER消息而鼠标指针必须停留的矩形框的宽度,
以像素为单位。参数pvParam必须指向一个UINT变量以接收这个宽度值。
SPI_GETMOUSEKEYS:检索与MOUSEKEYS易用特征有关的信息,pvParam参数必须指向某个
MOUSEKEYS结构,以获取信息。应将结构的cbSize成员和ulParam参数设置为sizeof
(MOUSEKEYS)。SPI_GETMOUSESPEED:用于Windows NT 5.0及以后版本、Windows 98。检索
当前鼠标速度。鼠标速度决定了鼠标移动多少距离,鼠标的指针将移动多远。参数pvParam
指向一个整型变量,该变量接收1(最慢)至20(最快)之间的数值。缺省值为们10。这
个值可以由最终用户使用鼠标控制面板应用程序或使用调用了SPI_SETMOUSESPEED的应用程
序来设置。
SPI_GETMOUSETRAILS:用于Windows 95及更高版本。它用来表示是否允许MouseTrails(鼠
标轨迹)。该特征通过简单地显示鼠标轨迹并迅速擦除它们来改善鼠标的可见性。参数
prParam必须指向一个整型变量来接收该值。如果这个值为0或1,那么表示禁止该特征。
如果该值大于1,则说明该特征被允许,并且该值表示在鼠标轨迹上画出的光标数目。参数
ulParam不用。
SPI_GETNONCLIENTMETRICS:检索与非最小化窗口的非客户区有关的度量信息。参数pvParam
必须指向NONCLIENTMETRICS结构,以便接收相应值。该结构的。cbSize成员与ulParam参
数值应设为sizeof(NONCLIENTMETRICS)。对于Windows 98,该标志支持16位和32位应用
程序。对于Windows 95,该标志只支持16位应用程序。对于Windows NT该标志在NT 5.0
及以后版本中支持32位应用程序,不支持16位应用程序。
SPI_GETPOWEROFFACTIVE:确定是否允许屏幕保护中关电。TRUE表示允许,FA参数pvParam
必须指定SERIALKEYS结构来接收信息。该结构中的cbSize成员和ulParam参数的值要设为
sizeof(SERIALKEYS)。
SPI_GETSHOWSOUNDS:确定ShowSounds易用特性标志是开或是关。如果是开,那么用户需要
一个应用程序来可视化地表达信息,占则只能以听得见的方式来表达。参数pvParam必须指
向一个BOOL类型变量。该变量在该特征处于开状态时返回TRUE,否则为FALSE。使用这个
值等同于调用GetSystemMetrics(SM_SHOWSOUNDS)。后者是推荐使用的调用方式。
SPI_GETSNAPTODEFBUTTON:用于Windows NT 4.0及以后版本、Windows 98:确定 Snap-TO-
Default-Button(转至缺省按钮)特征是否允许。如果允许,那么鼠标自动移至缺省按钮上,
例如对话框的“Ok”或“Apply”按钮。pvParam参数必须指向Bool类型变量,如果该特征
被允许,则该变量接收到TRUE,否则为FALSE。
SPI_GETSOUNDSENTRY:检索与SOUNDSENTRY可访问特征有关的信息。参数pvParam必须指向
SOUNDSENTRY结构以接收信息。该结构中的。cbSize或员和ulParam参数的值要设为sizeof
(SOUNDSENTRY)。
SPI_GETSTICKYKEYS:检索与StickyKeys易用特征有关的信息。参数 pvParam必须指向
STICKYKEYS结构以获取信息。该结构中的cbSze成员及ulParam参数的值须设为sizeof
(STICKYKEYS)。
SPI_GETSWITCHTASKDISABLE:用于Windows NT 5.0、Windows 95及以后版本,确定是否允
许Alt+Tab和AIt+Esc任务切换。参数pvParam必须指向UINT类型变量,如果禁止任务
切换,那么返回值为1,否则为0。在缺省情况下,是允许进行任务切换的。
SPI_GETTOGGLEKEYS:检索与ToggleKeys易用特性有关的信息。参数pvParam必须指向
TOGGLEKEYS结构以获取信息。该结构中的cbSize成员和ulParam参数值要设置sizeof
(TOGGLEKEYS)。
SPI_GETWHEELSCROLLLINES:用于Windows NT 4.0及以后版本、Windows 98。当前轨迹球转
动时,获取滚动的行数。参数pvParam必须指向UINT类型变量以接收行数。缺省值是3。
SPI_GETWINDOWSEXTENSION:在Windows 95中指示系统中是否装了Windows Extension和
Windows Plus!。
参数ulParam应设为1。而参数pvParam则不用。如果安装了Windows Extenson,那么该函
数返回TRUE,否则为FALSE。
SPI_GETWORKAREA:检索主显示器的工作区大小。工作区是指屏幕上不被系统任务条或应用
程序桌面工具遮盖的部分。参数pvParam必须指向RECT结构以接收工作区的坐标信息,坐
标是用虚拟屏幕坐标来表示的。为了获取非主显示器的工作区信息,请调用GetMonitorlnfo
函数。参数ulParam指定宽度,单位是像素。
SPI_ICONVERTICALSPACING:设置图标单元的高度。参数ulParam指定高度,单位是像素。
SPI_LANGDRIVER:未实现。
SPI_SCREENSAVERRUNNING:改名为SPI_SETSCREENSAVERRUNNING。
Spl_SETACCESSTIMEOUT:设置与可访问特性有关的时间限度值,参数 pvParam必须指向包
含新参数的ACCESSTIMEOUT结构,该结构的cbSize成员与ulParam参数的值要设为sizeof
(ACCESSTMEOUT)。
SPI_SETACTIVEWINDOWTRACKING:用于Windows NT 5.0及以后版本、Windows 98。设置活动
窗口追踪的开或关,如果把参数pvParam设为TRUE,则表示开。pvParam参数为FALSE时表
示关。
SPI_SETACTIVEWNDTRKZORDER:用于Windows NT 5.0及以后版本、Windows 98。表示是否把
通过活动窗口跟踪而激活的窗口推至顶层。参数pvParam设为TRUE表示推至顶层,FALSE
则表示不推至顶层。
SPI_SETACTIVEWNDTRKTIMEOUT:用于Wlindows NT 5.0及以后版本、Windows 98。设置活动
窗口跟踪延迟。
参数pvParam设置在用鼠标指针激活窗口前需延迟的时间量,单位为毫秒。
SPI_SETBEEP:将警蜂器打开或关闭。参数ulParam指定为TRUE时表示打开,为FALSE时表
示关闭。
SPI_SETBORDER:设置确定窗口缩放边界的边界放大因子。参数ulParam用来指定该值。
SPI_SETCOMBOBOXANIMATION:用于Windows NT 5.0及以后版本和Windows 98。允许或禁止
组合滑动打开效果。如果设置pvParam参数为TRUE,则表示允许有倾斜效果,如果设为FALSE
则表示禁止。
SPI_SETCURSORS:重置系统光标。将ulParam参数设为0并且pvParam参数设为NULL。
SPI_SETDEFAULTINPUTLANG:为系统Shell(命令行解器)和应用程序设置缺省的输入语言。
指定的语言必须是可使用当前系统字符集来显示的。pvParam参数必须指向DWORD变量,该
变量包含用于缺省语言的键盘布局句柄。
SpI_SETDESKpATTERN:通过使Windows系统从WIN.INI文件中pattern=设置项来设置当前
桌面模式。
SPI_SETDESKWALLPAPER:设置桌面壁。pvParam参数必须指向一个包含位图文件名,并且以
NULL(空)结束的字符串。
SPI_SETDOUBLECLICKTIME:设ulParam参数的值为目标双击时间。双击时间是指双击中的第
1次和第2次点击之间的最大时间,单位为毫秒。也可以使用SetDoubleClickTime函数来
设置双击时间。为获取当前双击时间,请调用GetDoubleClickTime函数。
SPI_SETDOUBLECLKHEGHT:将ulParam参数的值设为双击矩形区域的高度。双击矩形区域是
指双击中的第2次点击时鼠标指针必须落在的区域,这样才能记录为双击。
SPI_SETDOUBLECLKWIDTH:将ulParam参数的值设为双击矩形区域的宽度。
SPI_SETDRAGFULLWINDOWS:设置是否允许拖至最大窗口。参数uIParam指定为TRUE时表示
为允许,为FALSE则不可。对于Windows 95,该标志只有在安装了Windows plusl才支持。
SPI_SETDRAGHEIGHT:设置用于检测拖拉操作起点的矩形区域的高度,单位为像素。参考
GETSYSTEMMETRICS函数的nlndex参数中的SM_CXDRAG和SM_CYDRAG。
SPI_SETDRAGWIDTH:设置用于检测拖拉操作起点的矩形区域的宽度,单位为像素。
SPI_SETFASTTASKSWITCH:该标志己不再使用。以前版本的系统使用此标志来允许或不许进
行Alt+Tab快速任务切换。对于Windows 95、Windows 98和Windows NT 4.0,通常都允
许进行快速任务切换。参考SPI_SETSWITCHTASKDISABLE。
SPI_SETFILTERKEYS:设置FilterKeys易用特性的参数。参数pvParam必须指向包含新参数
的FILTERKEYS结构,该结构中的cbSize成员和参数ulParam的值应设为sizeof
(FILTERKEYS)。
SPI_SETFONTSMOOTHING:允许或禁止有字体平滑特性。该特性使用字体保真技术,通过在不
同灰度级上涂画像素点来使得字体曲线显得更加平滑,为了允许有该特性,参数ulParam应
设为TRUE值,否则为FALSE。对于Windows 95,只有在安装了Windows plusl才支持该标
志。
SPI_SETFOREGROUNDFLASHCOUNT:用于Windows 98和Windows NT 5.0及以后版本。设置
SetForegroundWindow在拒绝前台切换申请时闪烁任务拦按钮的次数。
SPI_SETFOREGROUNDLOCKTIMEOUT:用于Windows 98和Windows NT 5.0及以后版本。它用来
设置在用户输入之后,系统禁止应用程序强行将自己进入前台期间的时间长度,单位为毫秒。
参数pvParam设置这个新的时间限度值。
SPI_SETGRADIENTCAPTIONS:用于Windows 98和Windows NT 5.0及以后版本。允许或禁止
窗口标题栏有倾斜效果。如果允许则将参数pvParam设置为TRUE,否则设为FALSE。有关倾
斜效果方面更多信息,请参考GetSysColor函数。
SPI_SETGRIDGRANULARITY:将桌面缩放时网格的颗粒度值设置为参数ulParam中的值。
SPI_SETHANDHELD:内部使用,应用程序不应使用该值。
SPI_SETHIGHCONTRAST:用于Windows 95及以后版本、Windows NT 5.0及以后版本。设置
HighContrast可访问特性的参数。参数pvParam必须指向HIGHCONTRAST结构,该结构包含
新的参数。该结构中的cbSize成员及参数ulParam的值设为sizeof(HIGHCONTRAST)。
SPI_SETICONMETRICS:设置与图标有关的信息。参数pvParam必须指向包含新参数的
ICONMETRICS结构,另外还要将参数ulParam和该结构中的cbSize成员的值设置为sizeof
(ICONMETRICS)。
SPI_SETICONS:重新加载系统图标。参数ulParam的值应设为0,而pvParam参数应设为NULL。
SPI_SETICONTITLELOGFONT:设置用于图标标题的字体。参数ulParam指定为logfont结构
的大小,而参数pvParam必须指向一个LOGFONT结构。
SPI_SETICONTITLEWRAP:打开或关闭图标标题折行功能。若想打开折行功能,则把参数
ulParam设为TRUE,否则为FALSE。
SPI_SETKEYBOARDDELAY:设置键盘重复延迟。参数ulParam必须指定为0,1,2或3。其中
0表示设置为最短延迟(大约 250ms)3,表示最大延迟(大约 1 秒)。与每个值对应的实
际的延迟时间根据硬件情况有可能有些变化。
SPI_SETKEYBOARDPREF:用于Windows 95及以后版本、Windows NT 5.0及以后版本,设置
键盘优先序。如果用户依赖键盘而不是鼠标,那么可将参数ulParam指定为TRUE,否则设
为FALSE,并且要求应用程序显示而不隐蔽键盘接口。
SPI_SETKEYBOARDSPEED:设置键盘重击键速度。参数ulParam必须指定一个从0到31的值,
其中0表示设置成最快速度(大约30次/秒),31表示设置为最低速度(大约2。5次/秒),
实际的重速率与硬件有关,而且可能变动幅度高达20%。如果ulParam大于31,那么该参
数仍设置为31。
SPI_SETLANGTOGGLE:为输入语言间切换设置热键集。参数ulParam和pvParam不用。该值
通过读取注册表来设置键盘属性表单中的快捷键。在使用该标志之前必须设置注册表,注册
表中的路径是“1”=Alt+shift,”2”=Ctrl+shift,”3”=none(无)。
SPI_SETLISTBOXSMOOTHSCROLLING:用于Windows 98和Windows NT 5.0及以后版本。允许
或不许列表栏有平滑滚动效果。参数pvParam设置为TRUE表示允许有平滑滚动效果,为FALSE
则表示禁止。
SPI_SETLOWPOWERACTIVE:激活或关闭低电压屏幕保护特性。参数ulParam设为1表示激活,
0表示关闭。参数pvParam必须设为NULL。对于Windows 98,该标志支持16位和32位应用
程序。对于Windows 95,该标志只支持16位应用程序。对于Windows NT.该标志只支持NT 
5.0及以后版本的32位应用程序,不支持16位应用程序。
SPI_SETLOWPOWERTIMEOUT:用于设置低电压屏幕保护中的时间值(也称超时值,即在超过某
一时间段后自动进行屏幕保护),单位为秒。uIParam参数用来指定这个新值。参数pvParam
必须为NULL。对于Windows98,该标志支持16位和32位应用程序。对于Windows 95,该
标志只支持16位应用程序。对于Windows  NT该标志只支持NT 5.0及以后版本的32位应
用程序,不支持16位应用程序。
SPI_SETMENUDROPALIGNMENT:设置弹出或菜单的对齐方式。参数ulParam指定为TRUE时表
示是右对齐,FALSE时为左对齐。
SPI_SETMINIMIZEDMETRICS:设置与最小化窗口有关的数据信息,参数pvParam必须指向包
含新参数的MINIMIZEDMETRICS结构。该结构中的cbSize成员与ulParam参数的值应设为
sizeof(MINMIZEDMETRICS)。
SPI_SETMOUSE:设置鼠标的两个阀值和加速率。参数pvParam必须指向一个长度为3的数组,
以指定这些值。详细请参考mouse_event。
SPI_SETMOUSEBUTTONSWAP:调换或恢复鼠标左右按钮的含义,为FALSE时表示恢复原来的含
义。
SPI_SETMOUSEHOVERHEGHT:用于Windows 98和Windows NT 4.0及以后版本。设置鼠标指针
停留区域的高度,以像素为单位。鼠标指针在此区域停留是为了让TrackMouseEvent产生一
条WM_MUOSEHOVER消息,参数ulParam用来设置此高度值。
SPI_SETMOUSEHOVERTIME:用于Windows  98和Windows NT 4.0及以后版本。设置鼠标指针
为了让TrackMouseEvent产生WM_MOUSEHOVER事件而在停留区域应停留的时间。该标志只有
在将调用dwHoverTime参数中的HOVER_DEFAULT值传送到TrackMouseEvent时才使用。参数
ulParam设置这个新的时间值。
SPI_SETMOUSEHOVERWIDTH:用于Windows 98和Windows NT 4.0及以后版本。设置鼠标指针
停留区域的宽度,以像素为单位。参数ulParam设置该新值。
SPI_SETMOUSEKEYS:设置MouseKeys易用特性的参数。参数pvParam必须指向包含新参数的
MOUSEKEYS结构。结构中的cbSize成员与参数ulParam的值应设为sizeof(MOUSEKEYS)。
SPI_SETMOUSESPEED:用于Windows NT 5.0及以后的版本和Windows 98,设置当前鼠标速
度。参数pvParam必须指向一个1(最慢)至20(最快)之间的整数。缺省值是10。一般
可以使用鼠标控制面板应用程序来设置该值。
SPI_SETMOUSETRAILS:用于Windows 95及以后版本:允许或禁止有MoouseTrails(鼠标轨
迹)特性。该特性通过简短地显示鼠标光标轨迹,并迅速地擦除它们来提高鼠标的可见度。
禁止该特性可将参数ulParam设为0或1,允许时,将ulParam设置为一个大于1的数值,
该值表示轨迹中画出的光标个数。
SPI_SETNONCLIENTMETRICS:设置与非最小化窗口的非客区有关的数据信息,参数pvParam
必须指向NONCLIENTMETRICS结构,该结构包含新的参数。其成员cbSzie和参数ulParam的
值应设为sizeof(NONCLIENTMETRICS)。
SPI_SETPENWINDOWS;用于Windows 95及以后版本:指定是否加载笔窗口,当加载时,参数
ulParam设为TRUE,不加载时为FALSE。参数pvParam为NULL。
SPI_SETPOWEROFFACTIVE:激活或关闭屏幕保护特性参数。ulParam设为1表示激活,0表示
关闭。参数pvParam必须为NULL。对于Windows 98,该标志支持16位和32位应用程序。
对于Windows 95,该标志只支持16位应用程序。对于Windows NT,该标志支持Windows NT 
5.0及以后版本的32位应用程序,不支持16位应用程序。
SPI_SETPOWEROFFTIMEOUT:设置用于关闭屏幕保护所需的时间值(也称超时值)。参数ulParam
指定该值。参数pvParam必须为NULL。对于Windows 98.该标志支持16位和32位应用程
序。对于Windows 95,该标志只支持16位应用程序。对于Windows NT,该标志支持Windows 
NT 5.0及以后版本上的32位应用程序,不支持16位应用程序。
SPI_SETSCREENREADER;用于Windows 95及以后版本、Windows NT 5.0及以后版本,表示
屏幕审阅程序是否运行。参数uiparm指定为TRUE表示运行该程序,FALSE则不运行。
SPI_SETSCREENSAVERRUNNING:用于Windows 95及以后版本,内部使用。应用程序不应该使
用此标志SPI_SETSETSCREENSAVETIMEOUT:参数ulParam值为屏幕保护器时间限度值。该值
是一个时间量,以秒为单位,在屏幕保护器激活之前,系统应该一直是空闲的,超过这个值
就激活屏幕保护器。
SPI_SETSERIALKEYS:用于Windows 95及以后版本:设置SerialKeys易用特性的参数。参
数pvParam必须指向包含新参数的SERIALKEYS结构,其成员cbSize和参数ulParam应设为
sizeof(SERIALKEYS)。
SPI_SETSHOWSOUNDS:将ShowSounds易用特性设置为打开或关闭。参数ulParam指定为TRUE
时表示打开,FALSE表示关闭。
SPI_SETSNAPTODEFBUTTON:用于Windows NT 4.0及以后版本、Windows 98。允许或禁止有
snap-to-default-button(跳转至缺省按钮)特性。如果允许,那么鼠标光标会自动移至缺
省按钮上,例如对话柜中的OK或”apply”按钮。参数ulParam设为TRUE表示允许该特性,
FALSE表示禁止。
SPI_SETSOUNDSENTRY:设置SOUNDSENTRY易用特性的参数。参数pvParam必须指向
SOUNDSENTRY结构,该结构包含新参数,其成员cbSize和参数ulParam的值应设为sizeof
(SOUNDSENTRY)。
SPI_SETSTICKYKEYS:设置stickykeys可访问特性的参数。参数pvParam必须指向包含新参
数的stickykeys结构,其成员cbSize和ulParam参数的值要设为sizeof(STICKYKEYS)。
SPI_SETSWITCHTASKDISABLE:用于Windows NT 5.0及以后版本,允许或禁止有Alt+Tab和
Alt+Esc任务切换特性。参数ulParam设为1表示允许有该特性,设为0则表示禁止。缺
省情况下是允许有任务切换特性的。
SPI_SETTOGGLEKEYS:设置togglekeys可访问特性的参数,参数PvParam必须指向TOGGLEKEYS
结构,该结构中包含新的参数。其成员cbSize和参数ulParam的值要设为sizeof
(togglekeys)。
SPI_SETWHEELSCROOLLLINES:用于Windows 98和Windows NT 4.O及以后版本。设置当鼠标
轨迹球转动时
要滚动的行数,滚动的行数是由参数ulParam设置的,该行数是在鼠标轨迹球滚动,井且没
有使用修改键时的滚动行数。如果该数值为0,那么不会发生滚动,如果滚动行数比可见到
的行数要大,尤其如果是WHEEL_PAGESCROLL(#defined sa UINT_MAX),那么滚动操作应
该被解释成在滚动条的下一页或上一页区点击一次。
SPI_SETWORKAREA:设置工作区域大小。工作区是指屏幕上没有被系统任务栏或桌面应用程
序桌面工具遮盖的部分。参数pvParam是一个指针。指向RECT结构,该结构规定新的矩形
工作区域,它是以虚拟屏幕坐标来表达的。在多显示器系统中,该函数用来设置包含特定矩
形的显示器工作区域。如果PvParam为NULL,那么该函数将主显示器的工作区域设为全屏。
ulParam:与查询或设置的系统参数有关。关于系统级参数的详情,请参考uiAction参数。
否则在没有指明情况下,必须将该参数指定为O。
pvParam:与查询或设置的系统参数有关。关于系统级参数的详情,请参考uiAction参数。
否则在没有指明情况下,必须将该参数指定为NULL。
fWinlni:如果设置系统参数,则它用来指定是否更新用户配置文件(Profile)。亦或是否
要将WM_SETTINGCHANGE消息广播给所有顶层窗口,以通知它们新的变化内容。该参数可以
是0或下列取值之一:
SPIF_UPDATEINIFILE:把新的系统参数的设置内容写入用户配置文件。
SPIF_SENDCHANGED:在更新用户配置文件之后广播WM_SETTINGCHANGE消息。
SPI_SENDWININICHANGE与 SPIF_SENDCHANGE一样。
返回值:如果函数调用成功,返回值非零:如果函数调用失败,那么返回值为零。若想获取
更多错误信息,请调用GetLastError函数。
备注:该函数一般与应用程序,例如控制面板一起使用。它可以允许用户对Windows任意进
行定制。
    键盘布局名称是从对应于布局的16进制语言标识符引生而来的。例如,美国英语
(U.S.Englisth)的语言标识符为“ 0×0409”,则主美国英语键盘布局命名为“00000409”
其他的键盘布局如Dvotak等,命名为”00010409”、”00020409”等,关于此的列表参见
MAKELANGID宏。
    Windows CE操作系统只支持下列uiAction值:
SPI_GETBATTERYIDLETIMEOUT:在WINDOWS CE没有因用户操作而挂起之前,干电池电源能坚
持给系统供电的时间量可以使用该标志得到。以秒为单位,如果pvParam为0,那么该标志
被忽略。
SPI_GETEXTERNALIDLETIMEOUT:在 Windows CE没有因用户操作而挂起之前,交流电源能坚
持给系统供电时间的时间量可以使用该标志得到。参数pvParam指向一个DWORD类型变量,
以返回时间值,单位为秒。如果pvParam为0,那么该标志被忽略。
SPI_GETMOUSE:检索鼠标的两个阈值和速度。
SPI_GETOEMINFO:返回一个字符串,该字符串包含型号和制造商名称。参数ulParam指定为
pvParam参数中缓冲区的长度,在成功返回时,参数pvParam中包含Unicode字符集中的字
符串。
SPI_GETPLATFORMTYPE:返回一个指定Windows CE设备类型的字符串,例如“H/PC”。参数
ulParam规定pvParam参数缓冲区的长度,后者在成功返回时包含一个Unicode字符集中的
字符串。该字符串允许象 H/PC EXPLORER一样的应用程序来确定设备类型。
SPI_GETWAKEUPDLETIMEOUT:在用户通知重新激活某个挂起的设备之后,可获取的Windows CE
延缓响应的时间量。参数pvParam指向一个DWORD类型变量以返回时间值,单位为秒。如果
pvParam值为0那么该标志被忽略。
SPI_GETWORKAREA:检索工作区大小。工作区是指没有被任务遮盖的屏幕部分。
SPI_SETBATTERYidletimeout:在Windows CE没有因用户操作而挂起之前,电池电源能坚持
给系统供电的时间量可以使用该标志来设置。只要键盘或触摸屏处在活动状态(有输入),
那么Windows CE操作系统及电池电源仍将工作。参数ulParam指定要设置的时间,单位为
秒。如果ulParam设置为0,那么该标志被忽略。
SPI_SETEXTERNALIDLETIMEOUT:在Windows CE没有因用户操作而挂起之前,交流电源能坚
持给系统供电的时间量可以使用该标志来设置。只要键盘或触摸屏幕处在活动状态,那么
Windows CE操作系统及AC电源仍将工作。参数ulParam指定要设置的时间,单位为秒。如
果ulParam设为0,那么该标志被忽略。SPL_SETMOUSE:设置鼠标的两个阈值和速度。
SPI_SETWAKEUPIDLETIMEOUT:在用户通知重新激活某个挂起的设备之后,Windows CE延缓
响应的时间长度量可使用该标志来设置。参数ulParam指定这个时间量,单位为秒,如果
ulParam设置为0,那么该标志被忽略。
SPI_SETWORKAREA设置工作区大小,工作区是指没有被任务条遮盖的屏幕部分。如果用来获
取平台类型或OEM信息串的pvParam缓冲区太小,那么该函数会调用失败,并出现错误值
ERROR_INSUFFICENT_BUFFER。Windows CE只支持该函数的UNICODE版。Windows CE不支持
参数fWinlni的取值为SPIF_SENDWININICHANGE的情形。
速查:Windows NT:3.1及以上版本;Window:95及以上版本;Windows CE:不支持;头文
件:Winuser.h;库文件:user32.lib;Unicode:在Windows NT环境中实现为Unicode和
ANSI两个版本。
2.2  按钮函数(Button)
2.2.1  CheckDlgButton
函数功能:该函数改变按钮控制的选中状态。
函数原型:BOOL CheckDlgButton(HWNDhDlg,int nlDButton,UINT uCheck);
参数:
hDlg:指向含有该按钮的对话框的句柄。
nlDButton:标识要修改的按钮。
uCheck:给定该按钮的选中状态。该参数可取下列值,这些值的含义如下:
BST_CHECKED:设置按钮状态为己选中(checked)。
BST_INDETERMINATE:设置按钮状态变灰,表示不确定状态。只有在该按钮具有BS_3STATE
或BS_AUTO3STATE样式时才能使用该值。
BST_UNCHECKED:设置按钮为未选中状态(unchecked)。
返回值:如果函数执行成功,返回值非零;如果函数失败,则返回值为零。若想获取更多错
误信息,请调用 GetLastError函数。
速查;Windows NT:3.1 及以上版本;WindowS:95及以上版本;Windows CE:不支持:头
文件:Winuser.h;库文件:user32.lib。
2.2.2  CheckRadioButton
函数功能:该函数给一组单选按钮中的一个指定按钮加上选中标志,并且清除组中其他按钮
的选中标志。
函数原型:BOOL CheckRadioButtoh(HWNDhDlg, intnlDFirstButton, intnlDLastBUtton, 
intnlDCheckButton);
参数:
hDlg:指向包含单选按钮的对话框的句柄。
nlDFirstButton:指定组中第1个单选按钮的标识符。
nlDLastButton:指定组中最后一个单选按组的标识符。
nlDCheckButton:指出要选中的那个单选按钮的标识符。
返回值:如果函数执行成功,返回值非零;如果失败,则返回零。若想获取更多错误信息,
请调用GetLastError函数。
速查:Windows NT:3.1及以上版本;Windows:95及以广版本;Windows CE:1.0及以上
版本;头文件:winuser.h;库文件:user32.lib。
2.2.3  IsDlgButtonChecked
函数功能:该函数可以确定某个按钮控制是否有选中标志,或者三态按钮控制是否为灰色的、
选中的、或两者都不是。
函数原型:UINT IsDlgButtonChecked(HWND hDlg,Int nlDBUtton);
参数:
hDlg:指向包含按钮控制的对话框。
nkDButtom:指定按钮控制的整型标识符。
返回值:使用BS_AUTOCHECKBOX、BS_AUTORADIOBUTTON、BS_AUTO3STATE、BS_CHECKBOX、
BS_RADIOBUTION或BS_3STATE样式创建的按钮的返回值可以是如下值之一:
BST_CHECKED:表示按钮被选中。
BST_INDETERMINATE:表示按钮是灰色的,即为不确定状态(只有具有BS_3STATE或
BS_AUTO3STATE样式的按钮才使用该值)。
BST_UNCHECKED:表示该按钮未选中(unckecked)。如果该按钮用其他任何样式,那么返回
值为零。
速查:Windows NT:3.1及以11版本;Windows:95及以上版本;Windows CE:不支持:头
文件:winuser.h;库文件:user32.lib。
2.3  插入标记(^)函数(Caret)
2.3.1  CreateCaret
函数功能;该函数为系统插入标记创建一个新的形状,并且将插入标记的属主关系指定给特
定的窗口。插入标记的形状。可以是线、块或位图。
函数原型:BOOL CreateCaret(HWND hWnd,HBIBMAP hBitmap,int nHeight); 
参数:
hWnd:指定佣有插入标记的窗口。
hBitmap:标识用于定义插入标记形状的位图。如果该参数为NULL,那么插入标记是实心的
(原色),如果该参数为(HBITMAP)1,那么插入标记是灰色的。如果该参数是位图句柄,
那么插入标记就是指定的位图。位图句栖必须已中由CreateBitmap、CreatDIBitmap或
LoadBitmap函数创建。
    如果hBitmap为位图句栖,那么CreateCaret函数将忽略参数nWidth和nHeight,因
为该位图定义了自己的宽度和高度。
nWidth:按逻辑单位指定插入标记的宽度,如果该参数为零,那么宽度就设为系统定义的窗
口边界宽度。如果hBitmap是位图句柄,那么函数CreateCaret忽略该参数。
nHeight:按逻辑单位指定插入标记的高度。如果该参数为零,那么高度就设为系统定义的
窗口边界高度如果hBitmap是位图句柄,那么函数CreateCaret忽略该参数。
返回值:如果函数执行成功,返回值为非零;如果函数执行失败,那么返回值为零。若想获
取更多错误  信息,请调用GetLastError函数。
备注:参数nWidth和nHeight指定了插入标记的宽度和高度,这些值按逻辑单位表示;按
像素表示的真正  宽度和高度与窗口的映射模式有关。
    CreateCaret函数自动清除前一个插入标记的形状,不考虑拥有该插入标记的窗口。新
创建的插入标记一直隐藏,直到应用程序调用ShowCaret函数使该插入标记可见为止。
系统为每个队列提供一个插入标记。窗口只有在它有键盘焦点(focus)或者它是活动
窗口时才创建插入标记。该窗口应在键盘焦点消失或窗口变为不活动之前,清除插入标记。            
可以通过使用GetSystemMetrics函数,并指定SM_CXBORDER和SM_CYBORDER值来检索
系统窗口边界的宽度或高度。使用窗口边界的宽度或高度可以保证插入标记在高分辨率屏幕
上可见。
对于Windows CE:Windows CE不支持hBitmap参数,并且该参数应设为NULL。Windows 
CE缺省的是实心(Solid)插入标记。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;
头文件:winuser.h;库文件:user32.lib。
2.3.2  DestroyCaret
函数功能:该函数清除插入标记的当前形状,从窗口中释放插入标记,并且删除屏幕上的插
入标记。如果插入标记的形状是基于位图的,那么DestroyCaret不释放该位图。
函数原型:BOOL DestroyCaret(VOLD)
参数:无。
返回值:如果函数执行成功,则返回值非零:如果函数失败,则返回值为零。若想获取更多错
误信息,请调用GetLastError函数。
备注:只有当前任务中的窗口拥有插入标记时DestoryCaret才清除插入标记。如果插入标记
不为当前任务中的窗口拥有,那么DestroyCaret不执行任何操作,并且返回FALSE。
    系统为每个队列提供一个插入标记。只有当窗口有键盘焦点或窗口是活动的时候,才创
建插入记号。窗口应该在键盘焦点消失或窗口变为不活动之前清除插入标记。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;库文件:user32.lib。
2.3.3  GetCaretBlinkTime
函数功能:该函数返回一个公用的时间,单位为毫秒。该时间是转化插入标记的像素而需要
的时间。用户可以使用控制面板来设置这个值。
函数原型:UINT GetCaretBlinkTime(VOLD)
参数:无。
返回值:如果该函数执行成功,那么返回值就是闪烁时间,单位为毫秒;如果函数执行失败,
那么返回值为零。若想获取更多错误信息,请调用GetLastError函数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;库文件:user32.lib。
2.3.4  GetCaretPos
函数功能:该函数将插入标记的位置(按客户区坐标)信息拷贝到指定的POINT结构中。
函数原型:BOOL GetCaretPos(LPP0lNT IpPoint);
参数:
IpPoint:指向POINT结构的指针。该结构接收插入标记的客户坐标信息。
返回值:如果函数执行成功,那么返回值非零;如果函数执行失败,那么返回值为零。若想
获取更多错误信息,请调用GetLastError函数。
备注:插入标记位置通常是按包含该插入标记的窗口的客户坐标形式给出的。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows:1.0及以上版本;
头文件:Winuser.h;文件:user32.lib。
2.3.5  HideCaret
函数功能:该函数将屏幕上的插入标记清除。实际上是隐藏插入标记,并不是删除其当前形
状或使插入点无效。
函数原型:B00L HideCaret(HWND hWnd);
参数:
hWnd:标识有插入标记的窗口。如果该参数为NULL,那么HideCaret函数搜索当前任务,
以发现拥有插入标记的窗口。
返回值:如果函数执行成功,那么返回值为非零:如果函数失败,那么返回值为零。若想获
取更多错误信息,请调用GetLastError函数。
备注:只有指定的窗口拥有插入标记时,HideCaret才隐藏插入标记。如果指定的窗口没有
插入标记,那么函数HideCaret什么也不做,并且返回FALSE。
    隐藏操作是累计的,如果应用程序连续5次调用HideCaret,那么该程序也必须调用
ShowCaret 5次才能显示插入标记。
速查;Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;库文件:USer32.lib。
2.3.6  SetCaretBlinkTime
函数功能:该函数将插入标记的闪烁时间设置为一个指定的数目,该数目的单位为毫秒,闪
烁时间就是转化插入标记像素所需的时间,单位为毫秒。
函数原型:BOOL SetCaretBlinkTime(UINT uMSeconds);
参数:
uMSeconds:指定新的闪烁时间,时间单位为毫秒。
返回值:如果函数执行成功,那么返回值为非零;如果函数执行失败,那么返回值为零。若
想获取更多错误信息,请调用GetLastError函数。
备注:用户可以使用控制面板来设置闪烁时间。应用程序应遵守用户的设置。只有允许用户
设置闪烁时间的应用程序(例如控制面板)才应该使用SetCaretBlinkTime函数。
    如果改变了闪烁时间,那么后续激活的应用程序会使用修改后的闪烁时间,即使在键盘
焦点消失或为非活动时,恢复前一个闪烁时间值,这是由于多线程环境的缘故,在这种环境
中,禁止使用一个应用程序与激活另一个应用程序并不同步。这种特性允许系统即使在当前
应用程序挂起时也可以激活另一个应用程序。
    对于Windows CE:在Windows CE系统中,在一个应用程序中改变插入标记的闪烁时间
不会影响后续加载的应用程序中的闪烁时间。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;库文件:user32.lib。
2.3.7  SetCaretPos
函数功能:该函数将插入标记移动到指定的坐标上。如果拥有该插人标记的窗口是使用
CS_OWNDC类样式创建的,那么指定的坐标依据与该窗口相关的设备环境的映射模式而定。
函数原型:BOOL SetCaretPos(int X,int Y);
参数:
X:指定插入标记新的X坐标。
Y:指定插入标记新的Y坐标。
返回值:如果函数执行成功,那么返回值为非零;如果函数执行失败,那么返回值为零。若
想获取更多错误信息,请调用GetLastError函数。
备注:函数SetCaretPos不管插入标记是否隐藏都将移动它。系统为每个队列提供一个插入
标记。窗口只能对自己拥有的插入标记进行位置的设置。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本:头文件:Winuser.h;库文件:user32.lib。
2.3.8  ShowCaret
函数功能:该函数使插入标记在屏幕的当前位置上可见。当插入标记变为可见时,它自动开
始闪烁。
函数原型:BOOL ShowCaret(HWND hWnd);
参数:
hWnd:标识拥有插入标记的窗口。如果该参数为NULL,那么ShowCaret搜索当前任务以发
现有插入标记的窗口。
返回值:如果函数执行成功,那么返回值为非零;如果函数执行失败,那么返回值为零。若
想获取更多错误信息,请调用GetLastError函数。
备注:只有指定的窗口拥有插入标记,并且该插入标记具有形状,没有连续隐藏2次或多次
时,ShowCaret才能显示该插入标记。如果这几个条件中的一个或多个没满足,那么ShowCaret
函数什么也不做,并且返回FALSE。
速查:Windows NT:3.1及以上版本Windows:95及以上版本Windows CE:1.0及以版本;
头文件:winuser.h;库文件:user32.lib。
2.4   组合框函数(Combo box)

2.4.1  DlgDirListComboBox
函数功能:该函数用一个目录列表来填充指定的组合框
函数原型:int DlgDirListComboBox(HWND hDlg,LPTSTR lpPathSpec,int nlDComboBox,
int nlDStaticPath,UINT
uFiletype);
参数:
hDlg:包含组合框的对话框句柄。
lpPathSpel:指向一个以NULL结束的字符串,格式为
    [driver][/][directory/][.][filename]
    如果指定的串包括一个驱动器或目录路径,在填充列表之前,DlgDirListComboBox函
数改变当前驱动
器和目录。在列表被填充之后,驱动器和目录路径从lpPathspec参数标识的串中移出来。
nlDComboBox:指定对话框中组合框的标识符。如果hlDComboBox为零,则DlgDirlistComboBox
函数没有组合框存在或不试图填充它。
hlDStatic Path:指定静态控制的标识符,此静态控制用于显示当前目录。如果
nlDStasticPath为零,DlgDirListComboBox函数认为没有这样的控制。
uFiletype:指定被显示的文件的属性。它可以是下列的任意组合:
DDL_ARDIVE:包括档案文件。
DDL_DIRECTORY:包括子目录,子目录名必须用方括号括起来([])。
DDL_DRIVES:包括驱动器,驱动器列在格式[-X-]中,其中X为驱动器字母名。
DDL_EXCIUSIVE:包括仅带指定属性的文件,缺省时,写保护文件被引出,即使DDL_READ WRITE
没有被指定。
DDL_HIDBEN:包括隐含文件。DDL_READONLY:包括只读文件。
DDL_READWRITE:包括读写文件且不带有别的属性。DDL_SYSTEM:包括系统文件。
DDL_POSTMSGS:把信息传递到应用信息队列,缺省时,DlgDirlist函数把信息直接发送给
对话框过程。
返回值:如果函数调用成功,返回值为非零值,否则返回值为零。例如,如果tpPatbSpec
指定的串不是一个有效路径,函数调用失败。若想获得更多错误信息,请调用GetLastError
函数。
备注;如果参数lpszPatbSpec指向一个零字节串或一个指定驱动器目录,或两者的串,但
没有文件名,
那么认为文件名为”.”。
    Windows NT:如果有目录列表的话,则显示长文件名。
    Windows 95:目录列表显示短文件名(为8.3形式)。可以用SHGetFilelnfo或
GetFullPathName函数来得到相应的长文件名。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib:Unicode:在Windows NT环境中实现为Unicode
和ANSI两个版本。
2.4.2  DlgDirSelectEx
函数功能:该函数从单选列表框中检取当前选择,列表框已经由DlgDirlist函数填充,并
且选择内容为一个驱动器字母,文件名或目录名。
函数原型:BOOL DlgDirSelectEx(HWND hDlg,LPTSTR lpString,int nCount,int 
nlDListBox);
参数:
hDlg:包括列表框的对话框句柄。
lpString:指向存放选择路径的一个缓冲区。
ncount:指定由lpString指向的缓冲区的字节长度。
nlDListBox:指定对话框中列表框的整型标识符。
返回值:如果当前选择为目录名,返回值为非零值。如果当前选择不是一个目录名,返回值
为零,若想
获得更多错误信息,请调用函数GetLastError函数。
备往:DlgDirSelectEx函数把选择复制到由IpString参数指向的缓冲区,如果当前选择是
一个目录名或驱动器字母,DlgDirSelectEx则删除方括号(对于驱动器字母,则删去破折
号)。这样以便目录名或驱动器字母能插入一个新的路径。如果没有选择,lpString不改变。    
DlgDirSelectEx函数把消息LB_GETCURSEL和消息LB_GETTEXT发送到列表框,函数禁止从
列表框返回多于一个的文件名。列表框不应是复选的列表框,如果是的话,此函数不返回零
值且Ipstring参数保持不变。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT环境中实现为Unicode
和ANSI两个版本。
2.4.3  DlgDirSelectComboBoxEx
函数功能:该函数从由DlgDirlistcomboBox函数填充的组合框中检取当前选择。选择内容
为一个驱动器字母、文件名或目录名。
函数原型:BOOL DlgDirSelectComboBox(HWND hDlg,LPTSTR lpString,int nCount,int 
nlDComboBox);
参数:
hDlg:包括组合框的对话框的句柄。
IpString:指向存放选择路径的缓冲区。
nCount:指定IpString参数指向的缓冲区的字节长度。
nlDComboBox:指定控制对话框的组合框的整型标识符。
返回值:如果当前选择为一个目录名,返回值为非零值;否则,返回值为零值。若想获得更
多错误信息,请调用GetLastError函数。
备注:如果当前选择指定于一个目录名或驱动器字母,DlgDirSelectComboBoxEx函数则删
方括号(对驱动器字母则删除破折号),以便使文件名或驱动器字母能插入新的路径或文件
名,如果没有选择,IpString参数指向的缓冲区的内容没有改变。DlgDirselectComboBoxEx
函数不允许从组合框返回多于一个的文件名。
    DlgDirSectectComboBoxEx把消息CB_GETCILRSEL和CB_GETLBTEXT发送到组合框。在
Win32API中,可应用带有三种组合框的DlgDirSelectComboBoxEx函数(三种组合框为
CBS_SIMPLE,CBS_DROPDOWN,与CBS_DROPDOWNLIST)。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT环境中实现为Unicode
和ANSI两个版本。
2.5  通用对话框函数(Common Dialog Box)
2.5.1  ChooseColor
函数功能:该函数创建一个能使用户从中选择颜色的通用颜色对话框。
函数原型:BOOL ChooseColor(LPCHOOSECOLOR IpCC);
参数:
lpCC:指向一个包括初始化对话框信息的CHOOSECOLOR结构。当ChooseColor函数返回时,
此结构含有有关用户颜色选择的信息。
返回值:如果用户点击对话框中的OK按钮,返回值为非零值。CHOOSECOLOR结构中的rgbResult
成员含有用户选择的颜色的RGB颜色值。如果用户取消或关闭Color对话框或错误出现,返
回值为零。若想获得更多错误信息,请调用CommDlgExtondedError函数,此函数的返回值
为下列中的一个:
  CDERR_FINDRESFAILURE;CDERR_MEMLOCKFAILURE;CDERR_INITIALIZATION;
  CDERR_NOHINSTANCE;CDERR_LOCKRESFAILURE;CDERR_NOHOOK
  CDERR_LOADRESFAILURE;CDERR_NOTEMPLATE;CDERR_LOADSTRFAlLURE;
  CDERR_STRUCTSIZE;CDERR_MEMALLOCFAILURE
备注Color对话框不支持彩色调色板,对话框提供的颜色的选择仅限于系统颜色和这些颜色
的混合值,可以为对话框提供一个CCHOOKProc程序,此挂钩程序能处理发送给对话框的信
息。通过建立CHOOSECOLOR结构中Flags成员的CC_ENABLEHOOK标志和指定IpfnHook成员
中挂钩程序的地址,可使挂钩程序生效。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:2.0及以上
版本;头文件:commdlg.h;库文件:commdlg32.lib;Unicode:在Windows NT环境中实现
为Unicode和ANSI两个版本。
2.5.2  ChooseFont
函数功能:该函数创建一个使用户选择逻辑字体属性的对话框,这些属性包括字体名称、字
体风格(如粗体、斜体或正常体)、字号、效果(如强调线,下划线或字体颜色)和手写体
(或字符集)。
函数原型:BOOL ChooseFont(LPCHOOSEFONT Ipcf);
参数:
Ipcf:指向一个含有初始化对话框信息的CHOOSEFONT结构。当返回ChooseFont函数时,此
结构含有用户对字体选择的信息。
返回值:如果用户点击对话框的OK按钮,返回值为非零值,CHOOSEFONT结构中的成员表明
用户的选择。如果用户取消或关闭Font对话框或出现错误信息,返回值为零。若想获得更
多错误信息。请调用CommDlgExtendedError函数,其返回值如下:
  CDERR_FINDRESFAILURE;CDERR_NOHINSTANCE;CDERR_INITIALIZATION;CDERR_NOHOOK
  CDERR_LOCKRESFAILURE;CDERR_NOTEMPLATE;CDERR_LOADRESFAILURE;
  CDERR_STRUCTSIZE;CDERR_LOADSTRFAILURE;CDERR_MAXLESSTHANMIN
  CDERR_MEMALLOCFAILURE;CDERR_NOFONTS;CDERR_MEMLOCKFAILURE
备注:可以为Font对话框提供一个CFHOOKProc挂钩程序。此挂钩程序能够处理发送给对话
框的信息。
通过建立CHOOSEFONT结构中Flags成员的CE ENABLEHOOK标志和指定IPfn Hook成员中挂
钩程序的地址可以使挂钩程序有效。
挂钩程序可以把信息WM_CHOOSEFONT_GETLOGLONT,WM_CHOOSEFONT_SETFLAGS和
WM_CHOOSEFONT_SETLOGFONT消息发送给对话框以便得到和创建当前值和对话框的图标。
速查:Windows NT:3.1及以一上版本;Windows:95及以上版本;Windows CE:不支持;
头文件:Commdlg.h;库文件:comdlg32.lib;Unicode:在Windows NT环境中实现为Unicode
和ANSI两个版本。
2.5.3  CommDlgExtendedEorror
函数功能:该函数返回一个对话框错误代码,此代码显示出在执行下列对话框函数时要出现
的最近的错误:ChooseColor,GetOpenFileName,ChooseFont,GetSaveFileName,FindText,
PrintDlg,ReplaceText,PageSetpDlg。
函数原型:DWORD CommDlgExtendedError(VOID)
参数:无。
返回值:如果最近一次对话框函数调用成功,返回值不确定,如果对话框函数因为用户关闭
或取消对话框而返回FALSE,则返回值为零。否则返回值是非零错误代码。有关更多的信息,
参见下列说明部分。
备注:CommDlgExtendedError函数可以返回公共对话框函数中的一般的错误代码。
    另外,也返回某一具体公共对话框的错误代码。由CommDlgExtendedError返回的错误
代码在CDERR.H文件里定义:
    下面是CommDlgExtendedError的返回错误代码值。
CDERR_DIALOGFAILURE:对话框不能创建。DialogBox函数对对话框函数的调用失败,例如
如果公共对话框的调用指定一个无效的窗口句柄,则此种错误产生。
CDERR_FINDRESFAILURE:公共对话框函数没能找到指定资源。
CDERR_INITIALIZATION:公共对话框函数在初始化过程中失败。当没有足够内存时此错误出
现。
CDERR_LOADRESFAILURE:公共对话框函数没能调出指定的资源。
CDERR_LOADSTRFAILURE:公共对话框函数没能调出指定的串。
CDERR_LOCKRESFAILURE:公共对话框函数没能销定指定的资源。
CDERR_EMAILCOLFAILURE;公共对话框函数不能为内部结构分配内存。
CDERR_NOHINSTANCE:在对应的公共对话框初始化结构Flags成员中设置ENABLETEMPLATE标
志,但是在提供相应的事例句柄时出错。
CDERR_NOHOOK:在对应的公共对话框初始化结构Flags成员中设置ENABLEHOOK标志,但是
在提供相应的挂钩程序指针时出错。
CDERR_NOTEMPLATE:在对应的公共对话框初始化结构Flag成员中设置ENABLETEMPLATE标志,
但是在提供相应的模板时出错。
CDERR_REGISTERMSGFAIL:当RegisterWindowMessage函数被公共对话框函数调用时,该函
数返回错误代码。
CDERR_STRUCTSIZE:对应的公共对话框初始化结构旧IStructSize成无效成员。
    下列为Print Dlg函数的返回值。
PDERR_CREATEICFAILURE:当PrintDlg函数想创建一个信息表时出错。
PDERR_DEFAIKTDFFERENT:利用在DEVNAMES结构中wDefault成员指定的DN_DEFAULTPRN标
志,可以调用PrintDlg函数。但是被另外一个结构成员描述的打印机与当前缺省的打印机
不匹配。(此错误发生在储存DEVNAMES结构和用户利用控制面板改变缺省打印机时)。要使
用DEVNAMES结构所描述的缺省打印机,必须清空DN_DEFAULTPRN标志并且要再一次调用
PrintDlg。要使用缺省打印机,必须用NULL取代DEVNAMES结构俐DEVMODE结构,如果此结
构存在的话),并且要再一次调用PrintDlg函数。
PDERR_DNDMMISMATCH:OEVMOOE和DEVNAMFS结构中的数据描述了两种不同的打印机。
PDERR_GETDEVMODEFAIL;打印机驱动程序不能初始化一个DEVMODE结构(这种错误代码只用
于Windows 3.0及以上版本的打印机驱动程序)。
PDERR_INITFAILURE:PrintDlg函数不能初始化,并且没有更多的错误代码来描述此错误。
PDERR_LOADDRVFAILURE:PrinDlg函数不能为指定的打印机装备设备驱动器。
POERR_NODEFAULTPRN:不存在缺省打印机。
POERR_NODEVKES:未发现打印机驱动程序。
PDERR_PARAEFAILURE:PrintDlg函数在分析WIN.INI文件中的[devces]部分的字符串时出
错。
PDERR_PRINTERNOTFOUND;WIN.INI文件的[device]部分不包含所请求打印机的入口
PDERR_RETDEFFAILURE_PD:RETURNDEFAULT标志被指定在PRINTDLG结构的Flags成员中。
但hDevMode或hDevNames成员不是NULL。
PDERR_SETUPFAILURE:PrintDlg函数在装载所需要的资源时出错。
    下面是ChooseFont函数的返回值。
CFERR_MAXLESSTHANMIN:CHOOSEFONT结构中的nSizeMax成员所给定的大小小于nSizeMin
成员给定的大小。
CFERR_NOFONTS:不存在字体。
    下面是GetOpenFileName和GetSaveFileName函数的返回值。
FNERR_BUFFERTOOSMALL:由OPENFILENAME结构的lpstrFile成员指向的缓冲区对由用户指
定的文件名来说太小。前两种IpstrFile缓冲区的字节含有一个指定大小的整型值。用来存
放全文件名。
FNERR_INVAIDFILENAME:文件名无效。
FNERR_SUBASSFAILIIRE:由于没有足够内存,在对列表框分类时出错。
    下面是FindText和ReplaceText函数的返回值。
FRERR_BUFFERLENGTHZERO:结构FINDREPLACE中的一个成员指向一个无效的缓冲区。
    在Windows CE中Windows CE支持另外的四种返回值,如下:
CDERR_REGISTRYFAILURE  公共对话框函数无法读注册表。
    下面的一些返回值只适用于PrintDlg函数。
PDERR_NOPORTS:没有注册的端口PDERR_NOPRINTERS:没有注册的打印机
PDERR_CREATEDCFAILURE:CreateDC调用失败
Windows CE不支持CDERR_LOADSTRFAILURE、CDERR_MEMLOCKFAILURE或
CDERR_REGISTERMSGFAIL返回值。Windows CE也不支持任何PDERR_错误值。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本:头文件:commdlg.h;库文件:comdlg32.lib。
2.5.4  FindText
函数功能:该函数创建一个系统定义的无模式Find对话框,为使用户指定一个串来查找文
本内的文字。
函数原型:HWND FindText(LPFINDREPLACE lpfr);
参数:
Ipfr:指向一个FINDEPLACE结构,此结构包含用来初始对话框的信息。对话框用此结构把
用户输入的信息传送到应用程序。有关更多的信息,请参见下面说明部分。
返回值:如果函数调用成功,返回值是对话框的窗口句柄。可以使用窗口句柄与对话框联系
或关闭它;如果函数调用失败,返回值为NULL。若想获得更多的错误信息,请调用
CommDlgExtendedError函数。其返回值如下:
  CDERR_FINDRESFAILURE;CDERR_MEMLOCKFAILURE;CDERR_INITIALIZATION
  CDERR_NOHINSTANCE;CDERR_LOCKRESFAILURE;CDERR_NOHOOK
  CDERR_LOADRESFAILURE;CDERR_NOTEMPLATE;CDERR_LOADSTRFAILURE
  CDERR_STRUCTSIZE;CDERR_MEMALLOCFAILURE;FRERR_BUFFERLENGTHZERO
备注:FindText函数不执行查找操作,相反,对话框把FINDMSGSTRING己登记的信息传送
到对话框窗口的窗口函数。当创建对话框时FINDReplace结构中的hwndCwner成员标识窗口。
    调用Find Text函数前,必须调用RegisterWindowMessage函数以得到FINDMSGSTRING
信息的标识符,对话框函数在用户点击FindNext按钮或对话框被关闭时利用此标识符传送
信息。FINDMSGSTRING信息的IParam参数包含一个指向FINDREPLACE结构的指针,此结构
的Flags成员显示开诚信息的事件。
其他成员显示用户的输入。
    若想创建对话框,必须利用应用程序的主信息链中的IsDialogMessage函数来保证对话
框正确处理键盘输入,例如Tab和Esc键。IsDialogMessage返回值显示Find对话框是否
处理信息。
    可以为Find对话框提供一个挂钩函数FRHookProc。挂钩函数可处理发送到对话框中的
信息。为使挂钩函数生效,可设置HNDREPLACE结构的Flags成员的FR_ENABLEHOOK标志,
且指定IpfnHook成员中挂钩函数的地址。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:commdlg.h;库文件:comdlg32.lib;Unicode:在Windows NT环境中实现为Unicode
和ANSI两个版本。
2.5.5  GetFileTitle
函数功能:该函数返回由IpszFile参数标识的文件名。
函数原型:short GetFTitle(LPCTSTR LPTSTR IpszTitle,WORD cbBuf);
参数:
IpszFile:指向一个文件名或文件位置的指针。
IpszTitle:指向一个缓冲区,在此缓冲区中函数复制文件名。
chBuf:指定由IpszTitle函数指向的缓冲的字节长度。
返回值:如果函数调用成功,返回值为零;如果文件名无效,返回值为一负值。如果由
IpszTitle参数指向的缓冲区的太小,返回值为一正整数,其值指定了所需缓冲区的大小。
所需缓冲区的大小还包括结尾的NULL字符。
备注:如果由IpszFile参数指向的缓冲区包含下列任何一个成员,GetFileTitle函数返回
一个错误信息值。
一个空字符串;一个含有星号()、开括号([)、闭方括号(])的串、一个以冒号(:)、斜
杠(/)或倒斜杠结尾的串;一个长度超过缓冲区长度的串;一个无效字符(如,一个空格
或一个不能打印的字母):为得到文件名所需的缓冲区的大小,用设置为NULL的IpszTitle
和设置为零的cbBuf调用函数。函数将返回所需的大小。
    GetFileTitle函数返回一个串,系统应用此串为用户显示文件名。这就意味着如果返
回串应用在文件系统函数的调用中不可能准确地标识文件。
    如果证IpszTitle缓冲区太小,GetFile Title返回的大小需要含有显示名。在IpszFile
缓冲区指定的需要的大小和字符之间没有许可的联系。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本:Windows CE:不支持:头
文件:Commdlg.h;库文件:comdlg32.fib;Unicode:在Windows NT环境中实现为Unicode
和ANSI两个版本。
2.5.6  GetOpenFileName
函数功能:该函数创建一个Open公共对话框,使用户指定驱动器、目录和文件名、或使用
户打开文件。
函数原型:BOOL GetOpenFileName(LPOPENFILENAME Ipofn);
参数:
Ipofn:指向包含初始化对话框的信息的一个OPENFILENAME结构。当OpenfileName函数返
回时,此结构包含有关用户文件选择的信息。
返回值:如果用户指定了一个文件名,点击OK按钮,返回值为非零。由OPENFILENAME结构
的IPstrFile成员指向的缓冲区含有全路径和用户指定的文件名。如果用户取消或关闭Open
对话框或错误出现,返回值为零。若想获得更多的错误信息,请调用CommDlgExtendedError
函数。
备注:从Windows 95和Windows NT 4.0版开始,缺省的Open对话框提供了与Windows Explorer
相似的用户界面特征。可以为一个浏览器风格的Open对话框提供一个OFNHOOKProc挂钩函
数。设置OPENFILFNAME结构的Flags成员中OFN_EXPLORER和OFN_ENABLEHOOK标示和指定
IpfnHook成员中挂钩函数的地址,可使挂钩函数生效。
Windows 95和Windows NT仍支持旧风格的Open对话框以便维持与一个Windows 3.1
或Windows NT3.51用户界面相一致的用户界面。使OFNHOOKProcOldstyle挂钩函数生效和
保证OFN_EXPLORER标志没有被设置,就可以显示旧式的Open对话框。
    为显示允许用户选择一个目录而不是一个文件的对话框,要调用SHBrowseForFolder函
数。
    Windows CE:并不是每一个OPENFILENAME结构的成员都在Windows CE中被定义。有关
定义成员的更多的信息,请参见OPENFILENAME结构的资料主题。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:COmmdlg.h;库文件:comdlg32.lib;Unlcode:在Windows NT环境中实现
为Unicode和ANSI两个版本。
2.5.7  GetSaveFileName
函数功能:该函数创建一个Save公共对话框,以便用户指定驱动器、目录和文件名。
函数原型:BOOL GetSaveFileName(LPOPENFILENAME Ipofn);
参数:
Ipofn:指向一个包含初始化对话框信息的OPENFILENAME结构。当GetsaveFileName函数返
回时,此结构含有关于用户文件选择的信息。
返回值:如果用户指定了一个文件名且点击OK按钮,返回值为非零值。由OPENFILENAME结
构中的归IpstrFile成员指向的缓冲区含有全路径和用户指定的文件名。如果用户取消或关
闭Save对话框或错误出现,返回值为零。若想获得有关更多的错误信息,请调用
CommDlgExtendError函数,其返回值同GetOpenFileName返回值。
速查:Windows NT:3.1引及以上版本;Windows:95及以上版本;Windows CE:1.0及以
上版本;头文件:commdlg.h;库文件:comdlg32.lib;Unicode:在Windows NT环境中实
现为Unicode和ANSI两个版本。
2.5.8  PageSetupDlg
函数功能:该函数创建一个PageSetup对话框,此对话框能使用户指定打印页的属性。这些
属性包括纸张大小和来源,送纸方向和页边距。
函数原型:BOOL PageSetupDlg(LPPAGESETUPDLGI ppsd);
参数:
Ippsd:指向一个包含初始化对话框信息的PAGESETUPDLG结构。当函数返回时,该结构存放
有关用户选择的信息。
返回值:如果用户点击OK钮,返回值为非零值,Ippsp参数指向的PAGESETUPDLG结构中的
成员显示用户的选择。如果用户取消或关闭PageSetup对话框或错误出现,返回值为零。若
想获得更多的错误信息,请调用CommDlgExtendedError函数
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:commdlg.h;库文件:commdlg32.lib;Unicode:在Windows NT环境中实现为Unicode
和ANSI两个版本。
2.5.9  PrintDlg
函数功能:该函数显示打印对话框或打印设置对话框。打印对话框使用户指定特殊的打印工
作的特点。
打印设置对话框不能应用在新应用程序中,它已经被PageSetupDlg函数创建的打印设置公
共对话框所替代。
函数原型:BOOL PrintDIg(LPPRINTDLG Ippd);
参数:
Ippd:指向一个含有初始化对话框信息的PRINTDLG结构。当PRINTDLG函数返回时,此结构
含有关用户选择的信息。
返回值:如果用户点击OK按钮,返回值为非零值。由lppd参数指向的PRINTDLG结构中的
成员显示用户的选择。如果用户取消或关闭Print或PrinterSetup对话框或错误出现,返
回值为零。若想获得更多的错误信息,请调用CommDlgError函数。如果用户取消或关闭对
话框,函数返回零值:否则,返回值如下:
  CDERR_FINDRESFAILURE PDERR_CRETELCFAILUPE
  COERR_INITIALIZATION PDERR_DEFAULTDIFFERENT
  CDERR_LOADRESFAILURE PDERR_DNDMMISMATCH
  CDERR_LOADSTRFAILURE PDERR_GETDEVMODEFAIL
  CKERR_LOCKRESFAILURE PDERR_INITFAILURE
  CDERR_MEMALLOCFAILURE PDERR LOADDRVFAILURE
  CDERR_MEMLOCKFAILURE PDERR_NODEFAULTPRN
  CDERR_NOHINSTANCE PDERR_NODEVICES
  CDFRR_NOHOOK PDERR_PARSEFAILURE
  CDERR_NOTEMPLATE PDERR_PRINTERNOTFOUND
  CDERR_STRUCTSIZE PDERR_RETDEFFAILURE
备注:如果挂钩函数(由PRINTDLG结构中的IpfnrintHOOk成员或IpfnSetupHOOk成员指向
的)处理WM_CTLCOLORDLG信息,挂钩函数必须返回一个刷子句柄,此刷了用来刷控制背景。
    Windows NT 5.0以及以后的版本:可用PrintDlgEx函数来显示一个Print属性页,此
属性页有一个含有Print公共对话框相似的控制的General页,其控制与Print公共对话框
中的控制相似。
    Windows CE:PRINTDLG结构包含Windows CE中不同的成员。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:2.0及以上
版本;头文件:commdlg.h;库文件:comdlg32.lih;Unicode:在Windows NT环境中实现
为Unicode和ANSI两个版本。
2.5.10  PrintdlgEx
函数功能:该函数显示一个Print属性页。该属性页使用户指定特定的打印工作的特性,一
个Print属性页有一个控制的General页。该控制与Print中的对话框相似。属性页也有另
外紧随General页的指定的应用程序和指定的驱动器特性页。
函数原型:HRESULT PrintDlgEx(LPPRINTDLGEX Ippd);
参数:
Ippd:指向一个包括初始化属性页信息的PRINTDLGEX结构。当PrintDlgEx函数返回时,此
结构含有关于用户选择的信息。
返回值:如果函数调用成功,返回值为S_OK,且PRINTDLGEX结构中的dw ResuhltAction
成员含有下列值:
PD_RESULT_APPLY:用户点击Apply按钮,然后点击Cancel按钮,这显示出用户想应用在属
性页中做的改变,但还不想打印。当Apply按钮被点击时,PRINTDLGEX结构包含用户指定
的信息。
PD_RESUCT_CANCEI:用户点击Cancel按钮,PRINTDLGEX结构中的信息未被改变。
PD_RESUCT_PRINT:用户点击Print按钮,PRINTDLGEX结构含有用户指定的信息。
    如果函数调用成功,返回值可能是下列COM错误代码中的一个,有关更多的信息请参见
ErrorHandling。
E_OUTOFMEMORT:内存不足;E_INVALIDARG:一个或更多的参数无效。
E_POINTER:指针失效;E_HANDLE:句柄失效;E_FAIL:不确定的错误。
备注:有关更多的信息,请见Print Propertysheet。
速查:Windows NT:5.0及以上版本;Windowss:不支持;Windows CE:不支持;头文件:
commdlg.h,库文件。comdlg32.lib;Unicode:在Windows NT环境中实现为Unicode和ANSI
两个版本。
2.5.11  ReplaceText
函数功能。该函数创建一个系统定义的无模式对话框,此对话框使用户查找或替代一个串,
或执行控制和替代操作。
函数原型:HWND Replace Text (LPFINDREPLACE Ipfr);
参数:
Ipfr:指向一个包含初始化对话框的信息的FINDREPLACE结构。对话框应用此结构把用户输
入的有关信息传送到应用程序。有关更多的信息,见卜列说明部分。
返回值:如果函数调用成功,返回值为对话框的窗口句柄,可以用窗口句柄与对话框联系或
关闭它。如果函数调用失败,返回值为NULL。若想获得更多的错误信息,调用CommDlgExError
函数,其返回值如下:
CDERR_FINDRESFAILURE CDERR_MEMLOCKFAILURE
CDERR_INITIALIZATION COERR_NOHINSTANCE
CDERR_LOADRESFAILURE CDERR_NOHOOK
CDERR_LOADSTRFAILURE CDERR_BITEMPLATE
CDERR_LOCKRESFAILURE CDERR_STRUCTSIZE
CDERR_MEMALLOCFAILURE FRERR_BUFFERLENGTHZERO
备注:PepIACE Text函数不执行文本替代操作。相反,对话框把FINDSGSTRING 已登记的信
息传送到对话框窗口的窗口函数。当创建对话框时,FINDREPLACE结构的hwndowner成员指
定该对话框窗口。
    调用ReplaceText函数之前,必须调用RegisterWindowMessage函数为FINDSGSTRING
信息登记标识。
当用户击点Find Next,Replace ALL按钮时,或当关闭对话框时,对话框函数应用这些标
识发送信息。
FINDMSGSTRING信息中的IParam参数含有一个指向FINDREPLACE结构的指针。此结构的Flags
成员表明了形式信息的事件。该结构中其他的成员表明用户的输入信息。
    如果创建了Replace对话框,必须应用应用程序信息链中的IsDialogMesssage函数来
保证对话框能正确处理链盘输入信息,例如Tab键和Esc键。
    ISDialogMessage函数返回值表明Replace对话框是否处理信息。
    可以为Replace对话枢提供一个FRHookProc挂钩函数,此挂钩函数能处理发送到对话
框中的信息。
为使一个挂钩函数生效,可设置FINDREPLACE结构中Flags成员的FR_ENABLEHOOK标志且指
定IpfnHook成员中挂钩函数的地址。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:commdlg.h;库文件:comdlg32.lib:Unicode:在Windows NT环境中实现为Unicode
和ANSI两个版本。
2.5.12  CCHookProc
函数功能:该挂钩函数是一个应用程序或库定义的回调函数。ChooseColor函数与此函数一
起使用挂钩函数贮存信息或通告,此信息和通告应用于Color公共对话框的缺省对话框函
数。
    LPCEHOOPROC类型定义了一个指向此回调函数的指针。CCHOOkProc是一个应用程序定义
的函数名的位置占有者。
函数原型:UINT CALLBACK CCHookProc(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM 
IParam);
参数:
hdlg:指向信息指定的Color对话框的句柄。
uiMag:标识存放的信息。
wParam:指定有关信息号的其他信息。精确意义根据UiMdsg参数的值来决定。
IParam:指定有关消息的其他信息。精确意义由uiMsg参数的值米决定。如果uiMsg多数表
明WM_IMTDIALOG消息,IParam是一个指向含有当对话框创建时指定的值的CHOOSECOLOR结
构的指针。
返回值;如果挂钩函数返回零值,缺省对话框函数处理消息。如果挂钩函数返回非零值,缺
省对话框函数忽略消息。
备注当用ChooseColor函数创建一个Color对话框时,应用程序可以为对话框函数提供
CCHookProc挂钩函数来处理消息。应用传送到对话创建函数中的CHOOSECOLOR结构可使挂
钩函数生效,也可指定IpfnHook成员中挂钩函数的地址和指定Flags成员中CC_ENABIEHOOK
标志。缺省对话框函数把消息WM_INITDIALOG传送到挂钩函数之前先处理此消息。对于其他
所有的消息,挂钩函数首先存放消息。然后其返回值决定此缺省对话函数是处理消息或忽略
消息。如果挂钩函数处理WM_CTLCOLORDIG消息,那么必须返回一个有效的刷子句柄以绘制
对话框的背景。总之,如果挂钩函数处理任何一种WM_CTLCOLOR消息,它必须返回一个有效
的刷了句柄以刷指定的控制板的背景。
    不要从挂钩函数中调用EndDialog函数。相反地挂钩函数能调用PostMessage函数来把
带有IDABORT值的WMCOMMAND消息传送到对话框枢函数中。传送LDABORT消息使对话框关闭
并使对话框返回值为FALSE。如果要知道为什么挂钩函数关闭对话框,必须在挂钩函数和应
用程序之间提供自身联系机理。
    可以对公共对话框的标准控制面板进行子分类。但是公共对话框函数也可以对控制面板
子分类、正因如此,在挂钩函数处理消息时必须对控制面板进行子分类。这就保证在对话框
函数设置于分类函数之前,子分类函数存放了指定的控制消息。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:2.0及以上
版本;头文件:commdlg.h;库文件:用户自定义。
2.5.13  CFHookProc
函数功能:该挂钩函数是一个应用程序定义的或库定义的回调函数,此回调函数与
ChooseFont函数一起使用。挂钩函数接收用于Font公共对话框的缺省对话框函数的消息和
通告。
    LPCFHOOKPROC类型定义了一个指向这种回调函数的指针。CFHOOKProc是一个由应用程
序定义的函数名的位置占有者。
函数原型:UINT CALLBACK CFHookProc(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM 
IParam);
参数:
hdlg:指向消息所指的Font对话框窗口的句柄。
uiMsg:指定存放的消息。
wParam:指定有关消息的其他信息。精确的意义根据uiMsg参数的值来决定。
IParam:指定有关消息的其他信息。精确的意义根据uiMSg参数的值来决定。如果uiMsg参
数表明WM_INITDIALOG消息,则IParam是一个指向CHOOSEFONT结构的指针,该结构含有创
建公共对话框时指定的值。
返回值:如果挂钩函数返回零值,缺省对话框函数处理消息。如果挂钩函数返回一个非零值,
缺省对话框函数忽略消息。
备注:用ChooseFont函数创建一个Font对话框时,可以为对话框函数提供挂钩函数来处理
消息。
    为使挂钩函数生效,要用传送到对话创建函数的CHOOSEFONT结构,指定IpfnHook成员
中挂钩函数的地址和Flags成员中CF_ENABLEHOOK标志。
    缺省的对话框函数处理WM_INTDIALOG消息后,把它传送给挂钩函数。对于其他消息,
挂钩函数首先存放此消息。然后挂钩函数的返回值决定缺省对话函数是否处理消息或忽略
它。
    如果挂钩函数处理 WM_CTLCOLORDLG信息,它必须返回一个有效的刷子句柄,以刷对话
的背景。
总之,如果挂钩函数处理任何一个WM_CTLCOLOR消息,那么必须返回一个有效刷子句柄,以
绘制指定控制的背景不须从挂钩函数调用EndDialog函数。相反,挂钩函数能调用
PostMessage函数,把带有IDABORT值的一个WM_CDOMMAND信息传送给对话框函数Posting 
IDABORT关闭对话框,使对话框函数退回FALSE值,若要了解为什么挂钩函数关闭对话框,
必须提供挂钩函数和应用程序之间的联系机理。
可以对公共对话框的标准控制面板进行子分类。但是公共对话框函数也可以对控制面板进行
子分类。正因如此,必须在挂钩函数WM_INTDIALDG处理消息时对控制面板子分类。这就保
证对话框函数设置子分类函数之前,子分类函数接收指定的控制消息。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:commdlg.h;库文件:用户自定义。
2.5.14  FRHookProc
函数功能:该函数是由应用程序定义或库定义的回调函数。它和FindText函数或Replace 
Text函数一定使用。挂钩函数接收用于Find或Replace公共对话框的缺省对话框函数的消
息和通告。
    LPFRHOOKPROC类型定义了一个指向此回调函数的指针,FRHookProc是一个应用程序定
义的函数名的位置持有者。数原型:UINT CALLBACK FRHookProc(HWND hdlg,UINT uiMsg WPARAM 
wParam,LPARAM IParam);
参数:
hdlg:指向消息所传送到的Find或Replace公共对话框窗口的句柄。
uiMsg:指定有放的消息。
wParam:指定有关消息的另外的信息,精确的意义要根据uiMsg参数的值来定。
IParam:指定有关消息的另外的信息,精确的意义要根据uiMsg参数的值来定。如果uiMsg
参数表明WM_INItDIALOG消息。IParam是一个指向FINDREPLACE结构的指针,该结构包含
公共对话框创建时指定的值。
返回值:如果挂钩函数返回零,缺省对话框函数处理消息;如果挂钩函数返回非零值,缺省
对话框函数忽略消息。
备注:当用FindText,或ReplaceText函数创建一个Find或Replace公共对话框时,可提
供一个处理与公共对话框函数有关的信息和通告的FRHookProc挂钩函数。为使挂钩函数生
效,应用传送到公共创建函数的FINDREPLACE结构且指定IpfnHook成员中挂钩函数的地址
和指定Flags成员中FR_ENABLEHOOK标志的地址。缺省对话框函数处理WM_INTTDIALOG消息
后,把它传递给挂钩函数,对于其他所有消息,挂钩函数首先接收消息,然后挂钩函数的返
回值决定缺省对话框函数是处理消息或忽略它。如果挂钩函数处理WM_CTLCOLORDLG消息,
那么必须返回一个有效的刷子句柄,以便绘制对话框的背景。总之如果挂钩函数处理任何一
种WM_HLOLOR信息,那么必须返回一个有效的刷子句柄以绘制指定控制的背景。
    不须从挂钩函数调用EndDialog函数。相反,挂钩函数能调用PostMessage函数把带有
IDABORT值的一个WM_COMMAND信息传送给对话框函数Posting IDABORT关闭对话框,使对
话框函数返回FALSE值,若要了解为什么挂钩函数关闭对话框,必须提供挂钩函数和应用程
序之间的联系机理。
    可以对公共对话框的标准控制面板进行子分类。但是公共对话框函数也可以对控制面板
进行子分类。正因如此,必须在挂钩函数函数WM_INTDIALDG消息时对控制面板子分类。这
就保证对话框函数设置子分类函数之前,子分类函数接收指定的控制消息。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;windows CE:不支持;头
文件:commdlg.h;库文件:用户自定义。
2.5.15  OFNGookProc
函数功能:该挂钩函数是应用程序定义的或库定义的回调函数,此回调函数与
Explorer_Style和Save As公共对话框一起使用。函数贮存从公共对话框发送来的消息或
通知LPOFNHOOKPROC类型定义一个指向回调函数指针,OFNHOOKProc是应用程序定义的或库
定义的函数名的位置占有者,当创建一个Open或Save As公共对话框时,如果没有指定
OFN_EXPLORER标志且需一个挂钩函数。必须用旧式的OFNHookProcOldSttyle挂钩函数。这
种情况下对话框将显示旧式的用户界面。
函数原型:UINT CALLBACK OFNHookProc(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM 
IParam);
参数:
hdlg:指向Open或Save as对话框的子对话框的句柄。用GetParent函数可得到指向Open
或Save As对话框窗口的句柄。
uiMsg.标识存放的消息。
wParam:指定有关消息的其他信息。精确的意义要根据uiMSg参数的值来决定。
IParam;指定有关消息的其他信息。精确的意义要根据uiMsg参数的值来决定。如果uiMsg
参数显示了WM_INITDIALOG消息,IParam是一个指向OPENFILENAME结构的指针。该结构含
有创建对话框时指定的值。
返回值:如果挂钩函数返回零,缺省对话框函数处理消息。如果挂钩函数返回非零值,缺省
对话框函数忽略消息。对于CDN_SHAREVIOLATION和CDN_FILEOK通告消息,挂钩函数应该返
回非零值,以表明已经利用SetWindowLong函数设置了一个非零DWL_MSGRESULT值。
备注:当用GetOpenFileName或GetSaveFileName函数创建浏览器风格的Open或Save As
公共对话框时,可以提供一个OFNHookProc挂钩函数。为使挂钩函数生效,须应用传递到对
话创建函数的OPENFILENAME结构,且须指定一个指向PfnHook成员中的挂钩函数的指针,
及指定Flags成员中OFN_ENABLEHOOK标识。
    如果为浏览器风格的公共对话框提供了一个挂钩函数,系统创建了一个缺省对话框的子
对话框,挂钩函数为子对话框作为对话函数,此子对话框以OPENHLENAME结构指定的模块为
基础,或如果没有指定模板,对话框是一个缺省的子对话框。当缺省对话框函数正在创建
WM_INITDALOG消息时,创建了子对话框。在子对话框处理它本身的WM_INITDIALOG消息时,
缺省对话函数删除掉标准控制面板,如果需要,可为子对话框的其他的任何一个控制面板提
供空间,然后系统将CDN_INITDONE通告消息发送给挂钩函数。
    挂钩函数不接收指定给缺省对话框的标准控制面板的消息。可以对控制面板进行子分
类,但是如果控制面板使应用程序与公共对话框将来的版本不一致,那么不能进行子分类。
但浏览器风格的公共对话框提供了一套消息,此挂钩函数可利用此消息来最小化和控制对话
框。它包括了从对话框发送来的一组通知消息,还有可以发送到从对话框检取信息的消息。
关于这些消息的全部列表,参见EXplorer-Style HookProcedures。如果挂钩函数处理
WM_CTLCOLORDLG信息,它必须返回一个有效的刷子句柄,以刷对话的背景。总之,如果挂
钩函数处理任何一个WM_CTLCOLOR消息,那么必须返回一个有效刷子句柄,以绘制指定控制
背景。不须从挂钩函数调用EndDialog函数。相反,挂钩能调用PostMessage函数把带有
IDABORT值的一个WM_COMMAND信息,传送给对话框函数Posting IDABORT来关闭对话框,
使对话框函数返回FALSE值。若要了解为什么挂钩函数关闭对话框,必须提供挂钩函数和应
用程序之间的联系机理。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:commdlg.h;库文件:用户自定义。
2.5.16  OFNHookProcOldStyle
函数功能:该挂钩函数是应用程序定义或库定义的回调函数。此回调函数与Open和Save AS
公共话框一起使用。函数接收指定给对话框函数的消息或通告。LPOFNHOOKPROC类型定义了
一个指向这种回调函数的指针。OFNHookProcOldStyle是应用程序定义的或库定义的函数名
的位置占有者。当创建一个Open或Save As公共对话框时,如果指定OFN_EXPLORER标志且
需一个挂钩函数,那么必须应用一个Explorer_style的OFNHookProc挂钩函数。
函数原型:UINT CALLBACK OFNHookProcOldStyle(HWND hdlg,UINT uiMsg WPARAM wParam,
LPARAM IParam);
参数:
hdlg:指向消息指定的Open或Save As对话框窗口。
uiMsg:标识接收的消息。
wParam:指定有关消息的其他信息。精确的意义要根据uiMSg参数的值来决定。
IParam:指定有关消息的其他信息。精确的意义要根据uiMsg参数的值来决定。如果uiMsg
参数显示了WM_INITDIALOG消息,IParam是一个指向OPENFILENAME结构的指针。该结构含
有创建对话框时指定的值。
返回值:如果挂钩函数返回零,缺省对话框函数处理消息;如果挂钩函数返回非零值,缺省
对话框忽略消息。
备注:当用GetOpenFileName或GetSaveFileName函数创建一个旧式的Open或Save As对
话框时。可以提供一个OFNHookProcOldStyle挂钩函数。为使挂钩函数生效,须应用传递到
对话创建函数的OPENHLENAME结构,且须指定一个指向IpnHook成员中的挂钩函数的指针,
及指定Flags成员中OFN_ENABLEHOOK标识。
    如果挂钩函数处理WM_CTLCOLORDLG消息,那么必须返回一个有效的刷子句柄,以便绘
制对话框的背景。总之,如果挂钩函数处理任何一种WM_CTLCOLOR信息,那么必须返回一个
有效的刷子句柄以绘制指定控制的背景。
    不须从挂钩函数调用EndDialog函数。相反,挂钩函数能调用PostMessage函数,把带
有IDABORT值的一个WM_COMMAND信息传送给对话框函数PostingIDABORT,并关闭对话框,
使对话框函数返回 FALSE值,若要了解为什么挂钩函数关闭对话框,必须提供挂钩函数和
应用程序之间的联系机理。
    可以对公共对话框的标准控制面板进行子分类。但是公共对话框函数也可以对控制面板
进行子分类。正因如此,必须在挂钩函数WM_INTDIALDG处理消息时对控制面板子分类。这
就保证对话框函数设置子分类函数之前,子分类函数接收指定的控制消息。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:commdlg.h;库文件:用户自定义。
2.5.17  PagePaintHook
函数功能:该挂钩函数是一个由应用程序或库定义的回调函数,该回调函数与PageSetup函
数一起使用。该函数接收制作PageSetup对话框中样本页绘图的消息。LLPPAGEPAINTHOOK
类型定义了一个指向此回调函数的指针。PagePaintHook是由应用程序或库定义的函数名的
位置持有者。
函数原型:UINT CALLBACK PagePaintHook(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM 
IParam);
参数:
hdlg:指向pagesetup对话枢窗口的句柄。
uiMsg:标识接收的消息。
wparam:指定有关消息的其他信息。精确的意义要根据uiMsg参数的值来决定。
IParam:指定有关消息的其他信息。精确的意义要根据uiMsg参数的值来决定。
返回值:如果挂钩函数对前三个绘图顺序消息中的任何一个返回值为TRUE。且前三个消息
为WM_PSD_PAGESETUPDLG,WM_PSD_FULLPAGERECT或WM_PSD_MINMARGINRECT),对话框不再
发送消息。且直到下一次系统需要重画样本页时才绘出样本页。如果对所有的三个消息。挂
钩函数返回FALSE,对话框发送给图顺序的保留的消息。
    如果挂钩函数对绘图顺序中保留消息的任何一个,返回值为TRUE,那么对话框不绘样
本页对应的部分,如果挂钩函数对这些信息中的任何一个返回值为FALSE,对话框绘样本页
部分。
备注PageSetup对话框含有一个样本页的构想。此构想展示了用户选择如何影响打印输出的
外观。构想由代表选择页或信封类型的长方形组成,点线长方形代表当前页边。部分字母展
示了文本在打印出的页中的状况。当用PageSetupDlg函数创建Page Setup Dialog对话框
时,可提供一个PagePaintHook挂钩函数来制作样本页的表观。
    为使挂钩函数生效,须用传递到创建对话函数的PAGESETUPDLG结构,且指定一个指向
IpfnPagePrintHook成员中挂钩函数的指针和指定Flags成员中PSD_ENABLEPAGEPAINTHOOK
标志。
    无论何时,只要对话框将要绘样本页的内容,那么挂钩函数就接受以下列顺序列表的消
息:WM_PSD_PAGESETUPDLG:对话框将要绘样本页,挂钩函数利用此消息准备给样本页里的
内容。
WM_PSD_FULLPAGERECT:对话框要绘样本页,此信息指定样本页的长方形边。
WM_PSD_MINMARGINRECT:对话框将要绘样本页,此信息指定空白长方形。
WM_PSD_MARGINRECT:对话框将要绘空白长方形。
WM_PSD_REEKTEXTRECT:对话框将要在空白长方形内绘Greek文本。
WM_PSD_ENVSTAMPRECT:对话框将要在信封样本页上绘邮票长方形。此消息仅发向信封。
WM_PSD_YAFULLPAGERECT:对话框将要绘信封样本页的返回地址部分。此消息仅发向信封和
其他纸张大小。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持:头
文件:commdlg.h;库文件:用户自定义。
2.5.18  pageSetupHook
函数功能:该挂钩函数为由应用程序或库定义的回调函数。此回调函数与PageSetupDlg函
数一起使用,它接收为PageSetup公用对话框设置缺省对话框的消息或通告。
LPPAGESETUPHOOK类型定义了一个指向此回调函数的指针。PageSetupHook是由应用程序或
库定义的函数名的位置持有者。
函数原型:UINT CALLBACK PageSetupHook(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM 
IParam);
参数:
hdlg:指向消息指定给Page Setup对话框窗口的句柄。
uiMsg:标识接收的消息。
wParam:指定有关消息的其他信息。精确的意义要根据uiMsg参数的值来决定。
IParam:指定有关消息的其他信息。精确的意义要根据uiMsg参数的值来决定。
返回值:如果挂钩函数返回零,则缺省对话框函数处理消息;返回非零值,将忽略消息。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:commdlg.h;库文件:用户自定义。
2.5.19  PrintHookProc
函数功能:该挂钩函数是一个由应用程序或库定义的回调函数,此回调函数与PrintDlg函
数一起使用。
函数接收指定给Print公共对话框的缺省对话框函数的消息和通知。LPPWTHOOKPROC类型定
义了一个指向此回调函数的指针。PrintHookProc为由应用程序或库定义的函数名的位置占
有者。
函数原型:UINT CALLBACK PrintHookProc(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM 
IParam);
参数:
hdlg:指向消息指定给的Print公共对话框窗口的句柄。
uiMsg:标识接收的消息。
wParam:指定有关消息的其他信息、精确的意义由uiMsg参数的值来决定。
IParam:指定有关消息的其他信息、精确的意义由uiMsg参数的值来决定。
返回值:如果挂钩函数返回值为零,缺省对话框函数处理消息;返回非零值,将忽略消息。
备注:当用PrintDlg函数创建一个Print公共对话框时,可以提供一个PrintHookProc挂
钩函数来处理指定给对话框函数的消息或通知。
    为使挂钩函数生效,要用传递到创建对话框函数的PRINTDLG结构,且要指定
IpfnPrintHook成员中挂钩函数的地址和指定Flags成员中PD_ENABLEPRINTHOOK标志。
    缺省对话框函数把消息WM_InITDIALOG传送到挂钩函数之前先处理此消息。对于其他所
有的消息,挂钩函数首先存放消息。然后其返回值决定此缺省对话函数是处理消息或忽略消
息。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:2.0及以上
版本;头文件:commdlg.h;库文件:用户自定义。
2.5.20  SetupHookProc
函数功能:该挂钩函数是一个由应用程序或库定义的回调函数,该回调函数与PrintDlg函
数一起使用。
其他同函数19。
函数原型:UINT CALLBACK SetupHookProc(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM 
IParam);
参数:
hdlg:指向消息指定给的Print公共对话框窗口的句柄。
UiMsg:标识接收的消息。
wParam:指定有关消息的其他信息、精确的意义由uiMSg参数的值来决定。
IParam:指定有关消息的其他信息、精确的意义由uiMsg参数的值来决定。
返回值:如果挂钩函数返回值为零,缺省对话框函数处理消息;返回非零值,将忽略消息。
备注;PrintSetup对话框函数已经被PageSetup对话框所取代。这需要用新的应用程序来
使用。但是,为了一致性,PrintDlg函数仍支持Print Setup对话框的显示。可以提供一
个SetupHookProc函数给PrintSetup对话框,从便处理指定给对话框函数的消息和通知。
    为使挂钩函数生效,要用传递到对话创建函数的PRINTDLG结构,且指定IpfnSetupHook
成员中挂钩函数的地址和指定Flags成员中PD_ENABLESETUPHOOK标志。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:commdlg.h;库文件:用户自定义。
2.6  标函数(Cursor)
2.6.1  ClipCursor
函数功能;该函数把光标限制在屏幕上的一个矩形区域内,如果调用SetCursor或用鼠标设
置的一个随后的光标位置在该矩形区域的外面,则系统自动调整该位置以保持光标在矩形区
域之内。
函数原型:BOOL CliepCursor(CONST RECT★ lpRect);
参数:
IpRect:指向RECT结构的指针,该结构包含限制矩形区域左上角和右下角的屏幕坐标,如
果该指针为NULL(空),则光标可以在屏幕的任何区域移动。
返回值:如果成功,返回值非零;如果失败,返回值为零。若想获得更多错误信息,请调用
GetLastError。
备注:光标是一个共享资源,如果一个应用控制了光标,在将控制转向另一个应用之前,必
须要使用ClipCursor来释放光标,该调用过程必须具有对窗口的WINSTA_WRITEATTRIBUTES
访问权。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件;user32.lib。
2.6.2  CopyCursor
函数功能:该函数复制一光标。
函数原型:HCURSOR CopyCursor(HCURSOR pcur);
参数:
pcur:被复制光标的句柄
返回值;如果成功,返回值是复制光标的句柄;如果失败,返回值为NULL(空)。若想获得
更多错误信息,请调用GetLastError函数。
备注;CopyCursor函数能使一个应用程序或一个动态连接库(OLL)得到一个属于另一模块
的光标形状的句柄。如果另外一个模块被释放,则该应用程序仍然可以使用该光标形状。
    在关闭之前,一个应用程序必须调用DestroyCursor函数来释放任何与该光标有关的系
统资源。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib
2.6.3  CreateCursor
函数功能:该函数创建一个指定大小、位模式和热点的光标。
函数原型:HCURSOR CreateCursor(HINSTANCE htnst,int xHotSpot;int yHotSpot;int 
nWidth;iut nHeight,CONST VOID ★pvANDPlane,CONST VOID ★pvXORPlane);
参数:
hlnst:创建光标的应用程序的当前事例句柄。
xHotSpot:指定光标热点的水平位置。
yHotSpot:指定光标热点的垂直位置。
nWidth:以像素为单位指定光标的宽度。
nHeight:以像素为单位指定光标的高度。
pvANDPlane:指向一个字节数组的指针,该数组包含光标AND掩码的位值,就象设备相关的
单色位图一样。
pvXORPlane:指向一个字节数组的指针,该数组包含光标XOR掩码的位值,就象设备相关的
单色位图一样。
返回值:如果成功,返回光标的值;如果失败,返回值为NULL(空),若想获得更多错误信
息,调用GetLastError函数。
备注:nWidth和nHeight参数必须指定一个当前显示驱动支持的宽度和高度,因为系统不
能创建一个其他尺寸的光标,为了确定显示驱动所支持的宽度和高度,请使用
GetSystemMetrics函数,指定SM_CXCUROR或SM_CYCURSOR值。
    在一个应用程序关闭之前,必须调用DestroyCursor函数来释放与光标有关的任何系统
资源。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib。
2.6.4  DestroyCursor
函数功能:该函数销毁一个光标并释放它占用的任何内存,不要使用该函数去消毁一个共享
光标。
函数原型:8OOL DestroyCUrsor(HCURSOR hCursor);
参数:
hCursor:要销毁的光标的句柄,该光标必须不在使用中。
返回值:如果成功,返回非零;如果失败,返回值为零,若想获得更多错误信息,请调用
GetLastError函数。
备注:DestroyCursor函数销毁一个非共享的光标;不要用它销毁一个共享光标。一个共享
光标只要调用它的模块仍在内存中,则该共享光标还是有效的,下面的函数可得到一个共享
光标:LoadCursor;LoadCursorFronFile;Loadlmage(如果使用LR-SHARED标志);
Copylmage(如果使用LR_COPYRETURORG标志并且hlmags参数是一个共享光标)。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib。
2.6.5  GetClipCursor
函数功能:该函数检取一个矩形区域的屏幕坐标,光标被限制在该矩形区域之内。
函数原型:BOOL GetClipCursor(LPRECT IpRect);
参数:
IpRect:一个RECT结构的指针;接收限制矩形的屏幕坐标。如果该光标没有被限制在一个
矩形区域内,则该RECT结构接收屏幕的尺寸。
返回值:如果成功,返回非零;如果失败,返回值为零,若想获得更多错误信息,请调用
GetLastError函数。
备注:该光标是一个共享光标,如果一个应用程序使用ClipCursor函数来限制该光标,那
么在它放弃控制转向另一个应用之前必须使用ClipCursor来释放该光标,该调用过程必须
具有对窗口站的WINSTA_READATTRIBUTES访问权限。
速查:Windows NT:3.1及以上下版本;Windows:95及以上版本;Windows CE:不支持;
头文件:Winusre.h;库文件:user32。lib。
2.6.6  GetCursor
函数功能:该函数检取当前光标的句柄。
函数原型:HCURSOR GetCursor(VOID);
参数:无。
返回值:返回值是当前光标的句柄,如果没有光标,返回值为NULL。
速查:Windows NT:3.1及以上版本;Wjhdows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib。
2.6.7  GetCursorpos
函数功能:该函数检取光标的位置,以屏幕坐标表示。
函数原型:BOOL GetCursorPos(LPPOlNT IpPoint);
参数:
IpPint:POINT结构指针,该结构接收光标的屏幕坐标。
返回值:如果成功,返回值非零;如果失败,返回值为零。若想获得更多错误信息,请调用
GetLastError函数。
备注:光标的位置通常以屏幕坐标的形式给出,它并不受包含该光标的窗口的映射模式的影
响。该调用过程必须具有对窗口站的WINSTA_READATTRIBUTES访问权限。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib。
2.6.8  LoadCursorFromFile
函数功能:该函数根据一个文件中所含的数据创建光标。该文件由它的名字所指定或由一个
系统光标鉴别器指定,该函数返回一个新建光标的句柄,文件所包含的光标数据可以是光标
格式(CUR)或运动光标格式(.ANI)。
函数原型:HCURSOR LoadCursorFromFile(LPCTSTR IpFileName);
参数:
IpFileName:指明创建光标所用的文件数据资源,文件中的数据格式必须是COR或ANI,如
果IpFileName的高位字为非零,则IpFileName就是指向一个字符串的指针,该字符串是包
含光标数据的文件的名字。
如果IpFileName的高位字为零,低位字是系统光标标识符,则该函数在WIN.INI文件中搜
索与系统光标名字有关的[Cursors]条目,下面是系统光标的名字和标识符的清单:
“AppStarting”:OCR_APPSTARTING;“Arrow”:OCR_NORMAL“Crosshair”:OCR_CROSS;
“Hand”:WindowsNT5.0 and laterOCR_HAND;“Help”:OCR_HELP;“IBeam”:OCR_IBEAM;
“Icon”:OCR_ICON;“No”:OCR_NO;“Size”:OCR_SIZE;
“SizeAll”:OCR_SIZEALL;“SizeNESW”:OCR_SIZENESW;“SizeNS”:OCR_SIZENS;
“SizeNWSE”:OCR_SIZENESW;“SizeWE”:OCR_SIZEWE;“UpArrow”:OCR_UP;“Wait”:OCR_WAIT
返回值:如果成功,返回值是新建光标的句柄;如果失败,返回值为空(NULL)。若想获得
更多错误信息,请调用GetLastError函数。GetLastError也许会返回如下的值:
ERROR_FILE_NOT_FOUND,没有找到指定的文件。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本:Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT中实现Unicode和ANSI
两个版本。
2.6.9  SetCursor
函数功能:该函数确定光标的形状。
函数原型:HCURSOR SetCursor(HCURSOR hCursor);
参数:
hCursor:光标的句柄,该光标由CreateCursor函数载入。如果该参数为NULL,则该光标
从屏幕上移开。在Windows95中该光标的宽和高是GetSysfemMefirics 函数的返回值
SM_CXCURSOR和观_CYCURSOR,并且光标的位深必须和显示器的位深相匹配,或者光标是单
色的。
返回值:如果有前一个光标,则返回值是前光标的句柄;如果没有前光标,则返回值是NUL。
备注:仅当新光标与前光标不同时,才设置该光标,不然的话,该函数立即返回。该光标是
一个共享资源。一个窗口仅当光标在其客户区域,或者它正在捕捉鼠标输入时,它才设置光
标的形状。在一个没有鼠标的系统中,该窗口在光标离开它的客户区域或它要把控制权交给
其他窗口之前,它会恢复以前的光标。
    如果应用程序必须在窗口中设置光标,必须确保指定窗口类的类光标被设为NULL,如
果类光标不是NULL,则每次移动鼠标时,系统都要恢复类光标。
    如果内部的光标显不计数值小于零,则光标不在屏幕上显示。当一个应用程序使用
ShowCursor函数隐藏光标的次数多于显示光标的次数时,则会发生这种情况。
    Windows CE:当一个目标平台不支持鼠标光标时,使用cursor光标组件,该光标组件
仅支持等待光标,设置等待光标,使用如下的代码:SetCursor(LoadCursor(NULL,
IDC_WAIT));当一个目标平台不支持鼠标光标时,使用mcursor光标组件。该组件不支持彩
色光标。
速查:Window NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版
本;头文件:winuser.h;库文件:user32.lib。
2.6.10  SetCursorPos
函数功能:该函数把光标移到屏幕的指定位置。如果新位置不在由 ClipCursor函数设置的
屏幕矩形区域之内,则系统自动调整坐标,使得光标在矩形之内。
函数原型:BOOL SetCursorPOS(int X,int Y);
参数:
X:指定光标的新的X坐标,以屏幕坐标表示。
Y:指定光标的新的Y坐标,以屏幕坐标表示。
返回值:如果成功,返回非零值;如果失败,返回值是零,若想获得更多错误信息,请调用
GetLastError函数。
备注:该光标是共享资源,仅当该光标在一个窗口的客户区域内时它才能移动该光标。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib。
2.6.11  SetSystemCursor
函数功能:该函数使一个应用程序定制系统光标。它用hcur规定的光标内容代替id定义的
系统光标内容,接着销毁hour。
函数原型:BOOL SetSystemCursor(HCURSOR hour,DWORD id);
参数:
hcur:光标的句柄,该函数hcur标识的光标的内容代替id定义的系统光标内容。系统通过
调用DestroyCursor函数销毁hour。因此hour不能是由LoadCursor函数载入的光标。要
指定一个从资源载入的光标,先用CopyCursor函数复制该光标,然后把该副本传送给
SetSystemCursor函数。
Id:指定由hour的内容替换系统光标。
下面是一系列的系统光标标识符:
OCR_APPSTARTING:标准箭头和小的沙漏;OCR_NORAAC:标准箭头
OCR_CROSS:交叉十字线光标:OCR_HAND:手的形状(WindowsNT5.0和以后版本)
OCR_HELP:箭头和向东标记;OCR_IBEAM:I形梁;OCR_NO:斜的圆
OCR_SIZEALL:四个方位的箭头分别指向北、南、东、西
OCR_SIZENESEW:双箭头分别指向东北和西南;OCR_SIZENS:双箭头,分别指向北和南
OCR_SIZENWSE:双箭头分别指向西北和东南;OCR_SIZEWE:双箭头分别指向西和东
OCR_UP:垂直箭头:OCR_WAIT:沙漏返回值:如果成功,返回非零值;如果失败,返回值为
零。若想获得更多错误信息,请调用GetLastError函数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib。
2.6.12  ShowCursor
函数功能:该函数显示或隐藏光标。
函数原型:int ShowCursor(BOOL bShow);
参数:
bShow:确定内部的显示计数器是增加还是减少,如果bShow为TRUE,则显示计数器增加1,
如果bShow为FALSE,则计数器减1。
返回值:返回值规定新的显示计数器。
备注:该函数设置了一个内部显示计数器以确定光标是否显示,仅当显示计数器的值大于或
等于0时,光标才显示,如果安装了鼠标,则显示计数的初始值为0。如果没有安装鼠标,
显示计数是C1。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib。
2.6.13  LoadCursor
函数功能:该函数从一个与应用事例相关的可执行文件(EXE文件)中载入指定的光标资源。
该函数已被Loadlmage函数替代。
函数原型:HCURSOR LoadCursor(HINSTANCE hlnstance,LPCTSTR lpCursorName);
参数:
hlnstance:标识一个模块事例,它的可执行文件包含要载入的光标。
LpCursorName:指向以NULL结束的字符串的指针,该字符串存有等载入的光标资源名。该
参数低位字节和高位字节0组成资源标识器也可以由低位字为资源标识符和高位字为零组
成。也可以用MADEINTRES_OURCE宏命令创建该值。
    要使用Win32预定义的一个光标,应用程序必须把hlnsfance参数设为NULL,并把
IpCursorName设为如下值之一:
IDC_APPSTARING:标准箭头和小沙漏;IDC_ARROW:标准光标;IDC_CROSS:十字光标。
返回值:如果成功,返回值是新载入的光标的句柄:如果失败,返回值是NULL。若想获得
更多错误信息,请调用GetLastError函数。
备注:LoadCursor函数仅载入没有被载入过的光标资源,否则,它检取已存在的光标资的
句柄。仅当IpCursorName参数指向一个光标资源时,该函数才返回一个有效的光标句柄。
如果IpCursorName不是指向光标而是指向了其他类型的资源(如icon),则该函数返回值
不是NULL,尽管它不是一个有效的光标句柄,该函数为当前显示设备光标搜寻最贴切的光
标资源。光标资源可以是彩色或单色的位图。
    Windows CE:当目标平台不支持鼠标光标时。使用cursor光标组件。该光标组件支持
的唯一的光标是等待光标(IDC_WAIT)。使用LoadCursor函数与SetCursor函数可设值等待
光标。SetCursor(LoadCursor(NULL,IDC_WAIT))当目标平台不支持鼠标光标时,使用cursor
光标组件,该组件以桌面窗口平台同样的方式支持LoadCursor函数,唯一不同的是仅支持
单色光标。Windows CE不支持彩色光标。试图载入一个彩色光标,将产生难以预料的结果。
返回值是不确定的。
2.7对话框函数Dialog Box
2.7.1  CreateDialog
函数功能:CreateDialog宏从一个对话框模板资源创建一个无模式的对话框,CreateDiaog
宏使用CreateDialogParam函数。
函数原型:HWND CreateDialog(HINSTANCE hlnstance,LPCTSTR lpTemplate,HWND 
hWndParent,DLGPROC IpDialogFunc);
参数:
hlnstance:标识模块事例,该模块的可执行文件含有对话框模板。
pTemplate:  标识对话框模板,此参数或是指向一个以结尾的字符串指针,该字符串指定对
话框模板名,或是指定对话框模板的资源标识符的一个整型值。如果此参数指定了一个资源
标识符,则它的高位字一定为零,且低位字一定含有标识符,一定用MAKEINTRESOURCE宏来
创建此值。
hWndParent: 标识拥有对话框的窗口。
lpDialogFunc: 指向对话框应用程序的指针。有关更多的对话框应用程序的指针,参见
DialogProc。
返回值:如果函数调用成功,则返回值为指向对话框的句柄;如果函数调用失败,则返回值
为NULL。若想获得更多的错误信息,可调用GetLastError函数。
备注: CreateDialog函数用CreateWindowEx函数来创建对话框。然后CreateDialog函数
把一个WM_INITDIALOG消息(如果模板指定DS_SETFONT类型,则加上一个WM_SETFONT消息)
传送到对话框应用程序。如果模板指定WS_VISIBLE风格,则函数显示对话框,最后
CreateDlalog返回指向对话框的窗口句柄。
    CreateDialog函数返回之后,应用程序通过Showwindow函数显示对话框(如果还没有
显示)。应用程序通过利用DestroyWindow函数来清除对话框。
    Windows 95和以后版本:系统每个对话框模板可以支持最多达 255个控制。如果要把
多于255个控制放入对话框中,必须在WM_INITDIALOG消息处理器中创建控制,而不是把它
们放入模板中。
    Windows CE:IpTempIate参数指向的对话框模板中,DIGTEMPLATE结构并不支持所有类
型。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本:Windows CE:1.0及以上版
本:头文件:Winuser.h;库文件:user32.lib; Unicode: Unicode:在 Windows NT上实
现为 Unicode和ANSI两种版本。
27.2 CreateDialoglndirect
函数功能:该宏在内存中从对话框模板上创建一个无模式对话框。此宏使用
CreateDialoglndirectparam 函数。
函数原型:HWND CreateDialoglndirect(HINSTANCE hlnstance,LPCDLGTEMPLATE 
IPTemplate,HWNDhWndParent,DLGPROC IPDialogFunc);
参数:
hlnstance: 标识创建对话框的模块的事例。
IPTemplate: 指向含有一个模板的全局内存对象的指针。CreateDialoglndirect用此模板
创建对话框。对话框模板由描述对话框的标题组成,跟随着标题之后的是描述每一个控制的
一个或多个数据块,模板可以用标准格式或扩展格式。
    在标准模板中,标题是由DLGTEMPLATE结构跟随一个变长数组组成。每个控制的数据是
由DLGTEMPLATE结构跟随一个变长数组组成。
    在扩展模板中,标题用DLGTEMPLATEEX格式,且控制定义用DLGITEMPLATEEX格式。
CreatDialoglndirect函数返回后,可释放模板,此模板仅用于启动对话框。
hWndParent: 标识拥有对话框的窗口。
IpDialogFunc:指向对话框应用程序的指针,有关更多的对话框应用程序的指针,参见
DialogProc。
返回值:如果函数调用成功,则返回值为指向对话框的句柄。如果函数调用失败,则返回值
为NULL。若想获得更多错误信息,可调用GetLastError函数。
备注:CreateDialOglndirect宏使用CreateWindowEx函数来创建对话框,然后该函数把一
个WM_INITDIALOG消息发送到对话框应用程序,如果模板指定DS_SETFONT类型,则函数也
把一个WM_SETFONT消息发送到对话框应用程序。如果模板指定WS_VISIBLE类型,则函数显
示对话框,最后CreateDialoglndirect返回
指向对话框的窗口句柄。
    CreateDialoglndirect函数返回之后,可用 ShowWindow函数来显示对话框(如果还没
有显示)。用DestroyWindow函数来清除对话框。
    在标准对话框模板中,DLGTEMPLATE结构和每一个DLGITEMTEMPLATE结构必须按DWORD
边界对齐,遵循DLGEMTEPLATE结构而创建的数据数组也一定按DWORD边界对齐。模板中其
他所有变长数组一定要按DWORD边界进行调整。
    在扩展对话框模板上DLGTEMPLATEEX结构和每一个DLGITEMTEMPLATEEX结构必须按
DWORD边界对齐;遵循DLGEMTEPLATE结构而创建的数据数组也一定按DWORD边界对齐。模
板中其他所有变长数组一定要按DWORD边界进行调整。
    所有对话框模板的字符串,例如对话框和按钮的标题,一定是Unicode字符串。使用
MltiByteToWidechar函数产生这些Unicode字符串可以创建在Windows和Windows NT两种
系统上工作的代码。
    Windows 95和以后版本:系统可支持每个对话框模板最多为255个控制。为把多于255
个控制放入对话框,可以在WM_INITDLAIOG消息处理器中创建控制,而不是把它们放入模板
中。
    Windows CE:lpTempate参数指向的对话框模板中,DLGTEMPLATE结构并不支持所有的
类型。
速查:Windows NT:3.1 及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;
头文件:Winuser.h;库文件:user32.lib;Unicode: 在Windows NT上实现为Unicode和ANSI
两种版本。
2.7.3  CreateDialoglndirectParam
函数功能:该函数从内存中的对话框模板上创建一个无模式对话框,在显示对话框之前,函
数把应用程序定义的值作为WM_INITDIALOG消息的IParam参数传送到对话框过程。应用程
序可用此值初始化对话框控制。
函数原型:HWND CreateDialoglndirectParam(HINSTANCE hlnstance,LPCDLGTEMPLAT 
IPTemPIate,HWNDhWndParent,DLGPROC IpDialogFunc,LPARAM IParamlnlt);
参数:
hlnstance:标识将创建对话框的模块的事例。
IpTemplate:指向一个含有模板的全局内存对象的指针,CreateDialoglndirectParam用该
模板来创建对话框。
对话框模板由描述对话框的标题组成,跟随着标题之后的是描述每一个控制的一个或多个数
据块,模板可以用标准格式或扩展格式。
    在标准模板中,标题是由DLGTEMPLATE结构跟随一个变长数组组成。每个控制的数据是
由DLGTEMPLATE结构跟随一个变长数组组成。
    在扩展模板中,标题用DLGTEMPLATEEX格式,且控制定义用DLGITEMPLATEEX格式。
CreateDiloglndirectParam函数返回后,可释放模板,此模板仅用于启动对话框。
HWndParent:标识拥有对话框的窗口。
IpDialogFunc:指向对话框过程的指针,有关更多的对话框过程的信息,参见DialogProc。
lParamlnit:指定传递到WM_INIDIALOG消息的IParam参数中对话框中的值。
返回值:如果函数调用成功,则返回值为指向对话框的句柄:如果函数调用失败,则返回值
为NULL。若想获得更多的错误信息,可调用GetLastError函数。
备注:CreatDialoglndirectParam函数使用createWindowEx函数来创建对话框,然后该函
数把一个WM_INTDIALOG消息发送到对话框应用程序,如果模板指定DS_SETFONT类型,则函
数也把一个WM_SETFONT消息发送到对话框应用程序。如果模板指定WS_VISBLE类型,则函
数显示对话框,最后CreatDialogdirectParam返回指向对话框的窗口句柄。
    CreatDialoglndirectParam函数返回之后,可用ShowWindow函数来显示对话框(如果
还没有显示)。用DestroyWindow函数来清除对话框。
    在标准对话框模板中,DLGTEMPLATE结构和每一个DLGITEMTEMPLATE结构必须按DWORD
边界对齐,遵循DLGEMTEPLATE结构而创建的数据数组也一定按DWORD边界对齐。模板中其
他所有变长数组一定要按DWORD边界进行调整。
    在扩展对话框模板上DLGTEMPLATEEX结构和每一个DLGITEMTEMPLATEEX结构必须按
DWORD边界对齐,遵循DLGEMTEPLATE结构而创建的数据数组也一定按DWORD边界对齐。模
板中其他所有变长数组一定要按DWORD边界进行调整。
    所有对话框模板的字符串,例如对话框和按钮的标题,一定是Unicode字符串。使用
MultiByteTowidechar函数产生这些Unicode字符串可以创建在Windows和Windows NT两
种系统上工作的代码。
    Windows 95和以后版本:系统可支持每个对话框模板最多为255个控制。为把多于255
个控制放入对话框,可以在WM_INITDLALOG消息处理器中创建控制,而不是把它们放入模板
中。
    Windows CE:可视屏幕面积之外的对话框不能自动地被重新定位。
    如果用户在对话框有输入焦点的同时按下Alt+H,则系统把一个WM_HELP消息传送到
对话过程,应用程序应该通过显示对话框描述表积极帮助来响应此消息。
    DLGTEMPLATE结构的类型成员不支持下列类型:
DS_SETFONT:在对话框中不能设置字体。
DS_RECURSE:不需要。任何一个子对话框可自动地被看作递归对话框。
DS_CONTROL:不需要。
WS_EX_CONTROLPARENT:所有对话框都被自动假设为控制母体。用DS_CENTER类型可得到缺
省位置定位。如果没有指定WS_CHLD.则假设为WS_POPUP类型。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuse.h库文件:user32.lib;Unicode:在Windows NT上实现为Unicode
和ANSI两种版本。

2.7.4  CreateDialogParam

函数功能:该函数根据对话框模板资源创建一个无模式的对话框。在显示对话框之前,函数
把一个应用程序定义的值作为WM_INITDIALOG消息IParam参数传到对话框过程应用程序可
用此值来初始化对话框控制。
函数原型:HWND CreateDialogParam(HINSTANCE hlnstancem,LPCTSTR IpTemplateName,HWND 
hWndParent,DLGPROCIpDialogFunc, LPARAM dwlniParam);
参数:
hlnstance:标识一个模块的事例,该模块的可执行文件含有对话框模板。
IpTemplateName:标识对话框模板。此参数可以指向一个以NULL结尾的字符串的指针,该字
符串指定对话框模板名,或是指定对话框模板的资源标识符的一个整型值。如果此参数指定
了一个资源标识符,则它的高位字一定为零且低位字一定含有标识符。一定用
MAKENTRESOURDE宏指令创建此值。
HwndParent:指定拥有对话框的窗口。
IpDialogFunc:指向对话框过程的指针。有关对话框过程的更详细的信息,请参见
DialogProc。
dwlnitParam:指定传递到WM_INITDIALOG消息的IParam参数中的对话框过程的值。
返回值:如果函数调用成功则返回值为指向对话框的窗口句柄。如果函数调用失败则返回值
为NULL。
若想获得更多错误信息,请调用GetlastError函数。
备注:CreateoialogParam函数用 CreateWindowEx函数创建对话框。CreateDialogParam
函数然后把一个WM_INITDIALOG消息(和一个WM_SETFONT消息,如果模板指定DS SETFONT
类型)传递到对话框过程。如果模板指定WS_VISIBLE类型,则函数显示对话框,最后
CreateDialogParam返回对话框的窗口句柄。
    CreateDialogParam返回之后应用程序用ShowWindow显示对话框(如果还没有显示)。
应用程序用DestroyWindoW函数来清除对话框。
    Windows 95和以后版本:系统可支持每个对话框模板中最多255个控制。为把大于255
个的控制放入对话框,需要在WM_INITDIALOG消息处理器中创建控制,而不是把他们放入模板
中。
    Windows CE:IPTemplateName参数指向的对话框模板中DLGTEMPLATE结构并不支持所
有的类型。
速查:Windows NT:3.1 及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件;winuser.h;库文件:use32.lib;Unicode:在Windows NT上实现为Unicode
和ANSI两种版本。
2.7.5  DefDlgProc
函数功能:该函数为属于应用程序定义的对话框类的窗口过程提供缺省的消息处理。
函数原型:LRESULT DefDlgProc(HWND hDlg,UINT Msg,WPARAM wParam, LPARAM Param);
参数:
hDlg:指定对话框。
Msg:指定消息数目。
wParam:指定消息中特定的其他信息。
Iparam:指定消息中特定的其他信息。
返回值:返回值指定消息处理的结果且依赖于发送的消息。
备注:DefDlgProc函数为对话枢预定义类的窗口应用程序。此应用程序通过把消息传送到
对框应用程序和为对话框应用程序返回的任何一个FALSE消息,提供缺省处理而为对话框提
供内部的处理程序。为自定义对话框创建自定义应用程序的应用程序,常用DefDlgProc而
不是DefWindowProc函数来执行缺省的消息处理。
    应用程序通过用合适的信息来填充一个WNCLASS结构和通过用RegisterClass函数登记
的类创建自定义对话框类。一些应用程序用GetClasslnfo函数指定与定义对话框的名来填
充此机构。在这种情况下,应用程序在登记之前至少改变IpszClassNamede数目。在所有的
情况下,对于自定义对话框的WNDCLASS的cbWndExtra成员一定至少设置为
DLGWINDOWEXTRA。
    DefDlgProc函数一定不要通过一个对话框应用程序来调用,这样做会导致循环执行。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode
和ANSI两种版本。
2.7.6  DialogBox
函数功能:该宏根据对话框模板资源创建一个模态的对话框。DialogBOX函数直到指定的回
调函数通过调用EndDialog函数中止模态的对话框才能返回控制。该宏使用DialogBoxParam
函数。
函数原型:int DialogBox(HINSTANCE hlnstance,LPCTSTRIpTemplate,HWND 
hWndParent,DLGPROC IpDialogFunc);
参数:
hlnstance:标识一个模块的事例该模块的可执行文件含有对话框模板。
IpTemplate:标识对话框模板。此参数可以是指向一个以NULL结尾的字符串的指针,该字
符串指定对话框模板名,或是指定对话框模板的资源标识符中的一个整型值。如果此参数指
定了一个资源标识符则它的高位字一定为零,且低位字一定含有标识符。一定用
MAKEINTRESOURDE宏指令创建此值。
hWndParent:指定拥有对话框的窗口。
IpDialogFunc:指向对话框过程的指针。有关更详细的关于对话框过程的信息,请参见
DialogProc。
返回值:如果函数调用成功,则返回值为在对函数EndDialog的调用中的nResult参数.该
函数用于中止对话框。如果函数调用失败,则返回值为C1。若想获得更多的错误信息,请
调用GetLastError函数。
备注:DialOgBox宏用CreateWindowEx函数创建对话框。DialogBox函数然后把一个
WM_INITDIALOG消息(和一个WM-SETFONT消息,如果模板指定DS_SETFONT类型)传递到对
话框过程。不管模板是否指定WS_VISIBLE类型,函数显示对话框,并且使拥有该对话框的
窗口(也称属主窗口)失效,且为对话框启动它本
身的消息循环来检索和传递消息。
    当对话框应用程序调用EndDialog函数时,DialogBox函数清除对话框户止消息循环,
使属主窗口生效(如果以前有效),且返回函数EndDialog调用中的nReSUlt参数。
    Windows 95和以后版本:系统可支持每个对话框模板中最多255个控制。为把大于255
个的控制放入对话框,需要在WM_INITDIALOG消息处理器中创建控制,而不是把他们放入模
板中。
    Windows CE:lpTemplateName参数指向的对话框模板中DLGTEMPLATE结构并不支持所有
的类型。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;库文件:user32.lib Unicode:在Windows NT上实现为Unicode
和ANSI两种版本。
2.7.7 DialogBoxlndirect
函数功能:该宏根据内存中的对话框模板资源创建一个模态的对话框。DialogBoxlndirect
宏直到指定的回调函数通过调用EndDialog函数中止模态的对话框才能返回。
DiaogBoxlndirect宏使用DialogBoxParam函数。函数原型:int 
DialogBoxlndirect(HINSTANCE hlnstance,LPDLGTEMPLATE IpTemplate,HWND hWndParent,
DLGPROClpDialogFunc);
参数:
hlnstance:标识一个模块的事例,该模块创建对话框。
IpTemplate:此参数指向含有一个模板的全局内存对象的指针。DialogBoxlndirect用此模
板创建对话框。对话框模板由描述对话框的标题组成,跟随着标题之后的是描述每一个控制
的一个或多个数据块,模板可以用标准格式或扩展格式。
    在标准模板中,标题是由DLGTEMPLATE结构跟随一个变长数组组成。每个控制的数据是
由DLGTEMPLATE结构跟随一个变长数组组成。
    在扩展模板中,标题用DLGTEMPLATEEX格式,且控制定义用DLGITEMPLATEEX格式。
HWndParent:指定拥有对话框的窗口。
IpDialogFunc:指向对话框过程的指针。有关更详细的关于对话框过程的信息,请参见
DialogProc。
返回值:如果函数调用成功则返回值为在对函数EndDialog的调用中的nResult参数,该
EndDialog函数用于中止对话框。如果函数调用失败,则返回值为C1。 若想获得更多错误
信息请调用GetLastError函数。
备注:DialogBoxlndirect宏使用CreateWindowEx函数创建对话枢.然后把一个
WM_INITDIALOG消息传递到对话框过程。如果模板指定DS_SETFONT类型DialogBoxlndirect
函数将一个WM_SETFONT消息传递到对话框。(不管模板是否指定WS_VISIBLE类型),函数显
示对话框使属主窗口失效,且为对话框启动它本身的消息循环来检索和传递消息。
   当对话框应用程序调用EndDialog 函数时,DialogBoxlndirect函数清除对话框,中止
消息循环,使主窗口生效(如果以前有效)且返回EndDialog函数调用中的nResult参数。
    在标准对话框模板中,DLGTEMPLATE结构和每一个DLGITEMTEMPLATE结构必须按DWORD
边界对齐,遵循DLGEMTEPLATE结构而创建的数据数组也一定按DWORD边界对齐。模板中其
他所有变长数组一定要按DWORD边界进行调整。
    在扩展对话框模板上DLGTEMPLATEEX结构和每一个DLGITEMTEMPLATEEX结构必须按
DWORD边界对齐,遵循DLGEMTEPLATE结构而创建的数据数组也一定按DWORD边界对齐。模
板中其他所有变长数组一定要按DWORD边界进行调整。
    所有对话框模板的字符串,例如对话框和按钮的标题,一定是Unicode字符串。使用
MultiByteToWidechar函数产生这些Unicode字符串可以创建在Windows和Windows NT两
种系统上工作的代码。
    Windows 95和以后版本:系统可支持每个对话框模板最多为255个控制。为把多于255
个控制放入对话框。可以在WM_INITDLAIOG消息处理器中创建控制,而不是把它们放入模板
中。
    Windows CE:IpTemplateName参数指向的对话框模板中DLGTEMPLATE结构并不支持所
有的类型。
速查:Windows NT:3.1 及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版
本;头文件:Winuser.h;库文件:user32.lib Unicode:在Windows NT上实现为Unicode
和ANSI两种版本。
2.7.8  DialogBoxlndirectParam
函数功能;该函数根据内存中对话框模板创建一个模态的对话框。在显示对话框之前,函数
把一个应用程序定义的值作为WM_INITDIALOG消息的IParam参数传到对话框过程,应用程序
可用此值来初始化对话框控制。
函数原型:int DialogBoxlndirectParam(HINSTANCE hlnstance,LPCDLGTEMPLATE 
hDialogTemplate, HWND hWndParent,DLGPROC IpDiaIogFunc,LPARAM dwlnitParam);
参数:
hlnstance:标识一个模块的事例,该模块创建对话框。
hDialogTemplate:此参数指向含有一个模板的全局内存对象的指针。
DialogBoxlndirectParam用此模板创建对话框。对话框模板由描述对话框的标题组成,跟
随着标题之后的是描述每一个控制的一个或多个数据块,模板可以用标准格式或扩展格式。
    在标准模板中,标题是由DLGTEMPLATE结构跟随一个变长数组组成。每个控制的数据是
由DLGTEMPLATE结构跟随一个变长数组组成。
    在扩展模板中,标题用DLGTEMPLATEEX格式,且控制定义用DLGITEMPLATEEX格式。
hWndParent:指定拥有对话框的窗口。
IpDirlogFunc:指向对话框过程的指针。有关对话框过程更详细的信息请参见DialogProc。
dwlnitParam:指定传递到WM_INITDIALOG消息的IParam参数中的对话框的值。
返回值:如果函数调用成功,则返回值为在函数EndDialog的调用中的nResult参数,该
EndDialog函数用于中止对话框。如果函数调用失败,则返回值为C1。若想获得更多的错误
信息,请调用GetLastError函数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版
本;头文件:Winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode和
ANSI两种版本。
2.7.9  DialogBoxParam
函数功能:该函数根据对话框模板资源创建一个模态的对话框。在显示对话框之前,函数把
一个应用程序定义的值作为WM_INITDIALOG消息的IParam参数传到对话框过程,应用程序可
用此值来初始化对话框控制。
函数原型:int DialogBoxParam(HINSTANCE hlnstance,LPCTSTR IpTemplateName,HWND 
hWndParent, DLGPROCIPDialogFunc,LPARAM dwlnitParam);
参数:
hlnstance:标识一个模块的事例,该模块的可执行文件含有对话框模板。
IpTemplateName:标识对话框模板。此参数可以指向一个以NULL结尾的字符串的指针,该字
符串指定对话框模扳名,或是指定对话框模板的资源标识符的一个整型值。如果此参数指定
了一个资源标识符,则它的高位字一定为零,且低位字一定含有标识符。一定用
MAKEINTRESOURDE宏指令创建此值。
hWndParent:指定拥有对话框的窗口。
IpDirlogFunc:指向对话框过程的指针。有关更详细的关于对话框过程的信息,请参见
DialogProc。
dwlnitaram:指定传递到WM_INITDIALOG消息的IParam参数中的对话框过程的值。
返回值:如果函数调用成功则返回值为在对函数EndDialog的调用中的nResult参数,该
EndDialog函数用于中止对话框。如果函数调用失败,则返回值为C1。若想获得错误信息,
请调用GetLastError函数。
备注:DialogBoxParam函数用CreateWindowEx函数创建对话框。然后把一个WM_INITDIALOGG
消息传递到对话框过程。如果模板指定DS_SETFONT类型,DialogBoxParam函数把一个
WM_SETFONT消息传递到对话框过程。(不管模板是否指定WS_VISIBLE类型),函数显示对话
框使拥有窗口失效,且为对话框启动它本身的消息循环来检取和传递消息。
    当对话框应用程序调用EndDialog函数时,DialogBoxParam函数清除对话框中止消息
循环;使拥有窗口生效(如果以前有效),且返回函数EndDialog的调用中的nReSUlt参数。
    Windows 95和以后版本:系统可支持每个对话框模板最多为255个控制。为把多于255
个控制放入对话框,可以在WM_INITDLALOG消息处理器中创建控制,而不是把它们放入模板
中。
    Windows CE:IPTemplateName参数指向的对话框模板中DLGTEMPLATE结构并不支持所
有的类型。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:Winuser.h;库文件:USer32.lib:Unicode:在Windows NT上实现为Unicode
和ANSI两种版本。
2.7.10  DialogProc
函数功能:该函数为一个应用程序定义可与DialogBOX函数一起使用的回调函数。它处理发
送到一个模态的或无模式对话框的消息。DLGPROC类型定义了一个指向此回调函数的指针。
DialogProc函数是应用程序定义函数名的一个占位符。
函数原型:BOOL CALLBACK DialogProc(HWND hwndDlg,UINT UMsg,WPARAM wParam,LPARAM 
IParam);
参数:
hwndDlg:指定对话框。
uMsg:指定消息。
wParam:指定消息特定的其他信息。
Iparam:指定消息特定的其他信息。
返回值:除了对MM_INITDIALOG消息的响应之外如果函数处理消息,则对话框应用程序应该
返回非零值.
如果函数不处理消息,则对话框应用程序应该返回零值。再响应WM_INITDIALOG消息时,如
果函数调用SetFocus设置对话框中控制中的一个焦点,则对话框应用程序应该返回零值,否
则对话框应用程序应该返回非零值在,这种情况下系统对能够有焦点的对话框中的第一个控
制设置焦点。
备注:只要为对话框使用对话框类时才应该使用对话框应用程序。这是缺省的类,并且在对
话框模板中没有指定明显的类时才使用。尽管对话框应用程序同Windows应用程序类似,但
它不能调用DefWindowProc
函数来处理不需要的消息。不需要的消息通过对话框窗口应用程序内部处理。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:Winser.h;库文件:用户定义。
2.7.11  EndDialog
函数功能:该函数清除一个模态对话框,并使系统中止对对话框的任何处理。
函数原型:BOOL EndDialog(HWND hDlg,int nResult);
参数:
hDlg:表示要被清除的对话框窗口。
NResult:指定从创建对话框函数返回到应用程序的值。
返回值:如果函数调用成功,则返回值为非零值;如果函数调用失败则返回值为零。若想获
得错误信息请调用GetLastError函数。
备注:由DialogBox,DialogBoxParam、DialogBoxlndirect和DialogBoxlndirectParam函
数创建的对话框一定要用EndDialog函数来清除。应用程序从对话框应用程序内部调用
EndDialog函数,该函数不能为其他目的而供使用。
    对话框应用程序可以在任何时间调用EndDialog函数;甚至在WM_INITDIALOG消息处理
过程中。如果应用程序在WM_INTDIALOG消息处理过程中调用该函数,则对话框在显示和输
入焦点被设置之前对话框被清除。
    EndDialog函数并不立即清除对话框。而是设置一个标志,并且允许对话框应用程序把
控制权返回系统。系统在试图从应用程序队列检索下一个消息之前检测标志。如果已经设置
了标志则系统中止消息循环,清除对话框,且用nResUlt中的值作为从创建对话框的函数中返
回的值。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;库文件:user32.lib。
2.7.12  GetDialogBaseUnits
函数功能:该函数返回系统的对话基本单位,该基本单位为系统字体字符的平均宽度和高度。
对于使用系统字体的对话框,可以用这些值在对话框模板之间转换,比如在对话框模板和像
素之间。对于不使用系统字体的对话框,从对话框模板单位到像素的转换要根据对话框使用
的字体而定。对于对话框的其中一种类型用MaPDialogRect函数很容易地来执行转
换,MaPDialogRect考虑字体且正确的把一个长方形模板单位转换
为此像素。
函数原型:LONG GetDialogBaseUnits(VOID);
参数:无。
返回值:返回值为一个32位的含有对话基本单位的值。返回值的低位字含有水平对话框基
本单位,且高低位字含有垂直对话框基本单位。
备注:GetDialogBaseUnits函数返回的水平基本单位同系统字体中字符以像素为单位的平
均宽度相等;垂直基本单位同系统字体中字符的以像素为单位的平均高度相等;
    对于一个没有使用系统字体的对话框基本单位相等于对话框字体字符以像素为单位的平
均宽度和平均高度。可以用GetTextMetrics和GetTextExtentPoint32函数为一个选择的字
体来计算这些值。但是,如果计算结果与那些通过系统执行的值不同,那么可以用
MapDialogRect函数避免可能发生的错误。
    每一个水平基本单位同四个水平对话框模板单位相等;每一个垂直基本单位同八个垂直
对话框模板单位相等。所以用下列公式来把对话框模板单位转换为像素:
PiselX=(temptateunitX★baseunitX)/4;PiseIY=(templateunitY★baseunitY)/8
    同样地.用下列公式来把像素转换为对话框模板单位:
templateunitX=(pixelX★4)/baseunitX;templateunitY=(plxelY★8)/baseunitY
    Windows CE:Windows CE不支持此函数的任何一个扩展的错误值。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows:1.0及以上版本;
头文件:Winuser.h;库文件:user32.lib
2.7.13  GetDigCtrllD
函数功能:该函数返回指定控制的标识符。
函数原型:Int GetDlgCtrllD(HWND hwndCtl);
参数:
hwndCtl:标识控制的句柄。
返回值:如果函数调用成功,则返回值为控制的标识符,如果函数调用失败,则返回值为零。
例如,hwndCtl参数的一个无效的值将导致函数失败。若想获得更多错误信息,请调用
GetLastError函数。
备注:GetDlgCtrllD函数接收子窗口句柄和对话框中的控制句柄。当应用程序调用
CreateWindow或CreateWindowEx函数,通过把标识符的值设置为hmenu参数来创建窗口时,
应用程序为了窗口句柄设置标识符。
    如果hwndCtrl标识一个顶层窗口尽管GetDlgCtrllD可以返回一个值,但顶层窗口不能
有标识符且这样的返回值从不生效。windows CE:标识符仅对子窗口有效。标识符叫以通过
把作为hwndCtrl参数中的标识符传递到CreatewindowEx函数来设置,它也可以通过调用带
有设置为GWL_ID的nlndex参数的SetwindowLong和GetWindowLong函数来设置和检索。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版
本;头文件:winuser.h;库文件:user32.lib。
2.7.14  GetDigltem
函数功能:该函数检索指定的对话框中的控制句柄。
函数原型:HWND GetDlgltem(HWND hDlg,int nlDDlgltem);
参数:
hDlg:标识含有控制的对话框。
nlDDlgltem:指定将被检索的控制标识符。
返回值:如果函数调用成功则返回值为给定控制的窗口句柄。如果函数调用失败,则返回值
为NULL,表示为一个无效的对话框句柄或一个不存在的控制。若想获得更多错误信息,请
调用GetLastError函数。
备注:可以通过使用任何父子窗口对来使用GetDlgltem函数,而不仅只是对话框。只要hDlg
参数指定一个父窗口,且子窗口有一个独立的标识符(象CreateWindow中hMenu参数指定
的或创建子窗口的CreateWindowEx指定的那样),GetDlgltem就会返回一个有效的句柄到
子窗口。
    Windows CE:GetDlgltem函数只为对话框中的直接于控制工作,它不通过嵌套的对话
框来搜寻。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版
本;头文件:winuser.h;库文件:user32.lib。
2.7.15  GetDlgltemlnt
函数功能:该函数把对话框中指定控制的文本转变为一个整型值。
函数原型:UINT GetDlgltemlnt(HWND hDlg,int nlDDlgltem,BOOL ★IpTranslated,BOOL 
bSigned);
参数:
hDlg:指向含有利益控制的对话框的句柄。
nlDDlgltem:指定文本将被转变的控制的对话项目标识符。
IpTranslated:指向一个Boolean变量的指针。该变量保存函数成功/失败的值。TRUE表示
成功,FALSE表示失败。此参数为可选的。它可以为NULL。在这种情况下,函数不返回关于
成功和失败的信息。
bSigned:指定函数足否在开始时为一个最小的消息检测文本,且如果发现一个消息整型值,
则返回它。TRUE指定应该这样做,FALSE指定不应该这样做。
返回值:如果函数调用成功则由IPTranslated指向的变量被设置为TRUE,且返回值为控制
文本的转变值。
如果函数调用失败则由IPTranslated指向的变量被设置为FALSE,且返回值为零。注意因
为零为一个可能转变的值,返回的零值不能通过它自身来表示失败。如果IpTranslated为
NuLL,则表示函数没有返回关于成功和失败的信息。如果bSigned参数为TRUE,指定将被
检取的值为一个符号整型值,则把返回值设置为一个整型类型。有关详细的错误信息,请调
用GetLastError。
备注:GetDlgltemlnt函数通过发送WM_GETTEXT控制消息来检索给定控制的文本。函数通
过去除任何一个文本开头的额外空间来转变要检索的文本,然后转换为数值数据。当函数达
到文本的末尾或遇到一个非数值的字符时,则函数停止转变。
    如果bSigned参数为TRUE,则GetDlgltemlnt函数检测文本开头的符号“C且把文本转
变为符号整型数值。否则,函数创建一个非符号整型数值。
    如果转变的值大于IN_TMAX(对于有符号数)或UINT_MAX(对于无符号数),则
GetDlgltemlnt函数返回零值。
    Windows CE:对于大于48个字符的文本字符串不能被转变。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本:头文件:Winuser.h;库文件:user32.lib
2.7.16  GetDlgltemText
函数功能:该函数获取对话框中与控制有关的文本或标题。
函数原型:UINT GetDlgltemText(HWND hDlg,int nlDDlltem,LPTSTR IpString int 
nMazCount);
参数:
hDlg:指向含有控制的对话框的句柄。
nlDDlgltem:指定标题或文本将被检索的控制的标识符。
IpString:指向获取标题或文本的缓冲器的指针。
nMaxCount:指定被复制到lpString参数指向的缓冲区的字符串的最大长度。如果字符串的
字符最大长度超过范围,则该字符串被截断。
返回值:如果函数调用成功,则返回值表示被复制缓冲区的字符串的长度,不包括以NULL
结尾的字符串。如果函数调用失败,则返回值为零。若想获得更多错误信息,请调用
GetLastError函数。
备注: GetDlgltemText函数把一个WM_GETTEXT消息发送到控制。
速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版
本:头文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode
和ANSI两种版本。
2.7.17  GetNextDlgGroupltem
函数功能:该函数检索控制组的第一个控制的句柄,该控制组跟随对话框中指定的控制。
函数原型:HWND GetNextDlgGroupltem(HWND hDlg,HWND hctl,BOOL bPrevious);
参数:
hDlg:标识正在被搜寻的对话框。
hCtl:指定用来作为搜寻开始点的控制。如果此参数为空,函数将以最后一个点为搜寻开始
点。
BPrevious:指定参数如何搜寻,如果此参数为TRUE,则函数寻找以前的控制组中的控制。
如果为FALSE,则函数寻找控制组中的下一个控制。
返回值:如果GetNextDlgGroupltem函数调用成功,则返回值为控制组中以前的(或下一个)
控制。如果函数调用失败,则返回值为零。若想获得更多的错误信息,请调用GetLastError
函数。
备往:GetNextDlgGroupltem函数按照对话框模板中被创建的顺序(或相反的顺序)寻找控
制。控制组的第一个控制一定有WS_GROUP类型;所有其他的控制组的控制一定被顺序创建
且一定没有WS_GROUP类型。
当寻找以前的控制时,函数返回第一个位置上可视的、且不失效的控制。如果由hCtl给定
的控制有WS_GROUP类型,则函数暂时反向寻找具有WS_GROUP类型的第一个控制,然后重新
回到原来的方向进行寻找,返回可视的、且不失效的第一个控制,如果没有发现控制,则返
回hWndCtrl。
    当寻找下一个控制时,函数返回第一个位置上的可视控制,且没有WS_GROUP类型。如
果遇到一个有WS_GROUP类型的控制,则函数反向寻找具有WS_GROUP类型的第一个控制,且
如果此控制为可视的、且没有失效,则返回此控制。否则,函数重新回到原来方向的寻找,
返回可视的、且不失效的第一个控制。如果没有发现控制。则返回hCtl。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;库文件:user32.lib。
2.7.18  GetNexTDlgTabltem
函数功能:该函数检索有WS_GROUP类型的第一个控制的句柄,该WS_GROUP类型控制跟随指
定的控制。
函数原型:HWND GetNextDlgTabltem(HWND hDlg,HWND hCtl,BOOL bPrevious);
参数:
hDlg:标识将被搜寻的对话框。
hCtl:指定用来作为搜寻开始点的控制。如果此参数为NULL,则函数用对话框中上一个(或
下一个)控制作为搜寻开始点。
bPrevious:指定函数怎样寻找对话框。如果此参数为TRUE,则函数寻找上一个对话框中的
控制。如果为FALSE,则函数寻找下一个对话框中的控制。
返回值:如果GetNextDlgTabitem函数调用成功,则返回值为有WS_GROUP类型的上一个(或
下一个)控制的窗口句柄。如果函数调用失败,则返回值为NuLL。若想获得更多的错误信
息,请调用GetLastError函数。
备注:GetNextDlgTabltem函数按照对话框模板中被创建的顺序(或相反的顺序)寻找控制。
函数返回第一个位置上可视的、且不失效的控制,该控制具有WS_GROUP类型。如果不存在
此控制,则函数返回hCtl。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;库文件:user32.lib。
2.7.19  IsDialogMessage
函数功能:该函数决定一个消息是否指定给指定的对话框,如果是,则处理消息。
函数原型:BOOL IsDialogMessage(HWND hDlg,LPMSG IpMsg);
参数:
hDlg:标识对话框。
IpMsg:指向一个含有将被检测的消息的MSG结构。
返回值:如果消息被处理,则返回值为非零值;如果消息没有被处理,则返回值为零。
备注:尽管IsDialogMessage函数是为无模态对话框而扩展的,但可以用含有控制的任何一
个窗回来使用它。当 IsDialogMessage处理一个消息时,它检测键盘信息并把它们转变成
对响应对话框的选择命令。例如当按下tab时选择下一个控制或控制组,当按下down时选
择控制组的下一个控制。
    因为IsDialogMessage 函数要执行消息所有必要的转变和传送,IsDialogMessage函数
处理的消息不必传送给TranslateMessage或 DispatchMessage函数处理。
    IsDialogMessage函数把WM_GETDLGETDLGCODE发送到对话枢应用程序,决定应该处理
哪个键。
    lsDialogMessage函数把DMa_ETDEFID和DM_SETDEFID消息发送到窗口。这些消息在
WINUSERH头文件中定义为WM_USER和WM_USER+1所以就有与应用程序定义的有一样值的消
息发生冲突。
速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h; 库文件:usgr32.lib:Unicode:在Windows NT上实现为Unicode
和ANSI两种版本。
2.7.20  MapDialogRect
函数功能:该函数把指定的对话框单位映射成屏幕单位(像素)。函数MapDialogRect用变
换坐标替换指定的RECT结构中的坐标,这就使得该结构可以用来创建对话框或定位对话框
内的控制。
函数原型:BOOL MapDialogRect(HWND hDlg,LPRECT IpRect);
参数:
hDlg:标识对话框。MapDialogRect 函数只接收对话框创建函数中一个创建的对话框的句柄,
对于其他窗口的句柄失效。
IpRect:指向一个含有将被转变的对话框坐标的RECT结构。
返回值:如果消息被处理,则返回值为非零值。如果消息没有被处理则返回值为零。若想获
得更多的错误信息,请调用GetLastError函数。
备注:MapDialogRect函数假定RECT结构内的起始坐标代表对话框单位。为把这些坐标从
对话框单位转变为像素,函数检索对话框的当前水平和垂直基本单位,然后应用下列公式:
left=(left*baseunitX)/4;right=(right*baseunitX)/4
top=(top* baseunitY)/ 8; bottom=(bottom* baseunitY)/ 8
    在很多情况下,对话框的基本单位同用GetDialogBaseUnits函数检索到的单位一样。
如果对话板模板有DS_SETFONT类型,那么基本单位为模扳给定的字体中的字符的平均宽度
和高度,单位为像素。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:Winuser.h;库文件:USer32.lib。
2.7.21  MessageBox
函数功能:该函数创建、显示、和操作一个消息框。消息框含有应用程序定义的消息和标题,
加上预定义图标与Push(下按)按钮的任何组合。
函数原型:int MessageBox(HWND hWnd,LPCTSTR IpCaption,UINT UType);
参数:
hWnd:标识将被创建的消息框的拥有窗口。如果此参数为NULL,则消息框没有拥有窗口。
IpText:指向一个以NULL结尾的、含有将被显示的消息的字符串的指针。
IpCaption:指向一个以NULL结尾的、用于对话框标题的字符串的指针。
uType:指定一个决定对话框的内容和行为的位标志集。此参数可以为下列标志组中标志的
组合。
    指定下列标志中的一个来显示消息框中的按钮,标志的含义如下。
MB_ABORTRETRYIGNORE:消息框含有三个按钮:Abort,Retry和Ignore。
MB_OK:消息框含有一个按钮:OK。这是缺省值。
MB_OKCANCEL:消息框含有两个按钮:OK和Cancel。
MB_RETRYCANCEL:消息框含有两个按钮:Retry和Cancel。
MB_YESNO:消息框含有两个按钮:Yes和No。
MB_YESNOCANCEL:消息框含有三个按钮:Yes,No和Cancel。
    指定下列标志中的一个来显示消息框中的图标:标志的含义如下。
MB_ICONEXCLAMATION:
MB_ICONWARNING:一个惊叹号出现在消息框。
MB_ICONINFORMATION:
MB_ICONASTERISK:一个圆圈中小写字母i组成的图标出现在消息框。
MB_ICONOUESTION:一个问题标记图标出现在消息框。
MB_ICONSTOP:
MB_ICONERROR:
MM_ICONHAND:一个停止消息图标出现在消息框。
    指定下列标志中的一个来显不缺省的按钮:标志的含义如下。
MB_DEFBUTTON1:第一个按钮为缺省按钮。如果MB_DEFBUTTON2,MB_DEFBUTTON3,
MB_DEFBUTTON4没有被指定,则MB_DEFBUTTON1为缺省值。
MB_DEFSUTTON2;第二个按钮为缺省按钮。
MB_DEFBUTTON3:第三个按钮为缺省按钮。
MB_DEFBUTTON4:第四个按钮为缺省按钮。
    指定下列标志中的一个来显示对话框的形态:标志的含义如卜。
MB_APPLMODAL:在hwnd参数标识的窗口中继续工作以前,用户一定响应消息框。但是,用
户可以移动到其他线程的窗口且在这些窗口中工作。根据应用程序中窗口的层次机构,用户
则以移动到线程内的其他窗口。所有母消息框的子窗口自动地失效,但是弹出窗口不是这样。
如果既没有指定MB_SYSTEMMODAL也没有指定MB_TASKMOOAL,则MB_APPLMODAL为缺省的。
MB_SYSTEMMODAL:除了消息框有WB_EX_TOPMOST类型,MB_APPLMODAL和WS_EX_TOPMOST一
样。用系统模态消息框来改变各种各样的用户,主要的损坏错误需要立即注意(例如,内存
溢出)。如果不是那些与hwnd联系的窗口,此标志对用户对窗口的相互联系没有影响。
MB_TASKMODAL:如果参数hwnd为NULL,除了所有属于当前线程高层次的窗口足失效的,
MB_TASKMODALL和MB_ApPLMODAL一样。当调用应用程序或库没有一个可以得到的窗口句柄
时,使用此标志。但仍需要阻止到调用应用程序甲其他窗口的输入而不是搁置其他线程。
    另外,可以指定下列标志。
MB_DEFAULT_DESKTOP_ONLy:接收输入的当前桌面一定是一个缺省桌面。否则,函数调用失
败。缺省桌面是一个在用户已经纪录且以后应用程序在此上面运行的桌面。
MB_HELP:把一个Help按钮增加到消息框。选择Help按钮或按F1产生一个Help事件。
MB_RIGHT:文本为右调整。
MB_RTLREADING:用在Hebrew和Arabic系统中从右到左的顺序显示消息和大写文本。
MB_SETFOREGROUND:消息框变为前景窗口。在内部系统为消息个调用SetForegrundWindow
函数。
MB_TOPMOSI:消息框用WS_EX_TOPMOST窗口类型来创建MB_SERVICE_NOTIFICATION。
    Windows NT:调用程序是一个通知事件的用户的服务程序。函数在当前活动桌面上显示
一个消息框,即使没有用户登记到计算机。
    如果设置了此参数,则hwnd参数一定为NULL。所以消息框可以出现在一个桌面上而不
是桌面响应参数hwnd。
    对于Windows NT 4.0,MB_SERVICE_NOTIFICATION的值己经改变。对于旧的和新的值,
请参见WINUSER。
Windows NT 4.O通过把旧值映射到MessageBox和MessageBoxEx执行中的新值,为先存在
的服务程序提供逆兼容。此映射只为有了版本数目的可执行程序而做。
    为了建立一个用MB_SERVICE_NOTIFICATION的服务器,且可以在Windows NT 3.X和
Window NT 4.0上执行,可有两种选择。在连接时间,指定一个版本数目小于4.0的版本,
或在连接时间,指定一个4.0版本。在运行时间,用函数GetVersionEx来检测系统版本,
然后在Windows NT 3.X上用MB_SERVICE_NOTIFICATION_NT 3.x来运行和在Windows NT 4.0
上用MB_SERVICE_NOTIFICAION来运行。MB_SERVCE_NOTIFICATION_NT3.x(WindowNT)此值
响应于为WindowNT3.51的MB_SERVICE_NOTIFICAION
定义的值。
返回值:如果没有足够的内存来创建消息框,则返回值为零。如果函数调用成功,则返回值
为下列对话框返回的菜单项目值中的一个:
IDABORT:Abort 按钮被选中。IDCANCEL:Cancel按钮被选中。IDIGNORE:Ignore按钮被选
中。
IDNO:NO按钮被选中。IDOK:OK按钮被选中。IDRETRY:RETRY按钮被选中。
IDYES:YES按钮被选中。
    如果一个消息框有一个Cancel按钮,且如果Esc键被按下或Cancel键被选择,则函数
返回IDCANCEL值。如果消息框没有Cancel按钮,则按Esc键没有作用。
备注:当创建一个系统模态消息框来表示系统在内存的低端中时,由lpTeXt和lpCaption
参数指向的字符串不应该从一个资源文件中取出,因为试图装载此资源可能导致失败。
    当一个应用程序调用MessageBox,且为uType参数指定MB_ICONHAND和MB_SYSTEMMODAL
标志时,系统不管可用内存为多少,直接显示结果消息框。当这些标志被指定,系统把消息
框文本的长度局限于三行。系统不能自动截断要填到消息框的行,但是消息字符串一定含有
回车换行,以在合适的位置换行。
    如果在对话框出现的的同时创建了消息框,则可使用对话框的句柄作为hwnd参数,hwnd
参数不应该标识一个子窗口,例如对话框中的一个控制。
    Windows 95:系统可以支持最大达16364个窗口句柄。
    Windows CE:Windows CE 不支持uType参数的下列值:
    MB_STSTEMMODAL;MB_TASKMODAL;MB_HELP;MB_RTLREADING;MB_DEFAULT_DESKTOP_ONLY;
MB_SERVICE_NOTIFICATION;MB_USERICON。
    不支持下列返回值:IDCLOSE;IDHELP。
速查:Windows:3.1及以上版本:Windows:95及以上版本;Windows:1.0及以上版本;头
文件:Winuser.h;库文件:USer32.lib;URicode:在Windows NT上实现为Unicode和ANSI
两种版本。
2.7.22  MessageBoxEx
函数功能:该函数创建、显示、和操作一个消息框。消息框含有一个应用程序定义的消息和
标题,加上预定义目标与pus(下推)按钮的任何组合。wLanguageld参数指定哪一个语言
资源集被用于预定义的下推按钮。有关MessageBoxEX函数其他参数的完整描述,请参见
MessageBoxEx函数。
函数原型:int MessageBoxEXHWND hwnd,LPCTSTR IPText, LPCTSTR IpCaPtion, UINT UTye, 
WORD wLanguageld);
参数:
hWnd:标识将被创建的消息框的拥有窗口。如果此参数为NULL,则消息框没有拥有窗口。
IpCaption:指向一个以NULL结尾的、含有将被显示的消息的字符串的指针。
IpszTitle:向一个以NULL结尾的结、用于对话框标题的字符串的指针。如果此参数为NULL,
则用缺省的标题Error。
uType:指定一个决定对话框的内容和行为的位标志集。标志的意义参见MessageBox\uType。
备注:当创建一个系统模态消息框来表示系统在在内存的低端中时,由IPText和IpCaPtion
参数指向的字符串不应该从一个资源文件中取出,因为试图装载此资源可能导致失败。
    当一个应用程序调用MessageBox,且为uType参数指定MB_ICONHAND和MB_SYSTEMMODAL
标志时,系统不管可用内存为多少,直接显示结果消息框。当这些标志被指定,系统把消息
框文本的长度局限于三行。系统不能自动截断要填到消息框的行,但是消息字符串一定含有
回车换行,以在合适的位置换行。
    如果在对话框出现的的同时创建了消息框,则可使用对话框的句柄作为hwnd参数,hwnd
参数不应该标识一个子窗口,例如对话框中的一个控制。
    Windows 95:系统可以支持最大达 16364个窗口句柄。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:Winuser.h;库文件: user32.lib; Unicode:在Windows NT上实现为Unicode
和ANSI两种版本。
2.7.23  SendDlgltemMessage
函数功能:该函数把一个消息发送给指定的对话框中的控制。
函数原型:LONG SendDlgltemMessage(HWND hDlg,int nlDDlgltem,UINT Msg,WPARAM 
wParam,LPARAM IParam);
参数:
hDlg:指定含有控制的对话框。
nlDDigltem:指定接收消息的控制的标识符。
Msg:指定将被发送的消息。
wParam:指定消息特定的其他信息。
IParam:指定消息特定的其他信息。
返回值:返回值指定消息处理的结果,且依赖于发送的消息。
备注:SendDlgltemMessage函数直到消息已经被处理时才返回。
    使用SendDlgltemMessage函数同从一个指定的控制中检索句柄和调用SendMessagge函
数一样。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;库文件:user32.lib Unicode:在Windows NT上实现为Unicode
和ANSI两种版本。
2.7.24  SetDlgltemlnt
函数功能:该函数把对话框中控制文本设置为用一个指定整型值的字符串表示。
函数原型:BOOL SetDlgltemlnt(HWND hDlg,int nLDDlgltem,UINT uValue,BOOL bSigned);
参数:
hDlg:指定含有控制的对话框。
nlDDlgltem:指定将被改变的控制。
uValue:指定用于产生项目文本的整型值。
bsigned:指定uValue参数为有符号的还是为无符号的。如果此参数为TRUE,则uValuee为
有符号的。如果此参数为TRUE且uValue小于零,则最小符号被放在第一个数据之前。如果
此参数为FALSE,则uValue为无符号的。
返回值:如果函数调用成功则返回值为非零值。如果函数调用失败,则返回值为零。若想获
得更多错误信息,请调用GetLastError函数。
备注:为设置新文本,此函数把一个WM_SETTEXT消息发送到指定的控制。
    Windows CE:bSigned参数不被使用。所有被传送到nValue参数的值都假定为有符号
的。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版
本;头文件:winuser.h;库文件:user32.lib。
2.7.25  SetDlgltemText
函数功能:该函数设置对话框中控制的文本和标题。
函数原型:BOOL SetDlgltemText(HWND hDlg,int nlDDlgltem,LPCTSTR IpString);
参数:
hDlg:指定含有控制的对话框。
nlDDlgltem:标识带有将被设置的标题和文本的控制。
IpString:指向一个以NULL结尾的字符串指针,该字符串指针包含了将被复制到控制的文
本。
返回值:如果函数调用成功,则返回值为非零值。如果函数调用失败,则返回值为零。若想
获得更多的错误信息,请调用GetLastError函数。
备注:SetDlgltem函数把一个WM_SETTEXT消息发送到指定的控制。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode
和ANSI两种版本。
2.7.26  MessageBoxlndirect
函数功能:该函数创建、显示和操作一个消息框。消息框含有应用程序定义的消息文本和标
题,任何位图和预定义的push(下推)按钮的任意组合。
函数原型:int MessageBoxlndirect(LPMSGBoXPARAMs IpMsgBoxParams);
参数:
IpMsgBoxParams:指向一个含有用于显示消息框信息的MSGBOXPARAMS结构。
返回值:如果没有足够内存来创建消息框,则返回值为零。如果函数调用成功,则返回值为
下列对话框返回的菜单项目值中的一个:IDABORT:Abort按钮被选中;IDCANCEL:Cancel 按
钮被选中;IDGNORE:lgnorem按钮被选中;IDNO:NO按钮被选中;IDOK:OK按钮被选中;
IDRETRY:RETRY按钮被选中;IDYES:YES按钮被选中。
    如果一个消息框有一个Cancel按钮,且当Esc键被按或Cancel键被选择时,则函数返
回IDCANCEL值。如果消息框没有Cancel按钮,则按Esc键没有作用。
备注:当创建一个系统模态消息框来表示系统在在内存的低端时,由IpText和lpCaption参
数指向的字符串不应该从一个资源文件中取出,因为试图装载此资源可能导致失败。
    当一个应用程序调用MessageBox,且为uType参数指定MB_ICONHAND和MB_SYSTEMMODAL
标志时,系统不管可用内存为多少,直接显示结果消息框。当这些标志被指定,系统被把消
息框文本的长度局限于三行。系统不能自动截断要填到消息框的行,但是消息字符串一定含
有回车换行,以在合适的位置换行。
    如果在对话框出现的的同时创建了消息框,则可使用对话框的句柄作为hwnd参数,hwnd
参数不应该标识一个子窗口,例如对话框中的一个控制。
    Windows 95:系统可以支持最大达16364个窗口句柄。
速查:Wbindows NT:4.0及以上版本;Windows:95及以下版本;Windows CE:不支持;头
文件:winuser.h;库文件:User32.lib:Unicoda:在Windows NT上实现为Unicode和ANSI
两种版本。
2.8 编辑控制函数(Edit Control)

2.8.1  EditWordBreakproc
函数功能:该函数是由应用程序定义的回调函数,该函数与EM_SETWORDBREAKPROC信号一起
使用,一个多行编辑控制每当必须中断文本行时都调用EditwordBreakProc函数。
EditwordBreakProc函数定义了一个指向此回调函数的指针,EditwordBreakProc是一个应
用程序定义的函数名的占位符。
函数原型:int CALLBACK EditWordBreakkPrOC(LPTSTR lpCh,int ichCurrent,int CCh int 
code);
参数;
Ipch:指向编辑控制文本的指针。
ichCurrent:指定一个文本缓冲区中字符位置的索引,该文本表示函数应该从这点开始检查
字的中断。
cch:指定编辑控制文本中字符的数目。
code:指定回调函数要采取的措施,此参数可以是下列值之一。
WB_CLASSIFY:检索指定位置的字符的字中断标志和字符类,此值是为与超文本编辑控制一
起使用。
WB_ISDECIMITER:检查在指定位置的字符是否是分隔符。
WB_LEFT:在指定位置的左边,找到字的开头。
WB_LEFTBREAK:在指定位置的左边,找到字的结束分隔符,此值是为与超文本编辑控制一起
使用。
WB_MOVEWORDLEFT:在指定位置的左边,找到字的开头,此值用于CTRL+RIGHT使用时,此
值是为与超文本编辑控制一起使用。
WB_MOVEWDRDRIGHT:在指定位置的右边,找到字的开头,此值用于CTRL+ROGHT使用时,此
值是为与超文本编辑控制一起使用。
WB_RIGHT:在指定位置的右边,找到字的开头。(对于右对齐编辑控制很有用)
WB_RIGHTBREAK:在指定位置的右边找到字结束分隔符,(这对右对齐编辑控制很有用)此值
是为与超文本编辑控制一起使用。
返回值:如果代码参数指定WB_ISDELIMITER,且如果指定位置的字符为分隔符,则返回值
为非零(TRUE),否则返回值为零。如果代码参数指定WB_CLASSIFY,返回值为指定位置的
字符类和字符字中断标志,否则,返回值为指向文本缓冲区的开头的索引。
备注:一个回车操作跟着一个换行符,一定被回调函数看作为一个单一的字,紧跟着一个换
行符的两个回车操作也一定被看作为单一字。
    一个应用程序必须通过EM_SETWORDBREAKPROC消息中指定回调函数的地址来安装回调函
数。
对于超文本编辑控制,也可用EM_SETWORDBREAKPROCEX消息来取代带有EditWordBreadProcEx
回调函数的缺省扩展字中断程序,该函数还提供了关于文本的其他信息,如字符集。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文
件:winuser.h;库文件:用户自定义。Unicode:定义为Unicode和ANSI两种原型。
2.9  图标函数(Icon)
2.9.1  Copylcon
函数功能:该函数从另外的模块向当前模块复制指定的图标。
函数原型:HICON Copylcon(HICON hlcon);
参数:
hlcom:被复制图标的句柄。
返回值:如果函数成功,返回值是图标副本的句柄;如果函数失效,返回值是NULL。想获
得更多的错误信息,请调用GetLastError函数。
备注:COPylcoon函数使应用程序或动态链接库(DLL)能获得另一个模块自己拥有图标的
句柄,如果这个模块被释放,应用程序图标将仍然能使用这个图标。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文
件:winuser.h;库文件:user32.lib。
2.9.2  Createlcon 
函数功能:该函数按指定的大小、彩色、位创建图标。
函数原型:HCON Createlcon(HINSTANCE hlnstance,int nWidth,int nHeight,BYTE 
cPlanes,BYTE cBitsPixe,CONSTBYTE*IpbANDbits,CONST BYET*IpbXORbits);
参数:
hlnstance:创建图标模块事例的句柄。
nWidth:指定目标宽度(像素)。
nHeight:指定图标高度(像素)。
cPlnes:指定图标位掩码异或的位面数。
cBitsPixel:指定图标位掩码异或中每像素的位数。
IpbAnDbits:某字节数组的指针,这个数组包含一个图标位与的位值。这个位掩码描述一个
单色位图。
IpbXORbits:某字节数组的指针,这个数组包含一个目标位异或的位值。这个位掩码描述一
个单色位图或设备相关颜色位图。
返回值:如果函数成功返回值是图标的句柄。如果函数失效,返回值是NULL。想获得更多
的错误信息,请调用GetLastError函数。
备注: nWidth和nHeight参数受当前显示驱动程序指定的宽度和高度限制,因为系统不能
创建其他大小的图标。使用GetSystemMetric函数确定显示驱动程序支持的宽度和高度。
Createlcon应用下列位与和位异或的真值表:
OR
XOR
显示
0
0
黑色
0
1
白色
1
0
直接显示屏
1
1
反转显示屏
速查:windows NT:3.1及以上版本;Windows:95N以上版本:Windows CE:不支持;头文件:
winuser.h;库文件:user32.lib。
2.9.3  CreatelconFromResource
函数功能:该函数通过描述图标的资源位创建图标或光标。
函数原型:HICON CreatelconFuomResource(PBYTE presbits,DWORD dwResSize,BOOL 
flcon,DWORD dwVer);
DresDits:包含图标或光标资源位缓冲区的指针典型应用,可通过调用
LOOKuplconldFromDirectory 或LoadResource 函数载入这些位(在Windows95也可调用
LookuplconldFromDirectorvEx)。
DwResSize:以字节为单位指定由DresbitS参数指定的位集合的大小。
dwVer:指定由presbits参数指定的资源位的图标或光标格式的的版本号。参数可能是下列
的值:
格式
dwVer
Winsows2.x
0×00020000
Winsows3.x
0×00030000
所有基于 Microsoft Win32的应用程序使用Windows 3.x格式的图标和光标。
返回值:如果函数成功返回值是图标或光标的句柄;如果函数失效,返回值是NULL。想获
得更多的错误信息,请调用GetLastError函数。
备注:CreatelconFromResource,CreateteonFromResourceEx,Createlconlndlrect,
Getlconlnfo,LookuPlcondFromDirectory,LookuplconldFromDirectoryEx函数允许外壳应
用程序和图标浏览器在整个系统中检查和使用资源。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文
件:winuser.h;库文件:user32.lib。
2.9.4  CreatelconFromResourceEx
函数功能:该函数通过描述图标的资源位创建图标或光标。
函数原型:HICON CreatelconFromResourceEx(PBYTE pblconBits,DWORD cblconBits,BOOL 
flcon,DWORd dwVersion,intcxDesired,int cyDesired,UINT uFlags);
参数:
pblconBits:包含图标或光标资源位缓冲区的指针。典型的应用,可通过调用
LookuPlconldFromDirectoryEx或LoadResource函数载入这些位。
cblconBits:以字节为单位指定由pblconBits参数指定的位集合的大小。
flcon:指定创建图标还是光标,如果参数为TRUE,创建图标;如果参数为FALSE,创建光
标。
dwVersion:指定由pblcpmBots参数指定的资源位的图标或光标格式的版本号。参数可能是
下列的值:
Windows2.x     0x00020000; Windows3.x       0x00030000
    所有基于Win32的应用程序使用Windows3.x格式的图标和光标。
cxDesired:指定图标或光标的期望宽度(以像素为单位)。如果参数是零,函数使用SM_CXICON
或SM_CXCURSOR系统公制值设置宽度。
cyDesired:指定图标或光标的期望高度(以像素为单位)。如果参数是零,函数使用SM_CYICON
或SM_CYCURSOR系统公制值设置高度。
VFlags:指定的组合值:
LR_DEFAULTCOLOR:使用缺省颜色格式;
LR_MONOCHROME:创建单色图标或光标
返回值:如果函数成功,返回值是图标或光标的句柄:如果函数失效,返回值是NULL。想
获得更多的错误信息,请调用GetLastError函数。
备注:CreatelconFromResourceEx,CreatelconFromResource,Createlconlndirect,
Getlconlnfo,LookuplcontoFromDirectoryEx函数允许外壳应用程序和图标浏览器在整个系
统中检查和使用资源。
速查:Windows NT:4.O及以上版本; Windows:95及以上版本;Windows CE:不支持;头
文件:Winuser.h;库文件:user32.lib。
2.9.5  Create;cpm;mdorect ZIWe
函数功能:该函数从ICONINFO结构创建目标或光标。
函数原型:HICON Createlconlndirect(PICONINFO)piconirfo);
参数:
piconinfo:函数用以创建图标或光标的ICONINFO结构指针。
返回值:如果函数成功,返回值是所创建图标或光标的句柄。如果函数失效,返回值是NULL。
想获得更多的错误信息;请调用GetLastError函数。
备注:系统在创建图标或光标之前复制ICONINFO结构中的位图。因为系统可能在设备上下
文中临时选用该位图,ICONINFO结构的hbmMask和hbmColor成员不要被选入设备上下文。
应用程序必须继续管理原始位图,不再需要时,删除它们。当你完成使用图标,用Destroylcon
函数清除它。
    Windows CE:图标成员不支持光标,当用该成员时,总是将ICONINFO结构的flcon域
设为真值。
    当使用目标光标成员时,你可使用Createlconlndirect函数创建图标或单色光标。
WindowsCE不支援彩色光标。
速查:Wingows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版
本;头文件:winuser.h;库文件:user32.lib。
2.9.6  Destroylcon
函数功能:该函数清除图标和释放任何被图标占用的存储空间。
函数原型:BOOL Destroylcon(HICON hlcon);
参数:
hlcon:是要清除留标的句柄。该图标应处于未被使用状态。
返回值:如果函数成功,返回值是非零:如果函数失效,返回值是零。想获得更多的错误信
息,请调用GetLastError函数。
备注:只有利用Createlconlndirect函数创建的图标和光标才能调用Destroylcon函数,不
要使用该函数清除一个共享图标。只要调入它的模块存在于存储器中,共享图标就一直有效。
下列函数可获取共享图标:
Loadlcon;Loadlmage(如果你使用LR_共享标记);copylmage(如果你使用LR_COPYRETURNORG
而且hlmage参数为共享目标)。
    Windows CE:Destroylcon函数可以通过图标句柄调用,这些图标句柄来自于
Createlconlndirect,ExtractlconEx,Loadlmage或Loadlco函数。在调用Destroylcon函
数之后这些图标句柄变为无效。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;
头文件:winuser.h;库文件:user32.lib。
2.9.7  Drawlcon
函数功能:该函数在限定的设备上下文窗口的客户区域绘制图标。
函数原型:BOOL Drawlcon(HDC hDC,int X,nit Y HICON hlcon );
参数:
hDC:窗口设备上下文的句柄。
X:指定图标左上角的逻辑X坐标。
Y:指定图标左上角的逻辑y坐标。
hlcon:被绘制图标的句柄。图标资源必须已经通过Loadlcon或Loadlmage函数被装载过。
返回值:如果函数成功,返回值是非零;如果函数失效,返回值是零。想获得更多的错误信
息,请调用GetLastError函数。
备注:Drawlcon函数将目标的左上角置于由X和Y参数指定的位置,该位置受当前设备上
下文的映射方式支配。
    Windows CE:Drawlcon函数被当做宏执行,定义为DrawlconEx(hdc,x,y, hicon,
0,0,0,NULL,DI_NORMAL)。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;
头文件:winuser.h;库文件:user32.lib。
2.9.8  DrawlconEx
函数功能:该函数在限定的设备上下文窗口的客户区域绘制图标,执行限定的光栅操作,并
按特定要求伸长或压缩图标或光标。
函数原型:B00L DrawlconEX(HDC hdc,int xLeft,int yTOp,HICON hlcon,int cxWidth,
int cyWidth UINT isteplfAniCur,HBRUSH hbrFlickerFreeDraw,UINT diFlags);
参数:
hdc:窗口设备上下文的句柄。
xLeft:指定目标或光标左上角的逻辑x坐标。
yTop:指定图标或光标左上角的逻辑y坐标。
hlcon:被绘制图标的句柄,该参数可标识一个激活的光标。图标或光标资源必须已经通过
Loadlmage函数被装载过。这参数能识别激活的光标。
cxWidth:指定图标或光标的逻辑宽度。如果其值为零且diFlags参数是DI_DEFAULTSIZE;
函数使用SM_CXICON或_CXCURSOR系统公制值设置宽度;如果其值为零且不使用
DI_DEFAULTSIZE,函数使用资源实际宽度。
cyWidth:指定图标或光标的逻辑高度。如果其值为零且diFlags参数是DI_DEFAULTSIZE,
函数使用SM_CYICON或SM_CYCURSOR系统公制值设置高度;如果其值为零且不使用
DI_DEFAULTSIZE,函数使用资源实际高isteplfAniCur:如果hlcon标识一个动态光标,参
数指定要绘制的帧索引;如果hlcon不标识一个动态光标,该参数被忽略。
hbrFlickerFreeDraw:系统用做闪烁·自由绘图的刷子句柄。如果hbrFlickerFreeDraw是有
效的刷子句柄,系统利用背景颜色刷于创建一个反屏位图将图标或光标绘制到位图中,并将
位图复制到由hdc。标识的设备上下文中。
diFlags:指定绘图的标记,参数可为下列的值:
DI_COMPAT:系统采用缺省图像而不是用户定义的图像绘制图标和光标。
DI_DEFAULTSIZE:如果CXWidth和CyWidth参数被设为零,采用系统指定的图标和光标的的
公制宽度和高  度绘制图标和光标;如果标记未被指定且cxWidth和cyWith参数设为零标,
函数使用资源实际大小。
DI_IMAGE:用图像绘制目标或光标。DI_MASK:用屏蔽绘图图标或光标。
DL_NORMAL:DI_IMAGE 与DI_MASKR的组合。
返回值:如果函数成功,返回值是非零;如果函数失效返回值是零。想获得更多的错误信息
请调用GetLastError函数。
备注:DrawlconEx。函数将图标的左上角置于由xLeft和yTop参数指定的位置,该位置受
当前设备上下文的映射方式支配。
    Windows CE:下列的参数设置必须被使用:
djFlags必须是DI_NORMAL,DI_IMAGE,或DI_MASK(不支持DI_COMPAT and DI_DEFAULTSIZE)。
cxWidth和cyHeight必须是零或图标的原始尺寸。hbrFlickerFreeDraw必须是NULL。
iSteplfAniCur必须是零,动态图标不被支援。Windows CE不支援:伸长的和压缩:也就是
说该图标分辨率对给定的HICON是固定的,不支持国标大小的再调整。
    映射方式:用DrawlconEx绘制光标时,hlcon参数不能标识动态光标。
速查:Windows NT:31及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版
本;头文件:winuser.h;库文件:user32.lib。
2.9.9 ExtractAssociatedlcon
函数功能;该函数返回存在于文件中的索引图标或存在于相关联可执行文件中的图标句柄。
函数原型:HICON ExtractAssociatedlcon(HINSTANCE hlnst,LPTSTR lplconPath);
参数:
hlnst:指定调用函数的应用程序的事例。
lplconPath:包含图标文件的全称路径和文件名的指针,函数从文件或者与该文件相关联的
可执行文件中抽取图标句柄。如果目标句柄是从可执行文件获得,函数将可执行文件的全称
路径和文件名存储到lplconPath 指定的字符串中。
Ipilcon:指定要被获取的目标句柄索引的字指针;如果图标句柄从可执行文件获得,函数
将图标的标识符存储于Ipilcon指定的字中。
返回值:如果函数成功,返回值是有效的图标句柄。如果图标来自相关的可执行文件,函数
将其全称路径和文件名存储到IplconPath指定的字符串中,并将图标识符存储于Ipilcon
指定的字中。如果函数失效返回值是NULL。
备注: EXtr8CtAssociatedlcon函数首先按 IplconPath指定的文件查找索引图标,如果函
数不能从该文件获得图标句柄,且该文件有关联的可执行文件,它便从可执行文件中搜索图
标。可执行文件的关联基于文件的扩展名,存储于每用户的注册表中,并可被资源管理器中
的关联命令所定义。
速查: Windows NT:3.5及以上版本; Windows:95及以上版本;Windows CE:不支持:
头文件:shellaoi.h;库文件:shell32.lib;Unicode:在Windows NT上实现为Unicode
和ANSI两种版本。
2.9.10 Extractlcon
函数功能:该函数从限定的可执行文件,动态链接库(DLL);或者图标文件中恢复图标句柄.为
恢复大或小的图标句柄数组,使用ExtractlconEx函数。
函数原型:HICON EXtractlcon(HINSTANCE hlnst,LPCTSTR lpszExeFileName,UINT 
nlconlndex);
参数:
hlnst:调用函数的应用程序的事例句柄。
IpszExeFileName:代表可执行文件,DLL,或者图标文件的文件名的空结束字符串指针。
nlconlndex:指定要恢复图标基于零的变址。例如,如果值是0,函数返回限定的文件中第一
个图标的句柄,如值是O函数返回限定文件中图标的总数;如果文件是可执行文件或DLL返
回值为RT_GROUP_ICON资源的数目:如果文件是一个.ICO文件,返回值是1;在Windows95,
WindowsNT4.0和更高版本中,如果值为不等于向-l的负数,函数返回限定文件图标句柄,
该文件的资源标识符等于nlconlndex绝对值。例如,使用-3来获取资源标识符为3的图标。
为获取资源标识符为1的图标,可采用ExtractlconEx函数。
返回值:返回值是图标句柄。如果限定的文件不是可执行文件,DLL,或者图标文件返回是
1;如果发现在文件中没有图标,返回值是NULL。
备注:必须调用Destroyclon函数来清除由Extractlcon函数返回的图标句柄。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:
shellapi.h;库文件:shell32.lib;Unicode:在Windows NT上实现为Unicode和ANSI两种
版本。
2.9.11  ExtractlconEx
函数功能:该函数从限定的可执行文件;动态链接库(DLL),或者图标文件中生成图标句柄
数组。
函数原型:UINT EXtractlcohEX(LPCTSTR IpSZFile,int nlconlndex,HICON 
FAR*PhiCORLarge,HICON FAR’*phiconSmall,UINT nlcons);
参数:
IpszFile:定义可获取图标的可执行文件,DLL,或者图标文件的名字的空结束字符串指针。
nlconlndex:指定抽取第一个图标基于零的变址;例如,如果该值是零;函数在限定的文件
中抽取第一图标;如该值是C1且phlconLarge和phiconSmall参数均为NULL,函数返回限
定文件中图标的总数;如果文件是可执行文件或DLL;返回值是RT_GROUP_ICON资源的数目;
如果文件是一个ICO文件,返回值是1;在Windows95,WindowsNT4.0,和更高版本中,如果
值为负数且phlconLarge和phiconSmall均不为NULL,函数从获取图标开始,该图标的资
源标识符等于nlconlndex绝对值。例如,使用-3来获取资源标识符为3的图标。
phiconLarge:指向图标句柄数组的指针,它可接收从文件获取的大图标的句柄。如果该参数
是NULL没有从文件抽取大图标。
phiconSmall:指向图标句柄数组的指针,它可接收从文件获取的小图标的句柄。如果该参
数是NULL,没有从文件抽取小图标。
nlcons:指定要从文件中抽取图标的数目。
返回值:如果nlconlndex参数是-1,PhiconLarge和PhiconSmall参数是NULL,返回值是
包含在指定文件中的图标数目;否则,返回值是成功地从文件中获取图标的数目。
备注:必须调用Destroylcon函数来清除由ExtractlconEx函数返回的图标。为恢复大小图
标尺寸,可使用SM_CXICON,SM_CYICON,SM_CXSMICON,SM_CYSMICON标记来调用
GetSystemMetrics函数。
    Windows CE:nlconlndex参数必须是零或CN(N是指定的资源标识符);nlcons参数必
须是1。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:shellspi.h;库文件:shell32.lib;Unicodg:在Windows NT上实现为Unicode
和ANSI两种版本。
2.9.12  Getlconlnfo
函数功能:该函数恢复限定的图标或光标的信息。
函数原型:BOOL Getlconlnfo(HICON hlcon,PICONINFO piconinfo);
参数:
nlcon:图标或光标的句柄;为恢复标准图标或光标信息。
Piconinfo:指向ICONINFO结构的指针。函数填充结构的成员。
返回值:如果函数成功,返回值是非零且函数填充限定的ICONINFO结构的成员。如果函数
失效;返回值是零。想获得更多的错误信息,请调用GetLastError函数。
备注:Getlconlnfo为ICONINFO的成员hbmMask和hbmColor创建位图,调用应用程序必须
管理这些位图和并在不再需要时删除它们。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持:头文
件:winuser.h;库文件:user32.lib。
2.9.13  LookuplconldFromDirectory
函数功能:该函数通过图标或光标数据搜索最适合当前显示设备的图标或光标。
函数原型:int LookuplconldFromiDirectory(PBYTE presbits,BOOL flcon);
参数:
presbits:指向图标或光标图录数据的指针。因为该函数不验证资源数据,它导致通用的保
护(GP)错误或返回一个未定义的值(如果presbitS未指向有效的资源数据)。
flcon:指定是寻求图标或是光标。如果该参数是真,函数搜索图标;如果参数是假,函数搜
索光标。
返回值:如果函数成功,返回值最适合当前显示设备的图标或光标的整数型资源标识符。如
果函数失效,返回值是零。想获得更多的错误信息,请调用GetLastError函数。
备注:在一些设备相关和设备独立的格式中,RT_GROUP_ICON类型的资源文件
(RT_GROUP_CURSOR指示光标)包含图标(或光标)数据。LookuPIconldFromDirectory函
数搜索最适合当前显示设备的图标(或光标)的资源文件并返回它的整型标识符。
FindResource和FindResourceEx函数利用该标识符使用MAKEINTRESOURCE宏在模块中查找
资源。
    图标所在目录是从一个具有RT_PROUP_ICON资源类型的资源文件装入(或者光标的
RT_GROUP_CURSOR类型),并且一特定图标的整型资源名称被载入。
LookuPIconldFromDirectory函数返回一个代表图标资源名的整型标识符,该图标与当前显
示器件最匹配。
    Loadlcon,LOadCursor,LOadlmsge函数使用这个函数搜索最适合当前显示设备的图标
或光标的特定的资源数据。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib。
2.9.14  LookuplconldFrom
函数功能:该函数通过图标或光标数据搜索最适合当前显示设备的图标或光标。
函数原型:int LookuPlconldFromDirectoryEx(PBYTE presbits,BOOL flcon,int cxDesired,
int cyDesired,UINT Flags);
参数:
presbits:指向图标或光标目录数据的指针。因为该函数不验证资源数据,它导致通用的保
护(GP)错误或返回一个未定义的值(如果presbits未指向有效的资源数据)。
flcon:指定是寻求图标或是光标。如果该参数是真;函数搜索图标;如果参数是假,函数
搜索光标。
cxDesired:指定图标的期望宽度(以像素为单位)。如果该参数是零,函数使用SM_CXICON
或SM_CXCURSOR系统公制值。
cyDesired:指定图标的期望宽度(以像素为单位)。如果该参数是零,函数使用SM_CYICON
或SM_CYCURSOR系统公制值。
Flags:指定下列值的组合:
LR_DEFAULTCOLOR:使用缺省颜色格式;LR_MONOCHROME:创建单色图标或光标。
返回值:如果函数成功,返回值最适合当前显示设备的图标或光标的整数型资源标识符。如
果函数失效,返回值是零。想获得更多的错误信息,请调用GetLastError函数。
备注:在一些设备相关和设备独立的格式中,RT_GROUP_ICON类型的资源文件
(RT_GROUP_CURSOR指示光标)包含目标(或光标)数据。LookuPlconldFromDirectoryEx
函数搜索最适合当前显示设备的图标(或光标)的资源文件并返回它的整型标识符。
FindResourceEx函数利用该标识符使用MAKENTRESOURCE宏在模块中查找资源。
    图标所在目录是从一个具有RT_GROUP_ICCON资源类型的资源文件装入(或者光标的
RT_GROUP_CURSOR类型),并且一特定图标的整型资源名称被载入。
LookuPlconldFromDirectoryEx函数返回一个代表图标资源名的整型标识符,该图标与当前
显示器件最匹配。
    Loadcon,LOadlmage,LOadcUrSor函数使用这个函数搜索最适合当前显示设备的图标或
光标的特定的资源数据。
速查:Windows NT:4.0及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib。
2.9.15  Loadlcon
函数功能:该函数从与应用事例关联的可执行文件(EXE)中装载限定的图标资源。
函数原型:HICON Loadlcon(HINSTANCE hlnstance,LPCTSTR lplconName);
参数:
hlnstance:模块事例句柄,该模块的可执行文件中包含被装载的图标。当标准的图标是被装
载时,该参数必须是NULL。
IplconName:包含被装载图标资源名称的空结束的字符串指针。作为选择,该参数可在字的
低位包含资源标识符而字的高位为0,使用MAKEINTRESOURCE宏产生该值。
    为了使用某一的预先确定的图标,将hlnstance参数设为NULL且IplconName参数为下
列值之一:
IDI_APPLICATION:缺省应用程序图标;IDI_ASTERISK:与IDI_INFORMATION相同。
IDI——ERROR:手·形状图标:IDI_EXCLAMATION:与IDI_WARNING相同。
IDI_HAND:与IDI_ERROR相同;IDI_INFORMATION:星号图标。
IDI_QUESTION:问号图标;IDI_WARNING:感叹号图标。
IDI_WINLOGO:Windows Logo 语言图标。
返回值:如果函数成功,返回值是新装载图标的句柄。如果函数失效,返回值是NULL。想
获得更多的错误信息,请调用GetLastError函数。
备注:仅当图标资源还没有被装载时才能用Loadlcon装载它,否则,它得到已存在资源的
句柄。该函数搜索最适合当前显示器的图标的图标资源。图标资源可能是彩色或单色位图。
    Loadlcon只能装载大小符合SM_CXICON和SM_CYICON系统公制值的目标。使用Loadmage
函数装载其他大小的图标。Windows CE:预先确定的图标(IDI*)不被支持。在Windows CE 
1.0中,图标必须是每像素二位(.ic2)的图标或单色图标。
速查:Windows NT:3.1及以上版本;Windows;95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib。
2.10 键盘加速器函数(Keyboard Accelerator)

2.10.1  CopyAcceleratorTable
函数功能:拷贝加速键表。拷贝加速键表函数拷贝指定的加速键表。此函数用于获得与一加
速键表句柄相对应的加速键表数据,或用于确定加速键表数据的大小。
函数原型:int CopyAcceleratorTable(HACCEL hAccelSrc,LPACCEL IpAcceIDst,int 
cAccelEntries);
参数:
hAccelSrc:欲拷贝的加速键表的句柄。
IpAccelDst:指向ACCEL结构数组的指针,该结构数组中存在着将要拷贝的加速键表信息。
cAccelEntries:指定由IpAcceIDst参数指向的欲拷贝到缓冲区的ACCEL结构的个数。
返回值:如果IpAccelDst为空,则返回值给出初始加速键表入口的个数。否则,给出己拷
贝的加速键表的入口个数。
速查:WindOWS NT:3.1及以上版本:Windows:95及以上版本;Windows CE:不支持;头
文件:Winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode和ANSI
两种版本。
2.10.2  CreateAcceleratorTable
函数功能:创建加速键表。该函数创建一个加速键表。
函数原型:HACCEL CreateAcceleratorTable(LPACCEL lpaccl,int cEntries);
参数:
Ipaccl:指向描述加速键表的ACCEL结构数组的指针。
cEntires:指定数组中ACCEL结构的个数。
返回值:如果函数调用成功,则返回值为所创建的加速键表的句柄;否则,返回值为空。若
想获得更多的错误信息,请调用GetLastError。
备注:关闭应用程序之前,必须调用DestroyAcceeleratorTable函数撤消所有由
CreatedAccelerstorTable函数创建的加速键表。
速查:Windows NT:3.1u及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本:头文件:winuser.h;库文件:USer32.lib; Unicode:在Windows NT上实现为Unicode
和ANSI两种版本。
2.10.3  DestroyAcceleratorTable
函数功能:撤消加速键表。该函数撤消一个加速键表。在关闭应用程序之前,必须使用该函
数撤消所有由DestroyAcceleratorTable函数创建的加速键表。
函数原型: BOOL DestroyAcceleratorTable(HACCEL hAccel);
参数:
hAccdel:将被撤消的加速键表的句柄。该句柄必须己通过调用DestroyAcceleratorTable 函
数而创建。
返回值:若函数调用成功,则返回非零值,若函数调用失败,则返回值为零。若要获得更多
的错误信息,可以调用GetLastError函数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:Windows.h;库文件:user32.lib。
2.10.4  LoadAccelerators
函数功能:调入加速键表。该函数调入指定的加速键表。
函数原型:HACCEL LoadAccelerators(HINSTANCE hlnstance,LPCTSTR lpTableName);
参数:
hlnstance:模块的一个事例的句柄,该模块的可执行文件中包含将要调入的加速键表。
IpTableName:指向一个以空结尾的字符串的指针,该字符串包含了即将调入的加速键表的名
字。另一种可选的方案是,该参数可以在加速键表资源的低位字中指定资源标识符,而高位
字中全零。MADEINTRESOURCE宏可被用于创建该值。
返回值:若函数调用成功,则返回非零值。若函数调用失败,则返回值为零。若要获得更多
的错误信息,可以调用GetLastError函数。
备注:若加速键表尚未装入,该函数可从指定的可执行文件中将它装入。从资源中装入的加
速键表,在程序结束时可自动释放。Windows CE:资源不被拷贝到RAM中,因而不能被修改。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;库文件:user32.lib;Uncode:在Windows NT上实现为Unicode
和ANSI两种版本。
2.10.5  TranslateAccelerator
函数功能:翻译加速键表。该函数处理菜单命令中的加速键。该函数将一个WM-DEYDOUN或
WM-SYSDEYDOWN消息翻译或一个WM-COMMAND或WM-SYSCOMMAND消息(如果在给定的加速键
表中有该键的入口),然后将WM-COMMAND或WM-SYSCOMMAND消息直接送到相应的窗口处理
过程。
TranslateAccelerator直到窗口过程处理完消息后才返回。
函数原型:int TranslateAccelerator(HWND hWnd,HACCEL hAccTable,LPMSG IpMsg);
参数:
hWnd:窗口句柄,该窗口的消息将被翻译。
hAccTable:加速键表句柄。加速键表必须由LoadAccelerators函数调用装入或由
CreateAccd_eratorTable函数调用创建。
LpMsg:MSG结构指针,MSG结构中包含了从使用GetMessage或PeekMessage函数调用线程消
息队列中得到的消息内容。
返回值:若函数调用成功,则返回非零值;若函数调用失败,则返回值为零。若要获得更多
的错误信息,可调用GetLastError函数。
备注:为了将该函数发送的消息与菜单或控制发送的消息区别开来,使WM_COMMAND或
WM_SYSCOMMAND消息的wParam参数的高位字值为1。用于从窗口菜单中选择菜单项的加速键
组合被翻译成WM-SYSCOMMAND消息:所有其他的加速键组合被翻译成WM-COMMAND。若
TransLateAccelerator返回非零值且消息已被翻译,应用程序就不能调用TranslateMessage
函数对消息再做处理。每个加速键不一定都对应于菜单命令。若加速键命令对应于菜单项,
则WM-INITMEMU和WM-INITMENUPOPUP消息将被发送到应用程序,就好像用户正试图显示
该菜单。然而,如下的任一条件成立时,这些消息将不被发送:
            窗口被禁止,菜单项被禁止。
    加速键组合无相应的窗口菜单项且窗口己被最小化。鼠标抓取有效。有关鼠标抓取消息,
参看SetCapture函数。若指定的窗口为活动窗口且窗口无键盘焦点(当窗口最小化时一般
是这种情况),TranslatMssage翻译WM-SYSDEYUP和WM-SYSKEYDOWN消息而不是WM-DEYUP
和WM-DEYDOWN消息。
当按下相应于某菜单项的加速键,而包含该菜单的窗口又已被最小化时,TranslateMessage
不发送WM-COMMAND消息。但是,若按下与窗口菜单或某单项的任一项均不对应的加速键时,
TranslateMessage将发送一WM-COMMAND消息,即使窗口己被最小化。
    Windows CE:所有的加速键消息被翻译成WM-COMMAND消息;Windows CE不支持WM-
SYSCOMMAND消息。
速查:Windows NT:3.1 及以上版本;Windows:95及以上版本:Windows CE:1.0及以上
版本;头文件:windows.h;库文件:user32.lib; Unicode:在Windows NT实现为Unicode
和ANSI两种版本。
2.11 键盘输入函数(Keyboard Input)

2.11.1 ActivateKeyboadLayout
函数功能:激活键盘布局。该函数Windows NT和Windows 95中的实现有很大不同。本参考
页中首先给出了完整的Windows NT的实现,下来又给出了Windows 95版本的实现,以便大
家更好地了解二者的区别。
    在Windows NT中ActivateKeyboadLayout函数激活一种不同的键盘布局,同时在整个
系统中而不仅仅是调用该函数的进程中将该键盘布局设为活动的。
函数原型:HKL ActivateKeyboardLayout( HKL hkl,UINT Flags);
参数:
hkl:将被激活的键盘布局的句柄。该布局必须先调用LeadKeyboadLayout函数装入,该参
数必须是键盘分局的句柄,或是如下的值中的一种:
HKL_NEXT:在系统保持的,己装入的布局的循环链表中,选择下一布局。
HKL_PREV:在系统保持的,已装入的布局的循环链表中,选择前一布局。
Flags:定义键盘布局如何被激活。该参数可取如下的一些值:
LFREORDER:若该位被设置,则已装入的键盘布局的循环链路表将被重新排序。若该位没有
设置,则循环链路表的顺序不变。例如,若用户激活了英语键盘布局,同时依序装入了法语、
德语、西班牙语键盘布局,然后通过设置KLF_REORDE位激活德语键盘布局,则会产生如下
顺序:德语、英语、法语、西牙语键盘布局。若激活德语键盘布局时未设置KLF_REORDER位,
则产生如下的键盘布局的键盘布局序列:德语、西班牙语、英语、法语。若装入的键盘布局
少于三种,则该标志域的值不起作用。
KLF_SETFORPROCESS:在Windows NT 5.0以上版本中使用。该参数用于整个进程中激活指定
的键盘布,并向当前进程的所有线程发送WM_INPUTLANGCHANGE消息。
KLF_UNLOADPREVLOUS:卸载先前活动的键盘布局。
返回值:如果函数调用成功,返回值为前一键盘布局的句柄。否则,返回值为零。若要获得
更多多错误信息,可调用GetLastError函数。
备注:在任一时刻可以装入多种键盘布局,但一次仅能激活一种布局。装入多种键盘布局使
得可以快速地在多种布局之间切换。Windows 95 ACtivateKeyboadLayout函数为当前线程
设置输入语言。该函数接受一个键盘布局句柄,该句柄标识键盘的一个局部的和物理布局。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文
件:winuser.h;库文件:user32.lib。
2.11.2  EnableWindow
函数功能:该函数允许/禁止指定的窗口或控制接受鼠标和键盘的输入,当输入被禁止时,
窗口不响应鼠标和按键的输入,输入允许时,窗口接受所有的输入。
函数原型:BOOL EnableWindow(HWND hWnd,BOOL bEnable);
参数:
hWnd:被允许/禁止的窗口句柄。
bEnable:定义窗口是被允许,还是被禁止。若该参数为TRUE,则窗口被允许。若该参数为
FALSE,则窗口被禁止。
返回值:如果窗口原来是被禁止的,返回值不为零;如果窗口原来不是被禁止的,返回值为
零。若想获得更多的错误信息,可调用GetLastError函数。
备注:若窗口的允许状态将发生变化,WM_ENABLE消息将在Enblewindow函数返回前发送出
去,若窗口已已被禁止,它所有的子窗口也被禁止,仅管并未向子窗口发送WM_ENABLE消息。
    窗口被激活前必须处于允许状态。比如,一个应用程序将显示一个无模式对话框并且已
使该对话框的主窗口处于禁止状态,则在撤消该对话框之前须使其主窗口处于允许状态。否
则,其他窗口将接受并被少活。若子窗口被禁止,则系统决定由哪个窗口接受鼠标消息时将
忽略该窗口。
    缺省情况下,窗口被创建时被置为允许。若创建一个初始化为禁止状态的窗口,应用程
序需要在GeateWindow或GeateWindowEX函数中定义WS_DOSABLED样式。窗口创建后,应用
程序可用EnbleWindow来允许禁止窗口。
    应用程序可利用此函数允许/禁止对话框中的某个控制。被禁止的控制既不能接受键盘
输入,也不能被用户访问。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:Winuser.h;库文件:user32.lib。
2.11.3  GetActiveWindows
函数功能:该函数可以获得与调用线程的消息队列相关的活动窗口的窗口句柄。
函数原型:HWND GetActiveWindow(VOID)
参数:无。
返回值:返回值是与调用线程的消息队列相关的活动窗口的句柄。否则,返回值为NULL。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winser.h; 库文件:user32.lib。
2.11.4  GetAsyncKeyState
函数功能:该函数用于确定函数被调用时,相应按键是处于按下状态,还是处于弹起状态;
并且按下此键前否调用过GetAsyncKeystate函数。
函数原型:SHORT GetAyncKeystate(int vKey);
参数:
vKey:定义虚拟键码(若有256个虚拟键码)。欲获得更多信息,参看Virtual_Key Codes。
在Windows NT中可以使用左右键区分常量来定义某些键。欲获得更多信息,参看备注部分。
返回值:若函数调用成功,返回值给出了自最后一次调用GetAsyncKeyStat。以来,指定的
键是否处于按下状态,并且确定了该键目前是按下或是被弹起。若最高位被置为1,则键被
接下:若最低位被置为1,则该键在前次调用GetAsyncKeystate以来处于被接下的状态。
若另一进程或线程中的窗口拥有键盘焦点,则
返回值为零。
    Windows 95:Windows 95不支持左右键区分常量,若用这些常量调用GetAsyncKeystate
函数,则返回值为零。
备注:该函数支持鼠标按钮,但是,它检查的不是物理按钮映射到的逻辑按钮的状态,而实
际物理按钮的状态。例如,函数调用GetAsyncKeystate(VK_LBUTTON)总是返回物理的鼠
标左按钮的状态,而不管该按钮映射为逻辑上的左按钮,可以调用GetsystemMetrics
(SM_SWAPBUTON)来确定系统当前物理鼠标按钮与逻辑鼠标按钮的对应关系,当鼠标按钮被
左右交换后,函数返回TRUE。
    可以使用虚拟键码常数VD_SHIFT,VK_CONTROL,VK_MENU作为vKey参数的值,这样给
出Shift Ctrl,AIt键的状态,而不区分是左键还是右键。
    Windows NT:可以使用如下的虚拟键码常数作为vKey的值来区分左右键的情况:
VK_LSHIFT VK_RSHIFT;VW_LCONTROL VK_RCONTROL;VK_LMENU VK_RMENU
    这些可区分的左右键常量仅当调用GetKeyboardState,SetKeyboardstate,
GetAsyncKeyState,GetKeyState和MaPViruaIKey函数时才可用。
Windows CE:GetAsyncKeyState函数支持左右虚键常量,所以定义按下左键还是右键。
这些常数是VKLSHIFT,VK_RSHIFT,VK_LCONTROL,VK_RCONTROL,VK_LMENU和VK_RMENU。
    在WindowsCE中返回值的最低位是无效的,应当忽略。
    GetAsyncKeystate将返回当前键的状态,即使是另一进程或线程中的窗口拥有键盘焦
点。
    可以使用VK_LBUTTON虚拟键码常量来确定触模屏上笔尖的状态(按下/弹起)。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本:Windows CE:1.O及以上
版本;头文件:winuser.h;库文件:user32.lib。
2.11.5  GetFocus
函数功能:该函数获取与调用线程消息队列相关的窗口的句柄,该窗口拥有输入焦点。
函数原型:HWND GetFocus(VOID)
参数:无。
返回值:为拥有键盘输入焦点的窗口句柄,若调用线程的消息队列没有相关的持有键盘输入
焦点的窗口,则返回值为NULL。
备往:尽管GetFocus返回NULL,但可能另一线程的队列与拥有输入焦点的窗口相关。便用
GetForeyroundWindow函数来获得用户目前工作的窗口。可以使用AttachThreadlnPut函数
把线程的消息队列与另一线程的窗口关联起来。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows:1.0及以上版本;
头文件:winuser.h;库文件:user32.lib。
2.11.6  GetKeyboardLayout
函数功能:该函数可以获得指定线程的活动键盘布局。若dwLayout参数为零,将返回活动
线程的键盘布局。
函数原型:HKL GetKeyboardLayout(DWORD dwLayout);
参数:
dwLayout:标识欲查询的线程标识符,当前线程标识符为0。
返回值:返回值为指定线程的键盘布局句柄。返回值的低位字包含了输入语言的语言标识符,
高位字包含了键盘物理布局的句柄。
速查;Windows NT:4.0及以上版本;Windows:95及以上版本;Windows CE;不支持;头
文件:winuser.h;库文件:user32.lib。
2.11.7  GetKeyboardLayoutList
函数功能:该函数可以获得与系统中输入点的当前集相对应的键盘布局句柄。该函数将句柄
拷贝到指定的缓冲区中。
函数原型:UINT GetKeyboardLayoutList(int nBuff,HKL FAR★IpList)
参数:
nBuff:指定缓冲区中可以存放的最大句柄数目。
Iplist:缓冲区指针,缓冲区中存放着键盘布局句柄数组。
返回值:若函数调用成功,则返回值为拷贝到缓冲区的键盘布局句柄的数目,或者,若nBuff
为0,则运回值为接受所有当前键盘布局的缓冲区中的大小(以数组成员为单位)。若函数
调用失败,返回值为0。若想获得更多错误信息,可调用GetLastError函数。
速查:Windows NT:4.0及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h:库文件:user32.lib。
2.11.8  GetKeyboardLayoutName
函数功能:该函数可以获得活动键盘布局的名字。
函数原型:BOOL GetKeyboardLayoutName(LPTSTR pwszKLID);
函数:
pwszKLID:缓冲区指针,缓冲区中用于接收至少有KL_NAMELENGTH个字符的键盘布局的名字
(包含空结束符在内)。该参数值将是提供给LoadKeyboardLayout函数的字符串的一个副
本,除非发生键盘布局替换。
函数值:若函数调用成功,则返回非0值。若函数调用失败,则返回值为0。若要获得更多
错误信息,可调用GetLastError函数。
备注:Windows NT:GetKeyboardLayoutName接收系统的活动键盘布局的名字。
    Windows 95:GetKeyboardLayoutName接受调用线程的活动键盘布局的名字。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode和ANSI
两种版本。
2.11.9  GetKeyboardState
函数功能:该函数将256个虚拟键的状态拷贝到指定的缓冲区中。
函数原型:BOOL GetKeyboardState(PBYTE IpKeyState);
参数:
IpKeyState:指向一个256字节的数组,数组用于接收每个虚拟键的状态。
返回值:若函数调用成功,则返回0值。若函数调用不成功,则返回值为0。若要获得更多
的错误信息,可以调用GetLastError函数。
备注:应用程序可以调用该函数来检取所有虚拟键的当前状态。当键盘消息被从该线程的消
息队列中移去时,虚拟键的状态发生改变。当键盘消息被发送到该线程的消息队列中,或者,
当键盘消息被发送到其他线程的消息队列或被从其他线程的消息队列中检取到时,虚拟键的
状态不发生改变。(例外:通过AttachThreadlnput连接的线程共享同一键盘状态。)
    当函数返回时,由lpKeyState参数指向的每一个数组成员中都包含了一个虚拟键的状
态数据。若最高位被置为1,则该键处于down状态;否则,该键处于up状态。若最低位被
置为1,则该键被触发。当一个键被打开时称之为被触发,如capslock键。若最低位被置
为0,该键被关闭且不被触发。一个触发键也键盘上的指示灯(如果有的话)在该键被触发
时点亮,在不被触发时灭掉。
    若要检取单个虚拟键的状态信息,可以调用GetKeyState函数。若要检取任一虚拟键的
当前状态,而不管相应的键盘消息足否己从消息队列中检取到,可以使用GetAsyncKevState
函数。
    应用程序可以使用虚拟键码常数VK_SHIFT,VK_CONTROL和VK_MENU作为IpKeyState所
指向的数组的下标。这样给出的Shift,Ctrl,Alt键的状态不区分左右键。应用程序也可
以使用如下的虚拟键码常数作为以上键的区分左右键的下标:
VK_LSHIFT,VK_RSHIFT,VK_LCONTROL,VK_RCONTROL;VW_LMENU,VW_RMENU仅当应用程序
调用GetKeyboardState;SetKeyboardState,GetAsycKeystate,GetKeyState和
MapVirtualKey函数时,才可用这些区分左右键的常数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件: USer32.lib。
2.11.10  GetKeyNameText
函数功能:该函数检取表示键名的字符串。
函数原型:int GetKeyNameText(LONG IParam,LPTSTR IpString,int nSize);
参数:
IParam:指定被处理的键盘消息(例如WM_KEYDOWN)的第二个参数。该函数Lporam参数的
如下部分:
16-23:扫描码;24:扩展标志,用于区别增强型键盘上的某些键:25:“无关”位,调用该
函数的应用程序设置此位来表明函数不应区分诸如左右ctrl键和shift键。
LpString:指向接受键名的缓冲区的指针。
nSize:指定键名的最大字符长度,包括空结束符。(该参数值应与LpString参数指定的缓
冲区的大小相等)。
返回值:若函数调用成功,将拷贝一个以空结尾的字符串的指定缓冲区中,且返回值为串的
长度(字符数),不计终止的空字符。
    若函数调用失败,返回值为o,若想获得更多的错误信息,可调用GetLastError函数。
备注:键名字符串的格式取决于当前键盘布局,键盘驱动程序持有一张字符串形式的键名表
(每个名字长度大于一个字符)并依据当前安装的键盘布局对键名进行翻译。每个字符键的
名字是该字符本身,该键的名字被完整的拼写出来。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode和ANSI
两种版本。
2.11.11  GetKeyState
函数功能:该函数检取指定虚拟键的状态。该状态指定此键是UP状态,DOWN状态,还是被
触发的(开关每次按下此键时进行切换)。
函数原型:SHORT GetKeyState(int nVirtKey);
函数:
nVrtKey:定义一虚拟键。若要求的虚拟键是字母或数字(A~Z,a~z或0~9),nVirtKey
必须被置为相应字符的ASCII码值,对于其他的键,nVirtKey必须是一虚拟键码。若使用
非英语键盘布局,则取值在ASCIIa~z和0~9的虚拟键被用于定义绝大多数的字符键。例
如,对于德语键盘格式,值为ASCII0(OX4F)的虚拟键指的是“0”键,而VK_OEM_1指“带
变音的0键”
返回值:返回值给出了给定虚拟键的状态,状态如下:
    若高序位为1,则键处于DOWN状态,否则为UP状态。
    若低序位为1,则键被触发。例如CAPS LOCK键,被找开时将被触发。若低序位置为0,
则键被关闭,且不被触发。触发键在键盘上的指示灯,当键被触发时即亮,键不被触发时即
灭。
备注:当给定线程从它的消息队列中读键消息时,该函数返回的键状态发生改变。该状态井
不反映与硬件相关的中断级的状态。使用SetKeyboardState可获取这一信息。
欲检取所有虚拟键状态信息,可以使用SetKeyboardState函数。
    应用程序可以使用虚拟键码常数VK_SHIFT,VK_CONTROL和VK_MENU作为nVirtKey参数
的值。它给出shift,ctrl或alt键的值而不区分左右键,应用程序也可以使用如下的虚拟
键码常数作nVirtKey的值来区分前述键的左键、右键的情形。
VK_LSHIFT,VK_RSHIFT;VK_LCONTROL,VK_RCONTROL;VK_LMENU,VK_RMENU
    仅当应用程序调用GetKeyboardSlate,SetKeyboardState,GetAsyncKeystate;
GetKeyState和MapVirtualKey函数时,才可用这些区分左右键的常数。
    Windows CE:GetKeyState函数仅能用于检查如下虚拟键的DOWN状态。
VK_LSHIFT,VKRSHIFT,VK_LCONTROL;VK_RCONTROL;VK_LMENU,VK_RMENU
    GetKeyState函数只能用于检查VK_CAPITAL虚拟键的触发状态。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.I及以上
版本;头文件:winuser.h;库文件:user32.lib。
2.11.12  IsWindowEnabled
函数功能:该函数用于判断指定的窗口是否允许接受键盘或鼠标输入。
函数原型:BOOL IsWindowEnabled(HWND hWnd);
参数:
hWnd:被测试的窗口句柄。
返回值:若窗口允许接受键盘或鼠标输入,则返回非0值,若窗口不允许接受键盘或鼠标输
入,则返回值为0。
备注:子窗口只有在被允许并且可见时才可接受输入。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;库文件:user32.lib。
2.11.13  keybd_event
函数功能:该函数合成一次击键事件。系统可使用这种合成的击键事件来产生WM_KEYUP或
WM_KEYDOWN消息,键盘驱动程序的中断处理程序调用keybd_event函数。在Windows NT中
该函数己被使用Sendlhput来替代它。
函数原型;VOID keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,DWORD dwExtralnfo);
参数:
bVk:定义一个虚据拟键码。键码值必须在1~254之间。
bScan:定义该键的硬件扫描码。
dwFlags:定义函数操作的名个方面的一个标志位集。应用程序可使用如下一些预定义常数的
组合设置标志位。
KEYEVENTF_EXETENDEDKEY:若指定该值,则扫描码前一个值为OXEO(224)的前缀字节。
DEYEVENTF_KEYUP:若指定该值,该键将被释放;若未指定该值,该键交被接下。dwExtralnfo:
定义与击键相关的附加的32位值。
返回值:该函数无返回值。
备注:尽管keybd_event传递一个与OEM相关的硬件扫描码给系统,但应用程序不能用此扫
描码。系统在内部将扫描码转换成虚拟键码,并且在传送给应用程序前清除键码的UP/down
位。
    应用程序可以摸拟PRINTSCREEN键的按下来获得一个屏幕快照,并把它存放到剪切板
中。若要做到这一点,则要将keybd_event的bVk参数置为VK_SNAPSHOT,bScan参数置为0
(用以获得全屏快照)或hScan置为1(仅获得活动窗口的快照)。
    Windows CE:WindowsCE支持dwFlags参数附加的标志位。即使用KEYEVENTF_SILENT
标志模拟击键,而不产生敲击的声音。Windows CE不支持KEYEVENTF_EXTENDEDKEY标志。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本 ;Windows CE:1.0及以上
版本;头文件:winuser.h;库文件:user32.lib。
2.11.14  LoadKeyboardLayout          
函数功能:该函数给系统中装入一种新的键盘布局,可以同时装入几种不同的键盘布局,任
一时刻仅有一个进程是活动的,装入多个键盘布局使得在多种布局间快速切换。
函数原型:HKLLoadKeyboardLayout(LPCTSTR pwszKLID,UINT Flags);
参数:
pwszKLID:缓冲区中的存放装入的键盘布局名称,名称是由语言标识符(低位字)和设备标
识符(高位字)组成的十六进制值串,例如 U.S.英语对应的语言标识符为DX0409,则基本
的U.S.英语键盘布局命名为“0000409”。U.S.英语键盘布局的变种(例如Dvorak布局)命
名为“00010409”,“00020409”等。
Flags:指定如何装入键盘布局,该参数可以是如下的值。
KLF_ACTIVATE:若指定布局尚未装入,该函数为当前线程装入并激活它。
KLF_NOTELLSHELL:当装入新的键盘布局时,禁止一个ShellProe过程接收一个
HSHELL_LANGUAGE代码。
当应用程序依次装入多个键盘布局时,对除最后一个键盘布局外的所有键盘布局使用该值,
将会延迟Shell的处理直到所有的键盘布局均己被装入。
KLF_RECOROER:将指定键盘布局移动到布局表的头部,使得对于当前线程,该布局的活动的。
若不提供DLF_ACTIVATE值,则该值记录键盘布局表。
KLF_REPLACE_LANG:Windows NT 4.0或Windows 95以上支持,若新布局与当前布局有同样
的语言标识符,那么新布局替代当前布局作为那种语言的键盘布局,若未提供该值,而键盘
布局又有同样的标识符,则当前布局不被替换,函数返回NULL值。
KLF_SUBSTITUTE_OK:用用户喜欢的键盘布局来替换给定布局,系统初始时设置该标志,并
且建议始终设置该标志,仅当在注册HKEY_CURRENT_USER/Keyboard Layout/Substitate下
定义了一个替代布局时,才发生替换。例如,在名为00000409的部分中有一个多于00010409
的值,则设置该标志装入U.S.英语键盘布局会导致Dvorak US.英语键盘布局的装入。系统
引导时使用该参数,建议在所有应用程序装入键盘布局时使用该值,以确保用户喜欢的键盘
布局被选取。
KLF_SETFORPROCESS:Windows NT 5.0该位仅法与KLF_ACTIVATE一起使用时才有效,为整
个进程激活指定键盘布局,且发送WM_INPUTLANGCHANGE消息以当前进程的所有线程。典型
的LoadKeyboardLayWut仅为当前线程激活一个键盘布局。
KLF_UNLOADPREVIOS:WindowsNT5.0,Windows95,Windows98都不支持,仅当与KLF_ACTIVATE
一起使用时才有效,仅当装入且激活指定键盘布局成功,先前的布局才能被卸载,建议使用
unLoadKeyboardLayout函数。
返回值:若函数调用成功,返回与要求的名字匹配的键盘布局句柄。若没有匹配的布局,则
返回NULL。
备注:应用程序可以通过仅定义语言标识符的串来装入该语言的IME向缺省键盘布局。若应
用程序想装入IME的指定键盘布局,就必须读注册信息以确定传递给LoadKeyboardLayout
返回的键盘布局句柄来激活。
    Windows 95和Windows 98:若装载与原先键盘布局使用同种语言的布局,且
KLF_REPLACELANG标志未被设置,则函数调用失败,仅有一个键盘布局可与给定语言相关联。
(对于装载与同一语言相关的多IME也是可接受的)。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode和ANSI
两种版本。
2.11.15  MapVirtualKey
函数功能:该函数将一虚拟键码翻译(映射)成一扫描码或一字符值,或者将一扫描码翻译
成一虚拟键码。
函数原型:UINT MaoVirtualKey(UINT uCode,UINT uMapType);
参数:
uCode:定义一个键的扫描码或虚拟键码。该值如何解释依赖于uMapType参数的值。
uMapType:定义将要执行的翻译。该参数的值依赖于uCode参数的值。取值如下:
0:代表uCodee是一虚拟键码且被翻译为一扫描码。若一虚拟键码不区分左右,则返回左键
的扫描码。若未进行翻译,则函数返回O。
1:代表uCode是一扫描码且被翻译为一虚拟键码,且此虚拟键码不区分左右。若未进行翻
译,则函数返回0。
2:代表uCode为一虚拟键码且被翻译为一未被移位的字符值存放于返回值的低序字中。死
键(发音符号)则通过设置返回值的最高位来表示。若未进行翻译,则函数返回0。
3:代表uCode为一扫描码且被翻译为区分左右键的一虚拟键码。若未进行翻译,则函数返
回0。
返回值:返回值可以是一扫描码,或一虚拟键码,或一字符值,这完全依赖于不同的uCode
和uMapType的值。若未进行翻译,则函数返回O。
备注:应用程序可以使用MapVirtualKey将扫描码翻译为虚拟键码常数VK_SHIFT,VK_CONTROL
和VK_MENU。反之亦然。这些翻译不区分左右shift,ctrl,alt键。应用程序可以通过调
用MapVirtualKey函数时将uCode参数
设置为如下的虚拟键码常数来获得分别相应于上述键的左右键的扫描码:
VK_LSHIFT,VK_RDHIFT;VK_LCONTROL;VK_RCONTROL;VK_LMENU,VK_RMENU
    仅当应用程序调用GetKeyboardState,SetKeyboardStaste,GetAsyncKeystate, 
GetKeyState和MapVirtUalKey函数
时,才可用这些区分左右键的常数。
    Windows CE:Windows CE仅支持uMapType参数取值为2的情况,即将虚拟键映射为未
被移位的字符。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.O及以L
版本;头文件:winuser.h;库文件:user32.lib;在Windows NT上实现为Unicode和ANSI
两种版本。
2.11.16  MapVlrtualKeyEx
函数功能:该函数将虚拟键码翻译为扫描码或字符值,或者将扫描码翻译为虚拟键码。该函
数使用由给她键盘布局句柄标识的物理键盘和输入语言来翻译这些代码。
函数原型:UINT MapVirtualKeyEx(UINT uCode,UINT uMapType,HKL dwhkl);
参数:
uCode:定义一个键的虚拟键码或扫描码。该值如何解释依赖于uMapType参数的值。
uMapType:定义将要执行的翻译。该参数的值同MapVirtuaIKe。
dwhkl:翻译给定代码所使用的键盘布局的句柄。该参数值可以是在此之前调用
LoadKeyboardLayout函数返回的任何键盘布局句柄。
返回值:返回值可以是一扫描码,或一虚拟键码,或一字符值,这完全依赖于不同的uCode
和uMapType的值。若未进行翻译,则函数返回O。
返回值:返回值可以是一扫描码,或一虚拟键码,或一字符值,这完全依赖于不同的uCode
和uMapType的值。若未进行翻译,则函数返回0。
备注:应用程序可以使用MapVirtualKeyEx将扫描码翻译为虚拟键码常数VK_SHIT;
VK_CONTROL和VK_MENU。反之亦然。这些翻译不区分左右shift,ctrl,alt键。应用程序
可以通过调用MapVirtualKey函数时将uCode参数设置为如下的虚拟键码常数来获得分别相
应于上述键的左右键的扫描码:
Vk_LSHIFT,VK_RDHIFT;VK_LCONTROL,VK_RCONTROL;VK_LMENU,VK_RMENU
    仅当应用程序调用GetKeyboardState,SetKeyboardState,GetAsyncKeystate,
GetKeyState,MapVirtuaIKey和MapVirtualKeyEx函数时,才可用这些区分左右键的常数。
若要查看完整的虚拟键码表,请参考Virtual.KeyCodes。
速查:Windows NT:4.0及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode和ANSI
两种版本。
2.11.17  OemKeyScan
函数功能:该函数将0-0x0FF的OEM ASCII代码映射为OEM扫描码及其转换状态。该函数通
过模拟键盘输入来提供信息,使得一个程序可将OEM文本传送到另一程序。
函数原型:DWORD OemKeyScan(WORD wOemChar);
参数:
wOemChar:定义OEM字符的ASII值。
返回值:返回值的低序字中包含给定的OEM字符的扫描码,高序字中包含了转换状态,它可
能是如下标志位的组合:
  1:任一。shift键被按下;2:任一ctrl键被接下;
  4:任一alt键被按下;8:Hankaku键被按下;
  16:保留(由键盘布局驱动程序定义);32:保留(由键盘布局驱动程序定义)
    若一字符在当前键盘布局下不能通过单击某键产生,则返回值为OXFFFFFFFF。
备注;该函数对于需要。ctrl+alt键的字符或者死键不提供翻译。该函数不翻译的字符必
须通过使用alt+键区机制的模拟输入进行拷贝。Numlock键必须关闭。
    该函数对于使用当前键盘布局不能通过一次击键得到的字符不进行翻译,例如需要死键
的带音调的字符。该函数不翻译的字符必须通过使用alt+键区机制的模拟输入进行拷贝。
Numlock键必须关闭。该函数使用VkKeyScan函数来实现。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib。
2.11.18  RegisterHotKey
函数功能:该函数定义一个系统范围的热键。
函数原型:BOOL RegisterHotKey(HWND hWnd,intid,UINT fsModifiers,UINT vk);
参数:
hWnd:接收热键产生WM_HOTKEY消息的窗口句柄。若该参数NULL,传递给调用线程的WM_HOTKEY
消息必须在消息循环中中进行处理。
id:定义热键的标识符。调用线程中的其他热键不能使用同样的标识符。应用功能程序必须
定义一个0X0000-0xBFFF范围的值。一个共享的动态链接库(DLL)必须定义一个0xC000-
0xFFFF范围的值伯GlobalAddAtom函数返回该范围)。为了避免与其他动态链接库定义的热
键冲突,一个DLL必须使用GlobalAddAtom函数获得热键的标识符。
fsModifoers:定义为了产生WM_HOTKEY消息而必须与由nVirtKey参数定义的键一起按下的
键。该参数可以是如下值的组合:
MOD_ALT:按下的可以是任一Alt键。MOD_CONTROL:按下的可以是任一Ctrl键。
MOD_SHIFT:按下的可以是任一Shift键。
MOD_WIN:按下的可以是任一Windows按键。这些键可以用Microsoft Windows日志记录下
来。
vk:定义热键的虚拟键码。
返回值:若函数调用成功,返回一个非O值。若函数调用失败,则返回值为0。若要获得更
多的错误信息,可以调用GetLastError函数。
备注:当某键被接下时,系统在所有的热键中寻找匹配者。一旦找到一个匹配的热键,系统
将把WM_HOTKEY消息传递给登记了该热键的线程的消息队列。该消息被传送到队列头部,因
此它将在下一轮消息循环中被移去。
    该函数不能将热键同其他线程创建的窗口关联起来。
    若为一热键定义的击键己被其他热键所定义,则RegisterHotKey函数调用失败。
    若hWnd参数标识的窗口已用与id参数定义的相同的标识符登记了一个热键,则参数
fsModifiers和vk的新值将替代这些参数先前定义的值。
    Windows CE:Windows CE 2.0以上版本对于参数fsModifiers支持一个附加的标志位。
叫做MOD_KEYUP。
若设置MOD_KEYUP位,则当发生键被按下或被弹起的事件时,窗口将发送WM_HOTKEY消息。
    RegisterHotKey可以被用来在线程之间登记热键。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib。
2.11.19  Sendlnput
函数功能:该函数用于合成击键、鼠标移动、按钮按下等。
函数原型:UINT SendlnpUt(UINT nlnputs,LPINPUT plnputs,int cbSize);
参数:
nlnprts:定义plnputs指向的结构的数目。
plnputs:指向INPUT结构数组的指针。每个结构代表插人到键盘或鼠标输入流中的一个事
件。
cbSize:定义INPUT结构的大小。若cbSize不是INPUT结构的大小,则函数调用失败。
返回值:函数返回被成功地插人键盘或鼠标输入流中的事件的数目。若要获得更多的错误信
息,可以调用GetlastError函数。
备注:Sendlnput函数将INPUT结构中的事件顺序地插入键盘或鼠标的输入流中。这些事件
与用户插入的(用鼠标或键盘)或调用keybd_event,mouse_event,或另外的Sendlnput
插人的键盘或鼠标的输入流不兼容。
    Windows CE:Windows CE不支持plnputs参数指向的INPUT结构的类型域中的
INPUT_HARDWARE值。
速查:Windows NT:4.0及以上版本:Windows:98及以上版本;Windows CE:不支持;头文
件:winuser.h;
库文件:user32.lib。
2.11.20  SetActiveWindow
函数功能:该函数激活一个窗口。该窗口必须与调用线程的消息队列相关联。
函数原型:HWND SetActiveWindow(HWND hWnd);
参数:
hWnd:将被激活的最顶层窗口。
返回值:若函数调用成功,则返回原先活动窗口的句柄。若函数调用失败,则返回值为NULL。
若要获得更多错误信息,可以调用GetLastError函数。
备注:SetActiveWindow函数激活一个窗口,但当应用程序处于后台时,将不激活指定窗口。
当应用程序激活窗口时处于前台,则窗口将被放到前台。
    若hWnd参数指定的窗口是被调用线程创建的,调用线程的活动窗口的状态将被设置到
hWnd中。否则,调用线程的活动窗口的状态被设为NULL。
    从另一方面讲,SetForegroundWindow窗口函数激活一个窗口并将其强制为前台的。当
应用程序要显示关键错误或需要用户立即注意的信息时,应只能调用SetForegroundWindow
函数。
    使用AttachThreadInput函数可将一个线程的输人处理连接到其他线程。这使得调用
SetActiveWindow函数的线程可以激活与其他线程的消息队列相关的窗口。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;库文件:user32.lib。
2.11.21  SetFocus
函数功能:该函数对指定的窗口设置键盘焦点。该窗口必须与调用线程的消息队列相关。
函数原型:HWND SetFocus(HWND hWnd);
参数:
hWnd:接收键盘输入的窗口指针。若该参数为NULL,则击键被忽略。
返回值:若函数调用成功,则返回原先拥有键盘焦点的窗口句柄。若hWnd参数无效或窗口
未与调用线程的消息队列相关,则返回值为NULL。若要获得更多错误信息,可以调用
GetLastError函数。
备注:SetFocus函数发送WM_KILLFOCUS消息到失去键盘焦点的窗口,并且发送WM_SETFOCUS
消息到接受键盘焦点的窗口。它也激活接受键盘焦点的窗口或接受键盘焦点的窗口的父窗
口。
    若一个窗口是活动的,但没有键盘焦点,则任何按键将会产生
WM_SYSCHAR,WM_SYSKEYDOWN或WM_SYSKEYUP消息。若VK_MENU键也被按下,则消息的IParam
参数将设置第30位。否则,所产生的消息将不设置此位。
    使用AttachThreadInput函数,一个线程可将输入处理连接到其他线程。这使得线程可
以调用SetFocus函数为一个与其他线程的消息队列相关的窗口设置键盘焦点。
    Windows CE:不使用SetFocus函数为一个与其他线程的消息队列相关的窗口设置键盘
焦点。但有一个例外。若一个线程的窗口是另一线程的子窗口,或这些窗口是具有同一父窗
口的兄弟窗口,则与一个线程关联的窗日可以为其他窗口设置焦点,尽管该窗口属于一个不
同的线程。在这种情况下,就不必先调用AttachThreadlnpUt函数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本:Windows CE:1.0及以上
版;头文件:winuser.h;库文件:user32.lib。
2.11.22  SetKeyboardState
函数功能:该函数拷贝一个存放键盘键状态的256字节的数组到调用线程的键盘输入状态表
中。该表与GetkeyboardState和GetkeyState函数访问的是同一个表。对该表的改变不会
影响其他线程的键盘输入。
函数原型:BOOL SetkeyboardState(LPBYTE lpKeyState);
参数:
lpKeyState:指向一个包含键盘键状态的256字节的数组。
返回值:若函数调用成功,则返回值不为0。若函数调用失败,则返回值为0。若要获得更
多的错误信息,可以调用GetLastError函数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib。
2.11.23  ToAscii
函数功能:该函数将指定的虚拟键码和键盘状态翻译为相应的字符或字符串。该函数使用由
给定的键盘布局句柄标识的物理键盘布局和输入语言来翻译代码。
函数原型:int ToAscii(UINT uVirtKey,UINT uScanCode;PBYTE lpKeyState,LPWORD 
lpChar,UINT uFlags);
参数:
nVirtkey:指定要翻译的虚拟键码。
uScanCode:定义被翻译键的硬件扫描码。若该键处于up状态,则该值的最高位被设置。
LpKeyState:指向包含当前键盘状态的一个256字节数组。数组的每个成员包含一个键的状
态。若某字节的最高位被设置,则该键处于down状态。若最低位被设置,则表明该键被触
发。在此函数中,仅有capslock键的触发位是相关的。NumloCk和scroll loCk键的触发
状态将被忽略。
LpChar:指向接受翻译所得字符或字符串的缓冲区。
UFlags:定义一个菜单是否处于激活状态。若一菜单是活动的,则该参数为1,否则为0。
返回值:若定义的键为死键,则返回值为负值。否则,返回值应为如下的值:
O:对于当前键盘状态,所定义的虚拟键没有翻译。
1:一个字符被拷贝到缓冲区。
2:两个字符被拷贝到缓冲区。当一个存储在键盘布局中的死键(重音或双音字符)无法与
所定义的虚拟键形成一个单字符时,通常会返回该值。
备注:若键盘布局中原先存放了一个死键,则提供给ToAscii函数的参数可能不足以翻译虚
拟键码。
    典型地,ToAscii函数执行基于虚拟键码的翻译。然而,在某些情况下,uScanCode参
数的第15位可能被用来区分一个键的按下状态和释放状态。扫描码用于翻译Alt+数字键的
键组合。
    尽管NUMLOCK事实影响键盘状态的触发键,TOAscii将忽略lpKeyState的触发设置
(VK_NUMLOCK),因为仅uVirtKey参数就足以区分光标移动键(VL_HOME,INSERT,等等)和
数字键(VK_DECIMAL,VK_NUMPADO_VK_NUMPAD9)。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Wiodows CE:不支持;头
文件:Winuser.h;库文件:user32.lib。
2.11.24  ToAsciiCx
函数功能:该函数将指定的虚拟键码和键盘状态翻译为相应的字符或字符串。该函数使用由
给定的键盘布局句柄标识的物理键盘布局和输入语言来翻译代码。
函数原型:int ToAsciiEx(UINT uVirtKey,UINT uScanCode,PBYTE lpKeyState,LPWORD 
lpChar,UINT uFlags, HKL dwhkl);
参数:
nVirtkey:指定要翻译的虚拟键码。
uScanCode:定义被翻译键的硬件扫描码。若该键处于up状态,则该值的最高位被设置。
IpKeyState:指向包含当前键盘状态的一个256字节数组。数组的每个成员包含一个键的状
态。若某字节的最高位被设置,则该键处于down状态。若最低位被设置,则表明该键被触
发。在此函数中,仅有Capslock键的触发位是相关的。Numlock和Scroll lock键的触发
状态将被忽略。
lpchar:指向接受翻译所得字符或字符串的缓冲区。
uFlags:定义一个菜单是否处于激活状态。若一菜单是活动的,则该参数为1,否则为0。
dwnkl:翻译给定代码所使用的键盘布局的句柄。该参数可以是先前LoadKeyboardLayout函
数返回的键盘布局句柄。
返回值:同上。
速查:Windows NT:4.0以上版本;Windows:95及以上版本;Windows CE:不支持;头文
件:winustr.n;库文件:user32.lib。
2.11.25  ToUnicode
函数功能:该函数将给定的虚拟键码和键盘状态翻译成相应的字符或字符串。
函数原型:int ToUnicode(UINT wVirtKey,UINT wScanCode,PBYTE lpKeyState,LPWSTR 
pwszBuff,int cchBuff,UINTwFlags);
参数:
wVirtKey:定义将被翻译的虚拟键码。
wScanCode:定义被翻译键的硬件扫描码。若该值的最高为被置为1,则该键处于Up状态。
lpKeyState:指向一个包含当前键盘状态的256字节数组。数组中的每个成员(字节)包含
了一个键的状态。若一字节的最高位被置为1,则该键处于down状态。
PwszBuff:接受翻译所得Unicode宇符或字符串的缓冲区指针。
cchBuff:定义pwszBuff参数指向的缓冲区中字符串的大小。
wFlags:形成函数执行条件的一个标志域集。若一个菜单处于激活状态,则将第0位设置为
1。第1位到第31位保留。
返回值:该函数返回一个如下的值:
-1:指定的虚拟键码是死键(重音或双音字符)。即使已敲击了几个字符,且这几个字符已
存储在键盘状态中时,也将忽略键盘布局,返回该值。如果可能的话,即使对于Unicode键
盘布局,该函数也己给出了一个将死键字符写入pwszBuff参数定义的缓冲区的间隔形式。
例如,函数写入字符SPACING ACUTE
  (0x00B4),而不是写入字符NON_SPACING ACUTE(0x0301)。
0:对于当前键盘状态,所定义的键没有翻译。没有写人任何东西到pwszBuff参数定义的缓
冲区。
1:一个字符被写入pwszBuff参数定义的缓冲区
2:两个或两个以上字符被写入pwszBuff参数定义的缓冲区。发生这种情况最常见的原因是
由于存放在键盘布局中的一个死键无法由指定的虚拟键码组合成单键字符。
备注:若键盘布局中原先存放了一个死键,则提供给ToUnicode函数的参数可能不足以翻译
虚拟键码。典型地,ToUnicode函数只执行基于虚拟键码的翻译。然而,在某些情况下,
wScanCode参数的第15位可能被用来区分一个键的按下状态和释放状态。
速查:Windows NT:3.1及以上版本;Windows:不支持;Windows CE:不支持;头文件:
winuser.h;库文件: user32.lib。
2.11.26  ToUnicodeEx
    函数功能:该函数将给定的虚拟键码和键盘状态翻译成相应的字符或字符串。
函数原型: int ToUnicodeEx(UINT wVirtKey,UINT wScanCode,PBYTE lpKeyState,LPWSTR 
pwszBuff,int cchBuff,UINTwFlags,HKL dwhkl);
参数:
wVirtKey:定义将被翻译的虚拟键码。
WScanCode:定义被翻译键的硬件扫描码。若该值的最高为被置为1,则该键处于uP状态。
LpKeyState:指向一个包含当前键盘状态的256字节数组。数组中的每个成员(字节)包含
了一个键的状态。若一字节的最高位被置为1,则该键处于down状态。
pwszBuff:接受翻译所得Unicode字符或字符串的缓冲区指针。
cchBuff:定义pwszBuff参数指向的缓冲区中字符串的大小。
wFlags:形成函数执行条件的一个标志域集。若一个菜单处于激活状态,则将第0位设置为
1。第1位到第31位保留。
dwhkl:用键盘层翻译指定的代码。
返回值;该函数返回值同ToUnicode。
速查:Windows NT:4.0及以上版本;Windows:不支持;Windows CE:不支持;头文件:
Winuser.h;库文件:user32.lib。
2.11.27  UnloadKeyboardL
函数功能:该函数移去一个键盘布局。
函数原型:BOOL UnloadKeyboardLayout( HKL hkl);
参数:
hkl:将被卸载的键盘布局句柄。
返回值:若函数调用成功,返回值不为0。若函数调用失败,返回值为0。函数调用失败可
有以下几种原因:传递了一个无效的键盘布局句柄。键盘布局己被预先调入。键盘布局正被
使用。
    若要获得更详尽的错误信息,可以调用GetLastError函数。
备注:Windows 95:UnloadKeyboardLayout不能卸载系统缺省的键盘布局。这样可以确保
对于用户敲入的shell命令和文件系统使用的名字总有一个合适的字符集可用。
    Windows NT:UnloadKeyboardLayout能够卸载系统缺省的键盘布局。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib。
2.11.28  UnreglsterHotKey
函数功能:该函数释放调用线程先前登记的热键。
函数原型:BOOL UnregisterHotKey(HWND hWnd,int id);
参数:
hWnd:与被释放的热键相关的窗口句柄。若热键不与窗口相关,则该参数为NULL。
id:定义被释放的热键的标识符。
返回值:若函数调用成功,返回值不为0。若函数调用失败,返回值为0。若要获得更多的
错误信息,可以调用GetLastError函数。
速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:Winuser.h;库文件:user32.lib。
2.11.29  VkKeyScan
函数功能:该函数将一个字符翻译成相应的虚拟键码和对于当前键盘的转换状态。该函数己
被VkKeyScanEx函数所替代。仍然可以使用VkKeyscan函数,但是不必再定义键盘布局。
函数原型:SHORT VkKeyScan(TCHARch);
参数:
ch:定义被翻译成虚拟键码的字符。
返回值:若函数调用成功,则返回值的低位字节中包含了虚拟键码,高位字节中包含了上挡
状态,这些状态可以是如下标志位的组合:
1:按下的可以是任一Shift键。2:按下的可以是任一Ctrl键。
4:按下的可以是任一AIt键。8:按下的是Hankaku键。
16:保留(由键盘驱动程序定义)。32:保留(由键盘驱动程序定义)。
    若函数不能将传递的字符代码翻译成一个按键,则低位与高位字节将均置为_1。
备注:对于使用右手Alt键作为Shift键的键盘布局(例如法语键盘布局),转换状态由值
6来表示,因为右手Alt键在内部被翻译为Ctrl+Alt。
    数字键盘(VK_NUMPAD0 ——VK_NUMPAD9)的翻译被忽略掉了。该函数仅主键盘部分的
字符翻译为相应的击键动作。例如,字符“7”被翻译成VK_7,而不是VK_NUMPAD7。
    应用程序使用该函数通过发送WM_KEYUP和WM_KEYDOWN消息来传送字符。
速查:Windows NT:3.7及以上版本;Windows:95及以上版本;Windows CE:不支持;头文
件:winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode和ANSI
两种版本。
2.11.30  vkKeyScanEx
函数功能:该函数将一个字符翻译成相应的虚拟键码和对于当前键盘的上挡状态。该函数使
用由给定的键盘布局句柄标识的物理键盘布局和输入语言来翻译字符。
函数原型:SHORT VkKeyScanEx(TCHA ch,HKL dwhkf);
参数:
ch:定义被翻译成虚拟键码的字符。
Dwhkl:用于翻译字符的键盘布局句柄。该参数值可以是任意先前由LoadKeyboardLayout函
数返回的键盘布局句柄。
返回值:同VkKeyScan。
速查: Windows NT:4.0及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib;  Unicode:在Windows NT上实现为Unicode和ANSI
两种版本。
2.11.31  GetKBCodePage
函数功能:该函数已过时。可以使用GetOEMCP函数检取系统的OEM代码页标识符。
GetKBCodePage函数返回当前代码页。
函数原型:UINT GetKBCodePage(VOID)
参数:无。
返回值:返回值OEM代码页标识符,或者若登记值为不可读的,返回值则为缺省值。若要查
看OEM代码页标识符表,可以参考GetOEMCP函数。
2.12  列表框函数(List boX)
2.12.1  DlgDirList
函数功能:该函数用与指定的文件名匹配的所有文件的名字填充列表框。
函数原型:int DlgDirList(HWND hDlg,LPTSTR lpPathSpec,int nlDListBox,int 
nlDStaticPath,UINT uFileType);
参数:
hDlg:包含列表框的对话框句柄。
loPathSpec:指向包含路径名或文件名的以NULL结尾的字符串指针。DIgDirList修改此串,
该串必须有足够的长度来保存修改的内容。关于此参数的更详尽的信息,请看备注部分。
nlDListBox:定义一个列表框的标示。如果该参数为0,DlgDirList函数认为没有列表框存
在,也不试图填充。
nlDStaticPath:定义用于显示当前驱动器和目录的静态控制的标识符。若此参数为0,
DlgDirList认为不存在这样的控制。
UFileType:定义将要显示的文件名字的属性。该参数必须是一个或多个如下的值:
DDL_ARCHIyE:包含文档文件。DDL_DIRECTORY:包含于目录。于目录名包含在方括号中。
DDL_DRIVES:包含驱动器。驱动器以[一X」的形式列出,其中X是驱动器符。
DDL_EXCLUSIVE:仅包含指定属性的文件。缺省情况下,可读写的文件将被列出,尽管并未指
定DDL_READWRITE值。DDL_HIDDEN:包含隐含文件。
DDL_READONLy:包含只读文件。DDL_READWRITE:包含没有其他附加属性的可读写文件。
DDL_SYSTEM:包含系统文件。DDL_POSTMSGS:传递消息给应用程序的消息队列。缺省情况下,
DlgDirList直接发送消息给对话框过程。
返回值:若函数调用成功,则返回值不为0。若函数调用失败,则返回值为0。例如,lpPathSpec
定义的串不是一个有效路径时,函数将失败。若想获的错误信息,可以调用GetLastError
函数。
备注:若对于lpPathSpec参数定义了一个0长度的串,或者仅定义了一个目录名,而没有文
件名,则串被转换为‘.’。
lpPathSgec参数有如下形式:[drive:][\u]directory[\idirectory]\u][filename]
    在这个例子中,drive是一个驱动器符,directory是一个有效的驱动器名,filename
是一个有效的文件名,文件名中必须包含至少一个通配符。
    若lpPathSpec包含一个驱动器或目录名,或同时包含两者,则在列表框被填充以前,
当前的驱动器和目录将被改变为指定的驱动器和目录。nlDStaticPath参数标识的静态控制
也被用新的驱动器或/和目录名来更新。
    列表框填充以后,DlgDirList通过移去路径和文件名的驱动器和/或目录部分来更新
lpPathSpec参数。
DlgDirList发送LB_RESETCONTENT和LB_DIR消息给列表框。
速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode和ANSI
两种版本。
2.12.2  DlgDirSelectEx
函数功能:该函数从单选列表框中检取当前选择。假定列表框已被DlgDirList函数填充,
并且该选择为一个驱动器符,文件名,或目录名。
函数原型:BOOL DlgDirSelectEx(HWND hDlg,LPTSTR lpString,int nCount,int 
nlDlistBox);
参数:
hDlg:包含列表框的对话框句柄。
lpString:接受选定的路径的缓冲区指针。
nCount:定义lpstring指向的缓冲区中的字符串长度。
NlDListBox:定义对话框中列表框的整数标识符。
返回值:若当前选择为目录名,则返回值不为0。若当前选择不是目录名,则返回值为0。
若要获得更多的错误信息,可调用GetLastError函数。
备注:DlgDirSelectEx函数把选择拷贝到lpString指向的缓冲区。若当前选择为一目录名
或驱动器符,DlgDirSelectEx函数将去掉封闭的方形括号(对于驱动器符;还要去掉连字
符),以便于将名字和符号插入到新的路径中。若没有选择,lpString的值不变。
    DlgDirSelectEx发送LB_GETCURSEL和LB_GETTEXT消息到列表框。该函数不允许从列
表框返回多个文件名。该列表框一定不能是多选列表框。若为多选框,该函数不返回0值,
且lpString的值不变。
速查:Windows nT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件;winuser.h;库文件:user32.lib; Unicode:在Windows NT上实现为Unicode和ANSI
两种版本。
2.13  菜单函数(Menu)
2.13.1  CheckMenuRadlol
函数功能:该函数校校一个指定的菜单项并使其成为一个圆按钮项。同时不校核相关组里的
其他菜单项并清除这些项的国按钮的类型标志。
函数原型:BOOL CheckMenuRadioltem(HMEN hMENU,UINT idFirst,UINT idLast,UINT 
uFlags);
参数:
hMenu:包含一组菜单项的菜单的句柄。
idFirst:菜单组里第一个菜单项的标识符或位置。
idLast:菜单组里最后一个菜单项的标识符或位置。
IdCheck:要选取的菜单项的标识符或位置。
uFlag:指定idFirst,idLast,idCheck含义的值。如果此参数为MF_BYCOMMAND,则其他参
数指定菜单项标识符。如果此参数为MF_BYPOSITION,则其他参数指定菜单项位置。
返回值:如果函数调用成功,返回值非零。如果函数调用失败,返回值为零。若想获得更多
的错误信息,请调用GetLastError函数。
备注:CheckMenuRadioltem设置了MFT_RADIOCHECK类型标志,并为由idCheck指定的项设
置 MFS_CHECKED状态,同时,清除组里所有其他项目的上述两个标志。被选取的项用项目
目标表示,而不是用复选标记目标。要得到更多的关于菜单项类型和状态标志的信息,参看
MENUITEMINFO结构。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件;winuser.h;输入库:user32.lib。
2.13.2  CreateMenu
函数功能:该函数创建一个菜单。此菜单最初是空的,但可用函数InserMenultem,
AppendMenu,和lnsertMenu来填入菜单项。
函数原型:HMENU CreateMenu(VOID)
参数:无。
返回值:如果函数调用成功,返回值是新创建菜单的句柄。如果函数调用失败,返回值是
NULL。若想获得更多的错误信息,请调用GetLastError函数。
备注:与被分配给一个窗日的菜单相联系的资源会被自动释放。如果此菜单未被分配给一个
窗口,应用程序必须在关闭之前释放与菜单相连的资源。应用程序通过调用函数DestroyMenu
来释放菜单资源。
Windows 95环境下,系统可支持最多16,364个菜单句柄。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;输入库:user32.lib。
2.13.3  CreatePopupMenu
函数功能:该函数创建一个下拉式菜单、子菜单或快捷菜单。此案单最初是空的,但可用函
数InserMenultem来插入或追加菜单项。也可用函数InsertMenu来插人菜单项,用
AppendMenu来追加菜单项。
函数原型:HMENU CreatePopupMenu(VOID)
参数:无。
返回值:如果函数调用成功,返回值是新创建菜单的句柄。如果函数调用失败,返回值是
NULL。若想获得更多的错误信息,请调用GetLastError函数。
备注:一个应用程序可增加新菜单到已存在的菜单上,或者可以调用函数TrackPopupMenuEx
或TrackPopupMenu来显示快捷菜单。
    与被分配给一个窗口的菜单相联系的资源会被自动释放。如果此菜单未被分配给一个窗
口,应用程序必须在关闭之前释放与菜单相连的资源。应用程序通过调用函数DestroyMenu
来释放菜单资源。Windows95环境下,系统可支持最多16,364个菜单句柄。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows cE:1.0及以上
版本:头文件:winuser.h;输入库:user32.lib。
2.13.4  DeleteMenu
  
函数功能:该函数从指定菜单里删除一个菜单项。如果此菜单项打开了一个菜单或子菜单,
则此函数销毁该菜单或子菜单的句柄,并释放该菜单或子菜单使用的存储器。
函数原型:BOOL DelefeMenu(HMENU hMenu,UINT uPosition,UINT uFlags);
参数:
hMenu:要被的修改菜单的句柄。
UPosition:指定将被删除的菜单项,按参数uFlagS确定的含义。
UFlags:确定参数UPosition加如何被解释。此参数可取下列值之一:
MF_BYCOMMAND:表示uPosition给出菜单项的标识符。如果MF_BYCOMMAND和MF_BYPOSITION
都没被指定,则MF_BYCOMMAND为缺省的标志。
MF_BYPOSITION:表示uPosition给出菜单项基于零的相对位置。
返回值:如果函数调用成功,返回值非零;如果函数调用失败,返回值是零。若想获得更多
的错误信息,  请调用GetLastError函数。
备注:只要一个菜单被修改,无论它是否被显示在窗口里,应用程序都应调用DrawMenubar。
速查:Wihdows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:Winuser.h;输入库:user32.lib。
2.13.5  DestroyMenu
  
函数动能:该函数销毁指定的菜单,并释放此菜单占用的存储器。
函数原型:BOOL DestroyMenu(HMENU hMenu);
参数:
hMenu:要销毁的菜单的句柄。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。
备注:一个应用程序在关闭之前,必须调用函数DestroyMenu来销毁一个没被分配给窗口的
菜单。分配给窗口的菜单,当应用程序关闭时,被自动销毁。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版
本;头文件:winuser.h;输入库:user32.lib。
2.13.6  DrawMenuBar
函数功能:该函数重画指定菜单的菜单条。如果系统创建窗口以后菜单条被修改,则必须调
用此函数来画修改了的菜单条。
函数原型:BOOL DrawMenuBar(HWND hWnd);
参数:
hWnd:其菜单条需要被重画的窗口的句柄。
返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。
速查:Windows NT:及以上版本;Windows:95及以上版本;Windows:2.0及以上版本;头
文件:winuser.h;输入库:user32.lib。
2.13.7  EnableMenultem
函数功能:该函数使指定的菜单项有效、无效或变灰。
函数原型:BOOL EnableMenutem(HMENU hMenu,UINT ulDEnablttem,UINT uEnable;
参数
hMenu:菜单句柄。
ulDEnableltem:指定将使其有效、无效或变灰的菜单项,按参数uEnable确定的含义。此
参数可指定菜单条、菜单或子菜单里的菜单项。
uEnable:指定控制参数uIDEnableltem如何解释的标志,指示菜单项有效、无效或者变灰。
此参数必须是MF_BYCOMMAND或MF_BYPOSITION,MF_ENABLED和MF_DISABLE或MF_GRAYED的
组合。
MF_BYCOMMAND:表明参数uIDEnableltem给出了菜单项的标识符。如果MF_BYCOMMAND和
MF_POSITION都没被指定,则MF_BYCOMMAND为缺省标志。
MF_BYPOSITION:表明参数uIDEnableltem给出了菜单项的以零为基准的相对位置。
MF_DISABLED:表明菜单项无效,但没变灰,因此不能被选择。
MF_ENABLED:表明菜单项有效,并从变灰的状态恢复,因此可被选择。
MF_GRAYED:表明菜单项无效并且变灰,因此不能被选择。
返回值:返回值指定菜单项的前一个状态(MF_DISABLED,MF_ENABLED或MF_GRAYED)。如果
此菜单项不存在,则返回值是OXFFFFFFFF。
备注:一个应用程序必须用MF_BYPOSITION来指定正确的菜单句柄。如果菜单条的菜单句柄
被指定,顶层菜单项(菜单条上的菜单项)将受到影响。若要根据位置来设置下拉菜单中的
菜单项或子菜单的状态,应用程序指定下拉菜单或子菜单的句柄。
    当应用程序指定MF_BYCOMMAND标志时,系统在由指定菜单句柄标识的菜单里选取那些
打开了子菜单的菜单项。因此除非要复制菜单项,指定菜单条的句柄就足够了。
    函数InsertMenu,InsertMenultem,LoadMenulndirect,ModifyMenu和SetMenultemlnfo
也可设置菜单项的状态(有效、无效或变灰)。
    Windows CE:Windows CE不支持参数uEnable取MF_DISABLED标志。
    如果没有变灰,菜单项不能无效。要使菜单项无效,用MF_RAYED标志。
速查:Windows NT:3.1及以上版本;Windows:95的及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;输入库:user32.lib。
2.13.8  GetMenu
函数功能:该函数取得分配给指定窗口的菜单的句柄。
函数原型:HMENU GetMenu(HWND hWnd);
参数:
hWnd:其菜单句柄被取得的窗口的句柄。
返回值:返回值是菜单的句柄。如果给定的窗口没有菜单,则返回NULL。如果窗口是一个
子窗口,返回值无定义。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文
件:winuser.h;输入库:user32.lib。
2.13.9  GetMenuDefaultltem
函数功能:该函数确定指定菜单上的缺省项。
函数原型:UINT GetMenuDefaultltem(HMENY hMenu,UINT fByPos,UINT gmdiFlags);
参数:
hMenu:获取缺省项的菜单的句柄。
fByPos:用于确定是取得菜单项的标识符还是位置的值。如果此参数值为FALSE,返回标识
符,否则返回位置。
gmdiFlags:指定函数如何查找菜单项。此参数可取灵或多个下列值:
GMDI_GOINTOPOPUPS:如果缺省项打开了子菜单,此函数在相应的子菜单里递归查找。如果
子菜单没有缺省项,返回值表示打开了子菜单的项。缺省情况下,函数返回指定菜单的第一
个缺省项,不管它是否打开了一个子菜单。
GMDI_USEDISABLED:指定函数返回一个缺省项,即使该项无效。缺省情况下,函数跳过无效
或变灰的项。
返回值:如果函数调用成功,返回值是菜单项的标识符或位置;如果函数调用失败,返回值
是C1。若想获得更多的错误信息,请调用GetLastError函数。
速查:Windows:4.0及以上版本;Windows:95及以上版本:Windows CE:不支持;头文件:
winuser.h;输入库:user32.lib。
2.13.10  GetMenultemlD
函数功能:该函数确定指定菜单里的菜单项个数。
函数原型:int GetMenultemCount(HMENU hMenu);
参数:
hMenu:被检查的菜单的句柄。
返回值:如果函数调用成功,返回值是菜单里指定的菜单项数;如果函数调用失败,返回值
是C1。若想获得更多的错误信息,请调用函数GetLastError函数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:user32.fib。
2.13.11  GetMenultemID
函数功能:该函数取得菜单里指定位置处的菜单项的标识符。
函数原型:UINT GetMenultemID(HMENU hMenu,int nPos);
参数:
hMenu:其菜单项标识符将被取得的菜单的句柄。
nPos:指定将取得其标识符的菜单项相对于零的位置。
返回值:返回值是给定菜单项的标识符。如果菜单项标识符是NULL或指定的菜单打开了子
菜单,返回值是OXFFFFFFFF。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输人库:user32.fib。
2.13.12  GetMenultemlnfo
函数功能:该函数取得一个菜单项的信息。
函数原型:BOOL GetMenultemlnfo(HMENU hMenu,UINT ultem,BOOL fByPosition, 
LPMENUITEMINFOlpmii);
参数:
hMenu:包含指定菜单项的菜单的句柄。
Ultem:将取得其信息的菜单项的标识符或位置。此参数的含义取决于参数fByPosition的
值。
FbyPosition:此值用于指定参数Ultem的含义。如果此参数是FALSE,则ultem表示菜单
项的标识符。否则,表示菜单项的位置。
lpmii:指向结构MENUITEMINFO的指针;该结构指定要取得的信息并接收菜单项的信息。
返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。
备注:Windows CE环境下,由参数lpmii指向的MENUITEMINFO结构的fMask成员不能取
MIM_CHECKMARKS标志。
速查:Windows NT:4.0及以上版本;Windows:95及以上版本;Windows cE:1.0及以上版
本;头文件:winuser.h;输入库:user32.lib Unicode:在Windows NT环境下以Unicode
和ANSI方式实现。
2.13.13  GetMenultemRect
函数功能:该函数取得指定菜单项的边界矩形。
函数原型:BOOL GetMenultemRect(HWND hWnd,HMENU hMenu,UINT ultem,LPRECT lprcltem);
参数:
hWnd:含有指定菜单的窗口的句柄。
在Windows NT和Windows 98环境中,如果此值为NULL且hMenu代表一个弹出式菜单,此
函数将找到菜单窗口。
ultem:菜单项相对于零的位置。
lprcltem:指向结构RECT的指针,该结构接收指定菜单项的边界矩形(按屏幕坐标)。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。
速查:Windows NT:4.0及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;输入库:user32.lib。
2.13.14  getSubMenu
函数功能:该函数取得被指定菜单激活的下拉式菜单或子菜单的句柄。
函数原型:HMENU GetSubMenu(HMENU hMenu,int nPos);
参数:
hMenu:菜单句柄。
nPos:激活下拉式菜单或子菜单的菜单项相对于零的位置。
返回值:如果函数调用成功,返回值是菜单项激活的下拉式菜单或子菜单的句柄。如果菜单
项没有激活一个下拉式菜单或子菜单,返回值是NULL。
速查:Windows NT:3.1及以上版本;Wiodows:95及以上版本;Windows CE:1.0及以上
版本;头文件:Winuser.h;输入库:user32.lib。
2.13.15  GetSystemMenu
函数功能:该函数允许应用程序为复制或修改而访问窗口菜单(系统菜单或控制菜单)。
函数原型:HMENU GetSystemMenu(HWND hWnd,BOOL bRevert);
参数:
hWvd:拥有窗口菜单拷贝的窗口的句柄。
BPevert:指定将执行的操作。如果此参数为FALSE,GetSystemMenu返回当前使用窗口菜单
的拷贝的句柄。该拷贝初始时与窗口菜单相同,但可以被修改。
如果此参数为TRUE,GetSystemMenu重置窗口菜单到缺省状态。如果存在先前的窗口菜单,
将被销毁。
返回值:如果参数bRevert为FALSE,返回值是窗口菜单的拷贝的句柄:如果参数bRevert
为TRUE,返回值是NULL。
备注:任何没有用函数GetSystemMenu来生成自己的窗口菜单拷贝的窗口将接受标准窗口菜
单。
    窗口某单最初包含的菜单项有多种标识符值,如SC_CLOSE,SC_MOVE和SC_SIZE。
    窗口菜单上的菜单项发送WM_SYSCOMMAND消息。
    所有预定义的窗口菜单项的标识符数大于OxFOOO。如果一个应用程序增加命令到窗口
菜单,应该使用小于OxFOOO的标识符数。
    系统根据状态自动变灰标准窗口菜单上的菜单项。应用程序通过响应在任何某单显示之
前发送的WM_INITMENU消息来实现选取和变灰。
    Windows CE环境下,不支持系统菜单,但GetSyemMenu以宏的方式实现,以保持和已
存在代码的兼容性。可以使用该宏的返回菜单句柄使关闭框无效,与在Windows桌面平台上
一样。Windows CE下的返回值没有其他用处。参数bRevert无用。
    用下面的代码使关闭按钮无效:
EnableMenultem(GetSystemMenu(hwnd,FALSE),SC_CLOSE,MF_BYCOMMAND I MF_GRAYED);
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;输人库:user32.lib。
2.13.16  HlllteMenultem
函数功能:该函数对菜单条中的菜单项加亮或清除亮度。
函数原型:BOOL HiliteMenultem(HWND hwnd,HMENU hMenu,UINT ultemHilite,UINT 
uHilite);
参数:
hWnd:具有菜单的窗口句柄。
hMenu:含有将被加亮的菜单项的菜单条句柄。
UltmHilite:指定将被加亮的菜单项。此参数可以是菜单项的标识符,也可为菜单项在菜单
条中的偏移量,其含义由参数uHilite的值确定。
yHilite:控制参数ultemHilite如何解释的标志,并确定菜单项是否被加亮。此参数必须
是MF_BYCOMMAND或MF_BYPOSITION和MF_HILITE或MF_UNHILITE的组合。
MF_BYCOMMAND:表示参数ultemHilite给出了菜单项的标识符。
MF_BYPOSITION:表示参数ultemHilite给出了菜单项相对于零的位置。
MF_HILITE:加亮菜单项。如果此标志未被指定,则清除菜单项的亮度。
MF_UNHILITE:清除菜单项的亮度。
返回值:如果菜单项被设置为指定的加亮状态,返回非零值;如果菜单项未被设置为指定的
加亮状态,返回零。
备注:MF_HILITE和MF_UNHILITE标志只能被函数HiliteMenutem使用,不能被函数
ModifyMenu使用。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:user32.lib。
2.13.17  InsertMenultem
函数功能:该函数在菜单的指定位置插入一个新菜单项。
函数原型:BOOL WINAPI InsertMenutem(HMENU hMenu,UINT ultem,BOOL fByPosition,
LPMENUITEMINFO lpmii );
参数:
hMenu:新菜单项将被插入其中的菜单的句柄。
ultem:在其前面插入新菜单项的菜单项的标识符或位置。此参数的含义取决于参数
fByPosition的值。
fByFosition:用于确定ultem的含义的值。如果此参数为FALSE,Ultem表示菜单项的标识
符。否则,ultem  表示菜单项的位置。
lpmii:指向结构MENUITEMINFO的指针,该结构中包含了新菜单项的信息。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。
备注:为了使键盘加速键能控制位图或自己绘制的菜单项,菜单的拥有者必须处理
WM_MENUCHAR消息。
参见自绘制菜单和WM_MENUCHAR消息。
速查:Windows NT:4.0及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h; 输入库:user32.lib Unicode:在Windows NT环境下,以Unicode和ANSI
方式实现。
2.13.18  IsMenu
函数功能:该函数确定一个句柄是否为菜单句柄。
函数原型:BOOL lsMenu(HMENU hMenu);
参数:
hMenu:被测试的句柄。
返回值:如果hMenu是一个菜单句柄,返回非零值。如果hMenu不是一个菜单句柄,返回值
是零。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文
件:Winuser.h;输入库:user32.lib。
2.13.19  LoadMenu
函数功能:该函数从与应用事例相联系的可执行文件(.EXE)中加载指定的菜单资源。
函数原型:HMENU LoadMenu(HINSTANCE hlnstance,LPCTSTR lpMenuName);
参数:
hlnstance:含有被加载菜单资源的事例模块的句柄。
LpMenuName:指向含有菜单资源名的以空结束的字符串的指针。同时,此参数可由低位字上
的资源标识符和高位字上的零组成。要创建此值,用MAKEINTRESOURCE宏。
返回值:如果函数调用成功,返回值是菜单资源句柄;如果函数调用失败,返回值是NULL。
若想获得更多的错误信息,请调用GetLastError函数。
备注:关闭应用程序之前,用函数DestroyMenu来销毁菜单并释放加载菜单占用的内存。
Windows CE 1.0不支持层叠式菜单。Windows CE 2.0及更高版本支持层叠式菜单。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下,以Unicode和
ANSI方式实现。
2.13.20  LoadMenulndirect
函数功能:该函数加载指定的菜单模板到内存。
函数原型:HMENU LoadMenulndirect(CONST MENUTEMPLATE”lpMenuTemplate);
参数:
lpMenuTemplate:指向菜单模板或扩展菜单模板的指针。
    一个菜单模板由一个MENUITEMTEMPLATEHEADER结构和一个或多个连续的
MENUITEMTEMPLATE结构组成。一个扩展菜单模板由一个MENUEX_TEMPLATE_HEADER结构和一
个或多个MENUEX_TEMPLATE_ITEM结构组成。
返回值:如果函数调用成功,返回值是菜单句柄;如果函数调用失败,返回值为NULL。若
想获得更多的错误信息,请调用GetLastError函数。
备注:此函数的ANSI和Unicode版本中,在MENUITEMTEMPLATE结构中的字符串必须是Unicode
串。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:User32.lib;Unicode:在Windows NT环境下,以Unicode和
ANSI方式实现。
2.13.21  MenultemFromPo
函数功能:该函数确定指定位置的菜单项(如果存在)。
函数原型:UINT WINAPI MenultemFromPoint(HWND hWnd,HMENU hMenu,POINT ptScreen);
参数:
hWnd:含有菜单的窗口的句柄。
    在Windows NT 5.0和Windows 98环境下,如果此值为NULL并且参数hMenu指定一个
弹出式菜单,则此函数将会找到菜单窗口。
hMenu:将被命中测试的菜单项所在的菜单的句柄。
PtScreen:用于指定测试位置的POINT结构。如果hMenu指定一个菜单条,此参数按窗口坐
标,否则按客户坐标定义。
返回值:返回指定位置的菜单项相对于零的位置,或者当指定位置没有菜单项时返回C1。
速查:Windows NT:4.0及以上版本:Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:user32.lib。
2.13.22  RemoveMenu
函数功能:该函数从指定菜单删除一个菜单项或分离一个子菜单。如果菜单项打开一个下拉
式菜单或子菜单,RemoveMenu不消毁该菜单或其句柄,允许菜单被重用。在调用此函数前,
函数GetSubMenu应当取得下拉式菜单或子菜单的句柄。
函数原型:BOOL RemoveMenu(HMENU hMenu,UINT uPosition,UINT uFlgs);
参数:
hMenu:将被修改的菜单的句柄。
UPosition:指定将被删除的菜单项,其含义由参数uFlages决定。
uFlags:指定参数uPosition如何解释。此参数必须为下列之一值:
MF_BYCOMMAND:表示uPositon给出菜单项的标识符。如果MF_BYCOMMAND和MF_BYPOSITION
都没被指定,则MF_BYCOMMAND是缺省标志。
Mu_BYPOSITION:表示uPositon给出菜单项相对于零的位置。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。
备注:只要一个菜单被修改,无论它是否在显示窗口里,应用程序都必须调用函数
DrawMenuBar。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;输入库:user32.lib。
2.13.23  SetMenu
函数功能:该函数分配一个新菜单到指定窗口。
函数原型:BOOL SetMenu(HWND hWnd,HMENU hMenu);
参数:
hWnd:菜单被分配到其中的窗口的句柄。
HMenu:新菜单的句柄。如果菜单参数为NULL,则窗口的当前菜单被删除。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLaSError函数。
备注:窗口被重画来反映菜单的修改。函数SetMenu替换原来的菜单(如果存在),但并不
将其销毁。应用程序必须调用函数DestroyMenu来销毁菜单。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输人库:user32.lib。
2.13.24  SetMenuDefaultltem
函数功能:该函数给指定的菜单设置缺省菜单项。
函数原型:BOOL SetMenuDefaultltem(HMENU hMenu,UINT ultem,UINT fByPo );
参数:
httenu:将为其设置缺省菜单项的菜单的句柄。
Uttrne:新缺省菜单项的标识符或位置,无缺省项时,取值为C1。此参数的含义由参数fByPoS
的值决定。
ByPos:用于确定参数ultem的值的含义。如果此参数为FALSE,参数ultem表示菜单项的
标识符。否则,表示菜单项的位置。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。
速查:Windows NT:4.0及以上版本;Windows: 95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:user32.lib。
2.13.25  SetMenultemBitm
函数功能:该函数将指定的位图与一个菜单项相联系。无论该菜单项是否被选取,系统都将
适当的位图显示在菜单项旁边。
函数原型:BOOL SetMenultemBitmaPs(HMENU hMenu,UINT uPosition,UINT uFlags,HBITMAP 
hBitmapUnchecked,HBITMAP hBitmspChecked);
参数:
hMenu:其菜单项将接受新选取标记位图的菜单的句柄。
uPosition:指定将被修改的菜单项。其含义由参数uFlags决定。
UFlags:指定参数uPosition将如何解释。此参数必须是下列值之一:
MF_BYCOMMAND:表示参数uPosition给出菜单项的标识符。如果MF_BYCOMMAND和MF_POSITION
都没被指定,则MF_BYCOMMAND是缺省标志。
MF_BYPOSITION:表示参数uPosition给出菜单项相对于零的位置。
hBitmapUnchecked:当菜单项没被选取时显示的位图的句柄。
hBitmapChecked:当菜单项被选取时显示的位图的句柄。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。
备注:如果参数hBitmapUnchecked或hBitmapChecked的值为NULL,系统将不为相应选取
状态显示任何位图到菜单项旁边。如果两参数值均为NULL,系统在菜单项被选取时显示缺
省的选取标志位图,菜单项未被选取时删除位图。当菜单项被销毁时,位图并没被销毁,需
要应用程序来将其销毁。
    已选取或未选取的位图应当是单色的。系统将用布尔AND运算符组合位图和菜单。这样,
位图中白色部分变成透明的,而黑色部分成为菜单项的颜色。如果使用彩色位图,结果会不
符合需要。以CXMENUCHECK和CYMENUCHECK来使用函数GetSystemMetrics将取得位图的尺
寸。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:user32.lib。
2.13.26  SetMenultemlnfo
函数功能:该函数改动一个菜单项的信息。
函数原型:BOOL SetMenultemlnfo(HMENU hMenu,UINT uitem,BOOL fByPosition,
LPMENUITEMINFO lpmii);
参数:
hMenu:包含菜单项的菜单的句柄。
ultem:将被修改的菜单项的标识符或位置。此参数的含义由参数fByPosition确定。
FByPosition:用于指定参数ultem的含义的值。如果此参数值为FALSE,则参数ultem是
菜单项的标识符,否则,表示菜单项的位置。
lpmii:指向结构MENUITEMINFO的指针。该结构含有菜单项的信息,并且.指定将被修改的
菜单项的属性。
返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。
备注:为了使键盘加速键能控制位图或自己绘制的菜单项,菜单的拥有者必须处理
WM_MENUCHAR消息。参见自绘制菜单和WM_MENUCHAR消息。Windows CE环境下,只有下列值
对参数lpmii指向的MENUITEMINFO结构中的fMask成员有效:MIIM_DATA;MIIM_;MIIM_TYPE;
如果MIIM-TYPE被指定,结构MENUITEMINFO的fType成员必须为菜单项的当前类型,也就
是说,该类型不能被改变。
速查:Windows NT:4.0及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下,以Unicode和
ANSI方式实现。
2.13.27  TrackPopupMenu
函数功能:该函数在指定位置显示快捷菜单,并跟踪菜单项的选择。快捷菜单可出现在屏幕
上的任何位置。
函数原型:BOOL TrackPopupMenu(HMENU hMenu,UINT uFlags,int x,int y,int nReserved,
HWND hWnd,CONST RECT”prcRect);
参数
hMenu:被显示的快捷菜单的句柄。此句柄可为调用CreatePopupMenu创建的新快捷菜单的
句柄,也可以为调用GetSubMenu取得的与一个已存在菜单项相联系的子菜单的句柄。
uFlags:一种指定功能选项的位标志。用下列标志位之一来确定函数如何水平放置快捷菜单:
TPM_CENTERALLGN:若设置此标志,函数将按参数x指定的坐标水平居中放置快捷菜单。
TPM_LEFTALLGN:若设置此标志,函数使快捷菜单的左边界与由参数X指定的坐标对齐。
TPM_RIGHTALLGN:若设置此标志,函数使快捷菜单的右边界与由参数X指定的坐标对齐。
    用下列标志位之一来确定函数如何垂直放置快捷菜单:
TPM_BOTTOMALLGN:若设置此标志,函数使快捷菜单的下边界与由参数y指定的坐标对齐。
TPM_TOPALLGN:若设置此标志,函数使快捷菜单的上边界与由参数y指定的坐标对齐。
TPM_VCENTERALLGN;若设置此标志,函数将按参数y指定的坐标垂直居中放置快捷菜单
    用下列标志位之一来确定在菜单没有父窗口的情况下用户的选择:
TPM_NONOTIFY:若设置此标志,当用户单击菜单项时函数不发送通知消息。
TPM_RETURNCMD;若设置此标志;函数将用户所选菜单项的标识符返回到返回值里。
    用下列标志位之一来确定在快捷菜单跟踪哪一个鼠标键:
TPM_LEFTBUTTON:若设置此标志,用户只能用鼠标左键选择菜单项。
TPM_RIGHTBUTTON:若设置此标志,用户能用鼠标左、右键选择菜单项。
X:在屏幕坐标下,快捷菜单的水平位置。
Y:在屏幕坐标下,快捷菜单的垂直位置。
NReserved:保留值,必须为零。
HWnd:拥有快捷菜单的窗口的句柄。此窗口接收来自菜单的所有消息。函数返回前,此窗口
不接受来自菜单的WM_COMMAND消息。
    如果在参数uFlags里指定了TPM_NONOTIFY值,此函数不向hWnd标识的窗口发消息。  但
必须给hWnd里传一个窗口句柄,可以是应用程序里的任一个窗口句柄。
PrcRect:未用。
返回值:如果在参数uFlags里指定了TPM_RETURNCMD值,则返回值是用户选择的菜单项的
标识符。如果用户未作选择就取消了菜单或发生了错误,则退回值是零。如果没在参数uFlags
里指定TPM_RETURNCMD值,若函数调用成功,返回非零值,若函数调用失败,返回零。若想
获得更多的错误信息,清调用GetLastError
函数:
备注:Windows CE不支持参数uFlags取下列值:TPM_NONOTIFY;TPM_LEFTBUTTON;
TPM_RIGHTBUTTON。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;输入库:user32.lib。
2.13.28  TrackPopupMenuEx
函数功能:该函数在指定位置显示快捷菜单,并跟踪菜单项的选择。快捷菜单可出现在屏幕
上的任何位置。
函数原型:BOOL TrackPopupMenuEX(HMENU hMenu,UINT uFlags,int x,int y,HWND hWnd,
LPTPMPARAMS lptpm);
参数:
hMenu:被显示的快捷菜单的句柄。此句柄可为调用CreatePoPuPMenu创建的新快捷菜单的
句柄,也可以为调用GetSubMenu取得的与一个已存在菜单项相联系的子菜单的句柄。
UFlags:定位或其他选项。此参数可为零或取在函数CreatePopupMenu里所列的值,也可取
下列之一值:
TPM_HORIZONTAL:在不覆盖排斥矩形就不能在指定位置显示菜单时,系统将先考虑水平对齐
的要求。
TPM_VERTICAL:在不覆盖排斥矩形就不能在指定位置显示菜单时,系统将先考虑垂直对齐的
要求。排斥矩形是指屏幕上菜单不能覆盖的部分,由Iptpm指定。
X:在屏幕坐标下,快捷菜单的水平位置。
Y:在屏幕坐标下,快捷菜单的垂直位置。
hWnd:拥有快捷菜单的窗口的句柄。此窗口接收来自菜单的所有消息。函数返回前,此窗口
不接受来自菜单的WM_COMMAND消息。
    如果在参数uFlags里指定了TPM_NONOTIFY值,此函数不向hwnd标识的窗口发消息。    
但必须给hwnd里传一个窗口句柄,可以是应用程序里的任一个窗口句柄。
lptpm:指向结构TPMPARAMS的指针,该结构指定屏幕上菜单不能覆盖的区域。此参数可为
NULL。
返回值:如果在参数UFlags里指定了TPM_RETURNCMD值,则返回值是用户选择的菜单项的
标识符。如果用户未作选择就取消了菜单或发生了错误,则返回值是零。如果没在参数uFlags
里指定TPM_RETURNCMD值,函数调用成功,返回非零值,若函数调用失败,返回零。若想获
得更多的错误信息,请调用GetLastError
函数。
备注:Womdpws CE不支持参数uFlags取下列值:
TPM_NONOTIFY;TPM_LEFTTBUTTON;TPM_RIGHTBUTTTON;TPM_HORIZONTAL;TPM_VERTICAL;
    参数lptpm必须设为NULL。
速查:Windows NT:4.0及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;输入库:user32.lib。
2.13.29  AppendMenu
函数功能:该函数在指定的菜单条、下拉式菜单、子菜单或快捷菜单的末尾追加一个新菜单
项。此函数可指定菜单项的内容、外观和性能。函数AppendMenu己被lnsertMenultem取代。
但如果不需要lnsertMenultem的扩展特性,仍可使用AppendMenu。
函数原型:BOOL AppendMenu(hMenu hMenu,UINT uFlags,UINT uIDNewltem,LPCTSTR 
lpNewltem);
参数:
hMenu:将被修改的菜单条、下拉式菜单、子菜单、或快捷菜单的句柄。
UFlags:控制新菜单项的外观和性能的标志。此参数可以是备注里所列值的组合。
UIDNewltem:指定新菜单项的标识符,或者当uFlags设置为MF_POPUP时,表示下拉式菜单
或子菜单的句柄。
LpNewltem:指定新菜单项的内容。此参数的含义取决于参数uFlags是否包含MF_BITMAP, 
MF_OWNERDRAW或MF_STRING标志,如下所示:
MF_BITMAP:含有位图句柄。MF_STRING:以`\O’结束的字符串的指针。
MF_OWNERDRAW:含有被应用程序应用的32位值,可以保留与菜单项有关的附加数据。当菜
单被创建或其外观被修改时,此值在消息WM_MEASURE或WM_DRAWITEM的参数IParam指向的
结构,成员itemData里。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。
备注:一旦菜单被修改,无论它是否在显示窗口里,应用程序必须调用函数DrawMenuBar。
    为了使键盘加速键能控制位留或自己绘制的菜单项,菜单的拥有者必须处理
WM_MENUCHAR消息。
参见自绘制菜单和WM_MENUCHAR消息。
    下列标志可被设置在参数uFlags里:
MF_BITMAP:将一个位图用作菜单项。参数lpNewltem里含有该位图的句柄。
MF_CHECKED:在菜单项旁边放置一个选取标记。如果应用程序提供一个选取标记,位图(参
见SetMenultemBitmaps),则将选取标记位图放置在菜单项旁边。
MF_DISABLED:使菜单项无效,使该项不能被选择,但不使菜单项变灰。
MF_ENABLED:使菜单项有效,使该项能被选择,并使其从变灰的状态恢复。
MF_GRAYED:使菜单项无效并变灰,使其不能被选择。
MF_MENUBARBREAK:对菜单条的功能同MF_MENUBREAK标志。对下拉式菜单、子菜单或快捷菜
单,新列和旧列被垂直线分开。
MF_MENUBREAK:将菜单项放置于新行(对菜单条),或新列(对下拉式菜单、子菜单或快捷
菜单)且无分割列。
MF_OWNERDRAW:指定该菜单项为自绘制菜单项。菜单第一次显示前,拥有菜单的窗口接收一
个WM_MEASUREITEM消息来得到菜单项的宽和高。然后,只要菜单项被修改,都将发送
WM_DRAWITEM消息给菜单拥有者的窗口程序。
MF_POPUP:指定菜单打开一个下拉式菜单或子菜单。参数uIDNewltem下拉式菜单或子菜单
的句柄。此标志用来给菜单条、打开一个下拉式菜单或于菜单的菜单项、子菜单或快捷菜单
加一个名字。
MF_SEPARATOR:画一条水平区分线。此标志只被下拉式菜单、于菜单或快捷菜单使用。此区
分线不能被变灰、无效或加亮。参数IpNewltem和uIDNewltem无用。
MF_STRING:指定菜单项是一个正文字符串;参数lpNewltem指向该字符串。
MF_UNCHECKED:不放置选取标记在菜单项旁边(缺省)。如果应用程序提供一个选取标记位
图(参见SetMenultemBitmaps),则将选取标记位图放置在菜单项旁边。
    下列标志组不能被一起使用:
    MF_DISABLED,MF_ENABLED和MF_GRAYED;MF_BITMAP,MF_STRING和MF_OWNERDRAW
    MF_MENUBARBREAK和MF_MENUBREAK;MF_CHECKED和MF_UNCHECKED
Windows CE环境下,不支持参数fuFlags使用下列标志:
    MF_BITMAP;MF_DOSABLE;MF_GRAYED
    MF_GRAYED可用来代替MF_DISABLED和MFS_GRAYED。
Windows CE 1.0不支持层叠式菜单。在使用Windows CE 1.0时,不能将一个MF_POPUP菜
单插入到另一个下拉式菜单中。Window CE 1.0不支持下列标志:
    MF_POPUP;MF_MENUBREAK;MF_MENUBARBREAK
Windows CE 2.0或更高版本中,支持上述标志,也支持层叠式菜单。
2.13.30 CheckMenultem
函数功能:该函数设置指定菜单项的校核标记属性为选取或不选取。该函数已被函数
SetMenultemlnfo取代。但若不需要SetMenultemlnfo的扩展特性,仍可使用CheckMenultem。
函数原型:DWORD CheckMenultem(HMENU hMenu,UINT ulDCheckltem,UINT uCheck);
参数:
hMenu:有关菜单的句柄。
UlDCheckltem:指定要设置其选取标记属性的菜单项。其含义由参数uCheck决定。
uCheck:指定控制参数uIDCheckltem的含义的标志,并指定菜单项的选取标记属性的状态。
此参数可为MF_BYCOMMAND或MF_BYPOSITON和MF_CHECKED或MF_UNCHECKED的组合。
MF_BYCOMMAND:表示参数uIDCheckltem给出了菜单项的标识符。若标志MF_BYCOMMMAND和
MF_BYFOSITION都没被指定,则MF_BYCOMMMAND为缺省值。
MF_CHECKED:设置选取标记属性为选取。
MF_UNCHECKED:设置选取标记属性为未选取。
返回值:返回值指定菜单项的前一状态(MF_CHECKED或MF_UNCHECKED)。如果菜单项不存在,
返回值是OXFFFFFFFF。
备注:莱单条里的项不能有选取标记。
    参数uIDCheckltem标识一个打开子菜单的菜单项或命令项。对打开子菜单的菜单项,
参数uIDCheckltem必须指定菜单项的位置。对命令项,参数uIDCheckltem可指定其位置或
标识符。
2.13.31  GetMenuCheckMarkDimensions
函数功能:返回缺省选取标记位图的尺寸。系统在选取的菜单项旁边显示该位图。调用
SetMenultemBitmaPs为菜单项放置选取标记为图前,应用程序必须调用
GetMenuCheckMarkDimensions来确定恰当的位图大小。
函数原型:LONG GetMenuCheckMarkDimensions(VOID)
参数:无。
返回值:返回值指定缺省选取标记位图的高度和宽度(按像素)。高位字包含高度,低位字
包含宽度。
1.13.32  GetMenuState
函数功能:该函数取得与指定菜单项相联系的菜单标志。如果该菜单项打开了一个子菜单,
该函数也返回子菜单里的菜单项数。
函数原型:UINT GetMenuState(HMENU hMenu,UINT uld,UINT uFlags);
参数:
hMenu:含有其菜单项的标志将被提取得的菜单的句柄。
uld:其某单标志将被取得的菜单项,此参数含义由参数uFlags决定。
UFlags:用于指定参数uld的含义的值。此参数可取下列值之一:
MF_BYCOMMAND:表示参数uld给出菜单项的标识符。如果MF_BYCOMMAND和MF_BYPOSITION
都没被指定,则MF_BYCOMMAND是缺省值。
MF_BYPOSITION:表示参数uld给出菜单项相对于零的位置。
返回值:如果指定的项不存在,返回值是OXFFFFFFFF;如果菜单项打开了一个子菜单,则
返回值的低位含有与菜单相联系的菜单标志,高位含有子菜单的项数。否则,返回值是莱单
标志的掩码(布尔OR)。
下面列出与菜单项相关的菜单标志。
MF_CHECKED:放置选取标记于菜单项旁边(只用于下拉式菜单、子菜单或快捷菜单)。
MF_DISABLED:使菜单项无效。MF_GRAYED:使菜单项无效并交灰。MF_HILITE:加亮菜单项。
MF_MENUBARBREAK:对下拉式菜单、子菜单和快捷菜单,新列和旧列由垂直线隔开,其余功
能同MF_MENUBREAK标志。
MF_MENUBREAK:将菜单项放于新行(对菜单条)或无分隔列地放于新列(对下拉式菜单、子
菜单或快捷菜单)。
MF_SEPARATOR:创建一个水平分隔线(只用于下拉式菜单、子菜单或快捷菜单)。
2.13.33  GetMenuString
函数功能:该函数将指定菜单项的正文字符串拷贝到指定缓冲区。
函数原型:int GetMenuString(HMENU hMenu,UINT uIDItem,LPTSTR lpString,int 
nMaxCount,UINT uFlag);
参数:
hWenu:菜单句柄。
uIDItem:指定将被修改的菜单项,其含义由参数uFlag决定。
lpString:指向缓冲区的指针,该缓冲区接受以`\0’结束的字符串。如果此参数为NULL,
则函数返回菜单字符串的长度。
nMaxCount:指定将被拷贝的字符串的最大字符数。如果字符串长度比此参数指定的最大值
还大,则多余的字符被截去。如果此参数为0,则函数退回菜单字符串的长度。
uFlag:指定参数ulDltem如何被解释。此参数可取下列值之一:
MF_BYCOMMAND:表示参数uIDltem给出菜单项的标识符。如果MF_BYCOMMAND和MF_BYPOSITION
都没被指定,则MF_BYCOMMAND是缺省值。
MF_BYPOSITION:表示参数uIDltem给出菜单项相对于零的位置。
返回值:如果函数调用成功,返回值是拷贝到缓冲区的字符数,不包括末尾‘\0’结束符:
如果函数调用失败,返回值是零。
备注:参数nMaxCount的值必须比正文字符串的长度大一,以容纳末尾的‘\0’结束符。如
果参数nMaxCount的值为零,函数返回菜单字符串的长度。
2.13.34  InsertMenu
函数功能:该函数插入一个新菜单项到菜单里,并使菜单里其他项下移。
函数原型:BOOL InsertMenu(HMENU hMenu,UINt uPosition,UINT uFlags,UINT 
uIDNewltem,LPCTSTR lpNewltem);
参数:
hMenu:将被修改的菜单的句柄。
uPosition:指定新菜单项将被插入其前面的菜单项,其含义由参数uFlagS决定。
uFlags:指定控制参数uPosition的解释的标志、新菜单项的内容、外观和性能。此参数必
须为下列值之一和列于备注里的一个值的组合。
MF_BYCOMMAND:表示uPosition给出菜单项的标识符。如果MF_BYCOMMAND和MF_BYPOSITION
都没被指定,则MF_BYCOMMAND为缺省的标志。
MF_BYPOSITION:表示uPosition给出新菜单项基于零的相对位置。如果uPosition为
OxFFFFFFFF新菜单项追加于菜单的末尾。
uIDNewltem:指定新菜单项的标识符,或者当参数uFlags设置为MF_POPUP时,指定下拉式
菜单或子菜单的句柄。
LpNewltem:指定新菜单项的内容。其含义依赖于参数UFlags是否包含标志
MF_BITMAP,MF_OWNERDRAW或MF_STRING。如下所示:
MF_BITMAP:含有位图句柄。MF_STRING:以`\0’结束的字符串的指针(缺省)。
MF_OWNERDRAW:含有被应用程序应用的32位值,可以保留与菜单项有关的附加数据。当菜
单被创建或其外观被修改时,此值在消息WM_MEASURE或WM_DRAWITEM的参数IParam指向的
结构中、成员itemData里。
返回值:如果函数调用成功,返回值非零;如果函数调用失败,返回值为零。若想获得更多
的错误信息,请调用GetLastError函数。
备注:一旦菜单被修改,无论它是否在显示窗口里,应用程序必须调用函数DrawMenuBar。
   下列标志可被设置在参数uFlagS里:
MF_BITMAP:将一个位图用作菜单项。参数IpNewltem里含有该位图的句柄。
MF_CHECKED:在菜单项旁边放置一个选取标记。如果应用程序提供一个选取标记位图(参见
SetMenultemBitmaps),则将选取标记位图放置在菜单项旁边。
MF_DISABLED:使菜单项无效,使该项不能被选择,但不使菜单项变灰。
MF_ENABLED:使菜单项有效,使该项能被选择,并使其从变灰的状态恢复。
MF_GRAYED:使莱单项无效并变灰,使其不能被选择。
MF_MENUBARBREAK:对菜单条的功能同MF_MENUBREAK标志。对下拉式菜单、子菜单或快捷菜
单,新列和旧列被垂直线分开。
MF_MENUBREAK:将菜单项放置于新行(对菜单条),或新列(对下拉式菜单、子菜单或快捷
菜单)且无分割列。
MF_OWNERDRAW:指定该菜单项为自绘制菜单项。菜单第一次显示前,拥有菜单的窗口接收一
个WM_MEASUREITEM消息来得到菜单项的宽和高。然后,只要菜单项被修改,都将发送
WM_DRAWITEM消息给菜单拥有者的窗口程序。
MF_POPUP:指定菜单打开一个下拉式菜单或子菜单。参数uIDNewltem下拉式菜单或子菜单的
句柄。此标志用来给菜单条、打开一个下拉式菜单或子菜单的菜单项、子菜单或快捷菜单加
一个名字。
MF_SEPARATOR:画一条水平区分线。此标志只被下拉式菜单、子菜单或快捷菜单使用。此区
分线不能被变灰、无效或加亮。参数IpNewltem和uIDNewltem无用。
MF_STRING:指定菜单项是一个正文字符串:参数IpNewltem指向该字符串。
MF_UNCHECKED:不放置选取标记在菜单项旁边(缺省)。如果应用程序提供一个选取标记位图
(参见SetMenultemBitmaps),则将选取标记位图放置在菜单项旁边。
    下列标志组不能被一起使用:
MF_BYCOMMAND和MF_BYPOSITION
MF_DISABLED,MF_ENABLED和MF_GRAYED
MF_BITMAJP,MF_STRING,MF_OWNERDRAW和MF_SEPARATOR
MF_MENUBARBREAK和MF_MENUBREAK
MF_CHECKED和MF_UNCHECKED
Windows CE环境下,不支持参数fuFlags使用下列标志:
MF_BTMAP;MF_DISABLE
参数项如果没变灰,不能使其无效。要使菜单项无效,用MF_GRAYED标志。
Windows CE 1.0不支持层叠式菜单。在使用Windows CE 1.0时,不能将一个MF_POPUP
菜单插入到另一个下拉式菜单中。
2.13.35  ModifyMenu
函数功能:该参数修改已存在的菜单项,并指定菜单项的内容、外观和性能。
函数原型:BOOL ModifyMenu(HMENU hMnu,UINT uPosition,UINT uFlags,UINT 
uIDNewltem,LPCTSTR IpNewltem);
参数:
hMnu:将被修改的菜单的句柄。
uPosition:指定将被修改的菜单项,其含义由参数UFlags决定。
UFlags:指定控制参数uPosition的解释的标志、菜单项的内容、外观和性能。此参数必须
为下列值之一和列于备注里的一个值的组合。
MF_BYCOMMAND:表示uPostion给出菜单项的标识符。如果MF_BYCOMMAND和MF_BYPOSITION
都没被指定则MF_BYCOMMAND为缺省的标志。
MF_BYPOSITION:表示uPosition给出菜单项基于零的相对位置。
UIDNewltem:指定被修改菜单项的标识符,或者当参数uFlags设置为MF_POPUP时,指定下
拉式菜单或子菜单的句柄。
lpNewltem:指定被修改菜单项的内容。其含义依赖于参数UFlags是否包含标志
MF_BITMAP,MF_OWNERDRAW或MF_STRING。如下所示:
MF_BITMAP:含有位图句柄;MF_STRING:以`\0’结束的字符串的指针(缺省)。
MF_OWNERDRAW:含有被应用程序应用的32位值,可以保留与菜单项有关的附加数据。当菜单
被创建或其外观被修改时,此值在消息WM_MEASURE或WM_DRAWITEM的参数lparam指向的结
构中,成员itemData里。
返回值:如果函数调用成功,返回值非零;如果函数调用失败,返回值为零。若想获得更多
的错误信息,请调用GetLastError函数。
备注:如果函数ModifyMenu替换了打开下拉式菜单或子菜单的菜单项,则函数销毁旧的下
拉式菜单或子菜单,并释放它们占用的内存。
    为了使键盘加速键能控制位图或自绘制的菜单项,菜单的拥有者必须处理WM_MENUCHAR
消息。参见自绘制菜单和WM_MENUCHAR消息。
    一旦菜单被修改,无论它是否在显示窗口里,应用程序必须调用函数DrawMenuBar。要
修改已存在菜单项的属性,使用函数CheckMenultem和EnableMenultem更快。
2.14  消息和消息总队列函数(Message and Message Queue)
2.14.1  BroadcastSystemMessage
函数功能:该函数发送消息给指定的接受者。接受者可以是一个应用程序、安装驱动器、网
络驱动器、系统级设备驱动器或这些系统组件的组合。
函数原型:long BroadcastSystemMessage(DWORD dwFIags,LPDWORD IpdwRecipients,UINT 
UiMessage,WPARAMwParam,LPARAM IParam);
参数:
dwFlags:选项标志。可取下列值的组合:
BSF_FLUSHDISK:接受者处理消息之后清洗磁盘。
BSF_FORCEIFHUNG:继续广播消息,即使超时周期结束或一个接受者已挂起。
BSF_IGNORECURRENTTASK:不发送消息给属于当前任务的窗口。这样,应用程序就不会接收
自己的消息。
BSF_NOHANG:强制挂起的应用程序超时。如果一个接受者超时,不再继续广播消息。
BSF_NOTIMEOUTIFNOTHUNG:只要接受者没挂起,一直等待对消息的响应。不会出现超时。
BSF_POSTMESSAGE:寄送消息。不能和BSF_QUERY组合使用。
BSF_QUERY:每次发送消息给一个接受者,只有当前接受者返回TRUE后,才能发送给下一个
接受者。
lpdwRecipients:指向变量的指针,该变量含有和接收消息接受者的信息。此变量可为下列
值的组合:
BSM_ALLCOMPONENTS:广播到所有的系统组件。
BSM_ALLDESKTOPS:Windows NT下,广播到所有的桌面。要求SE_TCB_NAME特权。
BSM_APPLICATIONS:广播到应用程序。
BSM_INSTALLABLEDRIVERS:Windows 95下,广播到安装驱动器。
BSM_INTDRIVER:Windows 95下,广播到网络驱动器。
BSM_VXDS:Windows 95下,广播到所有系统级设备驱动器。
    当函数返回时,此变量接受上述值的组合,以确定真正接受消息的接受者。如果此参数
为NULL,则将消息广播到所有的组件。
uiMessage:系统消息标识符。
WParam:32位消息特定值。
IParam:32位消息特定值。
返回值:如果函数调用成功,返回值是正数。如果函数不能广播消息,返回值是C1。如果参
数dwFlags为BSF_QUERY且至少一个接受者返回BROADCAST_QUERY_DENY给相应的消息,返
回值是零。若想获得更多的错误信息,请调用GetLastError函数。
备注:如果BSF_QUERY没指定,函数发送指定的消息给所有请求的接受者,并忽略这些接受
者返回的值。
速查:Windows NT:4.0及以上版本:Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下以Unicode和ANSI
方式实现。
2.14.2  DispatchMessage
函数功能:该函数调度一个消息给窗口程序。通常调度从GetMessage取得的消息。
函数原型:LONG DispatchMessage(CONST MSG★lpmsg);
参数:
lpmsg:指向含有消息的MSG结构的指针。
返回值:返回值是窗口程序返回的值。尽管返回值的含义依赖于被调度的消息,但返回值通
常被忽略。
备注:MSG结构必须包含有效的消息值。如果参数lpmsg指向一个WM_TIMER消息,并且
WM_TIMER消息的参数IParam不为NULL,则调用IPa1ram指向的函数,而不是调用窗口程序。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下以Unicode
和ANSI方式实现。
2.14.3  GetlnputState
函数功能:该函数确定在调用线程的消息队列里,是否有鼠标键或键盘消息。
函数原型:BOOL GetlnputState(VOID)
参数:无。
返回值:如果队列里含有一个或多个新的鼠标键或键盘消息,返回非零值。如果队列里没有
新的鼠标键或键盘消息,返回值是零。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:user32.lib。
2.14.4  GetMessage
函数功能:该函数从调用线程的消息队列里取得一个消息并将其放于指定的结构。此函数可
取得与指定窗口联系的消息和由PostThreadMesssge寄送的线程消息。此函数接收一定范围
的消息值。GetMessage不接收属于其他线程或应用程序的消息。
函数原型:BOOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT 
wMsgFilteMax
参数:
lpMsg:指向MSG结构的指针,该结构从线程的消息队列里接收消息信息。
hWnd:取得其消息的窗口的句柄。这是一个有特殊含义的值(NULL)。GetMessage为任何属
于调用线程的窗口检索消息,线程消息通过PostThreadMessage寄送给调用线程。
wMsgFilterMin:指定被检索的最小消息值的整数。
wMsgFilterMax:指定被检索的最大消息值的整数。
返回值:如果函数取得WM_QUIT之外的其他消息,返回非零值。如果函数取得WM_QUIT消息,
返回值是零。如果出现了错误,返回值是_1。例如,当hWnd是无效的窗口句柄或lpMsg是
无效的指针时。若想获得更多的错误信息,请调用GetLastError函数。
备注:应用程序通常用返回值来确定是否终止主消息循环并退出程序。
    GetMesssge只接收与参数hWnd标识的窗口或子窗口相联系的消息,子窗口由函数
IsChild决定,消息值的范围由参数wMsgFilterMin和wMsgFilterMax给出。如果hWnd为
NULL,则GetMessage接收属于调用线程的窗口的消息,线程消息由函数PostThreadMessage
寄送给调用线程。GetMessage不接收属于其他线程或其他线程的窗口的消息,即使hWnd为
NULL。由PostThreadMessage寄送的线程消息,其消息hWnd值为NULL。如果wMsgFilterMin
和wMsgFilterMax都为零,GetMessage返回所有可得的消息(即,无范围过滤)。
    常数 WM_KEYFIRST和WM_KEYAST可作为过滤值取得与键盘输入相关的所有消息:常数
WM_MOUSEFIRST和WM_MOUSELST可用来接收所有的鼠标消息。如果wMsgFilterMin和
wMsgFilterMax都为零,GetMessage返回所有可得的消息(即,无范围过滤)。
    GetMessage不从队列里清除WM.PAINT消息。该消息将保留在队列里直到处理完毕。
    注意,此函数的返回值可非零、零或-1,应避免如下代码出现:
while(GetMessage(IpMsg,hwnd,0,0))…
    -1返回值的可能性表示这样的代码会导致致命的应用程序错误。
速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本:头文件:winuser.h;输入库:user32.Iib;Unicode:在Windows NT环境下以Unicode
和ANSI方式实现。
2.14.5  GetMessageExtralnfo
函数功能:该函数为当前线程取得附加消息信息。附加消息信息是应用程序或驱动程序定义
的与当前线程的消息队列联系的32位值。可用SetMessageExtralnfo来设置线程的附加消
息信息,该消息信息将会保留到下一次调用GetMessage或PeekMessage之前。
函数原型:LONG GetMessageEXtralnfo(VOID)
参数:无。
返回值:返回值为附加信息。附加信息是设备特定的。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:user32.lib。
2.14.6  GetMessagePos
函数功能:该函数返回表示屏幕坐标下光标位置的长整数值。此位置表示当上一消息由
GetMessage取得时鼠标占用的点。
函数原型:DWORD GetMessagePos(VOID)
参数:无。
返回值:返回值给出光标位置的X,y坐标。X坐标在低位整数,y坐标在高位整数。
备注:如前所述,X坐标在返回值的低位整数,y坐标在高位整数(都表示有符号值,因为
在多显示器的系统里可取得负值)。如果返回值赋给了一个变量,可用MAKEPOINT宏从返回
值取得POINT结构。也可用GET_X_LPARAM或GET_Y_LPARAM宏来抽取X,y坐标。
    要得到光标的当前位置而不是上一个消息发生时的位置,调用函数GetCursorPos。
要点:不要用LOWORD或HIWORD宏来抽取鼠标位置的x,y坐标,因为在多显示器的系统里
将返回不正确的结果。多显示器的系统里可取得负的x, y坐标,但LOWORD和HIWORD将坐
标当作无符号量。
    Windows CE下,对那些使用记录笔而不是鼠标的设备,光标位置是指当上一信息由
GetMessage取得时,记录笔在触屏上的位置。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;输入库:user32.lib。
2.14.7  GetMessageTime
函数功能:该函数返回由GetMessage从当前线程队列里取得上一消息的消息时间。时间是
一个长整数,指定从系统开始到消息创建(即,放入线程消息队列)的占用时间(按毫秒计
算)。
函数原型:LONG GetMessageTime(VOID)
参数:无。
返回值:返回值为消息时间。
备注:由GetMessageTime返回的值对后面的消息并不一定是增长的,因为当计时器计数超
过长整数的最大值时,又从零开始计算。为计算消息间的延迟时间,必须验证第二个消息的
时间比第一个消息的时间大,然后用第二个消息的时间减去第一个消息的时间。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h输入库:user32,lib。
2.14.8  GetQueueStatus
函数功能:该函数返回表示调用线程消息队列里的消息的类型的标志。
函数原型:DWORD GetQueueStatus(UINT flags);
参数:
flags:表示消息类型的队列状态标志。此参数可为下列值的组合:
QS_ALLEVENTS:输入,WM_TIMER, WM_PAINT,WM_HOTKEY或寄送的消息在队列里。
QS_ALLINPUT:任何消息在队列里。
QS_ALLPOSTMESSAGE:寄送的消息(而不是其他所列消息)在队列里。
QS_HOTKEY:一条WM_HOTKEY消息在队列里。QS_INPUT:输入消息在队列里。
QS_KEY:一条WM_KEYUP WM_KEYDOWN,WM_SYSKEYUP或WM_SYSKEYDOWN消息在队列里。
QS_MOUSE:WM_MOUSEMOVE消息或鼠标键消息(WM_BUTTONUP WM_RBUTTONDOWN等)在消息队
列里。
QS_MOUSEBUTTON:鼠标键消息(WM_LBUTTONUP,WM_RBUTTONDOWN等)在消息队列里。
QS_MOUSEMOVE:WM_MOUSEMOVE消息在消息队列里。
QS_FAINT:WM_PAINT消息在消息队列里。
QS_POSTMESSAGE:寄送的消息(而不是其他所列消息)在队列里。
QS_SENDMESSAGE:由其他线程或应用程序发送的消息在消息队列里。
QS_TIEMR:一条WM_TIEMR消息在消息队列里。
返回值:返回值的高位字表示队列里当前消息的类型。低位字表示上次调用
GetQueuestatus,GetMessage或FeekMessBge以来加入队列并仍然在队列里的消息的类型。
备注:QS_标志出现在返回值里并不保证以后调用函数GetMessage或PeekMessage会返回一
个消息。GetMesssge和PeekMesssge执行某些内部过滤会导致消息被内部处理。因此,
GetQueueStatus的返回值只能被看作是否调用GetMessage或PeekMessage的提示。
    QS_ALLPOSTMESSAGE和QS_POSTMESSAGE标志在被清除时不一样。QS_POSTMESSAGE在调
用GetMessage或 PeekMessage时清除,无论是否过滤消息。QS_ALLPOSTMESSAGE在调用
GetMessage或PeekMessage时清除,不过滤消息(wMsgFilterMin和wMsgFilterMax是零)。
这对于多次调用PeeKMessage来获得不同范围的消息非常有用。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本:Windows CE:不支持;头
文件:winuser.h;输入库:user32.lib。
2.11.9  InSendMessage
函数功能:该函数决定当前窗口程序是否处理另一个线程调用SendMesssge(在相同进程或
不同进程)发送来的消息。
函数原型:BOOL InsendMessage(VOID);
参数:无。
返回值:如果窗口程序处理另一个线程调用SendMessage发送来的消息,返回非零值。如果
窗口程序不处理另一个线程调用SendMessage发送来的消息,返回值是零。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h输入库:user32.Iib。
2.14.10  InSendMessageEx
函数功能:函数决定当前窗口程序是否处理另一个线程调用SendMessage(在相同进程或不
同进程)发送来的消息。此函数与InsendMesssge相似,但另外提供了如何发送消息的信息。
函数原型:DWORD InsendMessageEx(LPVOID IpReserved);
参数:
IpReserved:保留值,必须为NULL。
返回值:如果消息没被发送,返回值是ISMEX_NOSEND。否则,返回值是一个或多个下列值:
ISMEX_CALLBACK:消息是用函数SendMesssgeCallback发送的。发送此消息的线程没被阻塞。
ISMEX_NOTIFY:消息是用函数SendNotifyMessags发送的。发送此消息的线程没被阻塞。
ISMEX_REPLIED:窗口程序处理了消息。发送此消息的线程不再被阻塞。
ISMEX_SEND:消息是用函数SendMessage或SendMessageTimeout发送的。如果ISMEX_REPLIED
没设置,发送此消息的线程被阻塞。
速查:Wihdows NT:5.0及以上版本:Windows:98及以上版本;Wihdows CE:不支持:头
文件:winuser.h;输入库:user32.Iib。
2.14.11  PeekMessage
函数功能:该函数为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的结构。
函数原型:BOOL PeekMessage(LPMSG IpMsg,HWND hWnd,UINT wMSGfilterMin,UINT 
wMsgFilterMax,UINT wRemoveMsg);
参数:
lpMsg:接收消息信息的MSG结构指针。
hWnd:其消息被检查的窗口的句柄。
wMsgFilterMin:指定被检查的消息范围里的第一个消息。
wMsgFilterMax:指定被检查的消息范围里的最后一个消息。
wRemoveMsg:确定消息如何被处理。此参数可取下列值之一:
PM_NOREMOVE:PeekMessage处理后,消息不从队列里除掉。
PM_REMOVE:PeekMessage处理后,消息从队列里除掉。
    可将PM_NOYIELD随意组合到PM_NOREMOVE或PM_REMOVE。此标志使系统不释放等待调
用程序空闲的线程。
    缺省地,处理所有类型的消息。若只处理某些消息,指定一个或多个下列值:
PM_QS_INPUT:Windows NT5.0和Windows 98:处理鼠标和键盘消息。
PM_QS_PAINT:Windows NT 5.0和Windows 98:处理画图消息。
PM_QS_POSTMESSAGE:Windows NT 5.0和Windows 98:处理所有被寄送的消息,包括计时器
和热键。
PM_QS_SENDMESSAGE:Windows NT 5.0和Windows 98:处理所有发送消息。
返回值:如果消息可得到,返回非零值;如果没有消息可得到,返回值是零。
备注:和函数GetMessage不一样的是,函数PeekMesssge在返回前不等待消息被放到队列
里。
    PeekMesssge只得到那些与参数hWnd标识的窗口相联系的消息或被lsChild确定为其
子窗口相联系的消息,并且该消息要在由参数wMsgFiterMin和wMsgFiherMax确定的范围内。
如果hWnd为NULL,则PeekMessage接收属于当前调用线程的窗口的消息(PeekMessage不
接收属于其他线程的窗口的消息)。如果hWnd为C1,PeekMessage只返回hWnd值为NULL的
消息,该消息由函数PostThreadMessage寄送。如果wMsgFilterMin和wMsgFilterMax都为
零,GetMessage返回所有可得的消息(即,无范围过滤)。
    常数WM_KEYFIRST和WMKEYLAST可作为过滤值取得所有键盘消息;常数WM_MOUSEFIRST
和WM_MOUSELAST可用来接收所有的鼠标消息。
    PeekMessage通常不从队列里清除WM_PANT消息。该消息将保留在队列里直到处理完毕。
但如果WM_PAINT消息有一个空更新区,PeekMessage将从队列里清除WM_PAINT消息。
    Windows CE:有一个NULL更新区的WM_PAINT消息不从队列里清除。
速查:Windows NT:3.1及以上版本;Wihdows:95及以上版本:Windows CE:1.0及以上
版本;头文件:winuser.h输入库:user32.lib:Unicode:在Windows NT环境下以Unicode
和ANSI方式实现。
2.14.12  PostMessage
函数功能:该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不
等待线程处理消息就返回。消息队列里的消息通过调用GetMessage和PeekMessage取得。
函数原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
参数
hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:
HWND.BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗
口、被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口。
NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函
数一样。
Msg:指定被寄送的消息。
wParam:指定附加的消息特定的信息。
IParam:指定附加的消息特定的信息。
返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。
备注:需要以 HWND_BROADCAST方式通信的应用程序应当用函数 RegisterwindwosMessage
来获得应用程序间通信的独特的消息。
如果发送一个低于WM_USER范围的消息给异步消息函数(PostMessage.SendNotifyMessage,
SendMesssgeCallback),消息参数不能包含指针。否则,操作将会失败。函数将再接收线程
处理消息之前返回,发送者将在内存被使用之前释放。
速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下以Unicode
和ANSI方式实现。
2.14.13  PostQuitMessage
函数功能:该函数向系统表明有个线程有终止请求。通常用来响应WM_DESTROY消息。
函数原型:VOID PostQuitMessage(int nExitCode);
参数:
pExitCode:指定应用程序退出代码。此值被用作消息WM_QUIT的wParam参数。
返回值:无。
备注:PostQuitMessage寄送一个WM_oUT消息给线程的消息队列并立即返回;此函数向系
统表明有个线程请求在随后的某一时间终止。
    当线程从消息队列里取得WM_QUIT消息时,应当退出消息循环并将控制返回给系统。返
回给系统的退出值必须是消息WM_QUIT的wParam参数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;输入库:user32,lib:Uhicode:在Wihdows NT环境下以Unicode
和ANSI方式实现。
2.14.14  PostThreadMessage
函数功能:该函数将一个消息放入(寄送)到指定线程的消息队列里,不等待线程处理消息
就返回。
函数原型:BOOL PostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam,LPARAM 
IParam);
参数
idThread:其消息将被寄送的线程的线程标识符。如果线程没有消息队列,此函数将失败。
当线程第一次调用一个Win 32 USER或GDI函数时,系统创建线程的消息队列。要得到更多
的信息,参见备注。
Msg:指定将被寄送的消息的类型。
wParam:指定附加的消息特定信息。
IParam:指定附加的消息特定信息。
返回值:如果函数调用成功,返回非零值。如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。如果idThread不是一个有效的线程标识符或由
idThread确定的线程没有消息队
列,GetLastError返回ERROR_INVALID_THREAD。
备注:消息将寄送到的线程必须创建消息队列,否则调用PostThreadMessage会失败。用下
列方法之一来处理这种情况:
    调用PostThreadMessage。如果失败,调用Sleep,再调用PostThreadMessage,反复
执行,直到PostThreadMessage成功。
    创建一个事件对象,再创建线程。在调用PostThreadMessage之前,用函数
WaitForSingleObject来等特事件被设置为被告知状态。消息将寄送到的线程调用
PeedMessage(£msg,NULL,WM_USER,WM_USER,PM_NOREMOVE)来强制系统创建消息队列。
设置事件,表示线程已准备好接收寄送的消息。
   消息将寄送到的线程通过调用GetMesssge或PeekMesssge来取得消息。返回的MSG结构
中的hwnd成员为NULL。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本:头文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下以Unicode
和ANSI方式实现。
2.14.15  RegisterWindowsMessage
函数功能:该函数定义一个新的窗口消息,该消息确保在系统中是唯一的。返回的消息值可
在调用函数SendMessage或PostMessage时使用。
函数原型:UINT RegisterWindowsMessage(LPCTSTR lpString);
参数:
lpString:指定将被注册的消息的以‘\O’结束的字符串指针。
返回值:如果消息被成功注册,返回值是在范围OxCOOO到OxFFFF的消息标识符;如果函数
调用失败,返回值是零。要得到更多的错误信息,调用函数GetLastError。
备注:RegisterWindowMessage通常为合作应用程序间的通信注册消息。
    如果不同的应用程序注册同样的消息字符串,应用程序返回同样的消息值。消息保持注
册,直到会话完成。
    当一个以上的应用程序必须处理同一个消息时,必须使用RegisterWindowMessage。要
在窗口类里发送私有消息,应用程序可以使用UM_USER到OX7FFF范围内的任意整数。(在此
范围的消息对窗口类私有,而不是对应用程序私有。如,预定义的控制类如BUTTON, EDIT 
LISTBOX和COMBOBOX可用此范围的值。)
速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下以Unicode和ANSI
方式实现。
2.14.16  ReplyMessage
函数功能:该函数用于应答由函数SendMessage发送的消息,不返回控制给调用SendMessage
的函数。
函数原型:BOOLReplyMessage(LRESULTIResult);
参数:
IResult:指定消息处理的结果。可能的值由所发送的消息确定。
返回值:如果调用线程正处理从其他线程或进程发送的消息,返回非零值。如果调用线程不
是正处理从其他线程或进程发送的消息,返回值是零。
备注:调用此函数,接收消息的窗口程序允许调用SendMessage的线程继续运行,尽管接收
消息的线程已返回控制。调用ReplyMessage的线程也继续运行。
    如果消息不是通过SendMessage发送的,或者消息由同一个线程发送,ReplyMessage
不起作用。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本:Windows CE:不支持:头
文件:winuser.h;输入库,user32.lib。
2.14.17  SendAsyncProc
函数功能:该函数是应用程序定义的回调函数,和SendMessageCallback一起使用。系统在
将消息传给目标窗口程序后,将消息传给回调函数。类型SENDASYNCPROC定义了一个指向此
回调函数的指针。SendAsyncProc是此应用程序定义的函数名的占位符。
函数原型:VOID CALLBACK SendAsyncProc(HWND hwnd,UINT uMsg,DWORD dwData,LRESULT 
IResult);
参数:
hwnd;其窗口程序接收消息的窗口的句柄。如果将SendMessageCallback的参数hwnd设置
为HWND_BROADCAST,系统为每个顶层窗口调用一次SendAsyncProc。
uMsg:指定消息。
dwData:指定从函数SendMessageCallback发送来的应用程序定义的值。
IResult:指定消息处理的结果与消息。
返回值:此回调函数无返回值。
备注:通过传一个SENDASYNCPROC指针给函数SendMessageCallback来安装一个
SendAsyncProc应用程序定义的回调函数。
    此回调函数仅当调用SendMessageCallback的线程调用GetMessage,PeekMessage或
WaitMessage时调用。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件: winuser.h;输入库:user32.lib。
2.14.18  SendMessage
函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,
直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的
消息队列后立即返回。
函数原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);
参数:
hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被
发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出
式窗口,但消息不被发送到子窗口。
Msg:指定被发送的消息。
wParam:指定附加的消息指定信息。
IParam:指定附加的消息指定信息。
返回值:返回值指定消息处理的结果,依赖于所发送的消息。
备注:需要用HWND_BROADCAST通信的应用程序应当使用函数RegisterWindowMessage来为
应用程序间的通信取得一个唯一的消息。
    如果指定的窗口是由调用线程创建的,则窗口程序立即作为子程序调用。如果指定的窗
口是由不同线程创建的,则系统切换到该线程并调用恰当的窗口程序。线程间的消息只有在
线程执行消息检索代码时才被处理。发送线程被阻塞直到接收线程处理完消息为止。
    Windows CE:Windows CE不支持Windows桌面平台支持的所有消息。使用SendMesssge
之前,要检查发送的消息是否被支持。
速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下以Unicode
和ANSI方式实现。
2.14.19  SendMessageCallback
函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,
并立即返回。当窗口程序处理完消息后,系统调用指定的回调函数,将消息处理的结果和一
个应用程序定义的值传给回调函数。
函数原型:BOOL SendMessageCallback(HWND hwnd,UINT Msg,WPARAM wParam,LPARAM IParam,
SEhDASYNCPROC IpResultCallBack,DWORD dwData);
参数:
hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被
发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出
式窗口,但消息不被发送到子窗口。
Msg:指定被发送的消息。
wParam:指定附加的消息指定信息。
IParam:指定附加的消息指定信息。
IpResultCallBack:指向回收函数的指针,窗曰程序处理完消息后调用该回调函数。参见
SendAsyncProc可得到合适的回调函数的信息。如果hwnd为HWND_BROADCAST,系统为每个
顶层窗口调用一次SendASyncProc回调函数。
dwData:一个应用程序定义的值,被传给由参数IPResultCallBack指向的回调函数。
返回值:如果函数调用成功,返回非零值。如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。
备注:如果发送一个低于WM_USER范围的消息给异步消息函数(PostMessage,
SendNotifyMesssge;SendMessageCallback),消息参数不能包含指针。否则,操作将会失
败。函数将在接收线程处理消息之前返回,发送者将在内存被使用之前释放。
    需要以HWND_BROADCAST方式通信的应用程序应当用函数RegisterWindwosMessage来获
得应用程序间通信的独特的消息。
    此回调函数仅当调用SendMessagecallback的线程调用GetMessage,PeekMessage或
WaitMessage时调用。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下以Unicode和ANSI
方式实现。
2.14.20  SendMessageTImeout
函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,
并且,如果指定的窗口属于不同的线程,直到窗口程序处理完消息或指定的超时周期结束函
数才返回。如果接收消息的窗口和当前线程属于同一个队列,窗口程序立即调用,超时值无
用。
函数原型:LRESULT SendMessageTmeoUt(HWND hwnd,UINT Msg,WPARAM wParam,LPARAM 
IParam,UINTfuFlags,UIUT uTimeout,LPDWORD lpdwResultult);
参数:
hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被
发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口。
Msg:指定被发送的消息。
wParam:指定附加的消息指定信息。
IParam:指定附加的消息指定信息。
fuFlags;指定如何发送消息。此参数可为下列值的组合:
SMTO_ABORTIFHUNG:如果接收进程处于“hung”状态,不等待超时周期结束就返回。
SMTO_BLOCK:阻止调用线程处理其他任何请求,直到函数返回。
SMTO_NORMAL:调用线程等待函数返回时,不被阻止处理其他请求。
SMTO_ONTIMEOUTIFNOTHUNG:Windows 95及更高版本:如果接收线程没被挂起,当超时周期
结束时不返回。
uTimeout:为超时周期指定以毫秒为单位的持续时间。如果该消息是一个广播消息,每个窗
口可使用全超时周期。例如,如果指定5秒的超时周期,有3个顶层窗回未能处理消息,可
以有最多15秒的延迟。
IpdwResult:指定消息处理的结果,依赖于所发送的消息。
返回值:如果函数调用成功,返回非零值。如果函数调用失败,或超时,返回值是零。若想
获得更多的错误信息,请调用GetLastError函数。如果GetLastError返回零,表明函数超
时。如果使用HWND_BROADCAST,SenddMessaggTimeout不提供单个窗口超时信息。
速查: Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下以Unicode和ANSI
方式实现。
2.14.21  SendNotifyMessage
函数功能:该函数将指定的消息发送到一个窗口。如果该窗口是由调用线程创建的;此函数
为该窗口调用窗口程序,并等待窗口程序处理完消息后再返回。如果该窗口是由不同的线程
创建的,此函数将消息传给该窗口程序,并立即返回,不等待窗口程序处理完消息。
函数原型:BOOL SendNotifyMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);
参数:
hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被
发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出
式窗口,但消息不被发送到子窗口。
Msg:指定被发送的消息。
wParam:指定附加的消息指定信息。
IParam:指定附加的消息指定信息。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。
备注:如果发送一个低于WM_USER范围的消息给异步消息函数(PostMessage,
SendNotifyMessage,SendMesssgeCallback),消息参数不能包含指针。否则,操作将会失
败。函数将在接收线程处理消息之前返回,发送者将在内存被使用之前释放。
    需要以HWND_BROADCAST方式通信的应用程序应当用函数RegisterWindwosMessage来获
得应用程序间通信的独特的消息。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下以Uncode
和ANSI方式实现。
2.14.22  SendMessageExtralnfo
函数功能:该函数为当前线程设置附加消息信息。附加消息信息是应用程序或驱动程序定义
的与当前线程的消息队列联系的32位值。GetMessageExtralnfo来取得线程的附加消息信
息。
函数原型:LPARAM SetMesssgeEXtralnfo(LPARAM IParam);
参数:
IParam:指定与当前线程联系的32位值。
返回值:返回值为前一个32位值。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winser.h;输入库:user32.lib。
2.14.33  TranslateMessage
函数功能:该函数将虚拟键消息转换为字符消息。字符消息被寄送到调用线程的消息队列里,
当下一次线程调用函数GetMessage或PeekMessage时被读出。
函数原型:BOOL TranslateMessage(CONST MSG★lpMsg);
参数:
IpMsg:指向含有消息的MSG结构的指针,该结构里含有用函数GetMessage或PeekMessage
从调用线程的消息队列里取得的消息信息。
返回值:如果消息被转换(即,字符消息被寄送到调用线程的消息队列里),返回非零值。
如果消息是WM_kEYDOWN,WM_KEYUP WM_SYSKEYDOWN或WM_SYSKEYUP,返回非零值,不考虑
转换。如果消息没被转换(即,字符消息没被寄送到调用线程的消息队列里),返回值是零。
备注:此函数不修改由参数IpMsg指向的消息。
    WM_KEYDOWN和WM_KEYUP组合产生一个WM_CHAR或WM_DEADCHAR消息。
    WM_SYSKEYDOWN和WM_SYSKEYUP组合产生一个SYSWM_CHAR或 WM_SYSDEADCHAR消息。
TtanslateMessage为那些由键盘驱动器映射为ASCll字符的键产生WM_CHAR消息。
    如果应用程序为其他用途处理虚拟键消息,不应调用TranslateMessage。例如,如果
件ThranslateAccelerator返回一个非零值,应用程序不应调用TranslateMessage。
    Windows CE:Windows CE不支持扫描码或扩展键标志,因此,不支持由TranslateMessage
产生的WM_CHAR消息中的IKeyData参数(IParam)取值16-24。
    TranslateMessage只能用于转换调用GetMessage或PeekMessage接收的消息。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;输入库:user32.lib。
2.14.24  WaltMessage
函数功能:该函数产生对其他线程的控制,如果一个线程没有其他消息在其消息队列里。此
函数中止线程,直到一个新消息被放入该线程的消息队列里,再返回。
函数原型;BOOL WaitMessage(VOID)
参数:无。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。
备注:在线程调用一个函数来检查队列后,如果有未经阅读的输入在消息队列里,WaitMessage
不返回。这是因为PeekMessage,GetMessage,GetQueueStatus:WaitMessage,
MsgWaitForMultipleObjects,MsgWaitForMulitpleObjectEx等函数检查队列后,改变队列
的状态信息这样输入不再被认为是新的。如果连续调用WaitMessage,将等到指定类型的新
输入到达后才返回。已存在的未读过的输入(在上次线程检查队列之前接收的)被忽略。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:user32.lib。
2.14.25  PostAppMessage
函数功能:该函数已过时。提供此函数只是为了与Windows的16位版本兼容。基于Win32
的应用程序应该使用函数PostThreadMessage。
26  SetMessageQueue
函数功能:该函数已过时。提供此函数只是为了与Windows的16位版本兼容。此函数对基
于Windows的32位版本不起作用,因为消息队列根据需要动态扩展。
2.15  鼠标输入函数(Mouse Input)
2.15.1  DragDetect
函数功能:该函数捕获并跟踪鼠标的移动直到用户松开左键、按下Esc。键或者将鼠标移动
到围绕指定点的“拖动矩形”之外。拖动矩形的宽和高由函数GetSystemMetrics返回的
SM_CXDRAG或SM_CYDRAG确定。
函数原型:BOOL DragDetect(HWND hwnd,POINT pt);
参数:
hwnd:接受鼠标输入的窗口的句柄。
pt:鼠标在屏幕坐标下的初始位置,此函数根据这个点来确定拖动矩形的坐标。
返回值:如果用户在按着鼠标左键时将鼠标移出了拖动矩形之外,则返回非零值;如果用户
按着鼠标左键在拖动内移动鼠标,则返回值是零。
备注:拖动矩形的系统度量是可构造的,允许更大或更小的拖动矩形。
速查:Windows NT: 4.0及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:user32.lib。
2.15.2  GetCapture
函数功能:该函数取得捕获了鼠标的窗口(如果存在)的句柄。在同一时刻,只有一个窗口
能捕获鼠标;此时,该窗口接收鼠标的输入,无论光标是否在其范围内。
函数原型:HWND GetCapture(VOID)
参数:无。
返回值:返回值是与当前线程相关联的捕获窗口的句柄。如果当前线程里没有窗口捕获到鼠
标,则返回NULL。
备注:返回NULL并不意味着系统里没有其他进程或线程捕获到鼠标,只表示当前线程没有
捕获到鼠标。
速查:Windows NT:4.0及以上版本;Wiodows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;输入库:user32.lib。
2.15.3  GetDoubleCllckTime
函数功能:该函数取得鼠标的当前双击时间。一次双击是指对鼠标键的两次连击,第一次击
键后在指定时间内击第二次。双击时间是指在双击中,第一次击键和第二次击键之间的最大
毫秒数。
函数原型:UINT GetDoubleClickTime(VOID)
参数:无。
返回值:返回是当前双击时间,按毫秒计算。
速查:Windows NT:4.0及以上版本;Windows:95及以上版本;Windows CE:1.0及以上
版本;头文件:winuser.h;输入库:user32.lib。
2.15.4  GetMouseMovePoints
函数功能:该函数取得鼠标或画笔。
函数原型:int GetMouseMovePoints(UINT cbSize,LPMOUSEMOVEPOlNT lppt,
LPMOUSEMOVEPOINT IpptBuf,int,nBufPoints,DWORD resolution);
参数:
cbSize:结构MOOSEMOVEPOINT的大小。
lppt:指向结构MOUSEMOVEPOINT的指针,该结构包含了有效的鼠标坐标(屏幕坐标)。也可
以包含一个时间标记。
    函数GetMouseMovePoints在鼠标坐标历史记录中查找一点。如果此函数查到该点,则
返回包含提供点在内的在此之前的最后一个nBufPoints。如果应用程序提供一个时间标记,
则函数GetMouseMovePoints将用它来区分记录于不同时间的两个相等的点。
    应用程序使用从消息WM_MOOSEMOVE中接收的鼠标坐标来调用此函数,并把它们转换为
屏幕坐标。
lpptBut:将接收点的缓冲区的指针。其大小至少应为cbsze· nBuffPoints。
nBufPoints:指定将取得的点的个数。
resolution:指定希望的分辨率。此参数可取下列值之一:
GMMP_USE_DISPLAY_POINTS:用显示分辨率取得点。
GMMP_USE_DRIVER_pOINTS:用驱动器分辨率取得点。在Windows CE平台下,画笔驱动器的
分辨率高于显示分辨率。这样,函数GetMouseMovePoints可被那些需要准确分辨率的应用
程序使用。(如手写体识别软件或计算机辅助设计软件)。
返回值:如果函数调用成功,返回值是缓冲区里的点的数目。否则,函数返回C1。若想获
得更多的错误信息,请调用GetlastError函数。函数GetLastError可能返回下面的错误代
码。
GMMF_ERR_POINT_NOT_FOUNQ由lPPt指定的点找不到或不再存在于系统缓冲区中。
备注:系统至少保留着64个鼠标坐标及其时间标记。如果应用程序给GetMouseMovePoints
提供了一个鼠标坐标,而该坐标存在于系统中的鼠标坐标历史记录中,则函数从历史坐标记
录取得指定个数的坐标。也可以提供一个时间标记,用来区分历史记录中相同的点。
    函数GetMouseMonePoints将返回实际发送给调用线程和其他线程的点。
速查:Windows NT:5.0及以上版本;Windows:98及以上版本;Windows CE:2.0及以上
版本;头文件:winuser.h;输入库:user32.lib。
2.15.5  mouse_event
函数功能:该函数综合鼠标击键和鼠标动作。
函数原型:VOID mouse_event(DWORD dwFlags,DWORD dx,DWORD dwFlags,OWORD dx,DWORD 
dy, DWORD dwData, DWORD dwExtralnfo);
参数:
dwFlags:标志位集,指定点击按钮和鼠标动作的多种情况。此参数里的各位可以是下列值
的任何合理组合:
MOOSE_EVENTF_ABSOLOTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数
含有相对数据:相对于上次位置的改动位置。此标志可被设置,也可不设置,不管鼠标的类
型或与系统相连的类似于鼠标的设备的类型如何。要得到关于相对鼠标动作的信息,参见下
面备注部分。
MOOSEEVENTFMOVE:表明发生移动。
M00SEEVENTF_LEFTDOWN:表明接按下鼠标左键。
M00SEEVENTF_LEFTUP:表明松开鼠标左键。
MOOSEEVENTF_RIGHTDOWN:表明按下鼠标右键。
MOOSEEVENTF_RIGHTUP:表明松开鼠标右键。
MOOSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。
MOOSEEVENTF_MIDDLEUP:表明松开鼠标中键。
MOOSEEVENTF_WHEEL:在Windows NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量
由dwData给出。
dx:指定鼠标沿x轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于
MOOSEEVENTF_ABSOLOTE的设置。给出的绝对数据作为鼠标的实际X坐标;给出的相对数据
作为移动的mickeys数。一个mickey表示鼠标移动的数量,表明鼠标已经移动。
dy:指定鼠标沿y轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于
MOOSEEVENTF_ABSOLVTE的设置。给出的绝对数据作为鼠标的实际y坐标,给出的相对数据
作为移动的mickeys数。
dwData:如果dwFlags为MOOSEEVENTF_WHEEL,则dwData指定鼠标轮移动的数量。正值表
明鼠标轮向前转动,即远离用户的方向;负值表明鼠标轮向后转动,即朝向用户。一个轮击
定义为WHEEL_DELTA,即120。
    如果dwFlagsS不是MOOSEEVENTF_WHEEL,则dWData应为零。
dwExtralnfo:指定与鼠标事件相关的附加32位值。应用程序调用函数GetMessgeExtrajnfo
来获得此附加信息。
返回值:无。
备注:如果鼠标被移动,用设置MOUSEEVENTF_MOVE来表明,dX和dy保留移动的信息。给
出的信息是绝对或相对整数值。
    如果指定了MOWSEEVENTF_ABSOLOTE值,则dX和dy含有标准化的绝对坐标,其值在0
到65535之间。事件程序将此坐标映射到显示表面。坐标(0,0)映射到显示表面的左上角,
(6553,65535)映射到右下角。
    如果没指定MOWSEEVENTF_ABSOLOTE,dX和dy表示相对于上次鼠标事件产生的位置(即
上次报告的位置)的移动。正值表示鼠标向右(或下)移动;负值表示鼠标向左(或上)移
动。
    鼠标的相对移动服从鼠标速度和加速度等级的设置,一个最终用户用鼠标控制面板应用
程序来设置这些值,应用程序用函数SystemParameterslnfo来取得和设置这些值。
    在应用加速时系统对指定相对鼠标移动提供了两个测试。如果指定的沿X轴y轴的距离
比第一个鼠标阈值大,并且鼠标的加速等级非零,则操作系统将距离加倍。如果指定的沿X
轴或y轴的距离比第二个鼠标阈值大,并且鼠标的加速等级为2,则操作系统将从第一个阈
测试得来的距离加倍。这样就允许操作系统将指定鼠标沿X轴或y轴的相对位移加到4倍。
    一旦应用了加速,系统用期望的鼠标速度换算合成的值。鼠标速度的范围是从1(最慢)
到20(最快),并代表基于鼠标移动的距离指示符移动的数量。缺省值是10,表示对鼠标的
移动设有附加的修改。
    函数mouse_event需要用的应用程序用来合成鼠标事件。也被应用程序用来取得鼠标位
置和鼠标按键状态之外的鼠标信息。例如,如果输入板制造商想将基于画笔的信息传给自己
的应用程序,可以写一个直接与输入板硬件通信的动态键接库(DLL),获得附加的信息,并
保存到一个队列中。DLL然后调用mouse_event,用标准按键和x/y位置数据,并在参数
dwExtralnfo设置排列的附加信息的指针或索引。当应用程序需要附加信息时,调用DLL(连
同存贮在dwEXtralnfo中的指针或索引),则DLL返回附加信息。
    Windows CE:Windows CE不支持参数 dwFlags取MOOSE EVENTF WHEEL常数。
速查: Windows NT: 3.1及以上版本; Windows:95及以上版本;Windows CE:不支持;
头文件:winuser.h;输入库:user32.lib。
2.15.6  ReleaseCapture
函数功能:该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理。捕获鼠
标的窗口接收所有的鼠标输入(无论光标的位置在哪里),除非点击鼠标键时,光标热点在
另一个线程的窗口中。
函数原型:BOOL ReleaseCapture(VOlD)
参数:无。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetlastError函数。
备注:应用程序在调用函数SetCaPture之后调用此函数。
    Windows 95:调用ReleaseCapture会引起失去鼠标捕获的窗日接收一个
WM_CAPTURECHANGED消息。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本:Windows CE:1.0及以上
版本;头文件:winuser.h;输入库:User32.lib。
2.15.7  SetCapture
函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有
鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。
如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定
的窗口。
函数原型:HWND SetCapture(HWND hwnd);
参数:
hWnd:当前线程里要捕获鼠标的窗口句柄。
返回值:返回值是上次捕获鼠标的窗口句柄。如果不存在那样的句柄,返回值是NULL。
备注:只有前台窗口才能捕获鼠标。如果一个后台窗口想捕获鼠标,则该窗口仅为其光标热
点在该窗口可见部份的鼠标事件接收消息。另外,即使前台窗口已捕获了鼠标,用户也可点
击该窗口,将其调入前台。当一个窗日不再需要所有的鼠标输入时,创建该窗口的线程应当
调用函数ReleaseCapture来释放鼠标。此函数不能被用来捕获另一进程的鼠标输入。
    Windows 95:调用SetCaptune会引起失去鼠标捕获的窗口接收一个WM_CAPTURECHANGED
消息。
速查:头文件:Winuser.h:输入库:user32.lib。
2.15.8  SetDoubleCllckTime
函数功能:该函数为鼠标设置双击时间。
函数原型:BOOL SetDoubleCIckTime(UINT ulnterval);
参数:
ulnterval:指定在双击中第一次和第二次点击之间的毫秒数。如果此参数设置为零则系统
使用缺省的双击时间,即500毫秒。
返回值:如果函数调用成功,返回非零值。如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。
备注:函数SetDoubleClickTime为系统中所有的窗口修改双击时间。
速查:Windows NT 3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文
件:winuser.h;输入库:user32.lib。
2.15.9  SwapMouseButton
函数功能:该函数反转或恢复鼠标左右键的含义
函数原型:BOOL SwapMouseButton(BOOL fSwap);
参数:
fSwap:指定鼠标键的含义是否被反转或恢复。如果此参数为TRUE,则左键产生右键消息而
右键产生左键消息,如果此参数为FALSE,则恢复鼠标键的最初含义。
返回值:如果在函数调用之前鼠标键的含义已被反转,则返回非零值。如果鼠标键的含义没
反转,返回值是零。
备注:鼠标键交换是为给那些用左手操作鼠标的人提供方便。此函数通常只能由控制板调用。
尽管一个应用程序能够自由地调用此函数,但鼠标是一种共享资源,其键的含义反转会影响
所有应用程序。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件:winuser.h;输入库:user32.lib。
2.15.10  TrackMouseEvent
  
函数功能:当在指定时间内鼠标指针离开或盘旋在一个窗口上时,此函数寄送消息。
函数原型:BOOL TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack);
参数:
lpEventTrack;指向结构TRACKMOUSEEVENT的指针。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多
的错误信息,请调用GetLastError函数。
    此函数能寄送如下消息:
WM_MOUSEHOVER:在上次调用TrackMouseEvent指定的时间里,鼠标盘旋在窗口的客户区。
当此消息产生时,盘旋跟踪停止。如果需要进一步的鼠标盘旋跟踪,应用程序应当再次调用
TrackMouseEvent。
WM_MOUSELEAVE:鼠标离开上次调用TrackMouseEvent时指定的窗口客户区。当此消息产生
时,所有由TrackMouseEvent要求的跟踪都被取消。当鼠标再次进入窗口,并且要求进一步
的鼠标盘旋跟踪时,应用程序必须调用TrackMouseEvent。
备注:当鼠标指针在指定时间内停留在指定矩形内,就被认为是处于盘旋状态。调用函数
SystemParameterslnfo并使用SPI_GETMOUSEAOVERWIDTH,SPI_GETMOUSEHOVERAEIGHT和
SFI_GETMOOSEAOVERTIME值来取得矩形的大小和时间。
速查:Windows NT 4.0及以上版本;Windows 98及以上版本;Windows CE:1.0及以上版
本;头文件:winuser.h;输入库:user32.lib。
2.16  多文档接口函数(Multiple Document Interface)
2.16.1  CreateMDIWindow
函数功能:该函数创建一个多文档接口MDI的子窗口。
函数原型:HWND GreateMDIWindow(LPTSTR IpClassName,LPTSTR IpWindowName,LPTSTR 
IpWindowName,DWORD dwStyle,int X,int Y,intn Width,int nHeight,HWND hWndParent,
HINSTANCE hlnstance,LPARAM IParam);
参数:
lpClassName:以“\O”为结尾的字符串指针,该字符串指定MDI子窗口的窗口类。该类名
必须已通过调用 RegisterClassEx函数注册过。
lpWindowsName:以“\O”为结尾的字符串指针,该字符串表示窗口的名字。系统在子窗口
的标题条中显示此名字。
dwStyle:规定MDI子窗口形式。如果MDI客户窗口是以MDIS-ALLCHILDSTYLES窗日形式创
建的,这个参数可以是在Createwindow函数描述中列出的窗口形式的任何组合;否则,这
个参数必须取下列值之一或多个组合:
WS_MINIMIZE:创建一个初始状态为极小化的MDI子窗口。
WS_MAXIMIZE:创建一个初始状态为极大化的MDI子窗口。
WS_HSCROLL:创建一个带有水平流动条的MDI子窗口。
WS_VSCROLL:创建一个带有垂直流动条的MDI子窗口。
X:指定MDI子窗口在客户坐标系中水平位置的初值。如果此参数值为CW_USEDEFAULT,MDI
子窗口被分配为水平位置的缺省值。
Y:指定MDI子窗口在客户坐标系中垂直位置的初值。如果此参数为CW_USEDEFAULT,MDI子
窗口被分配为垂直位置的缺省值。
nWidth:指定MDI子窗口的初始宽度,单位为设备单位。如果此参数值为CW_USEDEFAULT,
MDI子窗口被分配为缺省宽度。
nHeight:指定MDI子窗口的初始高度,单位为设备单位。如果此参数值为CW_USEDEFAULT,
MDI子窗口被分配为缺省高度。
hWndParent:指向MDI客户窗口的句柄,该窗口为新的MDI子窗口的父窗口。
hlnstance:指向创建MDI子窗口的应用事例的句柄。
lParam:指定一个应用程序定义的值。
返回值:如果函数调用成功,返回值为所创建窗口的句柄;否则,返回值为NULL。若想获
得更多错误信息,请调用GetLastError函数。
备注:使用CreateMDIWindow函数与发送WM_MDCREATE消息给一个MDI客户窗日相似,区别
是函数可以在不同的线程中创建一个MDI子窗口,而消息不可以。
    Windows 95。系统最多可以支持16,364个窗口句柄。
速查:Windows NT: 3.1及以上版本; Windows:95及以上版本;Windows CE:不支持;
头文件:winuser.h;输入库:user32.lib;Unicoae:在Windows NT环境中以Unicode和
ANSI方式实现。
2.16.2  DefFrameProc
函数功能:该函数对任何多文档接口(MDI)框架窗日的窗口过程不处理的窗口消息提供缺
省处理。窗口过程不能明确处理的所有窗口消息必须通过DefFrameProc函数处理,而不是
通过DefWindowProc函数。
函数原型:LRESULT DefFrameProc(HWND hWnd,HWND hWnd,HWND hWndMDIClient,UINT uMsg,
WPARAM wParam,LPARAM IParam);
参数:
hWnd:MDI框架窗口句柄。
hWndMDIClient:MDI客户窗口句柄。
uMsg:指定要处理的消息。
wParam:指定附加的特定消息信息。
IParam:指定附加的特定消息信息。
返回值:返回值指定,消息处理的结果其值与处理的消息有关。如果hWndMDIClient参数为
NULL,返回值与DefWindowProc函数的相同。
备注:当应用程序的窗口过程不能处理一个消息时,它把消息传递给DefWindowProc函数来
处理。MDI应用程序使用DefFrameProc和DefMDIChildProc函数代替DefWindowProc函数
提供缺省消息处理。应用程序传递给DefMDIChildProc函数的所有消息(例如非客户消息和
WM_SETTEXT消息)通常应被传递给DefFrameFro函数。DefFramePro函数也处理下列消息:
WM_COMMAND:激活用户选择的MDI子窗口。当用户从MDI框架窗口的菜单中选择MDI子窗口
时,此消息被发送伴随该消息的窗口标识符识别被激活的MDI子窗口。
WM_MENUCHAR:当用户按下Alt+C(减)组合键时,打开活动MDI子窗口的窗口菜单。
WM_SETFOCUS:传递键盘响应给MDI客户窗口,客户窗口又依次地把它传递给活动的MDI子
窗口。
WM_SIZE:重新设备新的框架窗口客户域的MDI客户窗口大小。如果框架窗口过程设置了不
同大小的MDI客户窗口,消息将不传递给DefWindowProc函数。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头
文件;winuser.h;输入库:user32。lib;Unicode:在Windows NT环境中以Unicode和ANSI
方式实现。
2.16.3  DefMDIChildProc
函数功能:该函数对任何多文档接口(MDI)子窗口的窗口过程不能处理的窗口消息提供缺
省处理。窗口过程不能处理的窗口消息必须传递给DefMDIChildProc函数,而不是
DefWindowProc函数。
函数原型:LRESULT DDMDIChildProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM IParam)
参数:
hWnd:MDI子窗口句柄。
wParam:指定要处理的消息。
wParam:指定附加的特定消息信息。
IParam:指定附加的特定消息。
返回值:返回值指定信息处理的结果和其值与处理的消息有关。
备注:DefMDIChifdProc函数假定由hwnd参数所识别的MDI子窗口的父窗口是由MDICLIENT
类生成的。
    当应用程序的窗口过程不能处理一个消息时,它把消息传递给DefWindowProc函数来处
理,MDI应用程序使用DefFrameProc和DefMDfChildProc函数来代替DefWindowProc函数
提供缺省消息处理。应用程序传递给DefwindowProc函数的所有消息(例如非客户消息和
WMSET_SETTEXT消息)通常都应传递给DefMDIChildProc函数。另外DefMDIChildProc函数
也能处理下列消息:
WM_CHILDACTIVATE:当MDI子窗口被改变大小,移动或显示时执行激活过程。这个消息必须
被传递。
WM_GETMINMAXINFO:根据MDI客户窗口的当前大小,计算MDI子窗口极大化的尺寸。
WM_MENUCHAR:传递消息给MDI框架窗口。
WM_MOVE:重新计算MDI客户滚动条,如果存在的话。
WM_SETFOCUS:如果子窗口不是活动的MDI子窗口,激活它。
WM_SIZE;执行改变窗口大小所必须的操作,特别是MDI子窗口极大化或恢复一个MDI子窗
口时。如果这个消息没有成功地传递给DefMDIChildProc函数,则很可能产生不是需要的结
果。
WM_SYSCOMMAND:处理窗口菜单命令:SC.NEXTWINDOW,SC_PREVWINDOW,SC_MOVE,SC_SIZE,
和SC_MAXIMIZE。
速查:Window NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文
件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境中以Unicode和ANSI
方式实现。
2.16.4  TranslateMdISysAccel
函数功能:该函数处理与指定MDI客户窗口相联系的多文档接口(MDI)子窗口的菜单命令
的加速键响应。该函数转换WM_KEYUP和WM_KEYDOWN消息为WM_SYSCOMMAND消息,并把它的
发送给相应MDI子窗口。
函数原型:BOOL TranslateMDlSysAccel(HWND hWndClient,LPMSG IpMsg);
参数:
hWndClient:MDI客户窗口句柄。
lpMsg:由GetMessage或PeedMessage函数检索到的消息的指针,这个消息必须为MSG结构,
并包含来自应用程序消息队列的消息信息。
返回值:如果消息被转换为系统命令,则返回值为非零值。如果消息未转换为系统命令,则
返回值为0。
速查:Windows NT: 3.1及以上版本;Windows:95及以上版本:Windows CE:不支持;头
文件:winuser.h;
输入库:user32.lib。
2.17  资源函数(Resource)
2.17.1  BeginUpdateResource
函数功能:该函数返回一个可被UpdateResource函数使用的句柄以便在一个可执行文件中
增加、删除或替换资源。
函数原型:HANDLE BeginUpdateResource(LPCTSTR pFileName,BOOL 
bDeleteExistingResources);
参数:
pFileName:指向一个表示结束的空字符串指针,它是用来指定用以更新资源的基于32-位
可执行文件的文件名。应用程序必须获得访问这个文件的可写权限,并且此文件在当前状态
下不能被执行。如果pFileName未被指定完全路径,系统将在当前路径下搜寻此文件。
bDeleteExistingResources:说明是否删除PFileName参数指定的现有资源。如果这个参数
为TRUE则现有的资源将被删除,而更新可执行文件只包括由UpdateResource函数增加的资
源。如果这个参数为FALSE,则更新的可执行文件包括现有的全部资源,除非通过
UpdateResource特别说明被删除或是替换的。
返回值:如果此函数运行成功,其值将通过使用UpdateResource和EndUpdateResource函
数返回一个句柄。如果被指定的文件不是一个可执行文件,或者可执行文件已被装载,或者
文件不存在,或是文件不能被打开写入时,则返回值为空。若想获得更多的错误信息,请调
用GetLastError函数。
速查:Windows 3.1以上。头文件:winbase.h:库文件:kernel32.lib,Unicode:在Windows 
NT上实现为Unicode和ANSI两种版本。
2.17.2  CopyImage
函数功能:该函数创建一个新的图像(图标、光标、位图)并复制该指定图像的属性到新的
图像。若有必要,该函数将伸展位值以填满新图像所需要的尺寸。
函数原型:HANDLE CopyImage(HANDLE hlmage,UjNT uTyPe,int cxDesired,int cyDesired,
UINT fuFlags)
参数:
hImage:指向包含将被复制图像的模型中的一个特例的句柄。
uType:说明被复制图像的类型,此参数将可能是如下值:
IMAGE_BITMAP:表示复制一个位图;IMAGE_CURSOR;表示复制一个光标。
IMAGE_ICON:表示复制一个图标。
cxDesired:用来指定图像所需的像素宽度。
cyDesired:用来指定图像所需的像素高度。
fuFlags:指定下列复合值,其含义具体如下:
LR_COPYDELETEORG:表示创建一个副本后删除原始图像。
LR_COPYRETURNORG;表示创建一个图像的精确副本,而忽略参数cxDesired和cyDesired。
LR_MONOCHROME:表示创建一个新的单色图像。
LR_COPYFROMRESOURCE;表示试图从原始资源文件中再装载图标或光标资源而不是简单的复
制当前图像。这使得在含有多种尺寸资源的资源文件中再创建一个不同尺寸的副本时非常有
用。若没有这个标志,Copylmage函数将伸展原始图像到新的尺寸;若此标志被设置,
Copylmage函数将在资源文件中选择使用最接近所期待尺寸的值。
    此函数只有在Loadlcon、LoadCursor或Loadlmage函数中的hlmage参数被装载成
LR_SHARED值时才运
行成功的。
返回值:如果函数运行成功,其值将返回最新创建图像的句柄;如果函数运行失败,其值将
返回空。若想获得更多的错误信息,请调用GetLastError函数。
注意:当使用完资源后,可以调用下表中列举的函数以释放相关内存。
Resource Release function资源释放函数:Bitmap DeleteObject 位图:DeleteObject;
Cursor DestroyCursor 光标:DestroyCursorr;lcon Destroylcon  图标: Destroylcon。
    当过程终止时,系统将自动删除这些资源。因而,调用相关函数可以节省内存空间且减
少过程工作设置所需空间的大小。
速查:Windows NT 3.5  Windows 95以上,头文件:winuserh;库文件:user32.lib。
2.17.3  EndUpdateResource
函数功能:该函数终止在可执行文件中的资源更新。
函数原型:BOOL EndUpdateResource(HANDLE hUpdate,BOOL fDiscard);
参数:
hUpdate:用于资源更新的句柄。此句柄通过BeginUpdateResource函数返回。
fDiscard:用来说明是否向可执行文件中写入资源更新内容。如果此参数为TRUE,则在可
执行文件中无变化;如果此参数为FALSE,则在可执行文件中写入变化。
返回值:如果函数运行成功,并且通过调用UpdateResource函数指定的不断积聚的资源修
正内容被写入指定的可执行文件,那么其返回值为非零。如果函数运行失败,其返回值为零。
若想获得更多的错误信息,请调用GetLastError函数。
速查:Windows NT 3.1以上,头文件:winbase.h;库文件:kernel32.lib,Unicode:在Windows 
NT上实现为Unicode和ANSl两种版本。
2.17.4  EnumResLangProc
函数功能:该函数是一个用户定义的和EnumResourceLanguages函数一起使用的回调函数。
它接收资源语言。ENUMRESLANGPROC类型定义指向该响应函数的指针。EnumResLangProc是
用户定义的函数名称的占位符。
函数原型:BOOL CALLBACK EnumResLangProc(HANDLE hModule,LPCTSTR IPszType, LPCTSTR 
IpszName,WORDwlDLanguage,LONG IParam);
参数:
hModule:处理那些包含着被列举术语资源的可执行文件的模块。如果这个参数为空,函数
将在模块中列出在建当前过程时所用的资源术语。
lpszType:指向一个以NULL为结束符的字符串,字符串指定了那些被列举的语句资源的类
型名。作为标准的资源类型,此参数可以为下列值,含义如下:
RT_ACCELERATOR:加速器表;RT_ANICURSOR:动态光标;
RT_ANIICON:动态图标;RT_BITMAP:位图资源;
RT_CURSOR:由硬件支持的光标资源;DI_DIALOG:对话框:
RT_FONT:字体资源;RT_FONTDIR;字体目录资源;
RT_GROUP_CURSOR:与硬件无关的光标资源;
RT_GROUP_ICON:与硬件无关的目标资源;
RT_HTML:HTML文档;RT_ICON:由硬件支持的图标资源:
RT_MENU:菜单资源;RT_MESSAGETABLE:消息表的入口;
RT_PLUGPLAY:即插即用资源;
RT_RCDATA:应用定义资源(原始数据):RT_STRING字符表入口;
RT_VERSION:版本资源:RT_VXD:VXD。
lpszName:指向一个以NULL为结束符的字符串,字符串说明了在资源中被列举出术语的名
称。
wlDLanguage:指定了在资源中被列举出语句的标识符。EnumResourceLanguages函数提供
了这一值。有关原始的语句标识符和由标识符组成子句标识符的列表可以详看MAKELANGID。
IParam:指定将应用定义的参数传递给EnumResourceLanguages函数,此参数将被用于错误
检查。
返回值:此响应函数返回值为TRUE时将继续列举:否则,当返回值为FALSE时将停止列举。
注意:应用程序必须通过向EnumResourceLanguages函数传递这个函数的地址来注册。
速查:Windows NT 3.1、Windows 95以上,头文件:winbase.h;库文件:由用户定义。
2.17.5  EnumResNameProc
函数功能:该函数是一个用户定义的和EnumResourceNames函数一起使用的回调函数。
ENUMRESNAMEPROC类型定义一个指向该回调函数的指针。EnumResNameProc是用户定义函数
名的占位符。
函数原型:BOOL CALLBACK EnumResNameProc(HANDL hModue.LPCTSTR haszTyPe,LPTSTR 
IPszName,LONGIParam);
参数:
hModule:处理包含被列举资源文件名的可执行文件的模块。如果这个参数为NULL,那么函
数将在模块中列举出创建当前过程的资源名称。
lpszType:指向以NULL为结束符的字符串,它指定了被列举出的资源类型名称。作为标准
类型,这个参数的含义同EnumResLangProc\lpszType。
lpszName:指向以NULL为结束符的字符串,它指定了被列举出的资源名称。
IParam:指定传递给EnumResourceNames函数的应用程序定义的参数,此参数用于错误检查。
返回值:此响应函数返回值为TRUE时将继续列举;否则,当返回值为FALSE时将停止列举。
注意:应用程序必须通过向EnumResourceNames函数传递这个函数的地址来注册。
速查:Windows NT 3.1、Windows 95以上,头文件:winbase.h;库文件:由用户定义。
2.17.6  EnumResourceLanguages
函数功能:该函数为每个指定类型和名称的资源搜索模块,并且向定义的回调函数传递所搜
寻到的每种资源语言。
函数原型;BOOL EnumResourceLanguages(HMODULE hModule,LPCTSTR lpType,LPCTSTR 
IpName,ENUMRESthNGPROC lpEnumFunc,LONG IParam);
参数:
hModule:处理包含被列举语言资源的可执行文件的模块。如果这个参数为NULL,那么函数
将在模块中列举出创建当前过程的语言资源。
lpType:指向以NULL为结束符的字符串,它指定了被列举出的语言资源类型。作为标准类
型,这个参数的含义同EnumResLangProc\lpType。
IpName:指向以NULL为结束符的字符串,它指定了被列举出的语言资源名称。
IpEnumFunc:指向所需要每个列举出的语言资源的响应函数。如要了解更多的信息请参见
EnumResLangProc。
IParam:指定一个申请定义参数值传递给响应函数,此参数可以用来错误检查。
返回值:若函数运行成功,则返回非零值;若函数运行失败,则返回零值。若想获得更多错
误信息,请调用GetLastError函数。
注意:EnumResourceLanguages函数将连续列举出语言资源,直到响应函数返回False值或
全部的语言资源均被列举完毕。
速查:Windows NT 3.1、 Windows 95以上,头文件:winbase.h;库文件:kernel32.lib;
Unicode:在Windows和Winaows NT上实现为Unicode和ANSI两种版本。
2.17.7 EnumResourceNames
函数功能:该函数为每个指定类型的资源搜寻模块,并将每个查找到的资源名称传递给回调
函数。
函数原型: BOOL EnumResourceNames(HINSTANCE hModue,LPCTSTR lpszType,
ENUMRESNAMEPROC lpEnumFunc,LONG IParam);参数:
hModule:处理包含被列举资源名称的可执行文件的模块。如果这个参数为NULL,那么函数
将在模块中列举出创建当前过程的资源名称。
lpszType:指向以NULL为结束符的字符串,它指定了被列举出的资源类型名称。作为标准
类型,这个参数的含义同EnumResLangProc\lpszType。
lpEnumFunc:指向所需要每个列举出的资源名称的响应函数。如要了解更多的信息请参见
EnumResNameProc。
IParam:指定一个申请定义参数值传递给响应函数,此参数可以用来错误检查。
返回值:若函数运行成功,则退回非零值;若函数运行失败,则退回零值。若想获得更多的
错误信息,请调用GetLastError函数。
注意:函数将连续列举出资源名称,直到响应函数返回False值或全部的资源名称均被列举
完毕。
速查: Windows NT 3.1、 Windows 95以上,头文件:winbase.h;库文件: kernel32.lib;
Unicode:在Windows和Windows NT上实现为Unicode和ANSI两种版本。
2.17.8  EnumResourceTypes
函数功能:该函数为资源搜寻模块并且将它找到的每个资源类型传递给用户定义的回调函
数。
函数原型:BOOL EnumResourceTypes(HMODULE hModule,ENUMRESTYPEPROC lpEnumFunc,LONG 
IParam);
参数:
hModule:处理包含被列举资源类型的可执行文件的模块。如果这个参数为NULL,那么函数
将在模块中列举出创建当前过程的资源类型。
lpEnumFunc:指向所需要每个列举出的资源类型的响应函数。如要了解更多的信息请参见
EhumResNameProc。
IParam:指定申请定义值传递给响应函数。
返回值:若函数运行成功,则返回非零值;若函数运行失败,则返回零值。若想获得更多的
错误信息,请调用GetLastError函数。
注意:函数将连续列举出资源名称,直到响应函数返回False值或全部的资源名称均被列举
完毕。
速查:Windows NT 3.1、Windows 95以上,头文件:winbase.h;库文件:kernel32.lib;
Unicode:在Windows和Windows NT上实现为Unicode和ANSI两种版本。
2.17.9  EnumResTypeProc
函数功能:该函数是一个用户定义的和EnumResourceTypes函数一起使用的回调函数。它接
收资源类型。EnumResTypeProc类型定义一个指向这个回调函数的指针。EnumResTypeProc
是这个用户定义函数名称的占位符。
函数原型:BOOL CALLBACK EnumResTyPeProc(HANDLE hModue,LPTSTR lpszType,LONG 
IParam);
参数:
hModule:处理包含被列举资源类型的可执行文件的模块。如果这个参数为NULL,那么函数
将在模块中列举出创建当前过程的资源类型。
IpszType:指向以NULL为结束符的字符串,它指定了被列举出的资源类型。作为标准类型,
这个参数的含义同EnumResLangProC\lpszType。
IParam:指定一个申请定义参数值传递给EnumResourceTypes函数,此参数可以用来错误检
查。
返回值:若响应函数返回TRUE值则继续列举;否则,返回FALSE值时将停止列举。
注意:应用程序必须通过将函数的地址传递给EnumResourceTypes函数来注册。
速查:Windows NT 3.1、Windows 95以上,头文件:winbase.h;库文件:由用户定义。
10 FlndResource
函数功能:该函数确定指定模块中指定类型和名称的资源所在位置。
函数原型:HRSRC FindResource(HMODULE hModule,LPCTSTR lpName,LPCTSTR lpType);
参数:
hModule:处理包含资源的可执行文件的模块。NULL值则指定模块句柄指向操作系统通常情
况下创建最近过程的相关位图文件。
lpName:指定资源名称。若想了解更多的信息,请参见注意部分。
lpType:指定资源类型。若想了解更多的信息,请参见注意部分。作为标准资源类型。这个
参数的含义同EnumResLangProc\lpType。
返回值:如果函数运行成功,那么返回值为指向被指定资源信息块的句柄。为了获得这些资
源,将这个句柄传递给LoadResource函数。如果函数运行失败,则返回值为NULL。若想获
得更多错误信息,请调用GetLastError函数。
注意:如果参数lpType或lpName的高字节为O,那么其低字节中所给定的资源的类型或名
称标识说明。另外,这些参数指向以NULL为终止符的字符串。字符串的第一个字符是#,
后面的字符表示十进制数来表示源类型或名称的整数标识符。例如。字符串"#258"表示整数
标识符258。
    如果用整数标识符替代名称提交资源,用程序将减少所需的内存容量。
    当使用完加速器表,位图,光标,图标,或是菜单后,可以通过调用下表所列举的函数
释放内存。加速器表:DestroyAcceleratorTable;位图:DeleteObject;光标:DestroyCursor;
图标:Destroylcon;菜单DestroyMenu。
    当过程创建资源终止时,系统将自动删除这些资源。然而通过调用适当的函数可以保留
内存,减少过程中工作设置所需的空间大小。
    应用程序可以使用FindResource函数去查找任何种类资源,但是这个函数只有在应用
程序并发调用LoadLibray和LockResource函数来存取二进制资源时才被使用。
    如果想立即使用某一资源,应用程序将使用下面详细资源函数列表中某一函数去查找装
载所需资源,FormatMessage:装裁且格式化信息表接口:LoadAccclerators:装载加速器
表;LoadBltmap:装载位图资源;LoadCursor:装载光标资源;Loadlcon:装载图标资源;
LoadMenu:装载菜单资源;LoadString:装载字符串表资源。
    例如,应用程序可以使用Loadlcon函数装载某一图标以在屏幕上显示。但是,如果是
装载某一图标为了将它的数据复制到另一个应用程序中,那么这个应用程序就应该使用
FindResource和LoadResource函数。
    字符串资源存储在由若干部分组成的某区域,每部分有16个字符串。每部分的字符串
是按统一计数方式排列的有序队形式存储的。
    TheLoadstring函数将从相应的区域中摘取字符串资源。
    参数hModule不能为NULL句柄。
    参数lpName不支持ID为零的资源,即FindResource(h,o,t)不能按预期工作。
    不可能在IpTyPe参数中传递RT_ANICURSOR或RT_ANllCON的值。
速查:Windows NT3.1、Windows95、Windows CE1.0以上,头文件:winbase.h;库文件:
kerne132.lib;Unicode;在Windows和Windows NT上实现为Unicode和ANSI两种版本。
2.17.11  FindResourceEx
函数功能:该函数确定指定模块中指定类型、名称及语言的资源所在位置。
函数原型:HRSRC FindResourceEx(HXODULE hModule,LPCTSTR lpType,LPCTSTR lpName,
WORD wLanguage);
参数:
hModule:处理包含资源的可执行文件的模块。如果参数值为NULL,则函数搜索曾经创建的
最近过程的模块。
lpType:指向以NULL为结束符的字符串,它指定了被列举出的资源类型名称。若要了解更
多的信息,请参见注意部分。作为标准类型,这个参数取值同EnumResLangProc\lpType。
lpName:指向说明资源文件名称并以NULL为结束符的字符串。若要了解更多的信息,请参
见注意部分。
WLanguage:指明语言资源。若此参数为MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),
则为了指定零一种语言,可以使用宏创建这个参数。更多的信息请参见MAKELANGID。
返回值:如果函数运行成功,其返回值是一个指定资源信息块的句柄。为了获得资源,要将
此句柄传递给LoadResource函数。如果函数运行失败,返回值为空。若想获得更多的错误
信息,请调用GetLastError函数。
速查:Windows NT 3.1、Windows 95以上,头文件:winbase.h;库文件:kernel32.lib; 
Unicode:在Windows和Windows NT上实现为Unicode和ANSI两种版本。
2.17.12 LoadImage
函数功能:该函数装载目标,光标,或位图。
函数原型:HANDLE LoadImage(NINSTANCE hinst,LPCTSTR lpszName,UINT uType,int 
cxDesired,int CyDesired,UINT fuLoad);
参数:
hinst:处理包含被装载图像模块的特例。若要装载OEM图像,则设此参数值为O。
lpszName:处理图像装载。如果参数hinst为非空,而且参数fuLoad不包括LR_LOADFROMFILE
的值时,那么参数lpszName是一个指向保留在hinst模块中装载的图像资源名称,并以NULL
为结束符的字符串。
    如果参数hinst为空,并且LR_LOADFROMFILE被指定,那么这个参数低位字一定是被装
载的OEM图像标识的。OEM图像标识符是在WINUSER.H头文件中定义的,下面列举出前缀的
含义:
          OBM_ OEM:位图;OIC_OEM图标;OCR_OEM:光标。
    如果参数fuLoad包含LR_LOADFROMFILE值,那么参数lpszName是包含有图像的文件名。
uType:指定被装载图像类型。此参数可以为下列值,其含义如下:
IMAGE_BITMAP:装载位图;IMAGE_CURSOR:装载光标;IMAGE_ICON:装载图标。
cxDesired:指定图标或光标的宽度,以像素为单位。如果此参数为零并且参数fuLoad值为
LR_DEFAULTSIZE,那么函数使用SM_CXICON或SM_CXCURSOR系统公制值设定宽度;如果此参
数为零并且值LR_DEFAULTSIZE没有被使用,那么函数使用目前的资源宽度。
cyDesired:指定图标或光标的高度,以像素为单位。如果此参数为零并且参数fuLoad值为
LR_DEFAULTSIZE,那么函数使用SM_CXICON或SM_CXCURSOR系统公制值设定高度;如果此参
数为零并且值LR_DEFAULTSIZE没有被使用,那么函数使用目前的资源高度。
fuLoad:根据下面复合值列表指定函数值,值含义如下:
LR_DEFAULTCOLOR:缺省标志;它不作任何事情。它的含义是“无LR_MONOCHROME”。
LR_CREATEDIBSECTION:当参数uType指定为IMAGE_BITMAP时,使得函数返回一个DIB部分
位图,而不是一个兼容的位图。这个标志在装载一个位图,而不是映射它的颜色到显示设备
时非常有用。
LRDIFAULTSIZE:若 cxDesired或cyDesired未被设为零,使用系统指定的公制值标识光标
或图标的宽和高。如果这个参数不被设置且cxDesired或cyDesired被设为零,函数使用实
际资源尺寸。如果资源包含多个图像,则使用第一个图像的大小。
LR_LOADFROMFILE:根据参数lpszName的值装载图像。若标记未被给定,lpszName的值为
资源名称。
LW_LOADMAP3DCOLORS:查找图像的颜色表并且按下面相应的3D颜色表的灰度进行替换。
    颜色替代:Dk Gray RGB(128,128,128)COLOR_3DSHADOW;Gray RGB(192,192,192)
COLOR_3DFACELt Gray RGB(223,223,223) COLOR_3DLIGHT LR_LOADTRANSPARENT;找到
图像中的一个像素颜色值并且根据颜色表中系统的缺省颜色值替代其相应接口的值。图像中
所有使用这种接口的像素的颜色都变为系统的缺省窗体颜色。此至仅用来申请相应的颜色
表。
    若fuLoad包括LR_LOADTRANSPARENT和LR_LOADMAP3DCOLORS两个值,则
LRLOADTRANSPARENT优先。但是,颜色表接口由COLOR_3DFACE替代,而不是COLOR_WINDOW。
LR_MONOCHROME:装载黑白图。
LR_SHARED:若图像将被多次装载则共享。如果LR_SHARED未被设置,则再向同一个资源第
二次调用这个图像是就会再装载以便这个图像且返回不同的句柄。
    不要对不同标准尺寸的图像使用LR_SHARED,装载后可能会有改变,或是从文件中被装
载。
    Windows 95和Windows 98:函数根据缓存中被请求的资源名发现的第一个图像,不管
被请求的大小。LR_VGACOLOR:使用VGA真彩色。
返回值:如果函数运行成功,返回值是相关资源的数据的句柄。如果函数运行失败,返回值
为NULL。若想获得更多的错误信息,请调用GetLastError函数。
    注意:当使用完资源后,必须通过调用函数以释放加速器表、位图、光标、图标以及菜
单所占的内存资源;加速器表:DesteoyAcceleratorTable;位图:DeleteObject;光标:
DestroyCursor;图标:Destroylcon;菜单:DestroyMenu
    当过程创建终止时,系统将自动删除这些资源。但是调用相关函数也可以保留内存减少
过程的工作设置所占空间。
    Windows CE:对IMAGE_BITMAP来说,参数cxDesred和cyDesred p必须为零。Windows CE
不支持图表跳跃或闪烁。
    参数fuLoad必须为(=LR_DEFAULTCOLOR)。
    如果的目标平台不支持鼠标光标,可以指定在参数cxDesred和cyDsired的SM_CXCURSOR
和SM_CYCURSOR的值,但不能指定参数uType中IMAGE_CURSOR的值。
    如果目标平台支持鼠标光标,可以指定在参数cxDesired和cyDesred的SM_CXCURSOR
和SM_CYCURSOR的值,也能指定参数uType中IMAGE_CURSOR的值。
速查:Windows NT 3.1、Windows 95、Windows CE 1.0以上,头文件:minuser.h:库文件;
user32.lib;Unicode:在Windows NT上实现为Unicode和ANSI两种版本。
2.17.13  LoadResource
函数功能:该函数装载指定资源到全局存储器。
函数原型; HGLOSAL LoadResouare(HMODULE hModule,HRSRC hReslnfo);
参数:
hModule:处理包合资源的可执行文件的模块句柄。若hModule为NULL,系统从当前过程中
的模块中装载资源。
hReslnfo:将被装载资源的句柄。它必须由函数FirtdResource或FindResourceEx创建。
返回值:如果函数运行成功,返回值是相关资源的数据的句柄。如果函数运行失败,返回值
为NULL。若想获得更多的错误信息,请调用GetLastError函数。
注意:LoadResource的返回类型是向后兼容的HGLOBAL型,而不是因为函数返回一个全局
存储块句柄。不要传递这个句柄给函数GlobalLock或GlobalFree。为了得到更多资源数据
信息,请调用LockResource函数。
    当使用完资源后,必须通过调用函数以释放加速器表、位图、光标、图标以及菜单所占
的内存资源:加速器表:DestroyAcceleratorTable;位图:DeleteObject;光标:
DestroyCursor;图标:Destroylcon;菜单:DestroyMenu。
    当过程创建终止时,系统将自动删除这些资源。但是调用相关函数也可以保留内存减少
过程的工作设置所占空间。
    Windows CE:参数hModule必须为非空。
速查:Windows NT 3.1、Windows 95、Windows CE1.0以上,头文件:winbase.h;库文件:
kernel132.lib。
2.17.14  LockResource
函数功能:该函数锁定内存中的指定资源。
函数原型:LPVOID LOCkResource(HGLOBAL hResDate);
参数:
hResDate:被装载的资源的句柄。函数LosdResource可以返回这个句柄。
返回值:如果被装载的资源被所住了,返回值是资源第一个字节的指针;否则为NULL。
注意:通过使用函数FindResource或FindResourceEx返回句柄试图所住资源,不再工作。
可以返回一个错误的数据和任意数据的指针。
    当使用完资源后,必须通过调用函数以释放加速器表、位图、光标、目标以及某单所占
的内存资源:加速器表:DestroyAcceleratorTable;位图:DeleteObject;光标:
DestroyCursor;图标:Destroylcon;菜单:DestroyMenu。
    当过程创建终止时,系统将自动删除这些资源。但是调用相关函数也可以保留内存减少
过程的工作设置所占空间。
速查:Windows NT 3.1、Windows 95、Windows CE 1.0以上,头文件:winbase.h;库文件:
kerne132.lib。
2.17.15  SlzeofResource
函数功能:该函数返回指定资源字节数大小。
函数原型:DWORD SizeofResource(HMODULE hModule,HRSRC hReslnfo);
参数:
hModule:包合资源的可执行文件模块的句柄。
hReslnfo:资源句柄。此句柄必须由函数FindResource或FindResourceEx来创建。
返回值:如果函数运行成功,返回值资源的字节数。如果函数运行失败,返回值为零。若想
获得更多的错误信息,请调用GetLastError函数。
速查:Windows NT 3.1、Windows 95、Windows CE 1.0以上,头文件:winbase.h;库文件:
kerne132.lib。
2.17.16  UpdateResource
函数功能:该函数增加,删除,或替代某可执行文件中的资源。
函数原型:BOOL UPdateResource(HANDLE hUpdate,LPCTSTR lPTyPe,LPCTSTR IPName,WORD 
wLanguage,LPVOID lgData,DWORD cbData);
参数:
hUpdate:指定更新文件句柄。此句柄由BeginUpdateResource函数返回。
lpType:指向说明将被更新的资源类型的字符串,它以NULL为终止符。这个参数可以是一
个通过宏MAKENTRESOURCE传递的整数值,含义参见EnumResLangProc\lpType。
lpName:指向说明待被更新的资源名称的字符串,它以NULL为终止符。这个参数可以是一
个通过宏MAKEINTRESOURCE传递的整数值。
wLanguage:指定将被更新资源的语言标识。要了解基本的语言标识符以及由这些标识符组
成的字语言标识符的列表,可参见宏MAKELANGID。
lpData:指向被插入可执行文件的资源数据的指针。如果资源是预定义类型值之一,那么数
据必须是有效且适当排列的。注意这是存储在可执行文件中原始的一进制数据,而不是由
Loadlcon,LoadString或其他装载特殊资源函数提供的数据。所有包含字符串、文本的数
据必须是Unicode格式;IpData不能指向ANSI数据。
如果lpData为NULL,所指定的资源将从可执行文件中被删除。
cbData:指定lpData中的资源数据数据大小,以字节计数。
返回值:如果函数运行成功,返回值为非零;如果函数运行失败,返回值为零。若想获得更
多的错误信息,请调用GetLastError函数。
注意:应用程序重复使用UpdateResource去改变资源数据。每次UpdateResource调用都要
占用系统内部的一个增加、删除、替代的列表,而实际上并没有将数据写到可执行文件中。
应用程序必须通过使用EndUpdateResource函数将每次积累的变化写入可执行文件中。
速查:Windows NT 3.1以上,头文件:winbase.h;库文件:kerne132.lib;Unicode:在Windows 
NT上实现为Unicode和ANSI两种版本。
2.17.17  FreeResource
函数功能:该函数已过时。它为16位的基于Win32的应用程序提供了一个简单的端口。对
于Win32应用程序(32位)没有必要释放用LoadResource函数装载资源。由LoadResource
所获得的资源随着被装载模块的卸载自动被释放。但是,为了保留内存减少的程序工作设置
所占空间大小,必须通过调用下列表中的函数以释放加速器表、位图、光标、图标以及菜单
所占的内存资源。
    加速器表:DestroyAcceleratorTable;位图:DeleteObject;光标:DestroyCursor;
    图标:Destroylcon;菜单:DestroyMenu。
2.17.18  UnlockResource
函数功能能:该函数已过时。这个函数仅兼容于16位的Windows,对于32位的应用程序不
必要解锁资源。
2.18 滚动条函数(Scroll Bar)
2.18.1  EnableScrollBar
函数功能:该函数可以激活一个或两个滚动条箭头或是使其失效。
函数原型:BOOL EnableScrollBar(HWND hWnd,UINT WSBflags,UINT wArrows);
参数:
hWnd:根据参数wSBflags的值,处理对雷体或滚动条的处理。
wSBflags:指定滚动条的类型。这个参数可以是下面的值,含义如下:
SB_BOTH:可以将指定窗体的水平及垂直滚动条上的箭头激活或使其失效。此时参数hWnd一
定指向窗体。
SB_CTL:标识滚动条控制器。此时参数必须指向滚动条控制器。
SB_HORZ:可以将指定窗体的水平滚动条上的箭头激活或使其失效。此时参数hWnd一定指向
窗体。
SB_VERT:可以将指定窗体的垂直滚动条上的箭头激活或使其失效。此时参数hWnd一定指向
窗体。
wArrows:指定滚动条上的箭头是否被激活或是无效,并指出哪一个箭头位有效或是无效。
这个参数可以是下面的值,其含义如下:
ESB_DISABLE_BOTH:使滚动条上两面的箭头功能无效。
ESB_DISABLE_DOWN:使垂直滚动条上下面的箭头功能无效。
ESB_DISABLE_LEFT:使水平滚动条上左边箭头功能无效。
ESB_DISABLE_LTUP:使水平滚动条上左边箭头或垂直滚动条上面的箭头功能无效。
ESB_DISABLE_RLGHT:使水平滚动条上右边箭头功能无效。
ESB_DISABLE_RTDN:使水平滚动条上右边箭头或垂直滚动条下边的箭头功能无效。
ESB_DISABLE_UP:使垂直滚动条上向下箭头功能无效。
ESB_ENABLE_BOTH:激活滚动条两面的箭头。
返回值:如果被指定的箭头被激活或未被激活,其返回值为非零;如果箭头已经是被请求的
状态或是出现错误,那么返回值为零。若想获得更多的错误信息,请调用GetLastError函
数。
速查:Windows NT 3.1、Windows 95以上,头文件:winuser.h;库文件:user32.lib。
2.18.2  GetScrolllnfo
函数功能:该函数找到滚动条的参数,包括滚动条位置的最小值、最大值,页面大小,滚动
按钮的位置,
函数原型:BOOL GetScrolllnfo(HWND hWnd,int fnBar,LPSCROLLINFO lpsi);
参数:
hWnd:滚动条控制或有标准滚动条的窗体句柄,由fnBar参数确定。
fnBar:指定待找回滚动条参数的类型,此参数可以为如下值,其值含义:
SB_CTL:找回滚动条控制参数。其中参数hwnd一定是处理滚动条控制的句柄。
SB_HORZ:找回所指定窗体的标准水平滚动条参数。
SB_VERT:找回所指定窗体的标准垂直滚动条参数。
lpsi:指向SCROLLINFO结构。在调用Getscrolllofo函数之前,设置SCROLLINFO结构中cbSize
成员以标识结构大小,设置成员fMask以说明待找回的滚动条参数。在运行之前,函数复制
结构中适当的成员所指定的参数。
    成员fMask可以是如下值:
SIF_PAGE:复制滚动页码到由lpsi指向的SCROLLINFO结构的nPage成员中。
SIF_POS:复制滚动位置到由lpsi指向的SCROLLINFO结构的nPos成员中。
SIF_RANGE:复制滚动范围到由lpsi指向的SCROLLINFO结构的nMin和nMax成员中。
SIF_TRACKPOS:复制当前滚动盒跟踪位置到由nTrackPos指向的SCROLLINFO结构的nPage
成员中。
返回值:如果函数找到任何一个值,那么返回值为非零;如果函数没有找到任何值,那么返
回值为零;
若要得到更多出错信息,请调用GetLastError函数。
注意:Getscrolllnfo函数尽管WM_HSCROLL和WM_VSCROLL指出了滚动条位置消息,却仅提
供了16位数据,而函数SetScrollnfo和GetScrollnfo则提供了32位的滚动条数据。因而,
当应用程序在处理WM_HSCROLL或 WM_VSCROLL时,要获得32位滚动条位置的数据时,则要
调用Getscrolllnfo函数。
    在WM_HSCROLL或WM_VSCROLL消息中SB_THUMBTRACK通告过程中,为了获得32位的滚
动盒位置,需要调用GetScrolllnfo函数以得到结构SCROLLINFO成员fMask中的SCROLLINFO
值。函数返回在结构SCROLLINFO成员nTrackPos中指出的滚动盒跟踪位置的值。这将允许
当用户移动滚动盒时能得到其位置。
速查:Windows NT3.51、Windows 95、Windows CE1.0以上,头文件:winuser.h;库文件:
user32.lib。
2.18.3  ScrollDC
函数功能:该函数水平和垂直滚动一个位矩形。
函数原型:BOOL  ScrollDC(HDC hDC,int dx,int dy,CONST RECT ·IprcScroll,CONST
★lprcClip,HRGN hrgnUpdateLPRECT IprcUpdate);
参数:
hDC:含有要滚动位数的设备描述表句柄。
dx:在设备单元中,指定水平滚动数量。在向左滚动时此参数必须为负。
dy:在设备单元中,指定垂直滚动数量。在向上滚动时此参数必须为负。
lprcScroll:指向包含与滚动矩形的同等之物的RECT结构。
lprcClip:指向包含类似于剪下矩形之物的RECT结构。只有在剪辑矩形内部的图案才受影
响。
hrgnUpdate:处理滚动过程中位覆盖的区域。ScrollDC定义这个区域,它不一定是一个矩
形。
lprcUpdate:指向RECT结构,它接收到类似于被限制滚动更新区域矩形之物。这是所需求
重画的最大的矩形区域。当函数返回时,不管指定设备内容映射的模式如何,结构中的值将
在客户端对应结构中。
返回值:如果函数运行成功,返回值为非零;如果函数运行失败,返回值为零。若想获得更
多的错误信息,请调用GetLastError函数。
注意:如果参数lprcUpdate为空,系统将不再计算更新矩形。如果参数hrgnUpdate和
IprcUpdate均为空,系统将不再计算更新区域。如果参数hrgnUpdate不为空,系统将好像
拥有包含一个有效的未被滚动过程覆盖区域旬柄(由ScrollDC定义滚动过程)。当必须滚动
窗体的整个客户区域,使用ScrollWindowEx函数。
Windows CE:参数dx和dy中只有一个可以为非零。
速查:Windows NT 3.1、Windows 95、windows CE1.0对以上,头文件:winuser.h;库文
件:user32.lib。
2.18.4  ScrollWindowEx
函数功能:该函数滚动指定窗体客户区域的目录。
函数原型:int ScrollWindowEx(HWND hWnd,int dx,int dyCONST RECT ·prcScroll,CONST 
RECT★prcCllp,HRGH hrgnUpdate,LPRECT prcUpdate,UINT flags);
参数:
hWnd:客户区域将被滚动的窗体句柄。
dx:在设备单元中,指定水平滚动数量。在向左滚动时此参数必须为负。
dy:在设备单元中,指定垂直滚动数量。在向上滚动时此参数必须为负。
prcScroll:指向RECT结构,它指定了将被滚动的客户区域部分。
prcClip:指向包含了类似于被剪下矩形的RECT结构。只有在剪下内部的小块图形才受影响。
从矩形外向内部的滚动部分将被着色;而从内向外的滚动部分将不再被着色。
hrgnUpdate:处理已被修改的区域,保存这些由于滚动而无效的区域。此参数可以为空。
prcUpdate:指向RECT结构,它接收由于滚动使得矩形无效部分的边界。此参数值可以为空。
flags:指定控制滚动的标志。这个参数可以是下面的值:
SW_ERASE:通过发送WM_ERASEBKGND消息给窗体。
SW_INVALIDATE:在滚动后,使得由参数hrgnUpdate标识的无效区域被擦除。
SW_SCROLLCHILDREN:动所有由参数prcScroll指出交叉重叠矩形的子窗体。子窗体按照dx
和dy规定的像素个数滚动。系统发送消息给所有由prcScroll指出交叉重叠矩形的子窗体,
即使他们不移动。
SW_SMOOTHSCROLL:Windows NT 5.0或以上版本中:使用平滑滚动。利用flags参数中HIWORD
部分简要说明所需平滑滚动操作的时间。
返回值:如果函数运行成功,返回值为SIMPLEREGION(矩形的无效区域),COMPLEXREGION
(非矩形的无效区域)或NULLREGION(没有使无效的区域)如果函数运行成功,返回值为
ERROR。若想获得更多的错误信息,请调用GetLastError函数。
注意:如果SW_INVALIDATE和SW_ERASE标志没有被设定,那么函数ScrollWindowEx不能使
滚动离开的区域失效。如果其中任意一个标志被设置,ScrollWindowEx函数就可以使区域
无效。这块区域将不再被更新直到应用程序调用theUpdateWindow函数,调用
theRedrawWindow函数(指定RDW_UPDATENOW或RDW_ERASENOW标志)或是从申请队列中找
到WM_PAINT消息。
    如果窗体拥有WS_CLIPCHILDREN类型,那么由hrgnUpdate和prcUpdate指定的返回区
域描述了必须更新的滚动窗体的全部区域,包括所需更新子窗体的任何区域。
    若SW_SCROLLCHILDREN标志被设置,在子窗体被滚动时,系统将不能完全更新屏幕。位
于矩形外边的滚动子窗体部分不被擦除,也不在它的新方向上被重画。为了移动子窗体使之
完全不在prcScroll指定的矩形条中,可使用DeferWindowPos函数。若标志
SW_SCROLLCHILDREN被设置并且^符号交叉滚动矩形,则光标也重新设置。
    所有输入输出均被定义为客户端如果有必要,使用IptoDP和dptoLP函数转换逻辑相关
性。
   Windows CE:参数flags不支持SW_SCROLLCHILDREN。参数dx和dy中只有一个为零。
速查:Windows NT 3.1、Windows 95、Windows CE 1.0以上,头文件:winuser.h;库文件:
user32.lib。
  2.18.5  SetScrolllnfo
函数功能:该函数设置滚动条参数,包括滚动位置的最大值和最小值,页面大小,滚动按钮
的位置。如被请求,函数也可以重画滚动条。
函数原型:int SetScrohnfo(HWND hWnd;int fnBar,LPSCROLLINFO lpsi,BOOL fRedraw);
参数:
hWnd:滚动条控制或带标准滚动条的窗体句柄,由fnBar参数决定。
fnBar:指定被设定参数的滚动条的类型。这个参数可以是下面值,含义如下:
SB_CTL:设置滚动条控制。而参数hwnd必须是滚动条控制的句柄。
SB_HORZ:设置所给定的窗体上标准水平滚动条参数。
SB_VERT:设置所给定的窗体上标准垂直滚动条参数。
IPBI:指向SCROLLINFO结构。在调用SetScrognfo之前,设置SCROLLINFO结构中cbSize
成员以标识结构大小,设置成员fMask以说明待设置的滚动条参数,并且在适当的成员中制
定新的参数值。成员fMask可以为下面所列复合值,含义如下:
SIF_DfSABLENOSCROLL:如果滚动条的新参数使其为没必要,则使滚动条无效而不再移动它。
SIF_PAGE:设置滚动页码值到由Ipsi指向的SCROLLINFO结构的nPage成员中。
SIF_POS:设置滚动位置值到由lpsi指向的SCROLLINFO结构的nPos成员中。
SIF_RANGE:设置滚动范围值到由lpsl指向的SCROLLINFO结构的nMin和nMax成员中。
fRedraw:指定滚动条是否重画以反映滚动条的变化。如果这个参数为TRUE,滚动条将被重
画,否则不被重画。
返回值:返回值是滚动盒的当前位置。
注意:SetScrolllnfo函数执行任务是检查SCROLLINFO结构中由成员nPage和nPos值的范
围。成员uPage值必须从0到nMax- nMin+1,成员nPos必须是在nMin和nMax-nMax-max
(nPage C1,0)之间的指定值。如果任何一个值超过了这个范围,函数将在指定范围内为
它设置一个值。
    在Windows CE 2.0中,如果在参数lpsi中指定一个NULL指针,Setscrohnfo则返回0,
而不返回滚动盒的当前位置。
速查:Windows NT 3.51、Windows 95、Windows CE 1.0以上,头文件:wnuser.h;库文件:
user32.lib。
2.18.6  ShowScrollBar
函数功能:该函数显示或隐藏所指定的滚动条。
函数原型:BOOL ShowScrollBar(HWND hWnd,int wBar,BOOL bShow);
参数:
hWnd:根据参数wBar值,处理滚动条控制或带有标准滚动条窗体。
wBar:指定滚动条是被显示还是隐藏。这个参数讲师下面值之一,具体含义如下:
SB_SOTH:显示或隐藏窗体的标准的水平或垂直滚动条。
SB_CTL:显示或隐藏滚动条控制。参数hWnd必须是指向滚动条控制的句柄。
SB_HORZ:显示或隐藏窗体的标准的水平滚动条。
SB_VERT:显示或隐藏官体的标准的垂直滚动条。
bShow:指定滚动条是被显示还是隐藏。此参数为TRUE,滚动条将被显示,否则被隐藏。
返回值:如果函数运行成功,返回值为非零;如果函数运行失败,返回值为零。若想获得更
多的错误信息,请调用GetLastError函数。
注意:当处理滚动条消息时,不能调用这个函数隐藏滚动条。
速查:Windows NT 3.1、Windows 95以上,头文件:winuserh;库文件:user32.lib。
2.18.7  GetScrollPos
函数功能:该函数获取指定滚动条中滚动按钮的当前位置。当前位置是一个根据当前滚动范
围而定的相对值。例如,如果滚动范围是0到100之间,滚动按钮在中间位置,则其当前位
置为50。该函数提供了向后兼容性,新的应用程序应使用GetScroiliofo函数。
函数原型:int GetScrogPos(HWND hWnd;int nBar);
参数:
hWnd:根据参数nBar值,处理滚动条控制或带有标准滚动条窗体。
nBar:指定滚动条将被检查。这个参数可以是下面值,含义如下:
SB_CTL:找回滚动条控制中滚动翻页盒的位置。而参数hwnd必须是滚动条控制的句柄。
SB_HORZ:找回窗体上标准水平滚动条中参数滚动翻页盒的位置。
SB_VERT:找回窗体上标准垂直滚动条中参数滚动翻页盒的位置。
返回值:如果函数运行成功,其返回值是滚动翻页盒的当前位置;如果函数运行失败,其返
回值是0。想若想获得更多的错误信息,请调用GetLastError函数。
注意:函数GetScrollPos可以使应用程序使用32位滚动位置。尽管消息WM_HSCROLL和
WM_VSCROLL指出了滚动条位置,但却被限制为16位,而函数SetScrollPos,SetScrollRange,
GetScrollPos,和 GetscrollRange都支持32位的滚动条数据。
    在WM_HSCROLL或WM_VSCROLL消息中通告SB_JHUMBTRACK时,为了得到滚动条32位的
位置,请调用GetScrolllnfo函数。
    在WM_HSCROLL或WM_VSCROLL消息中通告SB_THUMBTRACK时,为了得到32位的滚动条,
则调用函数GetScrolllnfo。
速查:Windows3.1、Windows 95以上,头文件:winuser.h;库文件:user32.lib
2.18.8  GetScrollRange
函数功能:获取指定滚动条中滚动按钮位置的当前最大最小值。
函数原型:BOOL GetscrollRange(HWND hWnd,int nBar,LPINT lpMinPos,LPINT InMaxPos);
参数:
hWnd:滚动条控制或带标准滚动条窗体的句柄,由nBar参数值确定。
nBar:定滚动条哪一个位置将被找回。这个参数可以是下面值,含义如下:
SB_CTL:找回滚动条控制位置。而参数hWnd必须是滚动条控制的句柄。
SB_HORZ:找回窗体上标准水平滚动条的位置。
SB_VERT:找回窗体上标准垂直滚动条位置。
lpMinPos:指向所找到最小位置整型变量。
lpMaxPos:指向所找到最小位置整型变量。
返回值:如果函数运行成功,返回值为非零;如果函数运行失败,返回值为零。若想获得更
多的错误信息,请调用GetLastError函数。
注意:如果所指定的窗体没有标准的滚动条或者不是滚动条控制,那么GetscrollRange函
数将复制0到参数lpMinPos和lpMaxPos中。
    标准滚动条的缺省范围值是从0到100之间,滚动条控制的缺省范围为空。
    说明滚动条位置的消息WM_HSCROLL和WM_VSCROLL均为16位的数据。但是,因为函数
SetScrolllnfo,SetScrollPos,SetScrollRange;GetScrolllnfo,GetScrollPos,和
GetScrollRange都支持32位的滚动条位置数据,所以有一个解决16位WM_HSCROLL和
WM_VSCROLL消息阻碍的途径,请参见函数GetScrohnfo的有关技术说明。
速查:Windows NT 3.1、Windows 95以上,头文件:winuserh;库文件:user32.lib。
2.18.9  ScrollWindow
函数功能:该函数滚动所指定的窗体客户区域内容。函数提供了向后兼容性,新的应用程序
应使用ScrollWindowEX。
函数原型:BOOL ScrollWindow(HWND hWnd,int XAmount,int YAmount,CONST RECT★IpRect, 
CONST RECT★lpClipRect);
参数:
hWnd:客户区域将被滚动的窗体句柄。
XAmount:指定水平滚动以设备为单位的数量。如果窗体被滚动模式为CS_OWNDC或
CS_CLASSDC,此参数则使用逻辑单位而不使用设备单位。当向左滚动窗体内容时,参数值必
须为负。
YAmount:指定垂直滚动设备单位数量。如果窗体被滚动模式为CS_OWNDC或CS_CLASSDC,
此参数则使用逻辑单位而不使用设备单位。当向上滚动窗体内容时,参数值必须为负。
lpRect:指向所指定将被滚动的客户区域部分的RECT结构。若此参数为NULL,则整个客户
区域均被滚动。
lpClipRect:指向包含类似于剪辑滚动条RECT结构。只有剪辑矩形条内部的位受影响。由
外向内的滚动矩形内部被着色,而由矩形内向外的滚动将不被着色。
返回值:如果函数运行成功,返回值为非零;如果函数运行失败,返回值为零。若想获得更
多的错误信息,请调用GetLastError函数。
注意:如果在被滚动的窗体中由^符,滚动富体将自动隐藏起^符,以防止它被擦掉;当滚动
结束后再恢复^符。^符的位置因而被调整过来。
    未被ScrollWindow覆盖的区域不再被重画,但它组合成窗体的更新区域。应用程序最
终最终受到 WM_PAINT的消息,通知它区域必须被重画。为了在滚动过程的同时重画未覆盖
区域,则应在调用ScrollWindow函数后马上调用UpdateWindow函数。
    如果参数lpRect为空,则窗体中的任何子窗体的位置由参数XAmount和Yamount种的
数量决定偏移;窗体无效(未着色)的区域也进行偏移。IpRect为空时ScrollWindow则更
快。
    如果参数lpRect不为空,则窗体中的子窗体的位置不改变,窗体中无效(未着色)的
区域也不进行偏移。为了防止lpRect不为空时更新的问题,则在调用ScrollWindow之前先
调用UpdateWindow函数重窗体。
速查:Windows NT 3.1、Windows 95以上,头文件:winuser.h;库文件:user32.lib。
2.18.10  SetScrollPos
函数功能:该函数设置所指定滚动条中的滚动按钮的位置,如要求重画滚动条以反映出滚动
按钮的新位置。该函数提供了向后兼容性,新的应用程序应使用SetScrolllnfo函数。
函数原型:int SetScrollPos(HWN hWnd,int nBar,int nPos,BOOL bRedraw);
参数:
hWnd:滚动条控制或带有标准滚动条窗体的句柄,由nBar参数值确定。
nBar:指定滚动条将被设置。这个参数可以是下面值,含义如下:
SB_CTL:设置滚动条控制中滚动翻页盒的位置。而参数hwnd必须是滚动条控制的句柄。
SB_HORZ:设置窗体上标准水平滚动翻页盒的位置。
SB_VERT:设置窗体上标准垂直滚动翻页盒的位置。
nPos:指定滚动翻页盒的新位置。这个位置必须在滚动范围之内。若要了解更多有关滚动范
围的信息,请参见SetScrollRange函数。
bRedraw:指定滚动条是否被重画以反映出新的滚动翻页盒的位置。如果这个参数为TRUE,
则滚动条将被重画;为FALSE则滚动条不被重画。
返回值:如果函数运行成功,其返回值是滚动翻页盒的前一个位置。如果函数运行失败,其
返回值是0。若想获得更多的错误信息,请调用GetLastError函数。
注意:如果由于其他并发函数调用,滚动条又被重画,那么设置参数bRedraw为负时非常有
必要的。
    因为说明滚动条位置的消息WM_HSCROLL和WM_VSCROLL只能为16位数据,那些只依赖
于说明位置数据消息的应用程序在函数SetScrollPos的参数nPos中有一个实际最大值。
    但是,因为函数SetScrolllnfo,SetScrollPos,SetScrollRange,GetScrollPos, 和 
GetScrollRange都支持32位的滚动条位置数据,所以有一个解决16位WM_HSCROLL和
WM_VSCROLL消息阻碍的途径,请参见函数GetScrolllnfo的有关技术说明。
速查:Windows NT 3.1、Windows 95、Windows CE 2.0以上,头文件:winuser.h;库文件:
user32.lib。
2.18.11  SetScrollRange
函数功能:该函数设置所指定滚动条位置的最大最小值。
函数原型:BOOL SetScrollRange(HWND hWnd,int nBar,int nMinPos,int nMaxPos,BOOL 
bRedraw);
参数:
hWnd:滚动条控制或带有标准滚动条窗体的句柄,由nBar参数值确定。
nBar:指定滚动条将被设置。这个参数可以是下面值,含义如下:
SB_CTL:设置滚动条控制的范围。而参数hwnd必须是滚动条控制的句柄。
SB_HORZ:设置窗体上标准水平滚动翻页盒的范围。
SB_VERT:设置窗体上标准垂直滚动翻页盒的范围。
nMinPos:指定滚动位置的最小值。
nMaxPos:指定滚动位置的最大值。
bRedraw:指定滚动条是否被重画以反映变化。如果这个参数为TRUE,滚动条将被重化;如
果为FALSE则不被重画。
返回值:如果函数运行成功,返回值为非零;如果函数运行失败,返回值为零。若想获得更
多的错误信息,请调用GetLastError函数。
注意:可以使用setScrollRange函数把nMinPos和nMaxPos设置为一样的值从而隐藏起滚
动条。在处理滚动条消息时,应用程序可以不用调用函数SetScrollRange来隐藏滚动条。
新的应用程序使用函数ShowScrollBar来隐藏滚动条。
    如果调用函数SetScrollPos之后马上调用函数SetScrollRange,则SetScrollPos中
的bRedraw参数一定为零,以防止滚动条被画两次。
    标准滚动条的缺省范围时0到100。滚动条控制的缺省值为NULL(参数nMinPos和nMaxPos
的值均为零)。两个范围值之间的不同之处在于由参数nMinPos和nMaxPos指定的值不能超
过MAXLONG的值。
    因为说明滚动条位置的消息WM_HSCROLL和 WM_VSCROLL只能为16位数据,那些只依赖
于说明位置数据消息的应用程序在函数SetScrollRange的参数nMaxPos中有一个实际最大
值65,535。但是,因为函数SetScrolllnfo,SetScrollPos, SetScrollRange,
GetScrolllnfo,GetScrollPos,和GetScrollRange都支持32位的滚动条位置数据,所以
有一个解决16位WM_HSCROLL和WM_VSCROLL消息阻碍的途径,请参见函数GetScrolllnfo
的有关技术说明。
速查:Windows NT 3.1、Windows CE 2.0以上,头文件:winuser.h;库文件:user32.lib。
2.19  窗口函数(Window)
2.19.1  AdlustWindowRect
函数功能:该函数依据所需客户矩形的大小,计算需要的窗日矩形的大小。计算出的窗口矩
形随后可以传递给CreateWindow函数,用于创建一个客户区所需大小的窗口。
函数原型:BOOL AdjustWindowRect(LPRECT lpRect ,DWORD dwStyle,BOOL bMENU);
参数:
lpRect:指向RECT结构的指针,该结构包含所需客户区域的左上角和右下角的坐标。函数
返回时,该结构容纳所需客户区域的窗口的左上角和右下角的坐标。
dwStyle:指定将被计算尺寸的窗口的窗口风格。
bMenu:指示窗口是否有菜单。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。获取错误信息,参看
GetLastError。
备注:客户矩形是指完全包含一个客户区域的最小矩形;窗日矩形是指完全包含一个窗口的
最小矩形,该窗口包含客户区与非客户区。
    当一个菜单条下拉出两行或更多行时,AdjustWindowRect函数不增加额外的空间。
速查:Windows NT:3.1以上版本:Windows:95以上版本:Windows CE:不支持;头文件:
winuser.h;库文件:user32.lib。
2.19.2  AdjustWindowRectEx
函数功能:该函数依据所需客户矩形大小,计算需要的窗口矩形的大小。计算出的窗口矩形
随后可以传送给CreateWindowEx函数,用于创建一个客户区所需大小的窗口。
函数原型:BOOL AdjustWindowRectEX(LPRECT lpRect,DWORD dwStyte;BOOL bMenu;DWORD 
dwExStyle);
参数:
lpRect:指向RECT结构的指针,该结构包含所需客户区域的左上角和右下角的坐标。函数
返回时,该结构包含容纳所需客户区域的窗口的左上角和右下角的坐标。
dwStyle:指定将被计算尺寸的窗口的窗口风格。
bMenu:指示窗口是否有菜单。
dwExStyle:指定将被计算尺寸的窗口的扩展窗口风格。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信
息,请调用GetLastError函数。
备注:客户矩形是指完全包含一个客户区域的最小矩形;窗口矩形是指完全包含一个窗口的
最小矩形,该窗口包含客户区与非客户区。
    当一个菜单条下拉出两行或更多行时,AdjustWindowRect函数不增加额外的空间。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;
头文件:winuser.h;库文件:user32.lib。
2.19.3  AnImateWindow
函数功能:该函数能在显示与隐藏窗口时能产生特殊的效果。有两种类型的动画效果:滚动
动画和滑动动画。
函数原型:BOOL AnimateWindow(HWND hWnd,DWORD dwTime,DWORD dwFlags);
参数:
hWnd:指定产生动画的窗口的句柄。
dwTime:指明动画持续的时间(以微秒计),完成一个动画的标准时间为200微秒。
dwFags:指定动画类型。这个参数可以是一个或多个下列标志的组合。标志描述:
AW_SLIDE:使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就
被忽略。
AW_ACTIVE:激活窗口。在使用了AW_HIDE标志后不要使用这个标志。
AW_BLEND:使用淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志。
AW_HIDE:隐藏窗口,缺省则显示窗口。
AW_CENTER:若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗
口向外扩展。
AW_HOR_POSITIVE:自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用
AW_CENTER标志时,该标志将被忽略。
AW_VER_POSITIVE:自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用
AW_CENTER标志时,该标志将被忽略。
AW_VER_NEGATIVE:自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用
AW_CENTER标志时,该标志将被忽略。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。在下列情况下函数将
失败:
窗口使用了窗口边界;窗口已经可见仍要显示窗口;窗口已经隐藏仍要隐藏窗口。若想获得
更多错误信息,请调用GetLastError函数。
备注:可以将AW_HOR_POSITIVE或AW_HOR_NEGTVE与AW_VER_POSITVE或AW_VER_NEGATIVE
组合来激活一个窗口。
    可能需要在该窗口的窗口过程和它的子窗口的窗口过程中处理WM_PRINT或
WM_PRINTCLIENT消息。对话框,控制,及共用控制已处理WM_PRINTCLIENT消息,缺省窗口
过程也已处理WM_PRINT消息。
速查:WIDdOWS NT:5.0以上版本:Windows:98以上版本;Windows CE:不支持;头文件:
Winuser.h;库文件:user32.lib。
2.19.4  ArrangelconlcWindows
函数功能:该函数安排指定父窗口的各个最小化(图标化)子窗口。
函数原型:UNIT ArrangelconicWindows(HWND hWnd):
参数:
hWnd:父窗口句柄。
返回值:如果函数成功,返回值为一行图标的高度。如果函数失败,返回值为零。若想获得
更多错误信息,请调用 callGetLastError函数。
备注:一个应用程序可以通过使用ArrangelconicWindows安排在一个父窗口卫的它自身的
最小化的子窗口。这个函数也可以安排桌面图标。使用GetDesttopWindow函数获得桌面窗
口的句柄。
    一个应用程序给多文本接口(MDI)客户窗口发送WM_MDIICONARRANGE消息,使客户窗
口来安排自身的最小化MDI子窗口。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:不支持;头文件:
winuser.h;库文件:user32.lib。
2.19.5  BeginDeferWindowPos
函数功能:该函数为一个多窗口位置结构分配内存并且返回该结构的句柄。
函数原型:HDWP BeginDeferWindowPos(int nNumWindows);
参数:
nNumWindows:指示存储位置信息的初始窗口数目。如有必要,DeferWindowPos函数可以增
加该结构的大小。
返回值:如果函数成功,返回多窗口位置结构。如果分配内存时内存不足,则返回值为NULL。
若想获得更多的错误信息,请调用GetLastError函数。
备注:多窗口位置结构是一个内部结构,应用程序不能直接引用。
    DeferWindowPos函数在多窗口位置结构中填充了将被移动的一个或多个窗口的目标位
置信息。EndDeferWindowPos接收该结构的句柄,并且依据存储在该结构中的信息重定位这
些窗口。
    如果在多窗口位置结构中的任意一个窗口中设置了SWP_HIDEWINDOW和SWP_SHOWWINDOW
标志,则所有窗口都不能被重定位。
如果系统必须增加在多窗口位置结构中由nNumWindows设置的初始窗口数目,但又没有
足够的内存分配,则系统的整个窗口重定位顺序失败(BeginDeferWindowsPos,
DeferWindowsPos,EndDeferWindowPos)。应用程序通过指定所需最大数目,可以在执行过
程中进行早期的检测和处理。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:不支持:头文件:
winuser.h;库文件:user32.lib。
2.19.6  BromgWindowToTop
函数功能:该函数将指定的窗口设置到Z序的顶部。如果窗口为顶层窗口,则该窗口被激活;
如果窗口为了窗口,则相应的顶级父窗口被激活。
函数原型:B00L BringWindowToTop(HWND,hWnd);
参数:
hWnd: 设置到Z序的顶部的窗口句柄。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信
息,请调用GetLastError函数。
备注:使用BringWindowToTop函数显示出被其他窗口部分或全部遮盖的窗口。
    调用这个函数类似于调用SetWindowPos函数来改变窗口在Z序中的位置,但是
BringWindowToTop函数并不能使一个窗口成为顶层窗口。
    如果应用程序不在前台中而想设置在前台中,可以调用SetForegroundWindow函数。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;头
文件:winuser.h;库文件:user32.lid。
2.19.7  CascadeWindows
函数功能:该函数层叠排列指定父窗口的各指定子窗口。
函数原型:WORD WINAPI CascadeWihdows(HWND hWndParent,UNIT wHow,CONST RECT*lpRect,
UNIT cKids, Const HWND FA*lpKids);
参数:
Parent:父窗口的句柄。如果参数为NVLL,则假定为桌面窗口。
wHow:指定层叠标志。唯一可用的标志为MDITILE_SKIPDISABLED,防止被禁止的MDI子窗
口被层叠排列。
lpBect:指向RECT结构的指针,该结构以客户坐标定义矩形区域,并在这个区域中排列窗
口、该参数可以为NULL,这种情况下使用父窗口的客户区域。
cKids:指明由lpKids参数指定的数组的成员个数。如果IpKidS参数为NULL,则此参数将
被忽略。
lpKids:指向将被排列的子窗口的句柄数组的指针。如果此参数为空,则指定的父窗口(或
桌面窗口)的所有子窗口都将被排列。
返回值:如果函数成功,返回值为被排列的窗口数目;如果函数失败,返回值为零。若想获
得更多错误信息,请调用 GetLastError函数。
备注:调用CascadeWindows函数使所有最大化窗口恢复到它们原来的大小。
速查: Windows NT:4.0以上版本;Windows:95以上版本;Windows CE:不支持;头文件:
winuser.h;库文件:User32.1
2.19.8  ChildWindowFromaPoint
函数功能:该函数确定属于某一父窗口的哪一个子窗口(如果存在的话)包含一个指定的点。
函数原型:HWND ChildWindowFromaPoint(HWND hWndParent.POINT Point):
Parent:父窗口句柄。
Point:指定一个POINT结构,该结构给定了被检查的点的坐标。
返回值:返回值为包含该点的子窗口的句柄,即使该子窗口是隐藏的或被禁止的。如果该点
在父窗口之外,则返回值为NULL。如果该点在父窗口内,但在任一子窗口外,则返回值为
父窗口句柄。
备注:系统有一个与某一父窗口有联系的所有子窗口的内部列表。列表中的句柄顺序依据这
些子窗口的z序。如果有多于一个的子窗口包含该点,那么系统返回在列表中包含该点的第
一个窗口的句柄。
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows CE;1.0以上版本;
头文件:winuser.h;库文件:user32.lib。
2.18.9 ChildWindowFromaPointEx
函数功能:该函数确定属于父窗口的哪一个子窗口(如果存在的话)包含着指定的点。该函
数可以忽略不可见的、禁止的和透明的子窗口。
函数原型:HWND ChidWindowFromaPointEx(HWND hwndParent,POINT pt,UNIT uFlags);
参数:
hWndParent:父窗口句柄。
pt:指定一个POINT结构,该结构定义了被检查的点的坐标。
uFlags:指明忽略的子窗口的类型。该参数可以是下列参数的组合。
CWP_ALL:不忽略任一子窗口。CWP_SKIPINVISIBLE:忽略不可见的子窗口。
CWP_SKIPDISABLE:忽略禁止的子窗口。CWP_SKIPTRABSPARENT:忽略透明子窗口。
返回值:返回值为包含该点并且满足由uFlags定义的规则的第一个子窗口的句柄。如果该
点在父窗口内,但在任一满足条件的子窗口外,则返回值为父窗口句柄。如果该点在父窗口
之外或函数失败,则返回值为NULL。
备注:系统有一个与某一父窗口有联系的所有子窗口的内部列表。列表中的句柄顺序依据这
些子窗口的Z序。如果有多于一个的子窗口包含该点,那么系统返回在列表中包含该点并且
满足由uFlags定义的规则的第一个窗口的句柄。
速查:WindowS NT:4.0以上版本;Windows:95以上版本;Windows CE:不支持;头文
件:Winuser.h;库文件:user32.lib。
2.19.10  CloseWindow
函数功能:该函数最小化指定的窗口,但并不销毁该窗口。
函数原型:BOOL CloseWindow(HWND hWnd);
参数:
hWnd:将要最小化的窗口的句柄。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信
息,请调用GetLastError函数。
备注:窗口尺寸被最小化成一个图标,并移动到屏幕的图标区域。系统显示窗口的图标而不
显示窗口,并在图标下显示窗口标题。应用程序必须使用DestroyWindow函数销毁窗口。
速查:WindowS NT:3.1以上版本;Windows:95以上版本;Windows CE:不支持;头文
件:Winuser.h;库文件:user32.lib
2.19.11  Create Window
函数功能:该函数创建一个重叠式窗口、弹出式窗口或子窗口。它指定窗口类,窗口标题,
窗口风格,以及窗口的初始位置及大小(可选的)。该函数也指定该窗口的父窗口或所属窗
口(如果存在的话),及窗口的菜单。若要使用除CreateWindow函数支持的风格外的扩展风
格,则使用CreateWindowEx函数代替CreateWindow函数。
函数原型:HWND CreateWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName,DWORD 
dwStyle,int x,int y,int nWidth,int nHeight,HWND hWndParent,HMENU hMenu,HANDLE 
hlnstance,LPVOID lpParam);
参数:
lpClassName:指向一个空结束的字符串或整型数atom。如果该参数是一个整型量,它是由
此前调用theGlobalAddAtom函数产生的全局量。这个小于0xC000的16位数必须是
lpClassName参数字的低16位,该参数的高位必须是0。
    如果lpClassName是一个字符串,它指定了窗口的类名。这个类名可以是任何用函数
RegisterClassEx注册的类名,或是任何预定义的控制类名。请看说明部分的列表。
LPWindowName:指向一个指定窗口名的空结束的字符串指针。
如果窗口风格指定了标题条,由lpWindowName指向的窗口标题将显示在标题条上。当使用
Createwindow函数来创建控制例如按钮,选择框和静态控制时,可使用lpWindowName来指
定控制文本。
dwStyle:指定创建窗口的风格。该参数可以是下列窗口风格的组合再加上说明部分的控制
风格。风格意义:
WS_BORDER:创建一个单边框的窗口。
WS_CAPTION:创建一个有标题框的窗口(包括WS_BODER风格)。
WS_CHIlD:创建一个子窗口。这个风格不能与WS_POPVP风格合用。
WS_CHLDWINDOW:与WS_CHILD相同。
WS_CLIPCHILDREN:当在父窗口内绘图时,排除子窗口区域。在创建父窗口时使用这个风格。
WS_CLlPBLINGS;排除子窗口之间的相对区域,也就是,当一个特定的窗口接收到WM_PAINT
消息时,WS_CLIPSIBLINGS 风格将所有层叠窗口排除在绘图之外,只重绘指定的子窗口。如
果未指定WS_CLIPSIBLINGS风格,并且子窗口是层叠的,则在重绘子窗口的客户区时,就会
重绘邻近的子窗口。
WS_DISABLED:创建一个初始状态为禁止的子窗口。一个禁止状态的窗日不能接受来自用户的
输人信息。
WS_DLGFRAME:创建一个带对话框边框风格的窗口。这种风格的窗口不能带标题条。
WS_GROUP:指定一组控制的第一个控制。这个控制组由第一个控制和随后定义的控制组成,
自第二个控制开始每个控制,具有WS_GROUP风格,每个组的第一个控制带有WS_TABSTOP风
格,从而使用户可以在组间移动。用户随后可以使用光标在组内的控制间改变键盘焦点。
WS_HSCROLL:创建一个有水平滚动条的窗口。
WS_ICONIC:创建一个初始状态为最小化状态的窗口。与WS_MINIMIZE风格相同。
WS_MAXIMIZE:创建一个具有最大化按钮的窗口。该风格不能与WS_EX_CONTEXTHELP风格同
时出现,同时必须指定WS_SYSMENU风格。
WS_OVERLAPPED:产生一个层叠的窗口。一个层叠的窗口有一个标题条和一个边框。与
WS_TILED风格相同。
WS_OVERtAPPEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU 
WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXMIZEBOX风格的层叠窗口,与WS_TILEDWINDOW风
格相同。
WS_POPUP;创建一个弹出式窗口。该风格不能与WS_CHLD风格同时使用。
WS_POPUWINDOW:创建一个具有WS_BORDER,WS_POPUP,WS_SYSMENU风格的窗口,WS_CAPTION
和WS_POPUPWINDOW必须同时设定才能使窗口某单可见。
WS_SIZEBOX:创建一个可调边框的窗口,与WS_THICKFRAME风格相同。
WS_SYSMENU:创建一个在标题条上带有窗口菜单的窗口,必须同时设定WS_CAPTION风格。
WS_TABSTOP:创建一个控制,这个控制在用户按下Tab键时可以获得键盘焦点。按下Tab键
后使键盘焦点转移到下一具有WS_TABSTOP风格的控制。
WS_THICKFRAME:创建一个具有可调边框的窗口,与WS_SIZEBOX风格相同。
WS_TILED:产生一个层叠的窗口。一个层叠的窗口有一个标题和一个边框。与WS_OVERLAPPED
风格相同。
WS_TILEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU MS_THICKFRAME.
WS_MINIMIZEBOX,WS_MAXMIZEBOX风格的层叠窗口。与WS_OVERLAPPEDWINDOW风格相同。
WS_VISIBLE:创建一个初始状态为可见的窗口。WS_VSCROLL:创建一个有垂直滚动条的窗口。
X:指定窗口的初始水平位置。对一个层叠或弹出式窗口,X参数是屏幕坐标系的窗口的左
上角的初始X坐标。对于子富口,x是子窗口左上角相对父窗口客户区左上角的初始X坐标。
如果该参数被设为CW_UCEDEFAULT则系统为窗口选择缺省的左上角坐标并忽略Y参数。
CW_USEDEFAULT只对层叠窗口有效,如果为弹出式窗口或子窗口设定,则X和y参数被设为
零。
Y:指定窗口的初始垂直位置。对一个层叠或弹出式窗日,y参数是屏幕坐标系的窗口的左
上角的初始y坐标。对于子窗口,y是子窗口左上角相对父窗口客户区左上角的初始y坐标。
对于列表框,y是列表框客户区左上角相对父窗口客户区左上角的初始y坐标。如果层叠窗
口是使用WS_VISIBLE风格位创建的并且X参数被设为CW_USEDEFAULT,则系统将忽略y参
数。
nWidth:以设备单元指明窗口的宽度。对于层叠窗口,nWidth或是屏幕坐标的窗口宽度或是
CW_USEDEFAULT。若nWidth是CW_USEDEFAULT,则系统为窗口选择一个缺省的高度和宽度:
缺省宽度为从初始X坐标开始到屏幕的右边界,缺省高度为从初始X坐标开始到目标区域的
顶部。CW_USEDFEAULT只参层叠窗口有效;如果为弹出式窗口和子窗口设定CW_USEDEFAULT
标志则nWidth和nHeight被设为零。
nHelght:以设备单元指明窗口的高度。对于层叠窗口,nHeight是屏幕坐标的窗口宽度。若
nWidth被设为CW_USEDEFAULT,则系统忽略nHeight参数。
hWndParent:指向被创建窗口的父窗口或所有者窗口的旬柄。若要创建一个子窗口或一个被
属窗口,需提供一个有效的窗口句柄。这个参数对弹出式窗日是可选的。Windows NT 5.0;
创建一个消息窗口,可以提供HWND_MESSAGE或提供一个己存在的消息窗口的句柄。
hMenu:菜单句柄,或依据窗口风格指明一个子窗口标识。对于层叠或弹出式窗口,hMenu
指定窗口使用的菜单:如果使用了菜单类,则hMenu可以为NULL。对于子窗口,hMenu指定
了该子窗口标识(一个整型量),一个对话框使用这个整型值将事件通知父类。应用程序确
定子窗口标识,这个值对于相同父窗口的所有子窗口必须是唯一的。
hlnstance:与窗口相关联的模块事例的句柄。
lpParam:指向一个值的指针,该值传递给窗口 WM_CREATE消息。该值通过在IParam参数中
的CREATESTRUCT结构传递。如果应用程序调用CreateWindow创建一个MDI客户窗口,则
lpParam必须指向一个CLIENTCREATESTRUCT结构。
返回值:如果函数成功,返回值为新窗口的句柄:如果函数失败,返回值为NULL。若想获
得更多错误信息,请调用GetLastError函数。
备注:在返回前,CreateWindow给窗口过程发送一个WM_CREATE消息。对于层叠,弹出式
和子窗口,CreateWindow给窗口发送WM_CREATE,WM_GETMINMAXINFO和WM_NCCREATE消息。
消息WM_CREATE的IParam参数包含一个指向CREATESTRUCT结构的指针。如果指定了
WS_VISIBLE风格,CreateWindow向窗口发送所有需要激活和显示窗口的消息。
    获取有关任务条是否为创建的窗口显示一个按钮的控制信息,参看Taskbar按钮的
Visbility。
    以下预定义的控制类可以在lpClassName参数中指定。注意在dwStyle参数中可以使用
的相应的控制风格。
BUTTON按钮按钮是一个小矩形子窗口,用户可以点击来打开或关闭。按钮控制可以单独使
用或包含在组中使用,可以为控制写标签或不写标签。当用户点击按钮控制时按钮的外观有
明显的改变。请参看Button。查看dwStyle参数中指定的按钮风格表请参考Button Style。
COMBOBOX组合框由一个列表框和一个类似于编辑控制的选择域组成。在使用这个风格控制
时,应用程序或者使列表框一直显示或者是作成一个下拉列表。如果列表框可见,则在编辑
域中输入字符将使列表框中与字符一致的第一个域高亮。反之,在列表框中选择的项将显示
在编辑域中。请参看Combo Boxes。
查看dwStyle参数中指定的组合框风格表请参考Combo Boxes Style。
EDIT编辑框一个小的矩形子窗口用户可以使用键盘向其中输入文本。用户可以通过点击或
按Tab键来选中编辑框控制并且使控制获得焦点。当编辑框中显示一个闪烁的插入记号时,
用户可以输入文本。使用鼠标移动光标,选择被替换的字符或设置插入字符的位置或使用回
退键删除字符。请参看Edit。controls。
查看dwStyle参数中指定的编辑框风格的表格请参考Edit Control Style。
LISTBOX列表框字符串的列表。当应用程序必须显示名称的列表,例如文件名列表等,使用
户可以从中选择时就可指定列表框。用户可以通过单击来选择名称。选择时,被选择名高亮,
同时传递给父窗口一个通知消息。请参看LiSt Box Style。查看dwStyle参数中指定的列
表风格表请参考List BOX Control Style。
MDICLIENT MDI客户设计出MDI客户窗口。窗口接收控制MDI应用程序子窗口的消息。建议
使用两种控制风格位:WS_CLIPCHILDREN和WS_CHILD。指定了WS_HSCROLL和WS_VSCROLL风
格的MDI客户窗口允许用户将MDI子窗口滑动进入视窗。请参看MDI。
RiChEdit设计一个Rich Editl.0版的控制。该控制使用户可以以字符和段落格式测览和编
辑文本,并且可以包含嵌入的COM对象。请参看Rich Edit Controls。查看dwStyle参数
中指定的RichEdit风格表请参考LiSt Box Control Style。
RICHEDIT CLASS设计一个Rich Edik2.0版的控制。该控制使用户可以以字符和段落格式测
览和编辑文本,并且可以包含嵌入的COM对象。请参看RichEditControls。查看dwStyle
参数中指定的RichEdit风格表请参考RichEditControIStyle。
SCROLLBAR 滚动条设计的一个包含着一个滚动盒和两端有方向箭头的矩形。只要用户点击了
控制,滚动条就给父窗口发送一个通知消息。如有必要,父窗口负责更新滚动条的位置。请
参看ScrollBars。查看dwStyle参数中指定的滚动条风格表请参考Scroll Bars Style。
STATIC一个简单的静态文本域,文本盒或矩形用于给控制加标签,组合控制或将控制与其
他控制分开。
静态控制不提供输入和也不提供输出。请参看Static Control Styles。查看dwStyle参数
中指定的静态文本风格表请参考Scroll Bars Style。
    Windows95:系统可以支持最大16,364个窗口句柄。
备注:如果在链接应用程序时指明是Windows 4.x版本,除非应用程序的窗口有窗口某单,
否则窗口控制没有标题控制。对Windows3.x版本没有这种要求。
    Windows CE:CreateWindow是以“宏”方式完成的。它被定义为CreateWindowEX,并
且dwExStyle参数被置为长整数0。不支持菜单条控制,除非被声明为子窗口标志否则hMenu
参数必须为NULL。不支持MDICLIENT窗口类。dwStyle参数可以是对话框(Dialogue Box),
窗口(Windows),控制(Controls)文件中的窗口风格和控制风格的组合。
    下列dwStyle标志在窗口中不支持:
WS_CHILDWINDOW WS_ICONC;WS_MAXMIZE WS_MAXIMIZEBOX;WS_MINIMIZE WS_MINIMIZEBOX;
WS_OVERLAPPEDWINDOW WS_POPUPWINDOW;WS_SIZEBOXWS_THICKFRAME WS_TILED 
WS_TILEDWINDOW
    下列dwStyle标志在控制和对话框中不支持:
    不支持的按钮风格和静态控制风格:
BS_LEFTTEXT SS_BLACKFRAME;BS_MULTILINE SS_GRAYFRAME BS_TEXT SS_METAPICT;
BS_USERBUTTON SS_SIMPLE
    不支持组合框SS_WHITERECT风格。
CBS_OWNERDRAWFIXED SS_BLACKRECT;CBS_OWNWEDRAWVARIABLE SS_GRAYRECT; CBS_SIMPLE8R
旧HTrIMAGE
    不支持列表框控制SS_WHITEFRAME风格。
LBS_NODATA
    不支持的对话框风格:
LBS_OWNERDRAWFIXED DS_ABSALIGN; LBS_OWNERDRAWVARIABLE DS_CENTERMOUSE; 
LBS_STANDARD DS_CONTEXTHELP
    不支持滚动条的 DS_FIXEDSYS风格
SBS_BOTTOMALIGN DS_NOFAILCREATE;SBS_RIGHTALIGN DS_NOIDLEMSG;
SBS_SlZEBOXBOTT0MRIHTALIGN DS_SYSMODAL;SBS_SIZEGRIP
    可使用BS_OWNERDRAW风格来代替BS_USERBUTTON风格。
    可使用SS_LEFT或SS_LEFTNOWORDWRAP风格来代替静态控制的SS_SIMPLE风格。
    不支持MDICLIENT窗口类。
    所有窗口都隐含WS_CLIPSIBLINGS和 WS_CLIPCHILDREN风格。
    Windows CE1.0版除对话框外不支持被属窗口。如果hwndParent参数不为NULL,则窗
口隐含给出WS_CHILD风格。Windows CE1.0不支持菜单条。
速查: Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;
头文件:winuser.h;库文件:user32.lib; Unicode:在Windows NT上实现为Unicode和
ANSI两种版本。
2.19.12  CreateWindowEx
函数功能:该函数创建一个具有扩展风格的重叠式窗口、弹出式窗口或子窗口,其他与
CreateWindow函数相同。关于创建窗口和其他参数的内容,请参看CreateWindowEx。
函数原型:HWND CreateWindowEx(DWORD dwExStle,LPCTSTR IpClassName,LPCTSTR 
lpWindowName,DWORD dwStyle,int x,int y,int nWidth,int nHeight,HWND hWndParent,
HMENUhMenu,HANDLE hlnstance,LPVOIDlpParam);
参数:
dwExStyle:指定窗口的扩展风格。该参数可以是下列值:
WS_EX_ACCEPTFILES:指定以该风格创建的窗口接受一个拖拽文件。
WS_EX_APPWINDOW:当窗口可见时,将一个顶层窗口放置到任务条上。
WS_EX_CLIENTEDGE:指定窗口有一个带阴影的边界。
WS_EX_CONTEXTHELP:在窗口的标题条包含一个问号标志。当用户点击了问号时,鼠标光标
变为一个问号的指针、如果点击了一个子窗口,则子窗日接收到WM_HELP消息。子窗口应该
将这个消息传递给父窗口过程,父窗口再通过HELP_WM_HELP命令调用WinHelp函数。这个
Help应用程序显示一个包含子窗口帮助信息的弹出式窗口。 WS_EX_CONTEXTHELP不能与
WS_MAXIMIZEBOX和WS_MINIMIZEBOX同时使用。
WS_EX_CONTROLPARENT:允许用户使用Tab键在窗口的子窗口间搜索。
WS_EX_DLGMODALFRAME:创建一个带双边的窗口;该窗口可以在dwStyle中指定WS_CAPTION
风格来创建一个标题栏。
WS_EX_LEFT:窗口具有左对齐属性,这是缺省设置的。
WS_EX_LEFTSCROLLBAR:如果外壳语言是如Hebrew,Arabic,或其他支持reading order 
alignment的语言,则标题条(如果存在)则在客户区的左部分。若是其他语言,在该风格
被忽略并且不作为错误处理。
WS_EX_LTRREADING:窗口文本以LEFT到RIGHT(自左向右)属性的顺序显示。这是缺省设
置的。
WS_EX_MDICHILD:创建一个MD子窗口。
WS_EX_NOPATARENTNOTIFY:指明以这个风格创建的窗口在被创建和销毁时不向父窗口发送
WM_PARENTNOTFY消息。
WS_EX_OVERLAPPED:WS_EX_CLIENTEDGE和WS_EX_WINDOWEDGE的组合。
WS_EX_PALETTEWINDOW:WS_EX_WINDOWEDGE, WS_EX_TOOLWINDOW和WS_WX_TOPMOST风格的组
合WS_EX_RIGHT:窗口具有普通的右对齐属性,这依赖于窗口类。只有在外壳语言是如
Hebrew,Arabic或其他支持读顺序对齐(reading order alignment)的语言时该风格才有
效,否则,忽略该标志并且不作为错误处理。
WS_EX_RIGHTSCROLLBAR:垂直滚动条在窗口的右边界。这是缺省设置的。
WS_EX_RTLREADING:如果外壳语言是如Hebrew,Arabic,或其他支持读顺序对齐(reading 
order alignment)的语言,则窗口文本是一自左向右)RIGHT到LEFT顺序的读出顺序。若
是其他语言,在该风格被忽略并且不作为错误处理。
WS_EX_STATICEDGE:为不接受用户输入的项创建一个3一维边界风格
WS_EX_TOOLWIDOW:创建工具窗口,即窗口是一个游动的工具条。工具窗口的标题条比一般
窗口的标题条短,并且窗口标题以小字体显示。工具窗口不在任务栏里显示,当用户按下alt
+Tab键时工具窗口不在对话框里显示。如果工具窗口有一个系统菜单,它的图标也不会显
示在标题栏里,但是,可以通过点击鼠标右键或Alt+Space来显示菜单。
WS_EX_TOPMOST:指明以该风格创建的窗口应放置在所有非最高层窗口的上面并且停留在其
L,即使窗口未被激活。使用函数SetWindowPos来设置和移去这个风格。
WS_EX_TRANSPARENT:指定以这个风格创建的窗口在窗口下的同属窗口已重画时,该窗口才
可以重画。
由于其下的同属富日已被重画,该窗口是透明的。
IpClassName:指向一个空结束的字符串或整型数atom。如果该参数是一个整型量,它是由
此前调用theGlobaIAddAtom函数产生的全局量。这个小于OxCOOO的16位数必须是
IpClassName参数字的低16位,该参数的高位必须是O。
    如果lpClassName是一个字符串,它指定了窗口的类名。这个类名可以是任何用函数
RegisterClassEx注册的类名,或是任何预定义的控制类名。请看说明部分的列表。
lpWindowName:指向一个指定窗口名的空结束的字符串指针。
    如果窗口风格指定了标题条,由lpWindowName指向的窗口标题将显示在标题条上。当
使用CreateWindow
函数来创建控制例如按钮,选择框和静态控制时,可使用lpWindowName来指定控制文本。
dwStyle:指定创建窗口的风格。该参数可以是下列窗口风格的组合再加上说明部分的控制风
格。
x:参见CreateWindow。
y:参见CreateWindow。
nWidth:CreateWindow。
nHeigth:参见CreateWindow。
hWndParent:参见CreateWindow。
hMenu:参见CreateWindow。
hlnstance:参见CreateWindow。
lpParam:参见CreateWindow。
返回值:参见CreateWindow。
备注:参见CreateWindow。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;
头文件:winuser.h;库文件:USer32.lib;Unicode:在Windows NT上实现为Unicode和ANSI
两种版本。
2.19.13  DeferWindowPos
函数功能:该函数为指定的窗口更新指定的多窗口位置结构,然后函数返回该更新结构的句
柄。EndDeferWindowPos函数使用该结构内的信息同时改变一些窗口的位置和大小。该结构
由BeginDeferWindowPos函数创建。
函数原型:HWND DeferWindowPos(HDWP hWinPoslnfo,HWND hWnd,HWND hWndlnsertAffer, int 
x,int y, int cx, int Cy,UNIT uFags);
参数:
hWinPoslnfo:多窗口定位结构的句柄,该结构包含着一个或多个窗口的尺寸和定位信息,可
以由函数BeginDeterWindowPos返回该结构或是由最近一次调用的DeferWindowPos函数返
回。
hWnd:窗口的句柄,该窗口的更新信息存储在结构中。
hWndlnsertAfter:被定位窗口的Z序的前一窗口的句柄。这个参数必须为窗口句柄或下列
值之一:HWND_BOTTOM:将窗口定位在Z序的底部。如果hWnd参数指定的是一个最顶层窗口,
则该窗口将失去顶级位置而被排在所有其他窗口的底部。
HWND_NOTOPMOST:将窗口放置在所有顶层窗口的顶部(即在所有顶层窗口的后面)。如果窗
口已经是一个非顶层窗口则此参数不起作用。
HWND_TOP:将窗口放置在Z序的顶部。
HWND_TOPMOST:将窗口放置在所有非顶层窗口的顶部、即使未被激活,窗口仍保持顶级位置。
如果在uFlagS参数中指定了SWP_NOZORDER标志则本参数将被忽略。
x:指定窗口左上角的X坐标。
y:指定窗口左上角的y坐标。
cx:以像素定义窗口的新的宽度。
cy:以像素定义窗口的新的宽度。
uelage:指定下列影响窗口的大小和位置的值的组合:
SWP_DRAWFRAME:在窗口周围画一个边框(该边框定义在窗口类的描述中)。
SWP_FRAMECHANGED:给窗口发送一个WM_NCCALCSIZE消息,即使窗口的尺寸不作改变也要发
送。如果未指定这个标志,则只有窗口大小 改变时才发送WM_NCCALCSIZE消息。
SWP_HIDEWINDOW:隐藏窗口。
SWP_NOACTIVATE:不激活窗口。如果未指定这个标志,则窗口被激活并且根据
hWndlnsertAfter参数的设置移到或是顶部窗口的顶部或是非顶部窗口的顶部。
SWP_NOMOVE;维持当前位置(忽略X和y参数)。
SWP_NOOWNERZORDER:不改变所有者窗口在Z序中的位置。
SWP_NOREDRAM:不作窗口更新。如果设定了这个标志,则不发生任何窗口刷新的动作。包括
不对客户区,非客户区(包括标题条和滚动条),以及由于窗口移动露出的部分父窗口进行
刷新。当设定了这个标志时,应用程序一定要明确指出将原窗口清除并且重画窗口的任何部
分以及父窗口需要重画的部分。
SWP_NOREPOSITION:同 SWP_NOOWNERZORDER标志。
SWP_NOSENDCHANGING:防止窗口接受到WM_WINDOWPOSCHANGING消息。
SWP_NOSIZE;保持当前大小。(即忽略CX,Xy参数)。
SWP_NOZORDER:保持当前Z序(忽略hWndlnsertAfter参数)。
SWP_SHOWWINDOW:显示窗口。
返回值:返回值指明了被更新的多窗口定位结构。函数返回的句柄可能与传递给函数的句柄
不同。这个函数返回的新句柄应在下一次调用时传递给DeferWindowPos函数和
EndDeferWindowPos函数。如果调用函数时系统资源不足,则函数返回NULL。若想获得更多
错误信息,请调用GetLastError函数。
备注:如果调用函数DeferWindowPos失败,应用程序应放弃窗口定位动作,并且不再调用
EndDeferWindowPos 函数。如果未指定SWP_NOZORDER,系统将由hWnd参数指定的窗口定位
于在hWndlnsertAfer参数指定的窗口之后的位置。如果hWndlnsertAfsr参数为空或为
HWND_TOP,则系统将窗口放置在Z序顶端。如果hWndlnsertAfer设为HWND_BOTTOM则系统
将窗口放置在Z序的底部。
所有子窗口的坐标都是相对于父窗口客户区的左上角的坐标。
    一个窗口可以通过两种方式设为顶部窗口:或是设hWndlnsertAfter为HWND_TOPMOST
并确保未设置SWP_NOZORDER标志;或是设置窗口在Z序中的位置使其在所有已存在的顶端
窗口的顶部。当一个非顶端窗口被设为顶端窗口时,则属于它的窗口均被置为顶端窗口,而
其所有者则不变。
    如果SWP_NOACTIVATE或SWP_NOZORDER均未设置(即当应用程序要求在窗口被激活的同
时改变其z序时),hwdfnsertPos参数只在下列情况中使用:
    在hWndlnsertAfter参数中既未设定HWND_TOPMOST也未设定HWND_NoTTOPMOST标志;    
由hWnd指定的窗口不是激活窗口;
    应用程序在将窗口设为活动窗口时应将窗口设置到Z序的顶部。应用程序可以不受任何
限制地改变被激活窗口在Z序中的位置,或在激活一个窗口之后将该窗口移到顶端窗口或非
顶端窗口的顶部。
    如果一个顶端窗口被重定位到Z序的底部(HWND_BOTTOM)或任何非顶端窗口后面时将
不再是顶端窗口。
    一个非顶端窗口可能拥有一个顶端窗口,反之则不成立。从属的任何窗口(例如一个对
话框)都设置为顶层窗口以确保所有的从属窗口都在其所有者之上。
速查: Windows NT:3.1以上版本;Windows:95以上版本; Windows CE:不支持;头文
件: winuser.h;库文件:user32.lib。
2.19.14  DestroyWindow
函数功能:该函数销毁指定的窗口。该函数发送WS_DESTROY,WS_NCDESTROY消息到窗口中
以撤消该窗口并且将键盘焦点移开。该函数也销毁窗口菜单,刷新线程消息队列,销毁计时
器,删除剪贴板的所有权,并断开剪贴板视窗链接(如果窗口在视窗链接的顶端)。
    如果指定的窗口是父窗口或所有者窗口,DestroyWindow在销毁父窗口或所有者窗口时
自动销毁相关的子窗口和从属窗口。该函数首先销毁相关联的子窗口和从属窗口,然后销毁
父窗口和所有者窗口。
DestroyWindow也销毁由CreateDialog函数创建的无模式对话框。
函数原型: BOOL DestroyWindow(HWND hWnd);
参数:
hWnd;将被销毁窗口的句柄。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信
息,请调用GetLastError函数。
备注:一个线程不能用DestroyWindow函数销毁由其他线程创建的窗口。
    如果被销毁窗口是一个不具有 WS_EX_NOPARENTNOTIFY风格的子窗口,则其父窗口将接
收到一个WM_PARENTNOTIFY消息。
    Windows CE:DestroyWindow函数不发送 WM_NCDESTROY消息。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本:
头文件:Winuser.h;库文件:user32.lib。
2.19.15 EnableWindow
函数功能:该函数允许或禁止指定的窗口或控制接受鼠标输入或键盘输入。当输入被禁止时
窗口不能接收鼠标单击和按键等类输入;当输入允许时,窗口接受所有的输入。
函数原型:BOOL EnableWindow(HWND hWnd,BOOL bEndble);
参数:
hWnd:允许或禁止的窗口句柄。
bEnable:指定是允许还是禁止窗口。如果这个参数为TRUE,窗口允许;如果参数为FALSE,
则窗口被禁止。
返回值:如果窗口此前曾被禁止,则返回值为非零;如果窗口此前未被禁止,则返回值为零。
若想获得更多错误信息,请调用 GetLastError函数。
备注:如果窗口的使能状态正在改变,则在EnableWindow函数返回前发送一个WM_ENABLE
消息。如果窗口己经被禁止,则它的所有子窗口都被禁止,即使未向它们发送WM_ENABLE消
息。
    在一个窗口被激活前必须是使能的。例如,如果应用程序正在显示一个无模式对话框并
且禁止了它的主窗口,则应用程序在销毁对话框之前一定要使能该主窗口。否则,将有另外
一个窗口接受键盘焦点并且被激活。如果一个子窗口被禁止,则在系统确定由哪一个窗口接
受鼠标消息时该子窗口将被忽略。
    当窗口被创建时缺省为使能状态。要创建一个初始被禁止的窗口,应用程序可以在
CreateWindowh 函数和CreateWindowhEx中指定WS_DISABLED风格。在窗口被创建后,应用
程序可以使用EnaoleWindow函数来使能和禁止窗口。
    应用程序可以使用这个函数来使能或禁止在对话框内的控制。一个被禁止的控制不能接
受键盘焦点用户也不能进入该控制。
速查:Windows NT:3.1以上版本;Windows:95以上版本; Windows CE:1.0以上版本;
头文件:winuser.h;库文件:user32.lib。
2.19.16  EndDeferWindowPos
函数功能:该函数在一个单一的屏幕刷新周期内同时更新一个或多个窗口的位置和大小。
函数原型:BOOL EndDeferWindowPos( HWND hWinPoslnfo);
参数;
hWlnPoslnfo:指向多窗口定位结构的句柄,该结构包含着一个或多个窗口的尺寸和定位信
息。这个内部结构由BeginDeferWindowPos函数返回或由最近一次调用DeferWindowPos函
数退回。
返回值:如果函数成功,返回值为非零:如果函数失败,返回值为零。若想获得更多错误信
息,请调用GetLastError函数。
备注;EndDeferWindowPos函数向内部结构指定的每一个窗口发送WM_WINDOWPOSCHANGING
和WM_WINDOWPOSCHANGED消息。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:不支持:头文件:
winuser.h;库文件:user32.lib。
2.19.17 EnumChildProc
函数功能:该函数是由应用程序定义的,与函数EnumChildWindows一起使用的回调函数。
它接收子窗口句柄。类型WNDENUMPROC定义了一个指向回调函数的指针。EnumChildProc是
一个应用程序定义的函数名的位置标志符。
函数原型:BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM ItParam);
参数:
hwnd:指向在EnumChildWindows中指定的父窗口的子窗口句柄。
Lparam:指定在EnumChildWindows函数给出的应用程序定义值。
返回值:为继续枚举,回调函数必须返回TRUE;为停止枚举,回调函数必须返回FALSE。
备注:回调函数可以执行任何要求的任务。
应用程序必须通过将其地址传送给EnumChildWindows函数来注册这个回调函数。
速查: Windows NT:3.1以上版本;Windows:95以上版; Windows CE:不支持;头文件:
winuser.h;库文件:用户自定义。
2.19.18 EnumChildProc
函数功能:是与函数EnumChilWindows一起使用的由应用程序定义的回调函数。它接收子窗
口句柄。类型 WNDENUMOROC定义了指向这个回调函数的指针。EnumChildProc是一个应用程
序定义的函数名的位置标志符。
函数原型:BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM IParam);
参数:
hWnd:指向在EnumChildWlndows中定义的父窗口的子窗口句柄。
lparam:指定在EnumchildWindows中给出的应用程序定义值。
返回值:为继续列举,回调函数必须返回TRUE;为停止列举,回调函数必须返回FALSE。
备注:回调函数可以执行任何要求的任务。应用程序必须通过将其地址传送给
EnumChildwindows函数来注册这个回调函数。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:不支持:头文件:
winuser.h;库文件:用户自定义。
2.19.19  EnumTreadWindows
函数功能:该函数枚举所有与一个线程有关的非子窗口。办法是先将句柄传给每一个窗口,
随后传送给应用程序定义的回调函数。EnumThreadWindows函数继续到所有窗口枚举完为止
或回调函数返回FALSE为止。要枚举一个特定窗口的所有子窗口;使用EnumChjdwjndows函
数。
函数原型:BOOL EnumThreadWindows{DWORD dwThreadld,WNDENUMROCIpfn,LPARAMIPam};
参数:
dwThreadld:标识将被列举窗口的线程。
lpfn:指向一个应用程序定义的回调函数指针,请参看EnumThreadWndProc。
IPararm:指定一个传递给回调函数的应用程序定义值。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信
息,请调用GetLastError函数。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:不支持:头文件:
winuser.h;库文件:user32.Iib。
2.19.20  EnumThreadWndProc
函数功能:该函数枚举所有与一个线程相关联的非子窗口,办法是先将句柄传送给每一个窗
口,随后传送给应用程序定义的回调函数。EnumThreadWindows函数继续直到所有窗口枚举
完为止或回调函数返回FALSE为止。要枚举一个特定窗口的所有子窗口,使用
EnumChildWindows函数。
函数原型:BOOL EnumThreadWindows(DWORD dwThreadld,WNDENUMPROClpfn,LPARAMlparam);
参数:
dwThreadld:标识将被列举窗口的线程。
lpfn:指向一个应用程序定义的回调函数指针,请参看EnumThreadWndProc。
lPararm:指定一个传递给回调函数的应用程序定义值。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信
息,请调用GetLastError函数。
速查:Windows NT:3.1以上版本; Windows:95以上版本; Windows CE:不支持:头文
件:winuser.h;库文件:user32.Iib。
2.19.21 EnumWindows
函数功能:该函数枚举所有屏幕上的顶层窗口,办法是先将句柄传给每一个窗口,然后再传
送给应用程序定义的回调函数。EnumThreadWindows函数继续到所有顶层窗口枚举完为止或
回调函数返回FALSE为止函数原型:BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM 
lParam);
参数:
lpEnumFunc:指向一个应用程序定义的回调数指针,请参看EnumWindowsProc。
lPararm:指定一个传递给回调函数的应用程序定义值。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信
息,请调用GetLastError函数。
备注:EnumWindows函数不列举子窗口。
    在循环体中调用这个函数比调用GetWindow函数更可靠。调用GetWindow函数中执行这
个任务的应用程序可能会陷入死循环或指向一个已被销毁的窗口的句柄。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;
头文件:winuser.h;库文件:user32.lib。
2.19.22 EnumWindowsProc
函数功能:该函数是一个与EnumWindows或EnumDesktopWindows一起使用的应用程序定义
的回调函数。它接收顶层窗口句柄。WNDENUMPROC定义一个指向这个回调函数的指针。
EnumWindowsProc是应用程序定义函数名的位置标志符。
函数原型:BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM IParam);
参数:
hwnd:顶层窗口句柄。
lParam:指定在EnumWIndowsh或EnumDesktopWindows中的应用程序定义值。
返回值:为继续列表,回调函数必须返回TRUE;若停止列表,它必须返回FALSE。
备注:应用程序必须通过传递给EnumWindows或EnumDesktopWindows应用程序地址来注册
这个回调函数。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本:
头文件:winuser.h;库文件:用户自定义。
2.19.23 FindWindow
函数功能:该函数获得一个顶层窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。
这个函数不查找子窗口。在查找时不区分大小写。
函数型:HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName);
参数:
IpClassName :指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。
如果该参数为一个成员,则它必须为前次调用theGlobafAddAtom函数产生的全局成员。该
成员为16位,必须位于IpClassName的低 16位,高位必须为 0。
IpWindowName:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为空,则
为所有窗口全匹配。
返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄;如果函数失败,返回
值为NULL。
若想获得更多错误信息,请调用GetLastError函数。
备注:Windows CE:若类名是一个成员,它必须是从 RegisterClass返回的成员。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;
头文件:Winuser.h;库文件:user32.lib;  Unicode:在 Windows NT上实现为 Unicode
和 ANSI两种版本。
2.19.24 FlndWindowEx
函数功能:该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这
个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。
函数原型:HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass,
LPCTSTR  lpszWindow);
参数;
hwndParent:要查找子窗口的父窗口句柄。
    如果hwnjParent为NULL,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。
Windows NT5.0 and later:如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口。
hwndChildAfter :子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为
hwndPareRt窗口的直接子窗口而非后代窗口。如果HwndChildAfter为NULL,查找从
hwndParent的第一个子窗口开始。如果hwndParent 和 hwndChildAfter同时为NULL,则函
数查找所有的顶层窗口及消息窗口。
lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。
如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该
成员为16位,必须位于lpClassName的低16位,高位必须为0。
lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL,
则为所有窗口全匹配。返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄。
如果函数失败,返回值为NULL。
若想获得更多错误信息,请调用GetLastError函数。
速查 NT:4.0对以上版本;Windows:95以上版本;Windows CE:不支持;头文件:winuser.h;
库文件:user32.lib;Unicode:在Windows NT上实现为Unicode和ANSI两种版本。
2.19.25  GetClientRect
函数功能:该函数获取窗口客户区的坐标。客户区坐标指定客户区的左上角和右下角。由于
客户区坐标是相对子窗口客户区的左上角而言的,因此左上角坐标为(0,0)
函数原型:BOOL GetClientRect(HWND hWnd,LPRECT lpRect);
参数:
GetLastError 函数。
备注:Windows CE:命令条包含在客户区中。
速查:Windows NT: 3.1以上版本:Windows:95以上版本: Windows CE:1.0以上版本:
头文件:winuser.h;库文件:user32.lib
2.19.26  GetDesktopWindow
函数功能:该函数返回桌面窗口的句柄。桌面窗口覆盖整个屏幕。桌面窗口是一个要在其上
绘制所有的图标和其他窗口的区域。
函数原型:HWND GetDesktopWindow(VOID)
参数:无。
返回值:函数返回桌面窗口的句柄。
速查:Windows NT:3.1以上版本;Windows:95以上版本:Windows CE:不支持;头文件:
Winuser.h;库文件:user32.lib。
2.19.27  GetForegroundWindow
函数功能:该函数返回前台窗口(用户当前工作的窗口)。系统分配给产生前台窗口的线程
一个稍高一点的优先级。
函数原型:HWND GetForegroundwindow(VOID)
参数:无。
返回值:函数返回前台窗回的句柄。
速查:Windows NT:3.1以上版本;Windows:95以上版本:Windows CE:1.0以上版本:
头文件:Winuser.h;库文件:user32.lib。
2.19.28  GetLastActivePopup
函数功能:该函数确定指定窗口中的哪一个弹出式窗口是最近活动的窗口。
函数原型:HWND GetLastActivePopup(HWND hWnd);
参数:
hWnd:所有者窗口句柄。
返回值:返回值标识了最近活动的弹出式窗口的句柄。如果满足下列任一条件,则返回值与
参数hWnd
相同:由hWnd指定的窗口是最近活动的:由hWnd指定的窗口不拥有任何弹出式窗口;由hWnd
指定的窗口不是顶层窗口或它属于其他窗口。
速查:Windows:3.1以上版本;Windows:95以上版本:Windows CE:不支持;头文件:winuser.h;
库文件:user32.lib。
2.19.29  GetNextWindow
函数功能:该函数返回z序中的前一个或后一个窗口的句柄。下一窗口在指定窗口的下面,
前一窗口则在上面。如果指定的窗口是顶端窗口,该函数返回下一个(或前一个)顶端窗口
的句柄。如果指定的窗口是顶层窗口,函数返回下一个(或前一个)顶层窗口的句柄。如果
函数是子窗口,则函数搜索下一个或前一个子窗口的句柄。
函数原型:HWND GetNextWindow(HWND hWnd,UNIT wCmd);
参数:
hWnd:一个窗口的句柄。窗口句柄在wCmd参数的基础上获得的相对于这个窗口的句柄。
wCmd:指明窗口返回的是前一窗口的句柄还是后一窗口的句柄。该参数可以是下列两个值之
一:
GW HWNONEXT:返回在给定窗口的下面窗口的句柄。
GW_HWNDPREV:返回在给定窗口的上面窗口的句柄。
返回值:如果函数成功,返回值是前一窗口(或后一窗口)的句柄。如果前后窗口不存在,
则返回值为NULL。若想获得更多错误信息,请调用GetLastError函数。
备注:在设定了GW_HWNDNEXT或GW_GETPREV标志时,调用该函数与调用GetWindow函数相
同。
速查:Windows NT:3.1以上版本;Windows:95以上版本:Windows CE:不支持:头文件:
Winuer.h;库文件:user32.lib。
2.19.30  GetParent
函数功能:该函数获得一个指定子窗口的父窗口句柄。
函数原型:HWND GetParent(HWND hWnd);
参数:
hWnd:子窗口句柄,函数要获得该子窗口的父窗口句柄。
返回值:如果函数成功,返回值为父窗口句柄。如果窗口无父窗口,则函数返回NULL。若
想获得更多错误信息,请调用GetLastError函数。
备注:WindowsCE:Windows CE1.0版本不支持除了对话框之外的所属子窗口。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本:
头文件:Winuser.h:库文件:user32.lib。
2.19.31  GetTopWindow
函数功能:该函数检查与特定父窗口相联的子窗口z序,并返回在z序顶部的子窗口的句柄。
函数原型:HWND GetTopWindow(HWND hWnd);
参数:
hWnd:被查序的父窗口的句柄。如果该参数为NULL,函数返回Z序顶部的窗口句柄。
返回值;如果函数成功,返回值为在Z序顶部的子窗口句柄。如果指定的窗口无子窗口,返
回值为NULL。
若想获得更多错误信息,请调用GetLastError函数。
速查:Windows NT:3.1以上版本;Windows:95以上版本:Windows CE:不支持;头文件:
Winuser.h:库文件;user32.lib。
2.19.32  GetWindow
函数功能:该函数返回与指定窗口有特定关系(如Z序或所有者)的窗口句柄。
函数原型:HWND GetWindow(HWND hWnd,UNIT nCmd);
参数:
hWnd:窗口句柄。要获得的窗口句柄是依据nCmd参数值相对于这个窗口的句柄。
nCmd:说明指定窗口与要获得句柄的窗口之间的关系。该参数值可以是下列之一:
GW_CHILD:如果指定窗口是父窗口,则获得的是在Z序顶端的子窗口的句柄,否则为NULL。
函数仅检查指定父窗口的子窗口,不检查继承窗口。
GW_ENABLEDPOUP:(WindowsNT 5.0)返回的句柄标识了属于指定窗口的处于使能状态弹出式
窗口(检索使用第一个由GW_HWNDNEXT 查找到的满足前述条件的窗口);如果无使能窗口,
则获得的句柄与指定窗口相同。
GW_HWNDFIRST:返回的句柄标识了在Z序最高端的相同类型的窗口。如果指定窗口是最高端
窗口,则该句柄标识了在Z序最高端的最高端窗口;如果指定窗口是顶层窗口,则该句柄标
识了在z序最高端的顶层窗口:如果指定窗口是子窗口,则句柄标识了在Z序最高端的同属
窗口。
GW_HWNDLAST:返回的句柄标识了在z序最低端的相同类型的窗口。如果指定窗口是最高端窗
口,则该柄标识了在z序最低端的最高端窗口:如果指定窗口是顶层窗口,则该句柄标识了
在z序最低端的顶层窗口;如果指定窗口是子窗口,则句柄标识了在Z序最低端的同属窗口。
GW_HWNDNEXT:返回的句柄标识了在Z序中指定窗口下的相同类型的窗口。如果指定窗口是
最高端窗口,则该句柄标识了在指定窗口下的最高端窗口:如果指定窗口是顶层窗口,则该
句柄标识了在指定窗口下的顶层窗口;如果指定窗口是子窗口,则句柄标识了在指定窗口下
的同属窗口。
GW HWNDPREV:返回的句柄标识了在Z序中指定窗口上的相同类型的窗口。如果指定窗口是
最高端窗口,则该句柄标识了在指定窗口上的最高端窗口;如果指定窗口是顶层窗口,则该
句柄标识了在指定窗口上的顶层窗口;如果指定窗口是子窗口,则句柄标识了在指定窗口上
的同属窗口。
GW_OWNER:返回的句柄标识了指定窗口的所有者窗口(如果存在)。
返回值:如果函数成功,返回值为窗口句柄;如果与指定窗口有特定关系的窗口不存在,则
返回值为NULL。
若想获得更多错误信息,请调用GetLastError函数。
备注:在循环体中调用函数EnumChildWindow比调用GetWindow函数可靠。调用GetWindow
函数实现该任务的应用程序可能会陷入死循环或退回一个已被销毁的窗口句柄。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;
头文件:winuser.h;库文件:user32.lib。
2.19.33  GetWindowPlacement
函数功能:该函数返回指定窗口的显示状态以及被恢复的、最大化的和最小化的窗口位置。
函数原型:BOOL GetWindowPlacement(HWND hWnd,WINDOWPLACEMENT★lpwndpl);
参数:
hWnd:  窗日句柄。
lpwndpl:指向WINDOWPLACEMENT结构的指针,该结构存贮显示状态和位置信息。
    在调用GetWindowPlacement函数之前,将WINDOWPLACEMENT结构的长度设为
sizeof(WIDNOWPLACEMENT)。如果lpwndpl->length设置不正确则函数GetWindowPlacement
将失败。
返回值;如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信
息,请调用GetlastError函数。
备注:由该函数获得的WINDOWPLACEMENT结构的flag单元总为0。如果hWnd的窗口被最大
化,则showCmd元为SHOWMZAXMIZED,如果窗口被最小化,则showCmd元为SHOWMINIMIZED,
除此之外为SHOWNORMN,WINDOWPLACEMENT长度单元必须置为sizeOf( WINDOWPLACEMENT),
如果参数设置不正确,函数返回FALSE。查看设置窗口位置坐标的正确信息,参看
WINDOWPLACEMENT。
速查:Windows Nt:3.1以上版本:Windows:95以上版本;Windows CE:不支持;头文件:
Winuser.h;库文件:User32.lib。
2.19.34  GetWindowRect
函数功能:该函数返回指定窗口的边框矩形的尺寸。该尺寸以相对于屏幕坐标左上角的屏幕
坐标给出。
函数原型:BOOL GetWindowRect(HWND hWnd,LPRECTlpRect);
参数:
hWnd:窗口句柄。
lpRect:指向一个RECT结构的指针,该结构接收窗口的左上角和右下角的屏幕坐标。
返回值:如果函数成功,返回值为非零:如果函数失败,返回值为零。若想获得更多错误信
息,请调用GetLastError函数。
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows CE:1.0以上版本;
头文件:Winuser.h;库文件:User32.lib。
2.19.35  GetWindowText
函数功能:该函数将指定窗口的标题条文本(如果存在)拷贝到一个缓存区内。如果指定的
窗口是一个控制,则拷贝控制的文本。但是,GetWindowTeXt不能接收在其他应用程序中的
控制文本。
函数原型:Int GetWindowText(HWND hWnd,LPTSTR lpString,Int nMaxCount);
参数:
hWnd:带文本的窗口或控制的句柄。
IpString:指向接收文本的缓冲区的指针。
nMaxCount:指定要保存在缓冲区内的字符的最大个数,其中包含NULL字符。如果文本超过
界限,它就被截断。
返回值:如果函数成功,返回值是拷贝的字符串的字符个数,不包括中断的空字符;如果窗
口无标题栏或文本,或标题栏为空,或窗口或控制的句柄无效,则返回值为零。若想获得更
多错误信息,请调用GetLastError函数。
    函数不能返回在其他应用程序中的编辑控制的文本。
备注:如果目标窗口属于当前进程,GetWindowText函数给指定的窗口或控制发送WM_GETTEXT
消息。如果目标窗口属于其他进程,并且有一个窗口标题,则GetWindowTeXt返回窗口的标
题文本,如果窗口无标题,则函数返回空字符串。
速查:Windows NT:3.1以上版本;Windows:95以上版本:Windows CE:1.0以上版本;
头文件:Winuser.h;库文件:user32.lib:Unicode:在Windows NT上实现为Unicode和ANSI
两种版本。
2.19.36   GetWindowTextLength
函数功能:该函数返回指定窗口的标题文本(如果存在)的字符长度。如果指定窗口是一个
控制,函数将返回控制内文本的长度。但是GetWindowTextLength函数不能返回在其他应用
程序中的控制的文本长度。
函数原型:nit GetWindowTextLent(HWND hWnd);
参数:
hWnd:窗口或控制的句柄。
返回值:如果函数成功,返回值为文本的字符长度。在一定的条件下,返回值可能比实际的
文本长度大。请参看说明。如果窗口无文本,返回值为零。若想获得更多错误信息,请调用
GetLastError函数。
备注:如果目标窗口属于当前进程,GetWindowTextLength函数给指定的窗口或控制发送
WM_GETTEXT消息。
在一定的条件下,函数GetWindowTextLength的返回值可能比实际的文本长度大。这是由于
ANSI和Unlcode的混和使用以及系统允许DBCS字符在文本内存在的原因,但是函数返回值
要至少与文本的实际长度相等,因此可以利用这一点指导缓存区的分配。在应用程序既使用
ANSI函数又使用Unicode的普通对话框时就会有缓存分配的问题;同样,当应用程序在一
个Unicode的窗口过程中使用了ANSI的GetWindowTextLength函数,或在一个ANSI的窗口
过程中使用了Unicode的GetWindowTextLength函数的时候也有缓存分配的问题。查看ANSI
和Vnicode函数,参考Wind32函数prototypes。
要获得文本的实际长度,使用WM_GETTEXT, LB_GETTEXT或CB_GETLBTBTEXT消息或
GetWindowText函数。
速查:Windows NT:3.1以上版本:Windows:95以上版本:Windows CE:1.0以上版本;
头文件:Winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为山Unicode和
ANSI两种版本。
2.19.37  GetWlndowThreadprocessld
函数功能:该函数返回创建指定窗口线程的标识和创建窗口的进程的标识符,后一项是可选
的。
函数原型;DWORD GetWindowThreadProcessld(HWND hwnd,LPDWORD lpdwProcessld);
参数:
hWnd:窗口句柄。
lpdwProcessld:接收进程标识的32位值的地址。如果这个参数不为NULL,
GetWindwThreadProcessld将进程标识拷贝到这个32位值中,否则不拷贝。
返回值:返回值为创建窗口的线程标识。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;
头文件:winuser.h;库文件;user32.lib。
2.19.38  IsChild
函数功能:该函数测试一个窗口是否是指定父窗口的子窗口或后代窗口。如果该父窗口是在
父窗口的链表上则子窗口是指定父窗口的直接后代。父窗口链表从原始层叠窗口或弹出窗口
一直连到该子窗口。
函数原型:BOOL IsChild(HWND hWndParant,HWND hWnd);
参数:
hWndparant:父窗口句柄。
hWnd:将被测试的窗口句柄。
返回值:如果窗口是指定窗口的子窗口或后代窗口,则退回值为非零。如果窗口不是指定窗
口的子窗口或后代窗口,则退回值为零。
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows CE:1.0以上版本;
头文件:winuser.h;库文件:user32.Iib。
2.19.39  IsIconic
函数功能:该函数确定给定窗口是否是最小化(图标化)的窗口。
函数原型:BOOL IsIconic(HWND hWnd);
参数:
hWnd:被测试窗口的句柄。
返回值:如果窗口已图标化,返回值为非零;如果窗口未图标化,返回值为零。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:不支持;头文件:
winuser.h;
库文件:user32.Iib。
2.19.40IsWindow                                                                                         
函数功能:该函数确定给定的窗口句柄是否识别一个已存在的窗口。
因数原型:BOOL isWindow(HWND hWnd);
参数:
hWnd:被测试窗口的句柄。
返回值:如果窗口句柄标识了一个已存在的窗口,返回值为非零;如果窗口句柄未标识一个
已存在窗口,返回值为零。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;
头文件:winuserhs;库文件:User32.lib。
2.19.41  IsWindowUnicode
函数功能:该函数确定指定的窗口是否是一个本地Unicode窗口。
函数原型:  BOOL lswindowUnicode(HWND hwndJ;
参数:
hWnd:被测试窗口的句柄。
返回值:如果窗口是一个本地Unicode窗口,返回值为非零;如果窗口不是一个本地Unicode
窗口,返回值为零,同时说明窗口是一个ANSI窗口。
备注;一个窗口的字符集是由函数RegosterClass决定的。如果窗口类是以ANSI版的
RegisterClass ( RegjsterClassA)注册的,则窗口字符集是ANSI的;如果窗口类是以
Unicode版的Registerclass( RegisterClassW)注册的,则窗口字符集是Unicode。
    系统为窗口消息自动作Unicode和ANSI的双向翻译。例如,如果一个使用Unicode字
符集的窗口测到一个ANSI窗口消息,则系统在调用窗口过程之前先将该消息转换为Unicode
消息。系统调用lsWindowUnicode函数决定是否翻译消息。
速查:Windows NT:3.1以上版本;Windows: 95以上版本;Windows CE:不支持;头文件:
Winuser.h;库文件:user32.lib。
2.19.42  IsWindowVlslble
函数功能:该函数获得给定窗口的可视状态。;
函数原型:BOOL IsWindowVisible(HWND hWnd);
参数;
hWnd:被测试窗口的句柄。
返回值:如果指定的窗口及其父窗口具有WS_VISIBLE风格,返回值为非零;如果指定的窗
口及其父窗口不具有WS_VISIBLE风格,返回值为零。由于返回值表明了窗口是否具有
Ws_VISIBLE风格,因此,即使该窗口被其他窗口遮盖,函数返回值也为非零。
备注:窗口的可视状态由WS_VISIBLE位指示。当设置了WS_VISIBLE位,窗口就可显示,而
且只要窗口具有WS_VISIBLE风格,任何画在窗口的信息都将被显示。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;
头文件:winuser.h;库文件:user32.lib。
2.19.43  IsZoomed
函数功能:该函数确定窗口是否是最大化的窗口。
函数原型:BOOL IsZoomed(HWND hWnd);
参数:
hWnd:被测试窗口的句柄。
返回值:如果窗口己最大化,则返回值为非零;如果窗口未最大化,则返回值为零。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:不支持;头文件:
Winuer.h;库文件:User32.Iib。
2.19.44  MoveWindow
函数功能:该函数改变指定窗口的位置和尺寸。对于顶层窗口,位置和尺寸是相对于屏幕的
左上角的:对于子窗口,位置和尺寸是相对于父窗口客户区的左上角坐标的。
函数原型:BOOL MoveWindow(HWND hWnd.int x.int y,int nWidth,int nHeight,BOOL 
BRePaint);
参数:
hWnd:窗口句柄。
x:指定窗口的新位置的左边界。
Y:指定窗口的新位置的顶部边界。
nWidth:指定窗口的新的宽度。
nHaight:指定窗口的新的高度。
bRepaint:确定窗口是否被刷新。如果该参数为TRUE,窗口接收一个WM_PAINT消息;如果
参数为FALSE,不发生任何刷新动作。它适用于客户区,非客户区(包括标题栏和滚动条),
及由于移动子窗口而露出的父窗口的区域。如果参数为FALSE,应用程序就必须明确地使窗
口无效或重画该窗口和需要刷新的父窗口。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信
息,请调用GetLastError函数。
备注:如果bRepaint为TRUE,系统在窗口移动后立即给窗口过程发送WM_PAINT消息(即
由MoveWindow函数调用UPdateWindow函数)。如果bRepaint 为FALSE,系统将WM_PAINT
消息放在该窗口的消息队列中。消息循环只有在派遣完消息队列中的其他消息时才派遣
WM_PAINT消息。
MoveWindow给窗口发送WM_WfNOWPOSCHANGING,WM_WINDOWPOSCHANGED,WM_MOVE,WM_SIZE
和WM_NCCALCSIZE消息,
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows CE:1.0以上版本:
头文件:winuser.h;库文件:user32.lib。
2.19.45  Openlcon
函数功能:该函数将一个最小化窗口恢复到原来的位置和尺寸并且激活该窗口。
函数原型:BOOL Openlcon(HWNDhWnd);
参数:
hWnd:被恢复与激活的窗口的句柄。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信
息,请调用GetLastError函数。
备注:Openlcon向给出的窗口发送WM_QUERYOPEN消息。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:不支持:头文件:
winuser.h;库文件:user32.lib。
2.19.46  SetForegroundWindow
函数功能:该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗
口,并为用户改各种可视的记号。系统给创建前台窗口的线程分配的权限稍高于其他线程。
函数原型:BOOL SetForegroundWindow(HWND hWnd)
参数:
hWnd:将被激活并被调入前台的窗口句柄。
返回值:如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零。
备注:前台窗口是z序顶部的窗口,是用户的工作窗口。在一个多任务优先抢占环境中,应
让用户控制前台窗口。
    Windows NT 5.0:当用户在另一个窗口中工作时,应用程序不能强行设置一个窗口到前
台。相反,SetForeground函数将会激活窗口并且调用FlashWindowEx函数通知用户。
    Windows CE:拥有窗口的线程不具有优先启动权。
速查:Windows NT;3.1以上版本;Windows;95以上版本;Windows CE:1.0以上版本;
头文件:winuser.h;库文件:user32.lib。
2.19.47  SetParent
函数功能:该函数改变指定子窗口的父窗口。
函数原型:HWND SetPalrent(HWND hWndChild,HWND hWndNewParent);
参数:
hWndChild:子窗口句柄。
hWndNewParent:新的父窗口句柄。如果该参数是NULL,则桌面窗口就成为新的父窗口。在
WindowsNT5.0中,如果参数为HWND_MESSAGE,则子窗口成为消息窗口。
返回值:如果函数成功,返回值为子窗口的原父窗口句柄;如果函数失败,返回值为NULL。
若想获得多错误信息,请调用GetLastError函数。
备注:应用程序可以使用SetParent函数来设置弹出式窗口,层叠窗口或子窗口的父窗口。
新的窗口与窗口必须属于同一应用程序。
    如果参数hWndChild标识的窗口是可见的,系统将执行适当的重画和刷新动作。
    由于兼容的原因,对于将改变父窗口的子窗口,SetParent函数并不改变该子窗口的
WS_CHILO WS_POPUP风格。所以,如果hWndNewParent参数为NULL,就应在调用SetParent
函数之后清空WS_CHILD位并且设置为WS_POPUP风格。相反的,如果hWndNewParent参数不
为NULL并且在此之前窗口是桌面窗口的子窗口,就应在调用SetParent函数之前清空
WS_POPUP位井设置WS_CHILD风格。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本:
头文件:Winuser.h;库文件:user32.lib。
2.19.48  SetWindowLong
函数功能:该函数改变指定窗口的属性。函数也将在指定偏移地址的一个32位值存入窗口
的额外窗口存。
函数原型:LONG SetWindowLong(HWN hWnd,int nlndex.LONG dwNewLong);
参数:
hWnd:窗口句柄,及间接声明的该窗口所属的类。
nlndex:给出了要设置的值的零起点的偏移地址。有效值为从0到额外窗口存储空间的字节
数一4。例如
如果指定了12位或更多位字节的额外内存,则32位值的索引值应为第3个32位值的索引
位8。设置其他值,要指定下列中的一个值:
GWL_EXSTYLE;设置一个新的扩展窗口风格。GWL_STYLE:设置一个新的窗口风格。
GWL_WNDPROC:为窗口过程设置一个新的地址。
GWL_HINSTANCE:设置一个新的应用程序事例句柄。GWL_ID:为窗口设置一个新的标识。
GWL_USERDATA:设置与窗口有关的32位值。每个窗口都有一个对应的32位值供创建该窗口
的应用程序使用。
    当hWnd参数标识了一个对话框是可使用下列值的:
DWL_DLGPROC:设置对话框过程的新地址。
DWL_MSGRESULT:设置在对话框过程中处理的消息返回值。
DWL_USER:设置新的额外信息,该信息仅为应用程序所有,例如句柄或指针。
dWNewLong:指定替换值。
返回值:如果函数成功,返回值为给定的32位整数的原来的值。如果函数失败,返回值为
0。若想获得更多错误信息,请调用GetLastError函数。
    如果给定的32位值的原来的值是0,并且函数成功,则返回值为0。但是这时函数并不
清除最后的错误信息,这就很难判断函数成功与否。这时,就应在调用SetWindowLong之前
调用calingsetLastEm函数清除最后的错误信息。这样,如果函数失败就会返回0,并且
GetLastError也返回一个非零值。
备注:如果由hWnd参数指定的窗口与调用线程不属于同一进程,将导致SetWindowLong函
数失败。指定的窗日数据是在缓存中保存的,因此在调用SetWindowLong之后再调用
SetWindowPos函数才O
SetWindowLong函数所作的改变生效。
    如果使用带GWL_WNDPROC索引值的SetWindowLong函数替换窗口过程,则该窗日过程必
须WindowProc回调函数说明部分指定的指导行一致。
    如果使用带DWL_MSGRESULT索引值的SetWlndowLong函数来设置由一个对话框处理的消
息的和值,应在此后立即返回TRUE。否则,如果又调用了其他函数而使对话框过程接收到
一个窗口消息,返回值:如果函数成功,返回值为给定的32位整数的原来的值。如果函数
失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。
    如果给定的32位值的原来的值是0,并且函数成功,则返回值为0。但是这时函数并不
清除最后的错误信息,这就很难判断函数成功与否。这时,就应在调用SetWindowLong之前
调用calingsetLastEm函数清除最后的错误信息。这样,如果函数失败就会返回0,并且
GetLastError也返回一个非零值。
备注:如果由hWnd参数指定的窗口与调用线程不属于同一进程,将导致SetWindowLong函
数失败。
指定的窗口数据是在缓存中保存的,因此在调用SetWindowLong之后再调用SetWindowPos
函数才O SetWindowLong函数所作的改变生效。
    如果使用带GWL_WNDPROC索引值的SetWindowLong函数替换窗口过程,则该窗日过程必
须WindowProc回调函数说明部分指定的指导行一致。
    如果使用带DWL_MSGRESULT索引值的SetWlndowLong函数来设置由一个对话框处理的消
息的和值,应在此后立即返回TRUE。否则,如果又调用了其他函数而使对话框过程接收到
一个窗口消息,套的窗口可能消息可能改写使用DWL_MSGRESULT设定的返回值。
可以使用带GWL_WNDPROC索引值的SetWindowLohg函数创建一个窗口类的子类,该窗口类是
用于创建该窗口的类。一个应用程序可以一个系统类为子类,但是不能以一个其他进程产生
的窗口类为于类。
SetWindowLong函数通过改变与一个特殊的窗口类相联系的窗口过程来创建窗口子类。从而
使系统调用新的窗口过程而不是以前定义的窗口过程。应用程序必须通过调用
CallWindowProc函数向前窗口传递未被新窗口处理的消息。允许应用程序创建一个窗口过
程链。可以通过对RegisterClassEx函数中使用的WNDCLASSEX结构的chWndExtra单元指定
一个非零值来保留额外窗口内存。
不能通过调用带GWL_HWNDPARENT索引值的SetWindowLong的函数来改变子窗口的父窗口。
应使用SetParent函数。
WindowsCE:nlndex参数必须是4个字节的倍数;不支持Unaligned access。
不支持下列nlndex参数值:
GWL_HINSTANCE;GWL_HWNDPARENT;GWL_USERDATA
WindowsCE2.0版支持在索引参数中的DWL_DLGPROC值,但是WindowsCE1.0不支持。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本:
库文件:user32.lib;
Unicode;在Windows NT上实现为Unicode和ANSI两种版本。
2.19.49  SetWindowPlacement
函数功能:该函数设置指定窗口的显示状态和恢复,最大化,最小化位置。
函及原型;BOOL SetwlndowPlacement(HWND hWnd,CONST WINDOWPLACEMENT★lpwndpl);
参数:
hWnd:窗口句柄。
lpwndpl:指向一个WINDOWPLACEMWNT结构的指针,该结构给出了新的显示状态和窗口位置。
在调用函数SetWindowPlacement之前,将WINDOWPLACEMWNT结构的长度单元置为sizeof
(WINDOWPLACEMENT)。如果lpwndpl->length设置不正确,函数SetWindowPlacement将
失败。
返回值:如果函数成功,返回值为非零。如果函数失败,返回值为零。若想获得更多错误信
息,请调用callGetLastErro函数。
备注:如果在WIDNOWPLACEMENT中指定的信息使窗口完全显示在屏幕之外,系统自动调整坐
标以使窗口可见,兼顾屏幕设置和多种监视器配置。
  WINDOWPLACEMENT的长度成员信息设置为sizeof(WINDOWPLACEMENT),如果设置不正确,
函数将返回FLASE。查看窗口位置坐标的信息,参看WINDOWPLACEMENT。
速查:Windows NT:3.1以上版本;Windows;95以上版本;Windows CE:不支持;头文件;
winuser.h;库文件:user32.lib。
2.19.50  SetWindowPos
函数功能:该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸,位置和Z序。子窗口,
弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高,并
且被设置为Z序的第一个窗口。
函数原型:BOOL SetWindowPos(HWN hWnd,HWND hWndlnsertAfter,int X,int Y,int cx,
int cy,UNIT.Flags);
参数:
hWnd:窗口句柄。
hWndlnsertAfter:在z序中的位于被置位的窗口前的窗口句柄。该参数必须为一个窗口句
柄,或下列值之一:
HWND_BOTTOM:将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口,则窗口失去顶
级位置,并且被置在其他窗口的底部。
HWND_DOTTOPMOST:将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。如果窗口己
经是非顶层窗口则该标志不起作用。
HWND_TOP:将窗口置于Z序的顶部。
HWND_TOPMOST:将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。
   查g看该参数的使用方法,请看说明部分。
x:以客户坐标指定窗口新位置的左边界。
Y:以客户坐标指定窗口新位置的顶边界。
cx:以像素指定窗口的新的宽度。
cy:以像素指定窗口的新的高度。
uFlags:窗口尺寸和定位的标志。该参数可以是下列值的组合:
SWP_ASNCWINDOWPOS:如果调用进程不拥有窗口,系统会向拥有窗口的线程发出需求。这就
防止调用线程在其他线程处理需求的时候发生死锁。
SWP_DEFERERASE:防止产生WM_SYNCPAINT消息。
SWP_DRAWFRAME:在窗口周围画一个边框(定义在窗口类描述中)。
SWP_FRAMECHANGED:给窗口发送WM_NCCALCSIZE消息,即使窗口尺寸没有改变也会发送该消
息。如果未指定这个标志,只有在改变了窗口尺寸时才发送WM_NCCALCSIZE。
SWP_HIDEWINDOW;隐藏窗口。
SWP_NOACTIVATE:不激活窗口。如果未设置标志,则窗口被激活,并被设置到其他最高级窗
口或非最高级组的顶部(根据参数hWndlnsertAfter设置)。
SWP_NOCOPYBITS:清除客户区的所有内容。如果未设置该标志,客户区的有效内容被保存并
且在窗口尺寸更新和重定位后拷贝回客户区。
SWP_NOMOVE:维持当前位置(忽略X和Y参数)。
SWP_NOOWNERZORDER:不改变z序中的所有者窗口的位置。
SWP_NOREDRAW:不重画改变的内容。如果设置了这个标志,则不发生任何重画动作。适用于
客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动而露出的父窗口的所有部分。
如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口的任何部分和父窗口需
要重画的部分。
SWP_NOREPOSITION;与SWP_NOOWNERZORDER标志相同。
SWP_NOSENDCHANGING:防止窗口接收WM_WINDOWPOSCHANGING消息。
SWP_NOSIZE:维持当前尺寸(忽略cx和Cy参数)。
SWP_NOZORDER:维持当前Z序(忽略hWndlnsertAfter参数)。
SWP_SHOWWINDOW:显示窗口。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误消
息,请调用GetLastError函数。
备注:如果设置了SWP_SHOWWINDOW和SWP_HIDEWINDOW标志,则窗口不能被移动和改变大小。
如果使用SetWindowLoog改变了窗口的某些数据,则必须调用函数SetWindowPos来作真正
的改变。使用下列的组合标志:SWP_NOMOVEISWP_NOSIZEISWP_FRAMECHANGED。
    有两种方法将窗口设为最顶层窗口:一种是将参数hWndlnsertAfter设置为
HWND_TOPMOST并确保没有设置SWP_NOZORDER标志;另一种是设置窗口在Z序中的位置以使
其在其他存在的窗口之上。当一个窗口被置为最顶层窗口时,属于它的所有窗口均为最顶层
窗口,而它的所有者的z序并不改变。
    如果HWND_TOPMOST和HWND_NOTOPMOST标志均未指定,即应用程序要求窗口在激活的同
时改变其在Z序中的位置时,在参数hWndinsertAfter中指定的值只有在下列条件中才使用:
    在hWndlnsertAfter参数中没有设定HWND_NOTOPMOST和HWND_TOPMOST标志。
    由hWnd参数标识的窗口不是激活窗口。
    如果未将一个非激活窗口设定到z序的顶端,应用程序不能激活该窗口。应用程序可以
无任何限制地改变被激活窗口在Z序中的位置,或激活一个窗口并将其移到最高级窗口的顶
部或非最高级窗口的顶部。
    如果一个顶层窗口被重定位到z序的底部(HWND_BOTTOM)或在任何非最高序的窗口之
后,该窗口就不再是最顶层窗口。当一个最顶层窗口被置为非最顶级,则它的所有者窗口和
所属者窗口均为非最顶层窗口。
    一个非最顶端窗口可以拥有一个最顶端窗口,但反之则不可以。任何属于顶层窗口的窗
口(例如一个对话框)本身就被置为顶层窗口,以确保所有被属窗口都在它们的所有者之上。
    如果应用程序不在前台,但应该位于前台,就应调用SetForegroundWindow函数来设置。
    Windows CE:如果这是一个可见的顶层窗口,并且未指定SWP_NOACTIVATE标志,则这
个函数将激活窗口、如果这是当前的激活窗口,并且指定了SWP_NOACTIVATE或
SWP_HIDEWINDOW标志,则激活另外一个可见的顶层窗口。
    当在这个函数中的nFlags参数里指定了SWP_FRAMECHANGED标志时,WindowsCE重画窗
口的整个非客户区,这可能会改变客户区的大小。这也是重新计算客户区的唯一途径,也是
通过调用SetwindowLong函数改变窗口风格后通常使用的方法。
    SetWindowPos将使WM_WINDOWPOSCHANGED消息向窗口发送,在这个消息中传递的标志
与传递给函数的相同。这个函数不传递其他消息。
    Windows CE 1.0不支持在hWndlnsertAber参数中的HWND_TOPMOST和HWND_NOTOPMOST
常量。
    Windows CE1.0不支持在fuFags参数中的SWP_DRAWFRAME和SWP_NOCOPYBITS标志。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;
头文件:winuser.h库文件:eser32lib。
2.19.51  SetWindowText
函数功能:该函数改变指定窗口的标题栏的文本内容(如果窗口有标题栏)。如果指定窗口
是一个控制,则改变控制的文本内容。然而,SetWindowText函数不改变其他应用程序中的
控制的文本内容。
函数原型:BOOL SetWindowText(HWND hwnd,LPCTSTR lpStrjng);
参数:
hWnd:要改变文本内容的窗口或控制的句柄。
lpString:指向一个空结束的字符串的指针,该字符串将作为窗口或控制的新文本。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信
息,请调用GetLastError函数。
备注:如果目标窗口属于当前进程,SetWindowText函数会使WM_SETTEXT消息发送给指定
的窗口或控制。然而,如果控制是以WS_CAPTION风格创建的列表框控制,SetWindowText
函数将为控制设置文本,而不是为列表项设置文本。
    SetWindowText函数不扩展tab字符(ASCII代码0×09),Tab字符以字符‘}’来显示。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;
头文件;winuser.h;库文件:user32.lib;Unicode:Windows NT上实现为Unicode和ANSI
两种版本。
2.19.52  ShowOwnedPopups
函数功能:该函数显示或隐藏属于指定窗口的所有弹出式窗口。
函数原型:BOOL ShowOwnedPopups(HWND hWnd;BOOL fshow);
参数:
hWnd:拥有弹出式窗口的窗口句柄,这些弹出式窗口将被显示或隐藏。
fShow:指明弹出式窗口是被显示还是隐藏。如果该参数为TRUE,则所有隐藏的弹出式窗口
均被显示;如果该参数为FALSE,则所有显示的弹出式窗口均被隐藏。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信
息,请调用GetLastError函数。
备注:ShowOwnedPopups函数仅显示由以前调用ShowOwnedPopups隐藏的窗口。例如,如果
弹出式窗口由调用ShowWinodw函数隐藏,则在随后调用ShowOwnedPopups(将fShow参数
置为TRUE)并不能使窗口显示出来。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:不支持;头文件:
Winuser.h;库文件:user32.Lib
2.19.53  ShowWindow
函数功能:该函数设置指定窗口的显示状态。
函数原型:BOOL ShowWindow(HWND hWnd,int nCmdShow);
参数:
hWnd:窗口句柄。
nCmdShow:指定窗口如何显示。如果发送应用程序的程序提供了STARTUPINFO结构,则应用
程序第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该
值应为在函数WinMain中nCmdShow参数。在随后的调用中,该参数可以为下列值之一:
SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。
在从其他线程最小化窗口时才使用这个参数。
SW_MIOE:隐藏窗口并激活其他窗口。
SW_MAXIMIZE:最大化指定的窗口。
SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。
SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸
和位置。在恢复最小化窗口时,应用程序应该指定这个标志。
SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。
SW_SHOWDEFAULT:依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 
结构是由启动应用程序的程序传递给CreateProcess函数的。
SW_SHOWMAXIMIZED:激活窗口并将其最大化。
SW_SHOWMINIMIZED:激活窗口并将其最小化。
SW_SHOWMINNOACTIVATE:窗口最小化,激活窗口仍然维持激活状态。
SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。
SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。
SW_SHOWNOMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的
尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志。
返回值:如果窗口以前可见,则返回值为非零。如果窗口以前被隐藏,则返回值为零。
备注:应用程序第一次调用ShowWindow时,应该使用WinMain函数的nCmdshow参数作为它
的nCmdShow参数。在随后调用ShowWindow函数时,必须使用列表中的一个给定值,而不是
由WinMain函数的nCmdSHow参数指定的值。
    正如在nCmdShow参数中声明的,如果调用应用程序的程序使用了在STARTUPINFO结构
中指定的信息来显示窗口,则在第一次调用ShowWindow函数时nCmdShow参数就被忽略。在
这种情况下,ShowWindow函数使用STARTUPINFO结构中的信息来显示窗口。在随后的调用
中,应用程序必须调用ShowWindow 函数(将其中nCmdShow参数设为SW_SHOWDEFAULT)来
使用由程序调用该应用程序时提供的启动信息。这个处理在下列情况下发生:
应用程序通过调用带WS_VISIBLE标志的函数来创建它们的主窗口函数;
应用程序通过调用清除了WS_VISIBLE标志的CteateWindow函数来创建主窗口函数,并且随
后调用带SW_SHOW标志的ShowWindow函数来显示窗口;
    Windows CE:nCmdShow参数不支持下列值:
SW_MAXIMINZE;SW_MINIMIZE;SW_RESTORE;SW_SHOWDEFAULT
SW_SHOWMAXIMIZED;SW_SHOWMINIMIZED;SW_SHOWMININOACTIVATE
速查:Windows NT:3.1以上版本;Windows:95以上版本:Windows CE:1.0以上版本;
头文件:winuw库文件:user32.lib。
2.19.54  ShowWindowAsync
函数功能:该函数设置由不同线程产生的窗口的显示状态。
函数原型:BOOL ShowWindowAsync(HWND hWnd,int nCmdshow);
参数:
hWnd:窗口句柄。
nCmdShow:指定窗口如何显示。查看允许值列表,请查阅ShowWlndow函数的说明部分。
返回值:如果函数原来可见,返回值为非零;如果函数原来被隐藏,返回值为零。
备注:这个函数向给定窗口的消息队列发送show-window事件。应用程序可以使用这个函数
避免在等待一个挂起的应用程序完成处理show-window事件时也被挂起。
速查:Windows NT:4.0以上版本;Windows:95以上版本;Windows CE:不支持;头文件:
winuser.h;库文件:user32.lib。
2.19.55  TileWindows
函数功能:该函数并到显示指定父窗口的各指定子窗口。
函数原型;WORD WINAPI TileWindows(HWND hWndParent,UNIT wHow,CONST RECT ★IpRect,UNIT 
cKidS;ConHWND FAR ★lpKidS);参数:
hWndParent:  窗口句柄。如果该参数为NULL,则假定为桌面窗口。
wHow:指定不参加安排的窗口类型,及是水平并到显示还是或垂直并到显示。该参数可以为
下列值之一,可以选择与MDITILE_SKIPDISABLED组合以防止停用的的MDI的子窗口被并到
显示:
MDITILE_HORIZONAL:水平并到显示窗口。MDITILE_VERTICAL:垂直并到显示窗口。
IpRect:指向RECT结构的指针,该结构以客户坐标定义矩形区域,在这个区域内排列窗口。
如果该参数为NULL,则使用父窗口的客户区。
cKids:指出在lpKidS参数中给出的数组的成员个数。如果lpKids为NULL则该参数被忽略。
lpKids:指向被排列的子窗口的句柄数组的指针。如果该参数为NULL,则指定窗口(或桌
面窗口)的所有子窗口均被排列。
返回值:如果函数成功,返回值是被安排的窗口数目;如果函数失败,返回值为零。若想获
得更多错误信息,请调用GetLastError函数。
备注:调用TileWindows函数使所有最大化的窗口恢复到原来的尺寸。
速查:Windows NT:4.o以上版本;Windows:95以上版本;Windows CE:不支持;头文件:
winuser.h;库文件:user32.lib。
2.19.56 WindowFromPoint
函数功能:该函数获得包含指定点的窗口的句柄。
函数原型:HWND WindowFromPoint(POINT Point);
参数:
Point:指定一个被检测的点的POINT结构。
返回值S:返回值为包含该点的窗口的句柄。如果包含指定点的窗口不存在,返回值为NULL。
如果该点在静态文本控制之上,返回值是在该静态文本控制的下面的窗口。
备注:WindowFromPoint函数不获取隐藏或禁止的窗口句柄,即使点在该窗口内。应用程序
应该使用ChildWindowFromPoint函数进行无限制查询。
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows CE:1.0以上版本:
头文件:Winuser.h;库文件:user32.lib。
2.19.57 WinMain
函数功能:该函数被系统调用,作为一个32位应用程序的入口点。
函数原型:int WINAPI WinMain(HINSTANCEE hlnstance,HINSTANCE hPrelnstance,LPSTR 
lpCmdLine,int nCmdShow);
参数;
hinstance:应用程序当前事例的句柄。
hPrelnstance:应用程序的前事例的句柄。对于一个32的位程序,该参数总为NULL。
    如果需要检测另外一个事例是否已经存在,则使用CreateMutex函数创建一个独一无二
的名字。即使互斥名已经存在,CreateMutex函数也是成功的,但是GetLastError函数将
返回 ERROR_ALREADY_EXISTS,这就表明在应用程序中有另外一个事例存在,因为它首先创
建了互斥名。
lpCmdLine:指向应用程序命令行的空字符串的指针,不包括函数名。获得整个命令行,参
看GetCommandLine。
nCmdShow:指明窗口如何显示。该参数可以是下列值之一:
SW_HIOE:隐藏窗口并且激活另外一个窗口。
SW_MINIMIZE:最小化指定的窗口,并且激活在系统表中的顶层窗口。
SW_RESTORE:激活并显示窗口。如果窗口已经最小化或最大化,系统将以恢复到原来的尺寸
和位置显示窗口(与SW_SHOWNORMAL相同)。
SW_SHOW:激活一个窗口并以原来的尺寸和位置显示窗口。
SW_SHOWMAXIMIZED:激活窗口并且将其最大化。
SW_SHOWMINIMIZED:激活窗口并将其目标化。
SW_SHOWMINNOACTIVE:将一个窗口显示为图标。激活窗口维持活动状态。
SW_SHOWNA:以窗口的当前状态显示窗口。激活窗口保持活动状态。
SW_SHOWNOACTIVATE:以窗口的最近一次的尺寸和位置显示窗口。激活窗口维持激活状态。
SW_SHOWNORMAL:激活并显示窗口。如果窗口最大化或最小化,系统将其恢复到原来的尺寸
和位置(与SW_RESTORE相同)。
返回值:如果函数成功,当它接收到一个WM_QUIT消息时就中止,函数应该返回在该消息的
wParam参数的退出值。如果函数在进入消息循环时退出,应该返回零。
备注:WinMain函数应初始化应用程序,显示主窗口,进入一个消息接收一发送循环,这个
循环是应用程序执行的其余部分的顶级控制结构。当接收到一个WM_QUIT消息时,程序就中
止。这时,WinMain函数应退出应用程序,并且返回传递给WM_QUIT消息的wParam参数的
值。如果由于调用PostQuitMessage函数而接收到WM_QUIT消息,wParam的值是
PostQuiMessage函数的nExitCode的值。请参看“创建一个窗口循环”。
    ANSI应用程序可以使用WinMain函数的lpCmdLine参数进入命令行字符串(除了程序
名之外)。WinMain不能返回Unicode字符串的原因是IpCmdLine使用的是LPSTR数据类型,
而不是LPTSTR类型。GetCommandLine函数可以用于进入命令行的Unicode字符串,因为它
使用的是LPTSTR类型。
    Windows CE:Windows CE不支持下列 nCmdLine参数值:
SW_MINIMIZE;SW_RESTORE;SW_RESTORE;SW_SHOWMAXMIZED
SW_SHOWMINIMIZED;SW_SHOWMINNOACTIVE
速查:Windows NT:3.1以上版本;Windows:95以上版本:Windows CE:1.0以上版本;
头文件:Winbase.h库文件:用户自定义。
2.19.58 AnyPopup
函数功能:该函数指出一个被属窗口,可见窗口,顶级弹出窗口,或层叠窗日是否在屏幕上
存在。这个函数搜索整个屏幕,而不仅仅搜索应用程序的客户区。
函数原型:BOOL AnyPopup(VOID)
参数:无。
返回值:如果一个弹出式窗口存在,返回值为非零,即使该窗口被其他窗口完全覆盖。如果
弹出式窗口不存在,返回值为零。
备注:函数不检测无所属关系的弹出式窗口,或无WS_VISIBLE设置位的窗口。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:不支持;头文件:
winuser.h;库文件:USer32.lib。
2.19.59 EnumTaskWindows
函数功能:该函数已经过时,由EnumThreadwindows函数取代它。
2.19.60 GetSysModalWindow
函数功能:该函数已经过时,该函数只是为与16位版的窗口程序兼容而提供的。
2.19.61 GetWindowTask
函数功能:该函数已经过时,该函数只是为与16位版的窗口程序兼容而提供的。基于32位
的应用程序应该使用GetWindowThreadProcessld函数。
2.19.62 SetSysModalWindow
函数功能:该函数已经过时,该函数只是为与16位版的窗口程序兼容而提供的。新的输入
模块不允许系统的模块窗口。
2.20 窗口类函数(Window Class)
2.20.1 GetClasslnfoEx
函数功能:该函数获得有关窗口类的信息,包括与窗口类相关的小图标的句柄的信息。
GetClasslnfo函数不检索小图标的句柄。
函数原型:BOOL GetClasslnfoEx(HINSTANCE  hlnst,LPCTSTR  lpszClass,LPWNDCLASSEX 
lpwcx);
参数 :
hlnst:创建类的应用程序的事例的句柄。获得由系统定义的类(如按钮或列表框)的信息,
设置该参数为NULL。
IpszClass :指向一个包含类名的空结束的字符串的指针。类名必须为事先己注册的类,或
是由此前调用 RegisterClaaEx 函数注册的类。或者还可以是一个整型数,如果参数是一个
整型数,它必须是由以前调用GlobaAdd原子函数创建的全局原子。这个16位整型数小于
OXCOOO,必须是lpszClassS的低16位,其高位字为 0。
Ipwcx:指向接收类信息的WNDCLASSEX结构的指针。
返回值:如果函数未发现一个匹配的类,并且成功地拷贝了数据,则返回值为0。若想获得
更多错误信息,请调用 GetLastError函数。
速查:Windows NT:35以上版本;Windows:95以上版本:Windows CE:不支持;头文件:
winuser.h;库文件:user32.lib;Unicode: 在Windows NT 上实现为Unicode和ANSI两
种版本。
2.20.2 GetClassLong
函数功能:该函数返回与指定窗口相关的WNDCLASSEX结构的指定32位值。
函数原型:DWORD GetClassLong(HWND hWnd,int nlndex);
参数:
hWnd:窗口句柄间接给出的窗口所属的类。
nlndex:指定要恢复的32位值。从额外的类存储空间恢复一个32位的值,指定的一个大于
等于0的被恢复值的偏移量。有效值为从0开始到额外类存储空间字节数一4。例如,若指
定了12位或多于12位的额外类存储空间,则应设为第三个32位整数的索引位8。要从
WNDCLASSEX结构中恢复任何值,需要指定下面值之一:
GCSW原子:获得一个唯一标识窗口类的原子值,该值与RegisterClassEx函数的返回值相
同。
GCL_CBWNDEXTRA:获得与类中的每个窗口相关的额外窗口中内存空间的字节大小,进入该存
储空间的方法请参看GetWindwoLong。
GCL_HBRBACKGROUND:获得与类有关的背景刷子的句柄。
GCL_HCURSOR:获得与类有关的光标的句柄。
GCL_HICON:获得与类有关的图标的句柄。
GCL_HICONSM:获得与类有关的小图标的句柄。
GCL_HMOUDLE:获得注册该类的模块的句柄。
GCL_MENUNAME:获得菜单名字符串的地址,该字符串标识了与类有关的菜单资源。
GCL_STYLE:获得窗口类的风格位。
GCL_WNDRPOC:获得与类有关的窗口过程的地址。
返回值:如果函数成功,返回值是所需的32位值;如果函数失败,返回值为0。若想获得
更多错误信息,请调用GetLastError函数。
备注:通过使用函数RegisterClassEx将结构WNDCLASSEX中的cbCIsExtra单元指定为一个
非O值来保留额外类的存储空间。
    Windows CE:nlndex参数是一个字节偏移量,但是必须为 4的倍数。Windows CE不支
持unaligned access。
nlndex参数中只可设定为GCL_HICON和GCL_STYLE。
    如果使用了Windows CE的 lconsurs组件,该组件支持在适当的目标平台上的鼠标,
也可以在nlndex中使用GCL_HCURSOR。
    注意支持鼠标的 Windows CE版本包含 Iconcurs和 Mcursor而不是 Icon和 Cursor
组件。
速查:Wiodows NT:3.1以上版本;Windows:95以上版本:Windows CE:1.0以上版本:
头文件:Winuser.h;库文件:USer32.lib:Unicode:在 Windows NT上实现为 Unicode和
ANSI两种版本。
2.20.3 GetClassName
函数功能:该函数获得指定窗口所属的类的类名。
函数原型:Int GetClassName(HWND hWnd,LPTSTR IpClassName int nMaxCount);参数:
hWnd:窗口的句柄及间接给出的窗口所属的类。
IpClassName:指向接收窗口类名字符串的缓冲区的指针。
nMaxCount:指定由参数lpClassName指示的缓冲区的字节数。如果类名字符串大于缓冲区
的长度,则多出的部分被截断。
返回值:如果函数成功,返回值为拷贝到指定缓冲区的字符个数:如果函数失败,返回值为
0。若想获得更多错误信息,请调用GetLastError函数。
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows CE1.0以上版本;头
文件:winuser.h库文件:user32.lib; Unicode:在 Windows NT上实现为 Unicode和 ANSI
两种版本。
2.20.4 GetWindowLong
函数功能:该函数获得有关指定窗口的信息,函数也获得在额外窗口内存中指定偏移位地址
的32位度整型值。
函数原型:LONG GetWindowLong(HWND hWnd,int nlndex);
参数:
hWnd:窗口句柄及间接给出的窗口所属的窗口类。
nlndex:指定要获得值的大于等于0的值的偏移量。有效值的范围从0到额外窗口内存空间
的字节数一4例如,若指定了12位或多于12位的额外类存储空间,则应设为第三个32位
整数的索引位8。要获得任意其他值,指定下列值之一:
GWL_EXSTYLE;获得扩展窗日风格。
GWL_STYLE:获得窗口风格。
GWL_WNDPROC:获得窗口过程的地址,或代表窗口过程的地址的句柄。必须使用GWL_WNDPROC
函数调用窗口过程。
GWL_HINSTANCE:获得应用事例的句柄。
GWL_HWNDPAAENT:如果父窗口存在,获得父窗口句柄。
GWL_ID:获得窗口标识。
GWL_USERDATA:获得与窗口有关的32位值。每一个窗口均有一个由创建该窗口的应用程序
使用的32位值。
    在hWnd参数标识了一个对话框时也可用下列值:
DWL_DLGPROC:获得对话框过程的地址,或一个代表对话框过程的地址的句柄。必须使用函
数CallWindowProc来调用对话框过程。
DWL_MSGRESULT:获得在对话框过程中一个消息处理的返回值。
DWL_USER:获得应用程序私有的额外信息,例如一个句柄或指针。
返回值:如果函数成功,返回值是所需的32位值;如果函数失败,返回值是0。若想获得
更多错误信息请调用 GetLastError函数。
备注:通过使用函数RegisterClassEx将结构WNDCLASSEX中的cbWndExtra单元指定为一个
非0值来保留额外类的存储空间。
    Windows CE:nlndex参数指定的字节偏移量必须为 4的倍数。不支持 unaligmned 
access。
    Windows CE:不支持在参数nlndex中设定的GWL_HINSTANCE和GWL_HWNDPARENT。
    Windows CE1.0也不支持在 nlndex参数中的 DWL_DLGPROC和 GWL_USERDATA。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0对以上版本;
头文件:winuser.h;库文件:user32.lib;在Windows NT上实现为Unicode和ANSI两种版
本。
2.20.5 RegisterClassEx
函数功能:该函数为随后在调用Createwindow函数和CreatewindowEx函数中使用的窗口注
册一个窗口类。
函数原型:ATON RegisterClassEX(CONST WNDCLASSEX★Ipwcx);
参数:
Ipwcx:指向一个WNDCLASSEX结构的指针。在传递给这个函数之前,必须在结构内填充适当
的类的属性返回值:如果函数成功,返回值是唯一识别被注册类的一个原于;如果函数失败,
返回值为0。若想获得更多错误信息,请调用callGetLastError函数。
备注:如果使用RegisterClassEx来注册窗口类,应用程序通知系统被注册类的窗回的消息
使用ANSI字符集的文本和字符参数;如果使用RegisterClassExW来注册窗口类,应用程序
需要系统以Unicode来传递消息的文本参数。IsWindowUnicode函数使应用程序可以查询每
一个窗口的字符特征。参看 Win32 API中的ANSI和Unicode函数,请查阅 Functiont 
prototype(函数原型)。
    应用程序注册的所有的窗口类在应用程序中止后都为未注册的类。
    Windows 95:所有由DLL注册的类在DLL卸载后均未注册的类。
    Windows NT:所有由DLL注册的类在DLL卸载后仍为已注册的类。
    Windows 95:如果WNDCLASSEX结构中的cbWndEXtra或cbCIsEXtra单元包含字节数超
过40个字节,则RegisterClassEx将失败。
速查:Windows NT:4.0以上版本;Windows:95以上版本;Windows CE:不支持:头文件:
winuser.h;库文件:user32.lib; Unicode:在 Windows NT上实现为 Unicode和 ANSI两
种版本。
2.20.6  SetClassLong
函数功能:该函数替换在额外类存储空间的指定偏移地址的32位长整型值,或替换指定窗
口所属类的WNDCLASSEX结构。
函数原型:DWORD SetClassLong(HWND hWnd,int nlndex,LONG dwNewLong);
参数:
hWnd:窗口句柄及间接给出的窗口所属的类。
nlndex:指定将被替换的32位值。在额外类存储空间中设置32位值,应指定一个大于或等
于0的偏移量。
有效值的范围从0到额外类的存储空间的字节数一4;例如,若指定了12位或多于12位的
额外类存储空间,则应设为第三个32位整数的索引位8。要设置WNDCLASSEX结构中的任何
值,指定下面值之一:
GCL_CBCLSEXTRA:设置与类相关的尺寸的字节大小。设定该值不改变己分配的额外字节数。
GCL_CBWNDEXTRA:设置与类中的每一个窗口相关的尺寸的字节大小。设定该值不改变已分配
额外字节数。查看如何进入该内存,参看SetWindowLOng。
GCL_HERBACKGROUND:替换与类有关的背景刷子的句柄。
GCL_HCURSOR:替换与类有关的光标的句柄。GCL_HICON:替换与类有关的图标的句柄。
GCL_HMODULE:替换注册类的模块的句柄。GCL_STYLE:替换窗口类的风格位。
CGL_MENUNAME :替换菜单名字符串的地址。该字符串标识与类有关的菜单资源。
GCL_WNDPROC :替换与窗口类有关的窗口过程的地址。
dwNewLong:指定替换值。
返回值:如果函数成功,返回值是指定的32位整数的原来的值;如果未事先设定,返回值
为0。如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。
备注;如果使用SetClassLong函数和GCL_WNDPROC索引值来替换窗口过程,窗口过程必须
与WindowProccallback函数中的描述的guideline一致。
以带GCL_WNDPROC索引值的SetClassLong函数创建的一个窗口类的的子类将会影响所有随
后以该类创建的窗口。应用程序可以创建一个系统类的子类,但是不能创建由其他进程创建
的类的子类。
通过使用RegisterClassEx函数将WNDCLASSEX结构中的cbWndExtra单元指定为一个非零值
来保留额外的的类存储空间。
小心使用SetClassLong函数。例如,可以通过使用SetClassLong来改变类的背景颜色,但
是这个改变Windows CE:nlndex参数是一个字节偏移量但必须是4的倍数。Unaligned不
支持。
不支持在nlndex参数中的标准的CGL_★值,只有一个例外,如果目标设各支持鼠标,则可
以在nlndex参数中指定CGL_HCURSOR。
注意支持鼠标的WindowsCE版本包含Iconcurs和Mcursor组件而不是lcon和Cursor组件。
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows CE:1.0以上版本;头
文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT 上实现为Unicode和ANSI
两种版本。
2.20.7  SetWindowLong
函数功能:该函数改变指定窗口的属性.函数也将指定的一个32位值设置在窗口的额外存
储空间的指定偏移位置。
函数原型:LONG SetWindowLong(HWND hWnd,int nlndex,LONG dwNewLong);
参数:
hWnd:窗口句柄及间接给出的窗口所属的类。
nlndex:指定将设定的大于等于0的偏移值。有效值的范围从0到额外类的存储空间的字节
数-4:例如若指定了12位或多于12位的额外类存储空间,则应设为第三个32位整数的索
引位8。要设置其他任何值,可以指定下面值之一:
GWL_EXISTYLE:设定一个新的扩展风格。GWL_STYLE:设定一个新的窗口风格。
GWL_WNDPROC:为窗口过程设定一个新的地址。GWL_ID:设置一个新的窗口标识符。
GWL_HINSTANCE:设置一个新的应用程序事例句柄。
GWL_USERDATA:设置与窗口有关的32位值。每一个窗口均有一个由创建该窗口的应用程序
使用的32位值。
    当hWnd参数标识了一个对话框时,也可使用下列值:
DWL_DLGPROC:设置对话框过程的新地址。
DWL_MSGRESULT:设置在对话框过程中处理的消息的返回值。
DWL_USER:设置的应用程序私有的新的额外信息,例如一个句柄或指针。
dwNewLong:指定的替换值。
返回值:如果函数成功,返回值是指定的32位整数的原来的值。如果函数失败,返回值为
0。若想获得更多错误信息,请调用GetLastError函数。
    如果指定32位整数的原来的值为0,并且函数成功,则返回值为0,但是函数并不清除
最后的错误信息,这就很难判断函数是否成功。这时,就应在调用SetWindowLong之前调用
callingSetLastError(0)函数来清除最后的错误信息。这样,如果函数失败就会返回0,
并且GetLastError。也返回一个非零值。
备注;如果由hWnd参数指定的窗口与调用线程不属于同一进程,将导致SetWindowLong函
数失败。
    指定的窗口数据是在缓存中保存的,因此在调用SetWindowLong之后再调用
SetWindowPos函数才能使SetWindowLong函数所作的改变生效。
    如果使用带GWL_WNDPROC索引值的SetWindowLong函数替换窗口过程,则该窗口过程必
须与WindowProccallback函数说明部分指定的指导行一致。
    如果使用带DWL_MSGRESULT索引值的SetWindowLong函数来设置由一个对话框过程处理
的消息的返回值,应在此后立即返回TRUE。否则,如果又调用了其他函数而使对话框过程
接收到一个窗口消息,则嵌套的窗口消息可能改写使用DWL_MSGRESULT设定的返回值。
    可以使用带GWL_WNDPROC索引值的SetWindowLong函数创建一个窗口类的子类,该窗口
类是用于创建该窗口的关。一个应用程序可以一个系统美为于类,但是不能以一个其他进程
产生的窗口类为子类,SetwindowLong函数通过改变与一个特殊的窗口类相联系的窗口过程
来创建窗口子类,从而使系统调用新的窗口过程而不是以前定义的窗口过程。应用程序必须
通过调用CallWindowProc函数向前窗口传递未被新窗口处理的消息,这样作允许应用程序
创建一个窗口过程链。
    通过使用函数RegisterClassEx将结构WNDCLASSEX中的cbWndExtra单元指定为一个非
0值来保留新外窗口内存。
    不能通过调用带GWL_HWNDPARENT索引值的SetWindowLong的函数来改变子窗口的父窗
口,应使用SetParent函数。
    Windows CE:nlndex参数必须是4个字节的倍数不支持unaligned access。
    不支持下列nlndex参数值:。
GWL_HINSTANCE;GWL_HWNDPARENTGWL;GWL_USERDATA
    Windows CE 2.0版支持在nlndex参数中的DWL_DLGPROC值,但是WindowsCE1.0不支
持。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本:
头文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode和
ANSI两种版本。
函数功能:该函数删除一个窗口类,清空该类所需的内存。
函数原型:BOOL UnRegisterClass(LPCTSTR IpClassName; HINSTANCE hlnstance);
参数:
IpClassName:指向一个空结束字符串的指针,或是一个整型原子。如果IpClassName是一
个字符串,则它指定了窗口类的类名。这个类名必须由此前调用RegisterClassEx函数来注
册。系统类,如对话框控制,必须被注册。
    如果这个参数是一个整型原子,它必须是由此前调用GlobalAdd原子函数创建的全局原
子。这个16位整型数小于OxCOOO,必须是lpszClass的低16位,其高位宇必须为0。
hlnstance:创建类的模块的事例句柄。
返回值:如果函数成功,返回值为非零;如果未发现类或由此类创建的窗口仍然存在,则返
回值为0。
若想获得更多错误信息,请调用GetLastError函数。
备注:在调用这个函数之前,应用程序必须销毁由指定类创建的所有窗口。
    应用程序注册的所有窗口类在应用程序中止后都为未注册的类。
    Windows 95:所有由OLL注册的窗口类在DLL卸载后均未注册的类。
    windows NT:所有由DLL注册的类在DLL卸载后仍为已注册的类。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;
头文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Uhicode和
ANSI两种版本。
2.20.9  GetClasslnfoEx
函数功能:该函数获得有关一个窗口类的信息。GetClasslnfo函数已经由GetClasslnfoEx
取代,但是如果不需要获得类的小图标信息.仍然可以使用该函数。
函数原型:BOOL GetClasslnfoEx(HINSTANCE hlnstance,LPCTSTR lpClassName, LPWNDCLASS 
lpWndClass);
参数:
hlnstance:创建该类的应用程序的事例句柄。要获得由系统定义的类的信息(例如按钮和
列表),将该参数设为NULL。
lpClassName:指向一个包含类名的空结束的字符串的指针。类名必须为事先注册的类,或
是由此前调用RegisterClassEx函数注册的类。或者还可以是一个整型数原子,如果参数是
一个整型数原子,它必须是由以前调用GlobalAdd原子函数创建的全局原子。这个16位整
型数小于OxCOOO,必须是lpszClass的低16位,高位字必须为0。
lpWndClass:指向一个接收类信息的一个WNDCLASS结构的指针。
返回值:如果函数发现了一个匹配的类并且成功地拷贝了字符串,则返回值为非零;如果函
数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。
备注:在Windows CE中,如果lpClassName是一个原子,则它必须是从函数RegisterClass
返回的原子。
2.20.10  GetClassWord
函数功能:该函数在窗口类的额外存储空间中的指定偏移地址获取指定窗口所属窗口类的16
位值。不象GCW_原子和GCW_HICONSM,由16位Windows支持的GCW_value己经过时,必须
使用函数GetClassLong来获得窗口的类值。
函数原型:WORD GetCassWord(HWND hWnd,int nlndex);
参数:.
hWnd:窗口句柄及间接给出的窗口所属的类。
nlndex:指定要获得的值的大于等于0字节的偏移量。有效值为从0开始到额外类存储空间
字节数一2。
例如,若指定了10位或更多的额外类存储空间,则应设为第5个16位整数的索引位8。允
许有的另外的有效值:
GCW_原子:恢复一个唯一标识窗口类的原子值,该值与RegiterClassEx函数的返回值相同。
GCW_HICONSM:恢复与窗口相关的小图标的句柄。
返回值:如果函数成功,返回值是所需的16位值;如果函数失败,返回值是零。若想获得
更多错误信息,请调用GetLastError函数。
备注:通过使用函数RegisterClassEx,将结构WNDCLASSEX中的cbClsEXtra单元设为一个
非0值来保留额外的类存储空间。
2.20.11  GetWindowWord
函数功能:该函数已经过时。32位Windows程序应使用GetWindowLong函数。
2.20.12  RegisterClass
函数功能:该函数注册在随后调用CreateWindow函数和CreateWindowEx函数中使用的窗口
类。 RegisterClass函数己经由函数RegisterClassEx函数来代替,但是,如果不需要设
置类的小目标则仍然可以使用RegisterClass函数。
函数原型:ATON RegisterClass(CONST WNDCLASS ★lpWndClass);
参数:
lpWndClass:指向一个WNDCLASS结构的指针。在将它传递给函数之前,必须在该结构中填
充适当的类属性。
返回值:如果函数成功,返回值是唯一标识已注册的类的一个原子;如果函数失败,返回值
为0。若想获得更多错误信息,请调用GetLastError函数。
备注:如果使用RegisterClassA来注册窗口,应用程序通知系统被注册类的窗口的消息使
用ANSI字符集的文本和字符参数;如果使用RegisterClassW来注册窗口,应用程序需要系
统以Unicode来传递消息的文本参数。lsWindowUnicode函数使应用程序可以查询每一个窗
口的字符特征。参看Win32API中的ANSI和Unicode函数,请查阅Functiont prototype。
2.20.12  RegisterClass
函数功能:该函数注册在随后调用CreateWindow函数和CreateWindowEx函数中使用的窗口
类。 RegisterClass函数己经由函数RegisterClassEx函数来代替,但是,如果不需要设
置类的小目标则仍然可以使用RegisterClass函数。
函数原型:ATON RegisterClass(CONST WNDCLASS ★lpWndClass);
参数:
lpWndClass:指向一个WNDCLASS结构的指针。在将它传递给函数之前,必须在该结构中填
充适当的类属性。
返回值:如果函数成功,返回值是唯一标识已注册的类的一个原子;如果函数失败,返回值
为0。若想获得更多错误信息,请调用GetLastError函数。
备注:如果使用RegisterClassA来注册窗口,应用程序通知系统被注册类的窗口的消息使
用ANSI字符集的文本和字符参数;如果使用RegisterClassW来注册窗口,应用程序需要系
统以Unicode来传递消息的文本参数。lsWindowUnicode函数使应用程序可以查询每一个窗
口的字符特征。参看Win32API中的ANSI和Unicode
函数,请查阅Functiont prototype。
    应用程序注册的所有的窗口类在应用程序中止后都为未注册的类。
    Windows 95:所有由DLL注册的类在DLL卸载后均未注册的类。
    Windows NT:所有由DLL注册的类在DLL卸载后仍为已注册的类。
    Windows 95:如果WNDCLASSEX结构中的cbWndExtra或cbClsExtra单元包含字节数超
过40个字节,则RegisterClassEx将失败。
    Windows CE:由lpWndClass参数指向的WNDCLAS结构不支持lpszMenuName域,因为
WindowsCE不支持缺省菜单。
    除非使用了WindowsCE的lconcurs组件(这个组件提供了在适当目标平台上的鼠标支
持),否则不能使用由lpWndClass指向的WNDCLASS结构中的hCursor域。
速查:Windows NT:3.1以上版本;Windows:95以上版本:WindowsCE:1.0以上版本;头
文件:Winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicodee和ANSI
两种版本。
2.20.13  SetClassWord
函数功能:该函数替换指定窗口所属的窗口类的额外存储空间中的指定偏移地址的16位值。
由16位窗口支持的GCW_值己经过时,必须使用SetClassLong函数来设置此前使用
SetClassword函数的GCW_值设置的类值。
函数原型:WORD SetClassWord(HWND hWnd,int nlndex,WORD wNewWord);
参数:
hWnd:窗口的句柄及间接给出的窗口所属的类。
nlndex:指定要获得的值的大于等于0字节的偏移量。有效值为从0开始到额外类存储空间
字节数-2。
例如,若指定了10位或更多的额外类存储空间,则应设为第5个16位整数的索引位8。
wNewWord:指定替换值。
返回值:如果函数成功,返回值是指定的16为整数的原来的值。如果该值未被预先设定,
返回值为0。如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函
数。
备注:通过使用函数RegisterClassEx将结构WNDCLASSEX中的cbClsExtra单元指定为一个
非0值来保留额外类的存储空间。
2.20.14  SetWindowWord
函数功能:该函数已经过时。GWW_value已不再被支持。32位Windows程序应该使用
SetWindowLong函数。
2.21  窗口过程函数(Window Procedure)
2.21.1  CallWindowProc
函数功能:该函数CallWindowProc将消息信息传送给指定的窗口过程。
函数原型:LRESULT CallWindowProc(WNDPROC lpPrevWndFunc,HWND hWnd.UINT Msg,WPARAM 
wParam,LPARAMIParam);
参数:
lpPrevWndFunc:指向前一个窗口过程的指针。如果该值是通过调用GetWindowLong函数,
并将该函数中的nlndex参数设为GWL_WNDPROC或DWL_DLGPROC而得到的,那么它实际上要
么是窗口或者对话框的地址,要么就是代表该地址的句柄。
hWnd:指向接收消息的窗口过程的句柄。
Msg:指定消息类型。
wParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关。
IParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关。
返回值:返回值指定了消息处理结果,它与发送的消息有关。
备注:使用函数CallWindowsProc可进行窗口子分类。通常来说,同一类的所有窗口共享一
个窗口过程。子类是一个窗口或者相同类的一套窗口,在其消息被传送到