极语言基础
极面向对象
窗口与控件
公用控件库
通用对话框
核心库函数
用户界面库
基本图形库
高级图形库
算法权限库
运行环境库
互联网通信
极语言模块
组件对象库
数据驱动库
三维图形库
绘图对象库
三维对象库
运行时函数
活动模板库
多媒体对象
极人工智能

第一节 入门

1.初学者使用极语言集成开发环境

启动极语言编程,点击初级程序进入主界面。设计界面小窗口没显示图标,请关闭设计窗口重开
控件设计器可以使用右键创建,也可以拖曳鼠标画控件。
调整控件大小是在控件的四角或四边按住鼠标左键移动鼠标调整。
选中控件并选择左顶宽高属性,可使用鼠标滚轮调整大小和位置
双击属性列表可以修改控件名称、文字、左边、顶边、宽度、高度等属性,控件编号也就是唯一的标识符
控件上双击左键或单击右键绑定事件可自定义名称,如按钮点击,列表双击。
右键添加控件跟上个控件的大小相同,并根据鼠标位置自动计算与上个控件的左边或顶边位置对齐。
设计菜单的界面,添加第一个自动设为弹出菜单,再添加的内容此菜单的子项目,弹出菜单也叫子菜单。
点击子菜单会弹出它包含的项目,项目内容前面自动增加空格缩进,用来区分子菜单及其项目。
添加完项目再加新的子菜单时,需要选中弹出复选框,添加完子菜单后,自动取消弹出选项的选中。
如果需要在子菜单下面添加二级子菜单,可以在名称前加空格,并选中弹出选项,然后继续添加项目。
编辑菜单和快捷键表均可以绑定事件,子菜单没有编号,不能绑定事件,每个事件对应唯一的标识编号。
设计窗体界面全部共用一个窗体消息来接受系统事件,对话框界面则按相应名称的消息过程接收消息事件。
模式对话框跟消息框一样,加载显示对话框会一直等待,直到关闭对话框,才会执行后面的代码。
无模式对话框可以指定窗口图标,设计器里的图标编号可以用来指定不同图标,对应资源里图标的编号。
对话框窗体的编号是指定资源里的编号,跟菜单资源绑定一致。窗体不含对话框资源,编号是指定菜单资源。
对话框的控件名称中加入& 符号,后面写大写字母,例如:打开(&O),窗口上按下Alt+O键自动点击该控件。
编译生成的程序默认是6.0界面风格,工程菜单取消"新版界面"选择,则使用Windows 95风格
极语言关键语法主要是如果否则判断循环这几种,其中循环语法有四种写法
循环在和循环于是为了迎合传统编程的习惯,不推荐初学者在极语言里使用
程序段 名称后面可以加小括号传递参数,传递参数和返回值没有约定限制
不会因为参数类型去限制传送的数据类型,用户可以自由提交数值或者是变量的指针地址。
程序段可以无返回值,或者返回整数,返回小数需要加冒号,返回(:值*6.5)
参数变量可以指定默认值,不指定数值默认为0,不写参数按默认值提交给程序段
获取控件的文字内容,可以使用~符号直接操作。获取内容需要申请一个文本变量:文本 内容[16];
内容~文本框1; 内容~窗体; 内容~标签1;
获取控件内容,就把控件名写到~右边,写入内容把控件名写左边:
文本框1~内容; 标签2 ~ "你好"; 窗体 ~ 内存; 写入内容右边的变量可以是内存指针的整数变量或者一段文字
编辑代码使用的快捷键:
CTRL+Z撤销
CTRL+Y重做
CTRL+C复制
CTRL+V粘贴
Delete删除
CTRL+F查找
CTRL+R替换
CTRL+P编译
CTRL+W关闭
CTRL+拖曳复制文字
F1编程帮助
F2语法补全
F3查找下个
F4编辑模块
F5水平平铺
F6垂直平铺
F7标点转换
F8更新日志

常见问题:

1.中文输入法打不开。编译运行之后,占用了输入法会导致极语言编辑器的输入法关闭。
解决办法:此时可以按CTRL+F进行搜索然后按Esc取消搜索,这时候输入法就被重新激活。
2.鼠标悬停信息。极语言编辑器里选中相应带颜色的文字可以看到相关的解释,想看解释就选中文字,比搜索要方便
而鼠标指向文字的提示每动一下鼠标,就会产生很多次鼠标移动事件,然后再去读取鼠标下面的文字,并解析出关键字内容
效率并不会很好,况且用键盘打字时,可以直接用键盘选中文字,而不用频繁的使用鼠标,包括语法补全也是用键盘而非鼠标
3.关于内存回收和安全机制。极语言的内存使用主要由开发者自己控制,局部变量的内存是离开程序段时自动回收
全局变量内存包括开发者申请的内存会在关闭程序时系统自动回收,极语言没有变长文本,也不会自动替开发者申请临时内存
申请的内存只要会被使用就不能回收,编译阶段和运行时都不可能精准回收内存,最多能防止内存泄漏,增加内存安全性而已
但是运行时一直监视处理程序的每条执行指令,肯定会影响效率。文本变量用多长申请多长,让开发者学会自己控制内存使用
局部文本内存会自动回收,全局文本内存不回收,需要开发者管理的都是自己申请的内存,全透明的编程对于用户才会更安全
还有就是极语言不像C语言那样有太多的规则限制,导致很多编程语言都要制造很多复杂的概念去突破这些限制,实现更多的功能
而极语言没有这些限制,这些功能就可以轻松实现,不需要语言去专门增加很多新特性去满足开发者需要,因为本来就支持扩展功能

2.自制中文编程环境

安装目录下Sec.exe为集成开发环境(IDE)
Sc.exe为编译器,可以用其它工具编辑代码让它编译。
规定.sec为单文件二进制源码结构,.SEC和.极为多文件文本结构
其它扩展名均保存为单文件的文本源码,如.txt .c .张三 .李四
使用极语言开发环境保存代码时候加上扩展名,保存为纯文本源码
保存的文件拖曳到Sc.exe上面或者运行Sc.exe点击打开保存的源码
或者使用命令行 cmd Sc.exe 源码路径 完整路径前后不用加双引号
自己开发IDE也是同样方法,Sc.exe后面空格加上路径即可实现编译

第二节 变量类型

最常用的变量是整数,如:整数 窗口。就是申请一个名为窗口整数变量。
整数变量也是万能的指针,传送参数参数只有整数和小数这两种。
在小程序片段之内的变量是局部变量,之外的是全局变量
变量的作用主要是用来存取数据,传递参数,算法运算等等。
变量类型之间可以使用等号进行相互转换,语法:变量一=变量二
就是把右边的变量类型转换成左边变量的类型数据。例如:
整数 数一;小数 数二;浮点 数三;
数一=数二;是小数转整数;数二=数一;是整数转小数;
数一=数三;是浮点转整数;数三=数一;是整数转浮点;
转换文本时可以拼接。例如:文本 内容[16]="结果:"+数一"浮点:"+数三;
等号左边是文本自动转文本或拼接,等号左边是小数或浮点时表达式进行浮点运算
内容+数一"\r\n" 是向内容追加文字,原文字增加数一的数字和换行符
如果等号左边是整数,右边是混合运算,尽可能把小数或浮点变量写在前面
如果等号左边和右边都是整数变量,需要浮点运算时,等号后面要加上冒号
例如:数一=:数一 - 数二;还有小数浮点转整数且没有运算: 数一=数二;
代码后面需要加换行或者分号 ,否则难以判定浮点运算与整数的转换
英文名称中文名称数值范围
Bool布尔真(True),假(False)
char,sbyte 字符 -128~127
byte,uchar 字节 0到256
short短数/整形 -32768到32767
ushort,word 正数 0到65535
int,dword 整数 -2147483648到2147483647
single 小数 负数-3.402823E38到-1.401298E-45;正数1.401298E-45到3.402823E38
string 文本现已取消变长文本,申请时必须指定长度;文本 消息[16]="系统提示";英文1字节,汉字2字节
bytes字节组字节组 数组[15,$20,60,128];一组固定的数据,跟文本性质相似
Double 浮点负数时-1.79769313486232E308到-4.94065645841247E-324;正数4.94065645841247E-324到1.79769313486232E308
date日期8字节日期时间,运算和比较按浮点数格式
long,ulong大数64位整数,-9223372036854775808到9223372036854775807。
type类型自定义结构体,示例;类型 窗口类{整数 句柄,左边,上边,宽度,高度;文本 标题[64],内容[256];}
datab数据表自定义数据表,示例;数据表 人物表{整数 生命,内功;字节 等级,职业;小数 坐标X,坐标Y;文本 名称[16],帮派[14];}
object对象对象 名称=对象名;使用等号给对象定义,否则只是一个整数
scls子类子类 类名{整数 变量1,变量2;程序段 登陆(账号)...结束;}
十六进制数字是用$或者0x表示,格林威治时间可以用整数来表示,如整数 时间=0@2018-8-15 12:00;不要带引号。
带引号是文本,如 整数 提示="提示消息";文本 内容(16)="$374727774367008C7A";
前面加$时把十六进制字符转换成二进制数据。文本拼接的写法:内容="最终结果:" + 数值 "。总共" + 次数 "次"
整数 数值=转整数(内容);把数字文本转整数值
小数 数值=转小数(内容);把数字文本转小数值
浮点 数值=转小数(内容);把数字文本转浮点值

关于全局变量和局部变量

在程序段内申请的变量包括提交的参数都是局部变量,在程序段和子类之外申请的变量是全局变量。
全局变量包括字符、字节、整形(短数)、正数、整数、日期、小数、浮点、大数、子类、对象和自定义类型。
全局变量使用的是静态数据空间,局部变量使用动态栈内存空间。任何变量在作为参数传递的时候,均为4字节数值。
所以大于4字节的类型比如文本、浮点和自定义类型,提交的是变量的地址而不是值,地址通常大于0x400000。
小数是提交参数要直接进行小数运算时,才需要特别指定。除此之外任何提交的参数都按整数类型。
因此程序段的参数就只有小数和整数这两种,结构体和子类前面可以写上类的名称用来定义参数。例如:
程序段 示例(坐标类 值)
  整数 横坐标=值.左,纵坐标=值.顶


程序段 计算(角色类 人物)
  整数 伤害=(攻击-人物.防御)*1.5 -人物.减伤;

局部变量的申请和使用:
局部文本和全局文本都可以像操作数组一样,读写其中每一字节。如:文本 s(16)="abc";s(2)=\d;
也可以像其它变量一样,写入数字。如:s=0;文本就被清空,s=$31323334;文本开头就等于4321
因为十六进制是反转的,最后的34写入字符的第一字节,对应文字是4,用s(1)读取出来就是52

第三节 转义和标点符号

转义符号是在文本内容里使用,也就是两个双引号之间的文字内容,例:s="您好\r\n世界";
极语言的代码是允许在中间换行的,两个双引号之间也可以使用换行符制表符分页符等等
符号\r\n转换成换行加回车。其它需要加单引号''如:'\r'为换行符,
'\n'为回车符;'\t'为水平制表符;'\f'为分页符;'\v'为垂直制表符;
''为双引号;'\0'为0字符;'\1'为缩进符号;'\2'为两个换行和回车符组合

另外可以用\把单个文字转换为编码值 ,如 查字符(str,\s);
\转编码值也可以写作'',例如: 查字符(内容,'s');
0#中国;取两个汉字的编码值;0$abcd;取四个英文的编码值
0:1.2.3.4 支持IP段,颜色值,字节高低位等转换为整数值
标点符号在代码中主要是区分文字,或者定义代码范围或行为性质等
这些符号并不生成执行指令,但是可以用来规范或改变生成的执行指令
符号 类型 中文释义和示例
@ 多用途1标记;2取内存地址;3取已知内存偏移地址
|| 多条件判断或者
&& 多条件判断而且
$二进制文本"$4367008C7A",把十六进制字符转换成二进制数据
`宽字符文本"`文字内容",ANSI转成宽字符文本
.指针/连接符读写指针偏移,也可在名称中使用
_指针/连接符读写指针偏移,也可在名称中使用
""文字内容文字内容前后用双引号
$声明文本变量或函数后使用,代表是文本数据
: 标记开头: 跳到 开头
:转成小数运算变量或函数前使用
:返回小数值返回(:4.5)返回(:结果)
#表示浮点浮点 值=45.63#;
\取文字编码取单个文字(包括中文)的编码值
'注释符号符号后面一行内容为注释
//注释符号符号后面一行内容为注释
/* */多行注释/*开始到*/之间的内容为注释
$十六进制如 数值=$0D0A
0x十六进制如 数值=0x0D0A
0#取文字编码0#中国;取两个汉字的编码值
0$取文字编码0$abcd;取四个英文的编码值
0@取日期数值0@2019-4-5;取日期的整数型数值
0:取字段数值ip=0:192.168.1.1;颜色=0:255.64.128;键值=0:70,2;(CTRL+F)
( )小括号如果(左=右);相加(数,值); 整数 组(10);组(0)=15;数=组(1);
[ ]数组或文本长度文本 内容[16];时间类 时间[5];数=内容[2]
{ } 代码片段用于条件判断或循环

第四节 运算符号

变量本身增加或相乘,数=数+8,数=数*10,写起来比较麻烦
可以用+=、-=、*=、/=、|=、&=、%=、^=这样的写法。但加等读起来不顺口
也可以用更简单的a+2; a-3; a*b+3; a/10; a | b; b & a;
也就是运算符号后面的等号可以不写,读起来更顺口。
除法运算,中文写法:数 除 值
符号中文释义和示例
+数值相加或者增加文字(数字变量自动转换为文本)。中文写法:数 加 值,内容 加 “文字”
数值相减或者增加文字(数字变量自动转换为十六进制文本)。中文写法:数 减 值,内容 减 数
*数值相乘,中文写法:数 乘 值
/
|或运算,数|值。两个数值的比特位包含有1,则结果位就为1,否则为0。中文写法:数 或 值
^异或运算,数^值。两个数值的比特位不相同,则结果位就为1,否则为0。中文写法:数 异 值
& 1运算表达式中是与运算:数 与 值;
2单独变量或函数前是取指针地址;
3在变量或数组后面是取四字节内存值;
4检索语句括号后是获取地址;
5循环数组的数据变量后面是每次读写四字节;
%取两个数相除后的余数:数 余 值,也可以在除法后单独使用(数=余);在变量或数组后面是取两字节内存值(数组(1)%)。
!数值为0则为1,数值不是0则为0,中文写法:非 数
~~数,对每个二进制位进行反相,0变1,1变0,中文写法:反 数
=右边变量或表达式的结果值,根据左边变量类型进行转换,然后保存到左边变量地址
++加一数++;变量数增加1。中文写法:数 加一
--减一数--;变量数减少1。中文写法:数 减一
=等于如果(数=值),比较两个变量数值是否相等。中文写法:如果(数 等于 值)
!= <>不等于数!=值,比较判断数不等于值,也可以写作:数<>值,中文写法:如果(数 不等于 值)
<小于数<值,左边数小于右边值。中文写法:数 小于 值
>大于数>值,左边数大于右边值。中文写法:数 大于 值
>=不小于数>=值 左边数不小于右边值,即大于或等于。中文写法:数 不小于 值
<=不大于数<=值,左边数不大于右边值,即小于或等于。中文写法:数 不大于 值
->写入根据左边变量长度,向右边变量或表达式的地址处写入数据(字节字符1字节,整形短数正数2字节,小数整数4字节,数 写入 值+10
<-读取根据左边变量长度,从右边变量或表达式的地址处读取数据(字节字符1字节,整形短数正数2字节,小数整数4字节,数
>>右移数>>值,移位运算(支持小数)。中文写法:数 右移 值
<<左移数<<值,移位运算(支持小数)。中文写法:数 左移 值
~内容~文本框1,读写控件内容。左边为文本变量读取右边控件;左边为控件对象是把右边内容写入控件,窗体 字 "显示标题"
?取上次赋值的结果,即一号寄存器的数值
??纳秒取纳秒计数器的低32位结果,高32位再用%获取。数=纳秒;值=余
浮点运算专用符号:表达式的小括号之后使用,用法:(a+b)余弦;(c)正弦;(a*a+b*b)根;(数)平方根;(n)绝对值;
中文简写释义
绝对值变量或表达式取绝对值(含整数);(数-值)绝对值
余弦变量或表达式取余弦;(数-值)余弦
正弦变量或表达式取正弦;(数-值)正弦
平方根变量或表达式取平方根;(数-值)平方根
正切变量或表达式取正切;(数-值)正切
反正切变量或表达式取反正切;(数-值)反正切
第五节 编程语法
编程代码里的文字部分,包括关键字和名称定义,都是用标点符号区分开的。空格 制表符 回车换行 逗号 分号它们的作用类似
整数 数一;小数 数二;也可以写成 整数 数一 小数 数二 空格 制表符 回车换行 逗号 分号 括号这些都能把文字给区分开
分号通常用于这句代码结束时,也可以用空格 制表符 回车 换行等符号代替分号;而关键字后面通常是自定义的名称,如:整数 数一
这是要申请一个整数变量,名字叫数一,一句代码的中间是用空格而不是加分号,所以空格 换行 制表符可以代替分号,分号却不能代替空格等
而逗号通常是要连续重复操作某件事时,比如 整数 数一,数二,数三,数四 这里是要连续申请四个整数变量,使用逗号可以不用每次都写整数
再比如调用函数时,发送消息(窗口,消息,参数,数据),小括号里也是要连续提交多个变量,就用逗号隔开;括号都是成对出现,代表一个范围
程序段 窗体消息(窗口,消息,参数,数据)
  判断(消息)为 窗口关闭{停止(0)}
  为 单击左键{左键点击(参数)}
  否则 处理窗口(窗口,消息,参数,数据)
结束
上面这段代码是一个程序段的示例, 程序段后面用空格,表示后面是要定义一个名称:窗体消息
后面是一对小括号,里面也是连续申请了四个接收参数,跟发送消息提交的四个参数一一对应
调用发送消息函数,把消息发给指定窗口,在窗体消息这里就能收到发过来的四个参数
窗体消息里第一行代码是判断消息窗口关闭停止程序运行,停止哪个程序?括号里写0,代表是本程序
这句话用平时说话的语句,就把所有关键词都写成一段文字了,编程代码是要把这些都区分开
判断后面加小括号就把判断两个字分开,括号里是要判断的对象,这里判断发来的消息是什么
如果消息窗口关闭,后面是大括号,它表示可能有多句代码,会执行大括号里的这些代码
如果只有一句,大括号也可以省略,比如否则 处理窗口(窗口,消息,参数,数据) 就没写大括号
否则后面就要加个空格,不加的话,就是否则处理窗口,这六个字就不是已经定义的名称,编程器无法解读
最后的结束是这段代码结束了,结束后面可以加分号,但是结束后面一般都有换行,就不用加分号。
程序段的代码也可以用大括号,不用写结束两个字。还有参数默认值是在创建程序段的参数名后面加等号
程序段 加法计算(数一=10,数二=5)
{
  返回(数一 + 数二)
}
判断语句只用写一次,第二行还是判断消息为单击左键的时候,执行左键点击这个函数
这个消息到来时,参数是控件的编号,数据是控件对象,窗口都是主窗口,设计多个主窗口时,可以根据哪个窗口去执行不同的操作
窗体的消息非常多,大部分都是交给处理窗口这个函数来处理,否则就是其它消息就执行这里代码
左键点击也判断提交过来的参数,判断编号是几就执行相应的功能函数,比如:按钮1点击;按钮2点击
也可以根据控件对象进行判断,此时第四个参数:数据是控件对象,判断它是哪个控件
  为 单击左键{
  如果(数据=编辑框1)编辑事件(参数)
  否则 左键点击(参数)}

鼠标点击编辑框,有可能是选中,也有可能是右键,也有可能是双击,使用如果语句比如数据和编辑框1
两者相等就执行编辑副本,否则就执行左键点击事件,这就是如果否则语句的代码写法
更多的语法请参照下表,后面的教程也有讲到更多的语法规范和代码用法
英文语法 中文语法 简单用法
if 如果 如果(消息=窗口关闭){停止(0);}
else 否则 必须放在如果语句后面,否则{返回(1);}
switch 判断 判断(消息)为 窗口关闭{停止(0);}
do 循环循环(10){...}10次停止;循环{...}无限循环;循环{...i+2}(i=100)到100停止;循环(i<100){...i++}小于100时循环
case判断语句后使用,默认判断条件是相等,可加比较符号,逗号多条件,n~m范围条件
sub程序段 程序段(整数 a,文本b,字节 c);编写一段程序代码
end 结束程序片断代码的末尾,加上此语句表示此段程序结束。可用大括号代替
sub小程序 小程序(整数 a,文本b,字节 c);编写一段程序代码
sub函数 函数(整数 a,文本b,字节 c);编写一段程序代码
export 导出编写一段程序代码,写法与程序段相同,用于写dll时,可被其它程序调用
import 导入 导入 StrStrI 支持库 "SHELL32.DLL",2; 导入dll的函数,最后2是参数数量
include 引入 引入 "lib\odbc32.lib"; 用于引用库文件
const 常量 常量 只读打开=0; const IDYES = 6;用名称定义一个数值
return 返回 返回结果给调用者,例如返回(N1* N2);小数结果加冒号,返回(:N1*2.5);
scls子类子类{整数 变量1,变量2;小程序 登陆(账号)...结束;}
new新建角色=新建 玩家类(等级=1,性别=0);用于新建子类,可选括号内设定初始值。
object对象对象 名称=对象名;申请一个对象变量,结构是(类,标识,函数名..)
crobj创建对象创建一个对象的实例,创建对象 名称;名称=创建对象 "WinHttp.WinHttpRequest.5.1"
ctobj控件对象获取控件窗口对象的实例:对象名=控件对象 窗口名;控件对象 对象名,窗口名
datab 数据表 数据表{整数 a,文本 b[16],字节 c;}自定义表头结构
query 读取表 读取表(数据库名,数据表头,[长度]);按指定结构把数据表读取到内存中。
indexof检索检索(变量名,查询值,[长度]);快速从数组或内存中检索数值,返回序号,未找到返回-1
addin加数组加数组(变量名,表名,[字段名]);把表的字段值加入数组,用来检索
zeros清零清零(变量名,长度,[设定值]);对数组或内存数据清零或者设定统一值
call调用调用 变量名(参数...);获取链接库(dll)的某函数地址到变量中,动态调用执行
rename重命名重命名 发送消息=SendMessage; 把英文函数换成中文使用
type结构 结构 窗体类{整数 窗口;整数 过程;}
iif 如果是a =如果是(消息=0)10,500;相当于三态语句
while 循环在 判断条件成立则循环,直到条件不成立. 循环在(a<1000){a++;}
for 循环于 For(i=0;i<100;i++){i从0到99,每次加1,循环一百次}
foreach循环数组循环数组(ab){}可循环读或者写数组或特定数据段的值
Goto 跳到 ABC: ..... goto ABC; 开头: .... 跳到 开头;
jump 跳转等于、大于、小于..时跳转到某处,如:起点@ .... 跳转>起点;
break 跳出 在循环内使用,可跳出循环
lib 支持库 import abort lib "MSVCRT.DLL",0;
local 局部 局部 整数 图片; 局部变量前面可以局部两个字,方便区分,也可以不加。
preserve 保留 整数 数组();重置 数组(20); 保留 数组(200);会保留原来的20个
reserve 重置 整数 数组(); 重置 数组(200);把数组重新分配200个,且数据清空
destroy 销毁 销毁 数组; 把数组或子类销毁,释放内存。
direct 置入 置入[字节 $68]; 置入[整数 $20];相当于写机器语言
order 指令 指令[6820088800];连续的十六进制机器码
movads 传址传址[$4001200,a];可以把变量值或数值写入指定内存位置
bytes 字节组 字节组 tmp[15,$20,60,128];
outfile输出文件修改编译输出文件的扩展名。例如:输出文件=exe
with 列举 列举 form{.s=1;.l=5;}等效于form.s=1;form.l=5;
alias 别名 导入 信息框 别名 MessageBoxA lib "USER32.DLL",4;
pever程序版本"1.00",或者用退格符分割的全部版权信息: "注释'\t'公司名'\t'文件描述'\t'主.次.版本'\t'工程名'\t'版权'\t'商标'\t'产品名"
程序类型默认0初级程序,1扩展DLL,2命令控制台,3函数类库。共0-7种。加8是8位,加16是16位,加32是32位,加64是64位,加128是宽字符环境。
peres 程序资源指定资源类型和文件名.例如:程序资源 10,"sec.jpg"
picon 程序图标 程序图标“sec.ico”;
第六节 文本和数组的使用
文本是一段文字数据,数组是按数据类型连续排列的数据,指针是指向内存中某个地址位置的数值。
它们都是用一个整数值来表示所在位置,操作是比较近似的。都可以用指针的语法进行操作
文本相当于一维的字节数组,数组可以用来存放更多数据,跟申请内存一样都可以作为缓冲区
二维数组跟一维数组用法类似,只是多了一组括号,数组都有动态和静态两种申请方法
固定数组申请时括号里指定固定的数值,如:整数 数一(10);小数 数三(15,3);
使用方法: 数一(3)=66; 数二=数一(5) 数三(3)(0)=88.4567; 数值=数三(2)(1)
动态数组是在申请时候括号里写空: 整数 数二(); 然后在代码段使用重置:
重置 数二(886679) 重置 数二(66,55);文本变量的数组其实就是二维的
例如: 文本 内容(64,10);注意文本变量和固定数组的长度必须是数值
不能是变量,例如这样就是是错的: 文本 内容; 文本 文字(数三)
文本数组赋值时请使用中括号,内容[1]="文字内容",是向1号数组写入文本;取值使用小括号,内容(0),内容(2)
文本数组使用整数更加方便,申请全局变量,整数 内容(10)
内容(0)="中国"
内容(1)="你好"
信息框(0,内容(0),内容(1),信息图标)
普通文本使用括号是读写二进制数值,跟字节数组和内存缓冲区的用法相同。示例代码:
文本 内容[64]="0123456789ABCDEF中华人民共和国";
整数 数值=内容
//数值得到数据缓冲区的内存地址
数值=内容(0)
//从数据缓冲区读取第一字节数值,0这个字
数值=内容%
//从数据缓冲区读取两字节数据到数值变量,01这两个字
数值=内容&
//从缓冲区读取四字节数据,0123这四个字,(0)可以不写
数值=内容(2)
//从缓冲区的2字节后读取一字节数据,2这个字
数值=内容(2)%
//从缓冲区的2字节后读取两字节数据,23这两个字
数值=内容(2)&
//从缓冲区的2字节后读取四字节数据,2345这四个字
内容% =数值
//向缓冲区写入两字节数值,01被修改
内容& =数值
//向缓冲区写入四字节数值,0123被修改
内容(2)% =数值
//向缓冲区的2字节后写入两字节数值,23被修改
内容(2)& =数值
//向缓冲区的2字节后写入四字节数值,2345被修改
读写文本内的文字使用的是数组的写法,同时也是指针的用法
数组和文本内置成员表:
中文名英文名变量类型功能作用
.指针.Ptr数组数据缓冲区的指针
.长度.len数组/文本数组成员的数量/文本变量缓冲区大小
.维数.dim数组第一维数组的长度

第七节 指针和列举语法
极语言并没有专门的指针定义,但是可以实现甚至超越指针的所有功能
例如 整数 s="sdkfskd";
这里s为整数变量,它指向的就是后面这段文字的地址
s(0)=\b;就把文本的第一个字符替换成字符b;
整数变量本身不是一段文字,通过它却能读写文字的内容
同样 整数 m=申请内存(128);
m(13)=128;就是把128这个数字写入第14字节处
a=m(10);是从第11字节处读取1字节。
由于传统编程的文本字节数组和内存数据的用法完全不同
文本只能用处理文字的函数来操作文字里面的内容数据
申请内存也只能使用复制传送内存的函数来读写数据
字节数组才可以使用数组的写法来读写数组成员数据
所以需要一种特殊的指针来突破这些限制自由的读写数据
而极语言没有这些限制,所以本身就可以实现指针的功能
同时也把其它特性比如列举功能整合到指针上
结构体类型和子类数据包含有很多成员,可以使用列举语法:
列举 人物{.等级=35;.职业=6;
物攻=.攻击;血量=.生命}

列举是记住结构体或子类的首地址,加上成员的偏移地址进行读写操作
同样在数组操作时,也会已经记住变量的首地址,可以使用仿列举来读写数据。
还使用一个文本变量来演示,示例代码:
文本 内容[64]="0123456789ABCDEF";
数值=内容(1);
使用数组获取第二字节数值
.(6)=数值
//6是指针之后偏移6字节,读写操作6这个字
.%6=数值
//6是指针之后偏移6字节,读写操作67这两个字
.&6=数值
//6是指针之后偏移6字节,读写操作6789这四个字
.!6=数值
//6是指针之后偏移6字节,读写操作6789这四个字的小数值
使用.语法跟列举的写法类似,但是文本或数据或者内存缓冲区
这些变量并没有成员变量,不能通过成员名来定位,则可以使用数值来定位偏移地址
最早是用#符号作为虚指针的偏移定位,代码写法如下:

数值=#4
//#4是指针之后偏移4字节,就是读取4567这四个字
数值=#(4)
//#(4)是指针之后偏移4字节,小括号就是读取4这一个字
数值=#[4]
//#[4]是指针之后偏移4字节,中括号就是读取45这两个字
数值=#@4
//#@4是指针之后偏移4字节,就是4这个字的位置(取文本)
数值=##4
//#4是指针之后偏移4字节,就是读取456789AB这8个字(取浮点数)
指针操作相关符号:
符号 作用 用法示例
@ 取内存地址@变量名或程序段名
<- 左取符号从右边表达式的内存地址读取数据,根据左边变量类型读1到4字节
-> 右写符号向右边表达式的内存地址写入数据,根据左边变量类型写1到4字节
[] 取内存处的数据值=变量[8];获取变量地址后第8字节处的字节值
[]% 取内存处的数据值=变量[8]%;获取变量地址后第8字节处的正数值
[]& 取内存处的数据值=变量[8]&;获取变量地址后第8字节处的整数值
` 取已知内存使用中括号后取1字节值:值=`;指针后移1字节
`% 取已知内存使用中括号后取2字节值:值=`%;指针后移2字节
`& 取已知内存使用中括号后取4字节值:值=`&;指针后移4字节
.? 写结果内存.?=30;向返回结果的内存地址写入一字节数值
.?2 写结果内存.?2=300;向返回结果的内存地址写入两字节数值
.?4 写结果内存.?4=888;向返回结果的内存地址写入四字节数值
()读写指定内存数据b=a(3);a(b*6+c/100)=66+d*78;非数组读写一字节
()%读写指定内存数据数=组%;组(b*6)%=值;非数组读写两字节
()&读写指定内存数据数=组(2)%;组&=值;非数组读写四字节
%读写指定内存数据数=组%;组%=值;非数组读写两字节,(0)%偏移为零时可省略(0)
&读写指定内存数据数=组&;组&=值;非数组读写四字节,(0)&偏移为零时可省略(0)
()$ 读写指定内存地址数组指针获取地址指针:地址=$460
()! 读写指定内存数据数组指针读取或写入单精度值:数=组(2)!;组(6)!=值;
()# 读写指定内存数据数组指针读取或写入双精度值:数=组(2)#;组(6)#=值;
# 取已知内存使用小括号或列举后取值(整数或小数):#4
#@ 取已知内存使用小括号或列举后取地址(文本):#@8
#() 取已知内存使用小括号或列举后取值(字节):#(12)
#[] 取已知内存使用小括号或列举后取值(正数):#[12]
## 取已知内存使用小括号或列举后取值(浮点):##16
_[] 读写已知内存使用中括号后读取或写入字节值:_(2)=60
_[]% 读写已知内存使用中括号后读取或写入2字节值:_(4)%=60
_[]& 读写已知内存使用中括号后读取或写入整数值:_(2)&=60;n=_[4]&
_[]$ 读写已知内存地址使用中括号后获取地址指针:地址=_[460]$
_[]! 读写已知内存使用中括号后读取或写入单精度值:_(4)!=60
_[]# 读写已知内存使用中括号后读取或写入双精度值:_(8)#=60
.() 读写已知内存使用小括号或列举后读取或写入字节值:.(2)=60
.% 读写已知内存使用小括号或列举后读取或写入2字节值:.%4=60
.& 读写已知内存使用小括号或列举后读取或写入整数值:.&2=60;n=.&4
.$ 读写已知内存地址使用小括号或列举后获取地址指针:地址=.$460
.! 读写已知内存使用小括号或列举后读取或写入单精度值:.!4=60
.# 读写已知内存使用小括号或列举后读取或写入双精度值:.#6=60
.+ 增加已知内存数据表使用列举时内存增加指定长度:.+10;.+长度;
.++ 增加已知内存数据表使用列举时内存增加到下一行
<读指定内存数值a < b;从b地址处取数据到a,a是字节取一字节,整形取两字节,局部变量固定4字节
>写指定内存值a>b+8;向b+8地址处写入a的数值,a是字节写一字节,整形写两字节,局部变量固定4字节
虚指针就是记住一个内存地址,使用数值定位指针之后的位置进行读写数据
用特殊符号来定义读写的数据是什么类型,而不需要进行字节组和其它类型的数据转换
比如在括号后面加 % 就可以读写两字节正数,加 & 读写四字节整数,加 # 读写八字节浮点。示例代码:
文本 内容[64]="0123456789ABCDEF";
数值=内容[0]
//从数据缓冲区读取第一字节数值,0这个字
数值=_[2]
//从缓冲区的2字节后读取一字节数据,2这个字
数值=_[2]%
//从缓冲区的2字节后读取两字节数据,23这两个字
数值=_[2]&
//从缓冲区的2字节后读取四字节数据,2345这四个字
_[4]=数值
//内容缓冲区向后4字节,就是向4这个字处写一字节
_[4]%=数值
//内容缓冲区向后4字节,百分号就是向45这两个字处写入两字节
_[4]&=数值
//内容缓冲区向后4字节,连接号就是向4567这里写入四字节数值
//==============更早期还有一种指针用法=============
全局变量是字节 整形 整数 小数等4字节以内的数值类型,可以使用左取右写符号
如 文本 a="$32A4B8C6428B";字节 b;正数 i;小数 s;整数 d;
b < a;就是取第一字节,b就得到0x32=50
b > a+2;就把a的第三位置0xB8,换成了50
i < a+3;i取得数值就是0x8B42=35650;
小数使用等号时会把右边的结果转换成小数进行赋值
s < a+4;这样写就不会进行转换,直接从内存地址处获取数据
比如游戏封包里包含有坐标值是小数的结构数据
就不能直接使用等号进行赋值,使用左取右写符号直接读写数据
第八节 置入指令和机器指令的语法规范
编程语法里有一个"指令"的语法,解释为连续的十六进制机器指令,例如: 指令[6820088800];
这些十六进制字符串就是我们常说的机器语言,严格来说它不是编程语言,应该叫它机器指令
在CRC32校验的模块里就有机器指令的书写示例,由于它比较难懂,我们主要看它的书写规范
整数 CRC0;
程序段 校验开启
  CRC0=申请内存(1024)
  指令[89C730C90FB6C1B508D1E87305352083B8EDFECD75F3ABFEC175E9];
结束

程序段 校验数据(数据,长度)
  指令[8B75088B4D0C8B3D];置入[地址 CRC0];
  指令[31C04831DB8A1E30C3C1E80833049F464975F283F0FF];
结束

机器指令穿插有置入指令的使用,因为程序里的变量函数等内存地址并不是固定的
机器指令可以使用更多寄存器去优化处理速度,减少冗余的代码,可以使用更多的指令
置入指令的功能表如下:
英文语法 中文语法 简单用法
byte字节置入[字节 15,20,40];多个用逗号隔开;
dword整数置入[整数 66,$204068AA];相当于汇编的DD
word整形置入[整形 $2040,88];相当于汇编的DW
single小数置入[小数 3.14];
string 文本置入[文本 "你好"];不带引号时是插入指定长度的0,置入[文本 50];
address地址置入[地址 窗体];地址是指变量的内存地址
local局部置入[局部 参数];局部是指局部变量的内存地址
call调用置入[调用 加法];调用一个程序段
function函数置入[函数 信息框];函数是指向外部API函数
@指针置入[@ 加法];指针是获取变量或程序段的偏移地址

第九节 跳到和跳转标记

编程语言实现编译程序使用的机器指令可以分为两种: 运算指令和跳转指令
高级语言里的运算指令用运算符号代替,而跳转指令可分为条件跳转和无条件跳转
无条件跳转在极语言里叫"跳到",就是直接跳到某个标记处;跳转语句就是指条件跳转
如果和否则语句就是对条件条件指令的封装,括号里比较两个结果大小并指定跳转条件
如果(数>值){关闭网络;退出程序}就是如果数大于值的话
执行关闭网络和退出程序这两个函数,实现原理是先比较数和值的大小,然后执行条件跳转
代码里写的是大于,编译时的指令就是它反向条件:小于或等于,跳转到}这里也就是两句代码之后
最终生成的指令是如果数小于或等于值,则跳转到关闭网络和退出程序这两句代码之后
处理器判断不符合小于或者等于这个条件,就会执行这两句代码,符合条件就跳过不执行
如果代码之后又有否则语句时该如何处理?否则{值=数}多了一层逻辑判断关系
只需要在}这里加一条直接跳到{值=数}这个代码之后,这两层逻辑关系的跳转过程也就实现了
处理器比较数和值的大小,符合大于条件就执行关闭网络和退出程序这两句代码再跳过{值=数}这句代码
符合小于或等于条件就跳过关闭网络和退出程序这两句代码去执行{值=数}这句代码
还有循环语句也是通过跳转实现的: 循环{数++}(数=10000)
这个执行过程就是先让数递增,然后把数和一万进行比较,如果不等于就直接跳到循环这里
数就会继续增加,如果等于一万就不再跳回去,处理器就会继续执行后面的代码
循环的第二种写法 循环(数<10000){数++}它会更复杂一些
先比较数和一万,反向判断如果数大于或等于一万就跳转到{数++}的后面,只有这个跳转并不能循环
还需要在数++之后插入一条指令,直接跳到循环这里继续比较大小并进行条件跳转
循环的第三种写法: 循环(10000){数++}无条件但有次数
它的实现原理是先存入条件里一万这个数,执行完{数++}之后对数值递减,结果不为0就跳回去
这种循环不用比较,递减是运算指令,同样会有各种状态标志,然后根据标志进行条件跳转
循环的第四种写法: 循环{数++}无条件也无次数
这种循环就是无限循环,常用于DLL进程或者新创建的线程里,实现原理就更为简单
执行{数++}然后无条件跳到循环这里继续执行,无条件循环只有程序关闭时才会结束
跳转指令在高级语言里几乎就用不到,极语言里可以使用,且记跳转不要和跳到语句弄错
在如果和循环语句中也可以指令这些条件,例如: 如果(数#3值) 循环(数#4值)
在数学运算之后,可以使用 跳转 #0 标记意思是如果溢出则转移到标记处
标记是在一段文字之后加上冒号或者@符号,例如下面的代码:
整数 值=数*10000;
跳转 #1 标记1
信息框(0,"结果值溢出","错误提示",错误图标)
标记1:

通常跳转条件是反向设置,不溢出就转到标记1这里,那么溢出就会弹出错误提示
实际开发中使用跳到要比跳转语法更多一些,比如实现一个特殊的循环过程
标记1:
{过程代码...}跳到 标记1

这段代码就是最简单的无限循环,再举一个替换文字中某个字符的例子 重查:
整数 数值=查找字符(文字1,\?)
如果(数值>0){数值(0)=\!;跳到 重查}

在极语言的判断条件里是不会进行赋值操作的
循环(数值=查找字符(文字1,\?))这样写只会比较数值和查找结果是否相等
循环于(整数 数值=查找字符(文字1,\?),数值>0,数值(0)=33)这样写也不行
因为循环于的第一步是申请变量并向它初始化赋值,它是不会循环执行这个赋值操作的
要实现不用跳到语句进行替换文字,就需要用特殊的指针写法:
循环(查找字符(文字1,\?))
{数值=?;数值(0)=\!}

这里?是当前查找字符的内存地址,向这里写入一字节数值
用法作用解释
跳转 = 标记相等则转移到标记
跳转 != 标记不相等则转移到标记
跳转 <> 标记不相等则转移到标记
跳转 > 标记大于则转移到标记(比较带符号数)
跳转 < 标记小于则转移到标记(比较带符号数)
跳转 <= 标记小于或等于则转移到标记(比较带符号数)
跳转 >= 标记大于或等于则转移到标记(比较带符号数)
跳转 #0 标记若溢出则转移到标记
跳转 #1 标记不溢出则转移到标记
跳转 #2 标记小于则转移到标记(比较无符号数)
跳转 #3 标记大于或等于/进位为零则转移到标记(比较无符号数)
跳转 #4 标记相等则转移到标记
跳转 #5 标记不相等则转移到标记
跳转 #6 标记小于或等于则转移到标记(比较无符号数)
跳转 #7 标记大于则转移到标记(比较无符号数)
跳转 #8 标记结果为负则转移到标记
跳转 #9 标记结果为正则转移到标记
跳转 #A 标记奇偶位为偶则转移到标记
跳转 #B 标记奇偶位为奇则转移到标记
跳转 #C 标记小于则转移(比较带符号数)
跳转 #D 标记大于或等于则转移(比较带符号数)
跳转 #E 标记小于或等于(比较带符号数)
跳转 #F 标记大于则转移(比较带符号数)
第十节 结构体类型的使用
在申请变量的时候,特定的场合总是会申请相同的多种变量,这些变量的排列顺序也是一样的结构,所以就有了结构体这种类型
极语言里自定义结构体就叫"类型",对于特别常用的结构类型会用套装标准的格式来定义这个结构,比如下面几种结构体:
类型 坐标类{整数 左,顶;}
一个坐标点或者一个几何形体的坐标位置,都需要左和顶两个整数值去定义这个位置
在代码里写书写坐标类 坐标;就会申请坐标.左和坐标.顶这两个整数变量
类型 尺寸类{整数 宽,高;}
一个方形或者近似方形的几何形状,都需要宽和高两个整数值去定义它的大小
在代码里写书写尺寸类 大小;就会申请大小.宽和大小.高这两个整数变量
类型 矩形类{整数 左,顶,宽,高;}
一个正方形或者长方形的窗口对象,都需要左和顶以及宽和高这四个整数值去定义它的大小和位置
在代码里写书写矩形类 矩形;就会申请矩形.左、矩形.顶、矩形.宽、矩形.高这四个整数变量
类型 快捷键类{整形 行为,键值,标识;}
一个快捷键或者键盘鼠标的动作信息,都需要用数值去描述和定义动作行为(SHIFT,CTRL,Alt等)
还需要一个数值去定义具体哪一个动作(鼠标左键,右键,中键,键盘具体哪个键等等)和加速器标识符
在代码里写书写快捷键类 快捷;就会申请快捷.行为,快捷.键值和快捷.标识这三个整形变量
类型 窗口类{整数 风格,消息,类长,实长,实例,图标,光标,背景,菜单,名称;}
窗口类是创建窗口程序需要使用的类,极语言的基础程序内置模块(GUI.inc)就有使用这个类
窗口类 程序(风格=$83,实例=$400000,背景=6)申请类型时可以在后面括号里给成员赋值
类型 窗口外观类{整数 参数,实例,菜单,父窗,高度,宽度,顶部,左边,风格,名称,类名,扩展}
窗口外观类可以通过发送消息函数来创建窗口控件,在窗口创建消息到来时也能收到这个结构体
类型只能是全局变量,在类型变量名后面加小括号设定初始值,不用按顺序指定,需要指定成员名。例如:
文件框类 文件框(长度=76,路长=64,名长=64);//要注意预置初始值时,整数只能用数字,文本只能用字符串。
赋值代码是在程序段之内书写,例如:文件框.标题="打开文件",用文本向整数变量赋值。
标题这个整数成员变量赋值的是"打开文件"这段文字的指针地址,它只能在编译程序时才能确定地址
还有一种情况:文件框.窗口=窗体;虽然都是整数变量,但是窗体是运行程序创建窗口之后才有具体地址
窗体虽然也是个整数变量,但是这个数值指向的地址里包含一系列窗口相关的数据信息,通常称之为对象
类型是用来连续申请多种变量,复杂的类型结构长度也是可变的
这种结构体的第一个变量通常都是长度,其成员结构也并不确定,使用组合标志来确定使用哪些成员
也有的不用长度而只用标志,指定包含哪些数据就去特定位置获取
对于复杂的结构只用指定部分成员数值时,可以使用小括号语法赋值,还有一种大括号初始化值的方法:
矩形类 矩形={10,20,800,600}这是给单个矩形指定左顶宽高四个值的写法
使用大括号初始化数值,必须给所有成员变量都指定数值,指定的数值跟成员变量的位置是对应的
矩形类 矩形[5]={
{10,20,800,600},
{30,50,600,500},
{40,60,700,400},
{50,30,900,700},
{20,10,300,200}
}
这是给五个矩形类变量初始化值的写法,五组大括号里都包含有四个变量的数值
下面是坐标类,尺寸类,矩形类的结构定义
中文名字英文名称长度作用解释
坐标类POINT8用来存储坐标位置的信息
坐标类 成员表
中文英文类型作用解释
x整数水平坐标位置。
y整数垂直坐标位置。

中文名字英文名称长度作用解释
尺寸类SIZE8用来存储尺寸大小的信息
尺寸类 成员表
中文英文类型作用解释
cx整数尺寸大小的宽度。
cy整数尺寸大小的高度。

中文名字英文名称长度作用解释
矩形类RECT16用来表示一个矩形框的四条边位置。
矩形类——成员表
left整数指定矩形框左上角的x坐标
top整数指定矩形框左上角的y坐标
right整数指定矩形框右下角的x坐标
bottom整数指定矩形框右下角的y坐标

第十一节 数据表和数据库的使用
数据表是为批量读取数据库而设计的特殊类型,可以自定义数据结构,然后直接把数据读取到相应结构内存中,无需使用ADO等对象。
通常我们使用ADO对象来读写数据,由于记录集对象结构过于复杂,每行每列的类型、名称、序号、长度、缓冲区指针和长度,以及各种属性、方法等。
可是实际应用中,往往需要把记录集中的数据,再次读取到自己定义的变量(结构内存)中,所以极语言增加了直接读取数据到指定结构的功能。
只要需要的字段数据读取出来,还可以直接改变数据类型。例如数据库中字段类型为整数,程序需要把整数类型数据全部转换成小数类型。
同样的数值15,整数和单精度小数都占四字节,但是它们的数据却大不相同。程序定义为小数,数据库里是整数,就可以全部提取为小数数据
读取后的数据表读写方法为:表名(行号).字段名。如:lv=玩家表(0).等级;玩家表(3).职业=5; 表名.rows为行数 表名.cols为列数
读取数据是按查询的sql语句里的表名和字段顺序,并不是按照程序里的表名和字段名,所以程序代码里的表名和字段名是完全自定义的。
数据表结构类型,跟自定义类型(type)的性质类似,类型是不支持数组的,所以可以用数据表代替类型,当自定义数组类型使用。
长(表名)获取的是类型结构或者说每一行的数据长度,表名.len是申请的数组长度,使用前需要 重置 表名(数量)。
申请的长度数量要大于或等于查询表的记录数,读取完数据之后,得到 表名.rows 数据表的实际读取记录数。
数据表的序号是从0开始的,100行记录就是按序号0-99获取。读取的数据存放是一段连续的内存,行列是连续整齐排列的。
数据表结构的名称定义和数据库(对象)的字段定义对比:
英文语法中文语法字段类型数值范围
char字符TinyInt-128~127
byte字节TinyInt数据同上,转为正数
short整形SmallInt-32768到32767
int整数Int-2147483648到2147483647
single小数Real参见数据类型
double浮点Float参见数据类型
string 文本VarChar[16]需指定长度
date日期DateTime64位整数
long大数BigInt64位整数
binary二进制Binary[1640]需指定长度
由于数据库中没有字节类型,把TinyInt读入字节类型时,负数会变成加256的正数
中文名英文名功能作用
.指针.Ptr数据缓冲区的指针
.长度.len初始化可存储行数
.行数.rows已读取数据的行数
.列数.cols每行数据的列数
读取表query读取数据到数组缓冲区
加数组addin把某列数据加到一维数组
数组,数据表和结构体都属于全局变量,数组可以是静态和动态两种
静态数组例如: 整数 一(10);字节 二(5);动态数组括号内为空,例如 整形()
结构体类型只支持是静态数组,静态数组不支持重置,保留和销毁
数据表只支持动态数组,申请的数据是清零的,支持重置,保留和销毁
使用示例:
1.先在全局段定义一个数据表
数据表 账号表{文本 密码[16],密保[16],邮箱[16];整数 性别}
2.像数组一样重置数据表的长度,数据表可以作为动态二维数组用
重置 账号表(5000);此时账号表长度为5000,可以存入五千行数据
如果不用数据库的话,现在就可以直接使用账号表了,比如:
账号表(0).密码="ASDFGHretuivhJhj";
密码保护验证=账号表(105).密保;
邮箱地址=账号表(8868).邮箱;

3.多数情况下使用数据表,也是为了操作数据库,可以在模块列表里选中"数据库"
数据.连接(连接语句);首先要跟数据库建立连接
连接语句对于不同的数据库类型,使用不同的驱动连接字符串:
ACCACE数据库: "Driver={Microsoft Access Driver (*.mdb)};DBQ=game.mdb"
SQLite数据库: "Driver={SQLite3 ODBC Driver};Database=d:\game.db"
mssql远程连接: "Driver={SQL Server};Server=127.0.0.1;Database=game;Uid=sa;Pwd=admin;"
mssql本机连接: "Driver={SQL Server};SERVER=(local);Trusted_Connection=yes;DATABASE=game"

4.跟数据库建立连接之后,执行SQL语句,查询或更新
数据.执行("update 表名 set 字段名=数值")
数据库语句除了表名和字段可以用中文,其它都是英文,具体上网查
5.快速读取整个表
根据第一步定义的数据表结构,写好查询语句,读取到指定的数据表中
数据库模块提供有读取数据库里整个表字段的方法: 数据.读表 长度=数据.读表("账号");通过表名"账号"读取整个表,得到记录数:长度
读取表(库表,账号表,长度);这里有三个参数要重要说明一下
第一个参数库表是模块固定的一个变量,刚才读表就是把表对象地址指向库表这个变量
读取表是极语言封装的一个专用库,把整个表对象内数据读取到账号表这个定义的数据表中
第三个参数是可选参数,第二步如果没有重置表的长度,这里加上它就会自动重置长度
好处就是数据库里有多少行,就申请多少内存去存放数据,一点内存也不会浪费
还有第二种情况:如果账号表里很多字段,定义的数据表只是用到的几个,就读取指定字段
数据.执行("select 密码,密保,邮箱,性别 from 账号");指定读取这四个字段
读取表(库表,账号表);读取表的时候不用指定长度
第二步已经重置了数据表的长度,就无需指定,如果想根据数据库里实际行数去重置数据表行数
长度=数据.读取("select count(*) from 账号");注意使用的是读取,语句也不一样
重置 账号表(长度);使用重置长度,或者在读取表时候指定长度都可以
但是两者有很多区别,重置是新申请一个内存,原来申请过的话,就要使用销毁语句
而读取表时指定长度是会自动销毁原来的内存,重新申请指定长度的内存
第十二节 子类和对象的使用
子类需要通过"新建"语句创建子类才能使用,数据自动清零,只支持销毁
子类和对象支持全局变量和局部变量,实体是一个整数指针变量
子类代码需要单独一个模块文件来书写,格式为: 子类 角色类{
整数 攻击,防御,减伤;小数 横标,竖标,纵标; 程序段 函数名(参数) 整数 数字=参数 结束 }
整个子类的代码除了"子类 名称"之外,都在大括号范围内
子类代码有全局和局部变量,在子类的程序段内可以直接使用当前子类的全局变量
就是说子类内的全局变量只是在当前子类适用,不是整个工程的全局变量
在工程代码里访问子类变量是在新建实例化之后
整数 人物=新建 角色类
人物.攻击=30
左边距=人物.横标
人物.函数名(350)

如果是在子类内部,访问另一个子类,就需要提交实例化的子类变量
假如在子类内部写好了这样一个程序段
程序段 计算(角色类 人物)
  整数 伤害=(攻击-人物.防御)*1.5 -人物.减伤;

就可以再创建一个角色类,也就是游戏里人另一个人物角色
角色类 人物1=新建 角色类
人物.计算(人物1)
一号人物攻击另一个人物进行伤害计算
子类内部使用单独的"@"代表子类本身,在需要提交自身这个子类时
程序段 发动攻击(数据)
  角色类 人物=数据(15)&
人物.计算(@)
通过数据获取到另一个人物对象的指针,提交自身并调用另一个子类对象
子类的变量类型支持如下几种:
英文语法中文语法数值范围
Bool布尔真(True),假(False)
char,sbyte 字符 -128~127
byte,uchar 字节 0到256
short 整形 -32768到32767
word 短数 -32768到32767
ushort 正数 0到65535
int,uint,dword 整数 -2147483648到2147483647
single 小数 负数-3.402823E38到-1.401298E-45;正数1.401298E-45到3.402823E38
Double 浮点 负数时-1.79769313486232E308到-4.94065645841247E-324;
正数4.94065645841247E-324到1.79769313486232E308
long,ulong大数64位整数,32位编程下多用于存储或时间计算。
string 文本[16]需指定长度,可代替二进制数据
子类对象只有一个内置成员:长度
中文名英文名功能作用
.长度.len子类空间的长度
COM对象有两个内置成员:类和标识,但是这两个成员也是可选的,可以只有一个,或者两个都没有
中文名英文名变量类型功能作用
.类对象对象数据的类关联标识CLSID,或称接口
.标识对象对象数据的IID标识
子类变量均可以使用数组,下标长度必须是数字,不支持动态数组
书写子类变量时不能赋值,未新建子类时变量的数据并不存在
子类如果不包含变量,是不需要新建,不用申请内存空间
子类里面包括程序段,可以直接使用子类内部的变量
子类书写完之后,以大括号}结尾,跟命名子类后的{对应
使用子类时先要新建子类,才可以使用其变量和方法函数
子类名 名称1 = 新建 子类名; 整数 名称2=新建 子类名
也可以用赋值指向已存在的子类: 子类名 名称3=名称1;
子类变量用法:整数 数一=名称1.变量名;名称1.变量名=88;
传递参数时也可以使用子类:程序段 测试(子类名 名称3)
名称3.变量=99;变量9=名称3.读取(数据,4);名称3.写入(内容)
销毁子类方法是:销毁 名称2;子类名和子类实体要区分清楚
子类本身并没有特别定义,它可以是全局的整数变量,也可以是局部整数,也可以是整数数组。
全局变量是编译程序时,提前在数据区段申请的。局部变量仅在小程序段内有效,属于临时存储空间。
子类和数据表的变量,是在程序运行之后,去动态申请的内存区块。子类使用前需要使用 新建 子类名称
数据表相当于自定义二维数组,使用前需要先“重置”数组的长度,该长度不能小于所读取数据的行数。
数据表可以使用数组的重置、保留和销毁方法,而子类只可以使用新建和销毁这两个方法。
子类和数据表的区别:
子类申请的内存区域并不是清零的,所以在新建的时候,可以用:玩家=新建 角色类(等级=1,职业=2,性别=1);
去设置子类变量的数值,未清零的内存数据是随机的,也就是说子类变量在新建子类时数值是不确定的。)
而数据表在重置长度后,内存区域是清零的,所有变量此时值都是0,数据表也可以用作自定义数组。
成员变量使用方法是:玩家表(0).性别,括号内是行号也就是数组的标号,是从0开始计数的。
子类变量的使用方法是:玩家.性别。如果申请的子类变量是数组形式,如:角色类 玩家()
也可以像数组一样,先 重置 玩家(1000),玩家(0)=新建 角色类; 玩家(0).性别=1;
但是销毁只能是先销毁一个成员,销毁 玩家(0)。或者 N=玩家(0);销毁 N;
子类变量在子类内部可以不加前缀直接访问,如:等级=100;职业=3;xb=性别等等。
COM对象申请可以在全局和局部,方法是:对象 名称=对象名;也可以用对象结构。例如:对象 任务=任务栏类;也可以写成下面的代码形式
对象 任务($44F3FD566DFDD011958A006097C9A090,$42F3FD566DFDD011958A006097C9A090,接口,计数,释放,初始化,添加,删除,激活,活动)
第一项是对象数据和代码关联的类接口CLSID,第二项是与对象通信的接口标识符的IID
这两项为十六进制转换写法,不需要CLSID或者IID时数据可以为空,也可以使用简写:
很多系统对象的后面部分相同,前4字节不同,如:$0B01000000000000C000000000000046
可以只写前面部分:$0B01,注意这里只写了两字节,后面是00就可以不写,还有一种简写:
比如上面申请对象使用的CLSID和IID后面部分相同,只有第一字节不同,第二项可以写成:$42
极语言库里已有的COM对象结构在说明书里有使用方法
例如:任务栏类,链接类,存储类,可以查看具体说明
申请完对象变量,需要使用创建对象去创建对象实体
语法是:创建对象 任务;任务.初始化;任务.添加(窗口)
任务.删除(窗口);任务.激活(窗口),任务.活动(窗口)
对象不使用新建和销毁,释放对象写法是:任务.释放;
第十三节 常量的申请和使用
编程所用到的数值非常多,在调用函数或者实现某个功能时,需要定义某个数值代表什么含义。
调用API函数都会定义每项参数可以使用哪些数值,返回值的数值又代表什么含义,由于这些数值太多太难记。
极语言根据这些数值对应作用进行中文命名,看到这些中文名称就能理解它的使用,常量的名称其实是代表某个数值。
很多时候这些数值是某些选项的组合,比如信息框的图标样式就是多种组合,例如: [确定取消 + 问号图标]。
可以看出是“确定”“取消”两个按钮加上问号图标的组合,这里为什么要用中括号呢?
中括号是在编译时候对括号里的运算表达式进行计算,最终得到一个数值。
不加中括号就不计算,而是编译成运算指令,在程序运行的时候再进行运算处理。
常量通常都是数值,都是可以提前进行计算。所以使用常量或者已知数字进行进行时要加中括号
中括号里面可以嵌套中括号,但是不要嵌套小括号,遇到小括号就会编译成运算指令。
中括号表达式可以使用的运算符号有:+加、-减、*乘、/除、|或、&与、!非、^异或、~乘方。
其中!非运算也就是按位取反,如:!1=-2。~乘方只能在中括号表达式里有效。示例:
常量 样式=[6+[35-12]*150-[60/12]];注意这种计算不是按先乘除后加减进行运算
需要优先计算就要多加一层中括号,通常使用中括号的表达式都不会太复杂,所以是按顺序优先
常量的标准写法如下:
常量 窗口创建 = 1;
常量 程序关闭 = 2;
常量 窗口移动 = 3;
常量 窗口缩放 = 5;
常量 窗口激活 = 6;
常量 获得焦点 = 7;
常量 失去焦点 = 8;

常量也跟变量一样支持使用逗号连续申请:
常量 确定取消=1,中止重试=2,是否取消= 3,弹出是否=4,重试取消=5;
以上两种常量数值是按十进制连续增加的数值,这些数值不能相互叠加使用,但可以和更高位的值进行相加,如: [确定取消 + 问号图标]。
常量 错误图标=0x10,问号图标=0x20,惊叹图标=0x30,信息图标=0x40,用户图标=0x80;
十六进制的每一位数字0到F占用四位,上面这些图标的低位数都是0,而按钮样式的数值都小于15,相加不会影响高位值,如: [确定取消 + 问号图标] 等同于0x21
再看下面这些常量数值:
常量 保持尺寸 = $0001;
常量 保持位置 = $0002;
常量 保持层序 = $0004;
常量 保持图像 = $0008;
常量 保持状态 = $0010;
常量 增加边框 = $0020;
常量 显现窗口 = $0040;
常量 隐藏窗口 = $0080;
常量 清空窗口 = $0100;
常量 不变顺序 = $0200;
常量 防止同步 = $2000;
常量 防止死锁 = $4000;

这些数值的每个位都是只有1 2 4 8这四种数值,它们的二进制数值分别是: 0001 0010 0100 1000
如果十六进制再高一位10 20 40 80这四个数值,它们的二进制数值分别是: 00010000 00100000 01000000 10000000
这些数值都是在不同的二进制位是1,其它位是0,它们相加只用把相应位的二进制数写成1即可,跟或运算的结果一致
0001 (1)和0010 (2) 相加是0011也就是3,所以常量值组合经常使用或运算,如: [确定取消 | 问号图标]。
[保持尺寸 | 保持位置 | 保持层序 | 保持图像 | 保持状态 | 增加边框 | 显现窗口 | 隐藏窗口] 结果就是 0xFF

第十四节 信息框、消息框、延时框——图标按钮样式

如果(信息框(0,"中国","你好",[确定取消 + 问号图标])=选了确定)退出程序
信息框不只是按钮和图标样式可以选择,还可以通过返回值,知道用户点击了哪个按钮
不指定按钮也有一个确定按钮和右上角的X关闭,包括按ESC键也会关闭对话框
只有一个按钮时,点X或者按ESC都是返回确定按钮这个数值1,如果有多个按钮
点X或者按ESC通常是返回最后的按钮,取消或者否,对于Win10以前的系统,点X返回关闭8
按ESC返回结果也不一样,为了兼容不同系统,就可以判断点了确定按钮如何处理
否则如何处理,无论是点的取消或者否还是点了X还是按了Esc,都按否则进行处理
消息框类 信息(风格=用户图标,实例=$400000,图标=1)消息框类的风格跟信息框的图标样式相同,用户自定义图标要指定实例
32位exe程序的实例可以使用0x400000这个固定的数值,内置模块有一个“程序.实例”,是一个全局整数变量,可以在其它程序段里使用
消息框类也是一个全局变量,初始化赋值只能使用已知数值或者常量,不能使用变量
信息.标题="标题文字";//在程序段内指定消息框显示的标题文字
信息.内容="内容文字";//在程序段内指定消息框显示的内容文字
整数 编号=消息框(信息)弹出消息框,并返回关闭消息框时点击了哪个按钮
延时框是弹出一个消息框,如果用户没有点击,会在指定时间关闭消息框
整数 编号=延时框(0,"中国","你好",[弹出是否 + 惊叹图标],0,5000);//弹出一个延时消息框上面有是、否两个按钮和惊叹图标
最后一个参数指定5000毫秒,就会在5秒之后自动关闭消息框
中文名字常量数值英文名称释义
确定取消$000001MB_OKCANCEL弹出的信息框包含“确定”和“取消”两个按钮
中止重试$000002MB_ABORTRETRYIGNORE弹出的信息框包含“中止”、“重试”和“放弃”三个按钮
是否取消$000003MB_YESNOCANCEL弹出的信息框包含“是”、“否”和“取消”三个按钮
弹出是否$000004MB_YESNO弹出的信息框包含“是”和“否”两个按钮
重试取消$000005MB_RETRYCANCEL弹出的信息框包含“重试”和“取消”两个按钮
错误图标$000010MB_ICONHAND弹出的信息框包含红色的“错号”图标
问号图标$000020MB_ICONQUESTION弹出的信息框包含蓝色的“问号”图标
惊叹图标$000030MB_ICONEXCLAMATION弹出的信息框包含黄色三角的“惊叹”图标
信息图标$000040MB_ICONASTERISK弹出的信息框包含蓝色的“i符号”图标
用户图标$000080MB_USERICON弹出的信息框可以显示用户自定义图标
弹出系统$001000MB_SYSTEMMODAL弹出窗口会置顶,且标题栏有系统图标。
弹出任务$002000MB_TASKMODAL弹出窗口到任务栏显示
帮助按钮$004000MB_HELP弹出窗口包含“帮助”按钮。
弹出置前$010000MB_SETFOREGROUND消息框变为前景窗口。
默认桌面$020000MB_DEFAULT_DESKTOP_ONLY 当前桌面为默认桌面才会返回
弹出置顶$040000MB_TOPMOST消息框置顶显示。
文字居右$080000MB_RIGHT消息框的内容文字居右显示。
图标居右$100000MB_RTLREADING内容文字在左边,图标在右边,标题文字也在右边
弹出服务$200000MB_SERVICE_NOTIFICATION弹出的消息框即使没有登陆到系统,也会显示。

信息框、消息框、延时框——点击按钮返回值

中文名字常量数值英文名称释义
选了确定1IDOK 点击选中了"确定"按钮
选了取消2IDCANCEL 点击选中了"取消"按钮
选了中止3IDABORT 点击选中了"中止"按钮
选了重试4IDRETRY 点击选中了"重试"按钮
选了忽略5IDIGNORE 点击选中了"忽略"按钮
选了是6IDYES 点击选中了"是"按钮
选了否7IDNO 点击选中了"否"按钮
选了关闭8IDCLOSE 点击选中了"关闭"按钮
选了帮助9IDHELP 点击选中了"帮助"按钮

动态链接库——开发应用

新建DLL工程,输入下面的代码:
导出 计算(参数)
返回(参数+100)
结束
点击编译,假设保存的工程名为测试,生成的文件为"测试.dll"
在一个初级程序工程的程序段外加入下面这行代码:
导入 计算 支持库 "测试.dll",1
窗体上设计一个标签或编辑框,假设编号是1,再设计个按钮,绑定单击事件
在按钮_点击事件里插入下面的代码
整数 数值=计算(50)
改控件数(窗体,1,计算,0)

运行程序然后点击按钮,就会看到设计的标签或编辑框显示数值150
中文名动态链接库和二进制八卦符号以及机器语言指令详解
以上只是API函数的动态调用实现的方法,如果是作为独立线程一直运行,可以用如下的方法:
程序段 初始化(实例,模式,数据)
  判断(模式)
  为 初次调用 开启线程(@启动, 0 , 实例)
结束

加载DLL链接库会有四种情况下会触发调用这里的代码,判断模式为初次调用时开启新线程,目标是启动这个程序段
程序段 启动(实例)
循环(等单对象(实例,500)){游戏检测}
结束

启动这个程序段工作在一个新的线程,可以一直循环等待单对象,对象的实例是本DLL模块的进程实例,等待周期是500毫秒
只要本DLL实例不被卸载以及主程序不结束运行,等单对象返回结果都是真,相当于每500毫秒循环一次,执行游戏检测的代码
游戏动态链接库开发和堆栈局部变量详解
动态 链接库 (DLL) 是一个模块,其中包含可由另一个模块 (应用程序或 DLL) 使用的函数和数据。
DLL 可以定义两种类型的函数:导出函数和内部函数。导出的函数旨在由其他模块调用,以及从定义它们的 DLL 中调用。内部函数通常只能从定义内部函数的 DLL 中调用。
尽管 DLL 可以导出数据,但其数据通常仅由其函数使用。 但是,没有什么可以阻止另一个模块读取或写入该地址。
DLL 提供了一种模块化应用程序的方法,以便可以更轻松地更新和重复使用其功能。 当多个应用程序同时使用相同的功能时,
DLL 从调用进程的虚拟地址空间分配内存。少内存开销,因为尽管每个应用程序都接收自己的 DLL 数据副本,但应用程序会共享 DLL 代码。
DLL 还有助于减动态链接允许模块仅包含加载时或运行时查找导出的 DLL 函数所需的信息。 动态链接不同于更熟悉的静态链接,其中链接器将库函数的代码复制到调用它的每个模块中。

动态链接的类型

在 DLL 中调用函数有两种方法:
在 加载时动态链接中,模块显式调用导出的 DLL 函数,就像它们是本地函数一样。 这要求将模块与包含函数的 DLL 的导入库链接。
导入库为系统提供加载 DLL 所需的信息,并在加载应用程序时查找导出的 DLL 函数。
在 运行时动态链接中,模块使用 加载库 或 加载模块 函数在运行时加载 DLL。 加载 DLL 后,模块调用 函数地址 函数以获取导出的 DLL 函数的地址。
该模块使用 GetProcAddress 返回的函数指针调用导出的 DLL 函数。 这样就不需要导入库了。

DLL 和内存管理

加载 DLL 的每个进程都会将其映射到其虚拟地址空间。 进程将 DLL 加载到其虚拟地址后,可以调用导出的 DLL 函数。
系统维护每个 DLL 的每个进程引用计数。 当线程加载 DLL 时,引用计数将增加 1。 当进程终止时,或者当引用计数变为零 (运行时动态链接仅) 时,将从进程的虚拟地址空间中卸载 DLL。
与任何其他函数一样,导出的 DLL 函数在调用它的线程的上下文中运行。 因此,以下条件适用:
调用 DLL 的进程线程可以使用 DLL 函数打开的句柄。 同样,调用进程的任何线程打开的句柄都可以在 DLL 函数中使用。
DLL 使用调用线程的堆栈和调用进程的虚拟地址空间。
中文名字常量英文名称释义
初次调用1DLL_PROCESS_ATTACH当这个DLL被映射到了进程的地址空间时
线程创建2DLL_THREAD_ATTACH一个线程正在被创建
线程结束3DLL_THREAD_DETACH线程终结
结束调用0DLL_PROCESS_DETACH这个DLL从进程的地址空间中解除映射

标准控制台——程序开发:

新建工程,选择控制台程序,会自动以下的两行代码
程序段 初始启动
写文字("你好,我是简易中文编程")
读字符
结束

写文字是向控制台窗口写入一行文字,读字符是读取用户输入的字符
如果没有最后这个读字符,程序运行完就结束了,运行就是闪一下然后消失
比较常用的还有写格式,就是把变量按照指定格式转换成文字,显示到窗口
整数 值=665;浮点 数=8543.267;
写格式("整数:%d\r\n这是整数转换文本的格式")
写格式("浮点:%f\r\n这是浮点转换文本的格式")
写格式("0x%X\r\n这是整数转换十六进制文本的格式")
写格式("浮点:%.15f\r\n这是浮点转换文本显示15位小数的格式")
读字符
结束

还有一个命令行的函数,可以执行CMD命令,常用命令如下:
命令行("title 极语言编程"); //修改窗口标题
命令行("color 5A"); //修改文字颜色的背景色
第一个字5是红色4加蓝色1组合为紫色背景;后面的A是高亮8加上绿色2组合为高亮红色文字
背景色在高位,文字色在低位,还有文字的其它属性详见下面的字符属性表
紫色=蓝+红;青色=蓝+绿;黄色=红+绿;
命令行("cls"); //清除屏幕内容
命令行("pause"); //暂停
命令行("help"); //显示命令行帮助
使用命令行修改文字和背景颜色,改变的是整个屏幕,还可以使用改字属性修改颜色
然后写入相应文字和背景颜色的字之后,再修改其它颜色,实现多彩文字的效果
程序段 初始启动
整数 输入=取控制台(标准输入)
; //得到输入缓冲区的句柄
整数 输出=取控制台(标准输出); //得到输出缓冲区的句柄
设置标题("极语言编程"); //修改窗口标题
改字属性(输出,0x5A); //修改文字颜色属性
改光标位(输出,0x00150010); //修改文字写入的位置
高16位是第几行,低16位是第几列,在指定位置写入文字,而不用写空格来指定位置
写控制台(输出,"你好",4); //向控制台写指定的文字内容
整数 模式;获取模式(输入,@模式); //获取控制台的输入模式
设置模式(输入,模式|鼠标输入); //给控制台输入模式增加鼠标输入
整数 内容[64];; //申请一个文本变量用来读取文字
读控制台(输入,内容,64); //从控制台读取输入的文字内容
中文名字常量英文名称释义
标准输入-10STD_INPUT_HANDLE标准输入设备。最初这是输入缓冲区 CONIN$ 的控制台。
标准输出-11STD_OUTPUT_HANDLE标准输出设备。最初这是活动控制台屏幕缓冲区 CONOUT$。
标准错误-12STD_ERROR_HANDLE标准错误设备。最初这是活动控制台屏幕缓冲区 CONOUT$。
控制台输入模式——读取字符模式组合:
中文名字常量英文名称释义
系统处理0x0001ENABLE_PROCESSED_INPUTCtrl+C 由系统处理,且不会放入输入缓冲区中。
回车读取0x0002ENABLE_LINE_INPUT仅当读取回车符时,才返回读取内容。如果禁用此模式,则将在有一个或多个字符可用时返回函数。
读取回显0x0004ENABLE_ECHO_INPUT读取的字符在键入到控制台时,将被写入到活动屏幕缓冲区。只有同时启用了 回车读取 模式时,才能使用此模式。
屏幕输入0x0008ENABLE_WINDOW_INPUT更改控制台屏幕缓冲区大小的用户交互将记录到控制台的输入缓冲区中。
鼠标输入0x0010ENABLE_MOUSE_INPUT通过移动鼠标和按下按钮生成的鼠标事件会放置在输入缓冲区中。可用于从输入缓冲区读取鼠标事件输入记录。
插入文字0x0020ENABLE_INSERT_MODE如果启用,在控制台窗口中输入的文本将插入到当前光标位置,并且不会覆盖该位置后面的所有文本。禁用则将覆盖后面的所有文本。
鼠标选择0x0040ENABLE_QUICK_EDIT_MODE用户可通过此标志使用鼠标选择和编辑文本。和输入扩展同时使用。
输入扩展0x0080ENABLE_EXTENDED_FLAGS启用扩展标志位。注:插入文字和鼠标选择为扩展标志位;跟输入扩展同时使用。
虚拟输入0x0200ENABLE_VIRTUAL_TERMINAL_INPUT指导虚拟终端处理引擎将控制台窗口收到的用户输入转换为可由支持的应用程序读取的控制台虚拟终端序列。
控制台输出模式——写入字符模式组合:
中文名字常量英文名称释义
分析输出0x0001ENABLE_PROCESSED_OUTPUT针对 ASCII 控制序列对写入的字符或者读取回显的字符进行分析并执行正确的操作。
自动换行0x0002ENABLE_WRAP_AT_EOL_OUTPUT使用写入或者读取回显时,当光标到达当前行的末尾时,它将移到下一行的开头。
分析控制0x0004ENABLE_VIRTUAL_TERMINAL_PROCESSING写入时分析字符序列可控制光标移动、颜色/字体模式以及其他也可通过现有控制台 API 执行的操作。
延迟换行0x0008DISABLE_NEWLINE_AUTO_RETURN写入时将附加状态添加到行尾换行,从而可能导致延迟光标移动和缓冲区滚动操作。
允许字色0x0010ENABLE_LVB_GRID_WORLDWIDE用于写入字符属性允许使用来自字符属性的标志调整文本的前景色和背景色。

控制台字符属性——颜色组合:
中文名字常量英文名称释义
文本蓝色1FOREGROUND_BLUE文本颜色包含蓝色。
文本绿色2FOREGROUND_GREEN文本颜色包含绿色。
文本红色4FOREGROUND_RED文本颜色包含红色。
文本高亮8FOREGROUND_INTENSITY文本颜色增强。
背景蓝色0x10BACKGROUND_BLUE背景色包含蓝色。
背景绿色0x20BACKGROUND_GREEN背景色包含绿色。
背景红色0x40BACKGROUND_RED背景色包含红色。
背景高亮0x80BACKGROUND_INTENSITY背景色增强。
前导字节0x100COMMON_LVB_LEADING_BYTE前导字节。
尾随字节0x200COMMON_LVB_TRAILING_BYTE尾随字节。
顶部水平0x400COMMON_LVB_GRID_HORIZONTAL顶部水平。
左边垂直0x800COMMON_LVB_GRID_LVERTICAL左垂直。
右边垂直0x1000COMMON_LVB_GRID_RVERTICAL右垂直。
反转显示0x4000COMMON_LVB_REVERSE_VIDEO反转前景和背景属性。
带下划线0x8000COMMON_LVB_UNDERSCORE下划线。

控制台开发——相关函数:
中文名字英文名称示例释义
分控制台AllocConsole分控制台给当前程序分配一个控制台
命令缓冲CreateConsoleScreenBuffer命令缓冲(访问,模式,继承,1,0)创建控制台屏幕缓冲区。
获取模式GetConsoleMode获取模式(句柄,@模式)获取控制台输入缓冲区的当前输入模式或控制台屏幕缓冲区的当前输出模式。
设置模式SetConsoleMode设置模式(句柄,模式)设置控制台输入缓冲区的输入模式或控制台屏幕缓冲区的输出模式。
获取标题GetConsoleTitleA长度=获取标题(名称,长度)获取当前控制台窗口的标题栏名称,返回标题名称的长度
设置标题SetConsoleTitleA长度=设置标题(名称)设置当前控制台窗口的标题栏名称,返回标题名称的长度
命令窗口GetConsoleWindow窗口=命令窗口检索与调用进程相关联的控制台使用的窗口句柄。
取控制台GetStdHandle句柄=取控制台(类型)检索指定标准设备的句柄。类型:标准输入=-10、标准输出=-11或标准错误=-12
改控制台SetStdHandle改控制台(类型,句柄)修改指定标准设备的句柄。类型:标准输入=-10、标准输出=-11或标准错误=-12
读控制台ReadConsoleA读控制台(句柄,内容,长度,@大小,0)从控制台输入缓冲区读取字符输入,并将其从缓冲区删除。
写控制台WriteConsoleA写控制台(句柄,内容,长度,@大小,0)从当前光标位置开始,将字符串写入控制台屏幕缓冲区。
改字属性SetConsoleTextAttribute窗口=改字属性(句柄,颜色)修改写入控制台屏幕缓冲区的字符属性
改光标位SetConsoleCursorPosition改光标位(句柄,坐标值)设置指定控制台屏幕缓冲区中的光标位置。
刷输入区FlushConsoleInputBuffer刷输入区(输入)刷新控制台输入缓冲区。当前在输入缓冲区中的所有输入记录将被丢弃。
释放命令FreeConsole释放命令(通知)从其控制台分离调用进程。
输出属性FillConsoleOutputAttribute输出属性(输出,属性,字数,坐标值,@实际数)设置指定数量的字符单元的字符属性,从屏幕缓冲区中的指定坐标开始。
输出文字FillConsoleOutputCharacter输出文字(输出,文字,字数,坐标值,@实际数)将字符写入控制台屏幕缓冲区指定字数,从指定的坐标开始。
伪控制台CreatePseudoConsole伪控制台(坐标值,输入流,输出流,标志,@伪)为调用进程创建新的伪控制台对象。标志:0标准,1尝试继承游标位置
关闭伪台ClosePseudoConsole关闭伪台(伪控制台)从给定句柄关闭伪控制台。
控制事件GenerateConsoleCtrlEvent控制事件(信号,进程组)将指定的信号发送到控制台进程组,该组共享与调用进程关联的控制台。信号:0=CTRL+C。1=CTRL+BREAK。
控制别名GetConsoleAlias控制别名(别名,@内容,大小,执行文件)检索指定控制台别名和可执行文件的文本。
控制全名GetConsoleAliases控制全名(@内容,大小,执行文件)检索指定可执行文件的所有已定义的控制台别名。源1=目录1\0源2=目标2
控制全长GetConsoleAliasesLength控制全长(执行文件)检索 控制全名 函数使用的缓冲区所需的大小。
控制定名GetConsoleAliasesExes控制定名(@内容,大小)检索定义了控制台别名的所有可执行文件的名称。
控制定长GetConsoleAliasesExesLength控制定长检索 控制定名 函数使用的缓冲区所需的大小。
控制码页GetConsoleCP控制码页检索与调用进程关联的控制台使用的输入代码页。控制台使用其输入代码页将键盘输入转换为相应的字符值。
控制游标GetConsoleCursorInfo控制游标(输出,游标类)检索有关指定控制台屏幕缓冲区的游标大小和可见性的信息。
控制模式GetConsoleDisplayMode控制模式(@模式)检索当前控制台的显示模式。1全屏,2全屏硬显
控制字号GetConsoleFontSize控制字号(@内容,大小)检索指定控制台屏幕缓冲区使用的字体大小。
控制历史GetConsoleHistoryInfo控制历史(历史类)检索调用进程的控制台的历史记录设置。
原始标题GetConsoleOriginalTitle原始标题(@内容,大小)检索当前控制台窗口的原始标题。
输出码页GetConsoleOutputCP输出码页检索与调用进程关联的控制台使用的输出代码页。控制台使用其输出代码页将各种输出函数写入的字符值转换为控制台窗口中显示的图像。
输出数据GetConsoleScreenBufferInfo输出数据(输出,@数据)检索有关指定控制台屏幕缓冲区的信息。
控制字体GetCurrentConsoleFont控制字体(输出,最大,@字体)检索有关当前控制台字体的信息。最大为真获取最大窗口的字体
控窗大小GetLargestConsoleWindowSize控窗大小(输出)根据显示屏的当前字体和大小,检索最大控制台窗口的大小。返回低字为列,高字为行
输入次数GetNumberOfConsoleInputEvents输入次数(输入,@次数)检索控制台输入缓冲区中未读输入记录的数量。
鼠标按钮GetNumberOfConsoleMouseButtons鼠标按钮(@按钮数)检索当前控制台所使用的鼠标上的按钮数。
读取输入PeekConsoleInput读取输入(输入,@数组,大小,@已读)从指定的控制台输入缓冲区读取数据,而不将其从缓冲区中删除。
控制台读ReadConsoleInputA控制台读(输入,@内容,大小,@已读)从控制台输入缓冲区读取数据,并将其从缓冲区删除。
输入区读ReadConsoleInputExA输入区读(输入,@内容,大小,@已读,标志)从控制台输入缓冲区读取数据,并将其从缓冲区删除。标志:1事件保留,2立即返回
读输出区ReadConsoleOutputA读输出区(输出,@数组,大小,坐标值,方形类)从控制台屏幕缓冲区中字符单元的矩形块读取字符和颜色特性数据。
读字属性ReadConsoleOutputAttribute读字属性(输出,@数组,大小,坐标值,@已读)从控制台屏幕缓冲区指定位置的连续单元格复制指定数量的字符特性。
读输出字ReadConsoleOutputCharacterA读输出字(输出,@数组,大小,坐标值,@已读)从控制台屏幕缓冲区指定位置的连续单元格复制多个字符。
缩放伪台ResizePseudoConsole缩放伪台(伪控制台,坐标值)将伪控制台的内部缓冲区大小调整为给定大小。
滚动控区ScrollConsoleScreenBufferA滚动控区(输出,滚动,剪区,坐标值,填充格)移动屏幕缓冲区中指定剪辑矩形的数据块。
改输出区SetConsoleActiveScreenBuffer改输出区(输出)将指定的屏幕缓冲区设置为当前显示的控制台屏幕缓冲区。
码页控制SetConsoleCP码页控制(代码页)设置与调用进程关联的控制台使用的输入代码页。控制台使用其输入代码页将键盘输入转换为相应的字符值。
控制函数SetConsoleCtrlHandler控制函数(回调,添加)从调用进程的处理程序函数列表中添加或删除应用程序定义的 控制台信号回调 函数。添加=假是删除
游标控制SetConsoleCursorInfo游标控制(输出,游标类)为指定的控制台屏幕缓冲区设置光标的大小和可见性。
模式控制SetConsoleDisplayMode模式控制(输出模式)设置指定控制台屏幕缓冲区的显示模式。1全屏,2窗口
历史控制SetConsoleHistoryInfo历史控制(历史类)设置调用进程的控制台的历史记录设置。
码页输出SetConsoleOutputCP码页输出(代码页)设置与调用进程关联的控制台使用的输出代码页。控制台使用其输出代码页将各种输出函数写入的字符值转换为控制台窗口中显示的图像。
输出扩展GetConsoleScreenBufferInfoEx输出扩展(输出,@数据)检索有关指定控制台屏幕缓冲区的扩展信息。
扩展输出SetConsoleScreenBufferInfoEx扩展输出(输出,@数据)设置有关指定控制台屏幕缓冲区的扩展信息。
控制大小SetConsoleScreenBufferSize控制大小(输出,坐标值)更改指定控制台屏幕缓冲区的大小。
控制方框SetConsoleWindowInfo控制方框(输出,绝对,方形类)设置控制台屏幕缓冲区窗口的当前大小和位置。绝对为假,则坐标相对于当前窗口角
控取字体GetCurrentConsoleFontEx控取字体(输出,最大,字体)检索有关当前控制台字体的扩展信息。最大为假,则设置当前窗口大小的字体信息。
控改字体SetCurrentConsoleFontEx控改字体(输出,最大,字体)设置有关当前控制台字体的扩展信息。最大为假,则设置当前窗口大小的字体信息。
写输入区WriteConsoleInputA写输入区(输入,数组,数量,@已写)将数据直接写入控制台输入缓冲区。
写输出区WriteConsoleOutputA写输出区(输出,数据,数量,坐标值,方形类)将字符和颜色属性数据写入控制台屏幕缓冲区中字符单元的指定矩形块。
字格属性WriteConsoleOutputAttribute字格属性(输出,属性组,数量,坐标值,@已写)从指定位置开始,将多个字符属性复制到控制台屏幕缓冲区的连续单元格。
写输出字WriteConsoleOutputCharacterA写输出字(输出,文字,数量,坐标值,@已写)从指定位置开始,将多个字符复制到控制台屏幕缓冲区的连续单元格。
控制台信号回调
中文名字英文名称参数作用解释
控制台信号回调HandlerRoutine1控制台进程使用此函数来处理进程接收的控制信号。收到信号后,系统会在进程中创建新线程来执行函数。
控制台信号回调 参数表
中文英文类型作用解释
信号dwCtrlType整数处理程序接收的控制信号类型。此参数的取值可为下列值之一。
信号类型
英文名称作用解释
CTRL_C_EVENT0已从键盘输入或 控制事件 函数生成的信号中接收 CTRL+C 信号。
CTRL_BREAK_EVENT1已从键盘输入或 控制事件 函数生成的信号中接收 CTRL+BREAK 信号。
CTRL_CLOSE_EVENT2当用户关闭控制台时,系统向附加到控制台的所有进程发送的信号(单击控制台窗口的窗口菜单上的关闭或单击任务管理器中的结束任务按钮命令)。
CTRL_LOGOFF_EVENT5系统在用户退出登录时发送到所有控制台进程的信号。 此信号不指示哪个用户正在退出登录,因此无法做出任何假设。请注意,仅由服务接收此信号。 交互式应用程序在退出登录时终止,因此当系统发送此信号时,它们不存在。
CTRL_SHUTDOWN_EVENT6当系统关闭时发送的信号。 当系统发送此信号时,交互式应用程序不存在,因此这种情况下只能由服务接收它。 服务也有自己的关闭事件通知机制。
游标类
中文名字英文名称长度作用解释
游标类CONSOLE_CURSOR_INFO8包含有关控制台游标的信息。
游标类 成员表
中文英文类型作用解释
比例dwSize整数由游标填充的字符单元的百分比。该值介于 1 到 100 之间。
可见bVisible整数游标的可见性。 如果游标可见,则此成员为 真。
历史类
中文名字英文名称长度作用解释
历史类CONSOLE_HISTORY_INFO16包含有关控制台历史记录的信息。
历史类 成员表
中文英文类型作用解释
大小cbSize整数结构大小(以字节为单位)。
条数HistoryBufferSize整数每个历史记录缓冲区中保留的命令数。
区数NumberOfHistoryBuffers整数此控制台进程保留的历史记录缓冲区数。
标志dwFlags整数此参数可为零或1。1=重复条目不会存储在历史记录缓冲区中。
字体类
中文名字英文名称长度作用解释
字体类CONSOLE_FONT_INFO8包含控制台字体的信息。
字体类 成员表
中文英文类型作用解释
字体nFont整数系统控制台字体表中字体的索引。
宽度dwFontSize.X整形包含字体中每个字符的宽度(以逻辑单元为单位)。
高度dwFontSize.Y整形包含字体中每个字符的高度(以逻辑单元为单位)。
字体扩展类
中文名字英文名称长度作用解释
字体扩展类CONSOLE_FONT_INFOEX84包含控制台字体的扩展信息。
字体扩展类 成员表
中文英文类型作用解释
大小cbSize整数此结构的大小(以字节为单位)。
字体nFont整数系统控制台字体表中字体的索引。
宽高dwFontSize整数包含字体中每个字符的宽度和高度(以逻辑单元为单位)。
字系FontFamily整数字体间距和系列。
粗细FontWeight整数字体粗细。 粗细范围为 100 到 1000,按 100 的倍数表示。 例如,正常粗细为 400,而 700 为粗体。
名称FaceName[64]文本字样的名称(如 Courier 或 Arial)。
输出类
中文名字英文名称长度作用解释
输出类CONSOLE_SCREEN_BUFFER_INFO22包含有关控制台屏幕缓冲区的信息。
输出类 成员表
中文英文类型作用解释
列数dwSize.X整形包含控制台屏幕缓冲区的字符列数。
行数dwSize.Y整形包含控制台屏幕缓冲区的字符行数。
左边dwCursorPosition.X整形包含控制台屏幕缓冲区中游标的列坐标位置。
上边dwCursorPosition.Y整形包含控制台屏幕缓冲区中游标的行坐标位置。
属性wAttributes整形屏幕缓冲区的字符的属性。
srWindow.Left整形包含显示窗口左上角和右下角的控制台屏幕缓冲区坐标的矩形左上角的 x 坐标。
srWindow.Top整形包含显示窗口左上角和右下角的控制台屏幕缓冲区坐标的矩形左上角的 y 坐标。
srWindow.Right整形包含显示窗口左上角和右下角的控制台屏幕缓冲区坐标的矩形右下角的 x 坐标。
srWindow.Bottom整形包含显示窗口左上角和右下角的控制台屏幕缓冲区坐标的矩形右下角的 y 坐标。
dwMaximumWindowSize.X整形包含控制台窗口的最大宽度(以字符列和行为单位),给定当前屏幕缓冲区的大小和字体以及屏幕大小。
dwMaximumWindowSize.X整形包含控制台窗口的最大高度(以字符列和行为单位),给定当前屏幕缓冲区的大小和字体以及屏幕大小。
输出扩展类
中文名字英文名称长度作用解释
输出扩展类CONSOLE_SCREEN_BUFFER_INFOEX96包含有关控制台屏幕缓冲区的扩展信息。
输出扩展类 成员表
中文英文类型作用解释
大小cbSize整数此结构的大小(以字节为单位)。
列数dwSize.X整形包含控制台屏幕缓冲区的字符列数。
行数dwSize.Y整形包含控制台屏幕缓冲区的字符行数。
左边dwCursorPosition.X整形包含控制台屏幕缓冲区中游标的列坐标位置。
上边dwCursorPosition.Y整形包含控制台屏幕缓冲区中游标的行坐标位置。
属性wAttributes整形屏幕缓冲区的字符的属性。
srWindow.Left整形包含显示窗口左上角和右下角的控制台屏幕缓冲区坐标的矩形左上角的 x 坐标。
srWindow.Top整形包含显示窗口左上角和右下角的控制台屏幕缓冲区坐标的矩形左上角的 y 坐标。
srWindow.Right整形包含显示窗口左上角和右下角的控制台屏幕缓冲区坐标的矩形右下角的 x 坐标。
srWindow.Bottom整形包含显示窗口左上角和右下角的控制台屏幕缓冲区坐标的矩形右下角的 y 坐标。
dwMaximumWindowSize.X整形包含控制台窗口的最大宽度(以字符列和行为单位),给定当前屏幕缓冲区的大小和字体以及屏幕大小。
dwMaximumWindowSize.X整形包含控制台窗口的最大高度(以字符列和行为单位),给定当前屏幕缓冲区的大小和字体以及屏幕大小。
填充wPopupAttributes整形控制台弹出窗口的填充属性。
全屏bFullscreenSupported整数如果此成员为真,则支持全屏模式;否则不支持。Windows Vista 之后的系统,此值始终为假,因为对显示器的真正直接 VGA 访问不再可用。
颜色ColorTable[16]整数描述主机颜色设置的 颜色 值的数组。
字格类
中文名字英文名称长度作用解释
字格类CHAR_INFO4指定 Unicode 或 ANSI 字符及其属性。 控制台函数使用此结构从控制台屏幕缓冲区读取和写入数据。
字格类 成员表
中文英文类型作用解释
文字Char整形由以下成员组成的联合。UnicodeChar 屏幕缓冲区字符单元的 Unicode 字符。AsciiChar 屏幕缓冲区字符单元的 ANSI 字符。
属性Attributes整形字符属性。
方形类
中文名字英文名称长度作用解释
方形类SMALL_RECT8定义矩形左上角和右下角的坐标。
方形类 成员表
中文英文类型作用解释
Left整形矩形左上角的 x 坐标。
Top整形矩形左上角的 y 坐标。
Right整形矩形右下角的 x 坐标。
Bottom整形矩形右下角的 x 坐标。

面向对象——简介:

面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
面向对象编程将一个系统抽象为许多对象的集合,每一个对象代表了这个系统的特定方面。对象包括函数(方法)和数据(属性)。
一个对象可以向其他部分的代码提供一个公共接口,而其他部分的代码可以通过公共接口执行该对象的特定操作,系统的其他部分不需要关心对象内部是如何完成任务的,这样保持了对象自己内部状态的私有性。
Windows编程对象包含有很多种,这里主要介绍组件对象和句柄对象。

组件对象模型 (COM)

COM 是一个独立于平台的分布式面向对象的系统,用于创建可以交互的二进制软件组件。
COM 是 Microsoft 的 OLE (复合文档的基础技术,) 和 ActiveX (支持 Internet 的组件) 技术。
这两种技术在极语言里都有提供。极语言提供了简化 COM 对象的实现的编程机制,只需用中文方法表和对象标识就可以创建。
这些对象可以位于单个进程中、其他进程中,甚至在远程计算机上也是如此。
若要了解 COM (以及所有基于 COM 的技术) ,必须了解它不是面向对象的语言,而是一种标准。 COM 也不指定应如何构建应用程序;语言、结构和实现详细信息留给应用程序开发人员。
相反,COM 指定对象模型和编程要求,使 COM 对象 (也称为 COM 组件, 有时只是对象) 与其他对象交互。 这些对象可以在单个进程中、在其他进程中,甚至可以位于远程计算机上。
它们可以用不同的语言编写,而且在结构上可能非常不同,这就是为什么 COM 被称为 二进制标准:在程序转换为二进制计算机代码后应用的标准。

COM 的唯一语言要求是,代码以一种语言生成,该语言可以创建指针的结构,并通过指针显式或隐式调用函数。
面向对象的语言(如 C++ 和 极语言)提供了简化 COM 对象的实现的编程机制,可用于创建和使用 COM 对象。

COM 定义 COM 对象的基本性质。 通常,软件对象由一组数据和操作数据的函数组成。 COM 对象是一个对象,在该对象中,只能通过一组或多组相关函数访问对象的数据。
这些函数集称为 接口,接口的函数称为 方法。 此外,COM 要求访问接口方法的唯一方法是通过指向 接口的指针。

除了指定基本二进制对象标准外,COM 还定义了某些基本接口,这些接口提供所有基于 COM 的技术通用的函数,并且它提供所有组件所需的少量函数。
COM 还定义了对象如何在分布式环境中协同工作,并添加了安全功能来帮助提供系统和组件的完整性。

句柄对象

句柄对象是表示系统资源(如文件、线程或图形图像)的数据结构。 应用程序不能直接访问对象数据,也不能直接访问对象表示的系统资源。
应用程序必须获取对象句柄,该句柄可用于检查或修改系统资源。 每个句柄在内部维护的表中都有一个条目。这些条目包含资源的地址,以及标识资源类型的方法。
出于两个入口原因,系统使用对象和句柄来规范对系统资源的访问。 首先,使用 对象可确保微软可以更新系统功能,只要维护原始对象接口。
发布系统的后续版本后,可以使用更新的对象,几乎不需要额外的工作。
其次,使用 对象使你能够利用 Windows 安全性。 每个对象都有自己的访问控制列表 (ACL) ,该列表指定进程可以对对象执行的操作。
每次应用程序创建对象的句柄时,系统都会检查对象的 ACL。

对象管理

对象由标准标头和特定于对象的属性组成。 由于所有对象具有相同的结构,因此 Windows 中有一个维护所有对象的对象管理器。
对象标头包括对象名称等项,以便其他进程可以按名称引用对象和安全描述符,以便对象管理器可以控制哪些进程访问系统资源。
对象管理器执行的任务包括:
创建对象
验证进程是否有权使用该对象
创建对象句柄并将其返回给调用方
维护资源配额
创建重复句柄
关闭对象的句柄

对象接口

Windows 提供执行以下任务的函数:
创建对象
获取对象句柄
获取有关 对象的信息
设置有关对象的信息
关闭对象句柄
销毁对象
其中一些任务并非每个对象都是必需的。 其中一些任务是针对某些对象组合完成的。 例如,应用程序可以创建事件对象。
其他应用程序可以打开 事件以获取此事件对象的唯一句柄。 当每个应用程序使用 完 事件时,它会将其句柄关闭到 对象。
当事件对象没有剩余的打开句柄时,系统会销毁事件对象。 相比之下,应用程序可以获取现有窗口对象的句柄。
当不再需要窗口对象时,应用程序必须销毁 对象,这会使窗口句柄失效。

有时,在关闭所有对象句柄后,对象仍保留在内存中。 例如,线程可以创建事件对象并等待事件句柄。当线程正在等待时,另一个线程可能会关闭同一个事件对象句柄。
事件对象保留在内存中,没有任何事件对象句柄,直到事件对象设置为信号状态并且等待操作完成。 此时,系统会从内存中删除 对象。

句柄和对象消耗内存。 因此,若要保持系统性能,应关闭句柄,并在不再需要对象时立即将其删除。 如果不这样做,应用程序可能会由于过度使用分页文件而损害系统性能。

当进程终止时,系统会自动关闭句柄并删除进程创建的对象。 但是,当线程终止时,系统通常不会关闭句柄或删除对象。
唯一的例外是窗口、挂钩、窗口位置和动态数据交换 (DDE) 会话对象;创建线程终止时,这些对象将被销毁。

处理限制

某些对象一次仅支持一个句柄。 当应用程序创建 对象时,系统会提供句柄,并在应用程序销毁对象时使句柄失效。 其他对象支持单个对象的多个句柄。
关闭对象的最后一个句柄后,操作系统会自动从内存中删除该对象。
系统中打开的句柄总数仅受可用内存量的限制。 某些对象类型支持每个会话或每个进程的有限数量的句柄。

处理继承

子进程可以从其父进程继承句柄。 继承的句柄仅在子进程的上下文中有效。 若要使子进程能够从其父进程继承打开的句柄,请使用以下步骤。

创建将 安全属性类 结构的 继承 成员设置为 真 。
使用 创建进程 函数创建子进程,并将 继承 参数设置为 真。
复制对象 函数复制要用于当前进程或其他进程的句柄。 如果应用程序为另一个进程复制了其中一个句柄,则重复的句柄仅在另一个进程的上下文中有效。

复制或继承的句柄是唯一值,但它引用与原始句柄相同的对象。 进程可以继承或复制以下类型的对象的句柄:

访问令牌
通信设备
控制台输入
控制台屏幕缓冲区
桌面
目录
事件
文件
文件映射
作业
邮槽
互斥
管道
进程
注册表项
信号量
网络接口
线程
定时器
窗口工作站
所有其他对象都是创建它们的进程的专用对象;不能复制或继承其对象句柄。

对象类别

系统提供三类对象:用户、图形设备接口 (GDI) 和内核。 系统使用用户对象支持窗口管理,使用 GDI 对象支持图形,使用内核对象支持内存管理、进程执行和进程间通信 (IPC) 。
用户对象概述
快捷键表 键盘加速键
西文插入记号插入符号
游标游标
DDE 对话动态数据交换管理库
挂钩 挂钩
图标 图标
菜单 菜单
窗口 Windows
窗口位置 Windows

GDI 对象概述
位图 位图
画刷 画刷
设备上下文 设备上下文
增强型图元文件 图元文件
增强型图元文件 设备上下文 图元文件
字体 字体和文本
内存 设备上下文 设备上下文
图元文件 图元文件
图元文件 设备上下文 图元文件
调色板 颜色
触控笔和扩展笔
区域 区域

内核对象 概述
访问令牌 访问控制
更改通知 目录更改通知
通信设备 通信
控制台输入 字符模式应用程序
控制台屏幕缓冲区 字符模式应用程序
桌面 台式机
事件 同步
事件日志 事件日志记录
文件 文件和群集
文件映射 文件映射
内存管理
作业 作业对象
邮槽 邮槽
模块 动态链接库
Mutex 同步
管道 管道
进程 进程和线程
信号器 同步
插座 Windows 套接字 2
线程 进程和线程
定时器 同步
计时器队列 同步
计时器队列计时器 同步
更新资源 资源
窗口工作站 窗口工作站

用户对象

用户界面对象仅支持每个对象一个句柄。 进程无法继承或复制用户对象的句柄。 一个会话中的进程不能引用另一个会话中的用户句柄。
理论上,每个会话有 65,536 个用户句柄的限制。 但是,每个会话可以打开的最大用户句柄数通常较低,因为它受可用内存的影响。
还有用户句柄的默认每进程限制。 若要更改此限制,请设置以下注册表值:

\ HKEY_LOCAL_MACHINE软件\微软\\ Windows NT CurrentVersion\Windows\USERProcessHandleQuota

此值可以设置为介于 200 和 18,000 之间的数字。

用户对象的句柄
用户对象的句柄对所有进程公开。 也就是说,只要进程对对象具有安全访问权限,任何进程都可以使用用户对象句柄。
创建窗口对象后,应用程序可以使用窗口句柄来显示或更改窗口。 在销毁窗口对象之前,句柄保持有效。
管理用户对象
创建者函数要么创建对象和对象句柄,要么只返回现有的对象句柄。 销毁器函数从内存中删除对象,这会使对象句柄失效。
下表列出了用户对象,以及每个对象的创建者和销毁器函数。 
用户对象创建函数销毁函数
快捷键表创建键表销毁键表
西文插入记号创建标记销毁标记
游标创建光标、 载入光标、载入位图销毁光标
DDE 对话会话连接、会话全连会话终止、会话销毁
挂钩窗口挂钩窗口脱钩
图标新建图标、载入图标、载入位图销毁图标
菜单创建菜单、建子菜单、 载入菜单、加载菜单销毁菜单
窗口创建窗口、 创建对话、 资源对话、 创建子窗销毁窗口
窗口位置多窗位置控制多窗

GDI 对象

GDI 对象仅支持每个对象一个句柄。 GDI 对象的句柄对进程是专用的。 也就是说,只有创建 GDI 对象的进程才能使用对象句柄。

理论上,每个会话有 65,536 个 GDI 句柄的限制。 但是,每个会话可以打开的最大 GDI 句柄数通常较低,因为它受可用内存的影响。

Windows 2000: 每个会话限制为 16,384 个 GDI 句柄。

还有一个默认的 GDI 句柄每进程限制。 若要更改此限制,请设置以下注册表值:

\ HKEY_LOCAL_MACHINE软件\微软\\ Windows NT CurrentVersion\Windows\GDIProcessHandleQuota

此值可以设置为介于 256 和 65,536 之间的数字。

Windows 2000: 此值可以设置为介于 256 和 16,384 之间的数字。

管理 GDI 对象
下表列出了 GDI 对象,以及每个对象的创建者和销毁器函数。 创建者函数要么创建对象和对象句柄,要么只返回现有的对象句柄。 销毁器函数从内存中删除对象,这会使对象句柄失效。
GDI 对象创建 函数销毁 函数
位图创建位图、新建位图、创建图像、关联位图、内建位图、兼容位图删除对象
画刷新建笔刷、内建空刷、内建画刷、图案笔刷、内建笔刷、创建画刷删除对象
设备上下文驱动设备删除设备、释放设备
增强型图元文件创建强图删除强图
增强型图元文件 DC创建图元删除图元
字体创建字体、新建字体删除对象
内存 DC创建设备删除设备
图元文件创建图元删除图元
图元文件 DC创建图元关闭图元
调色板创建色板删除对象
触控笔和扩展笔创建画笔、新建画笔、扩展画笔删除对象
区域合并区域、创建椭圆、新建椭圆、建多边区、叠多边区、创建矩形、新建矩形、建圆矩形、区域转换、转换区域删除对象

内核对象

内核对象句柄特定于进程。 也就是说,进程必须创建 对象或打开现有对象以获取内核对象句柄。 内核句柄上的每个进程限制为 2^24。
但是,句柄存储在分页池中,因此可以创建的实际句柄数取决于可用内存。 可以在 32 位 Windows 上创建的句柄数明显低于 2^24。

任何进程都可以为现有内核对象创建新句柄 (甚至由另一个进程) 创建的一个新句柄,前提是该进程知道该对象的名称并对该对象具有安全访问权限。
内核对象句柄包括访问权限,这些权限指示可向进程授予或拒绝的操作。 应用程序在创建对象或获取现有对象句柄时指定访问权限。 
每种类型的内核对象都支持其自己的一组访问权限。例如事件句柄可以设置或等待访问 (或同时) ,文件句柄可以具有读取或写入访问权限 (或两者) 。

创建事件对象后,应用程序可以使用事件句柄来设置或等待事件。 在应用程序关闭句柄或终止之前,句柄保持有效。

大多数内核对象支持单个对象的多个句柄。例如应用程序可以使用 打开事件 函数获取其他事件对象句柄。

此方法使应用程序具有具有不同访问权限的句柄。 例如,句柄 1 可能已设置和等待事件访问权限,句柄 2 可能仅具有等待访问权限。

如果另一个进程知道事件名称并对该对象具有安全访问权限,则可以使用 打开事件 创建自己的事件对象句柄。
创建应用程序还可以使用 关闭对象 函数将其一个句柄复制到同一进程或另一个进程中。

只要至少有一个对象句柄存在,对象就保留在内存中。应用程序使用 关闭对象 函数关闭其事件对象句柄。 如果没有事件句柄,系统会从内存中删除 对象。

系统管理文件对象的方式与其他内核对象略有不同。 文件对象包含文件指针 - 指向要读取或写入文件中的下一个字节的指针。
每当应用程序创建新的文件句柄时,系统都创建一个新的文件对象。 因此,多个文件对象可以引用磁盘上的单个文件。

只有通过复制或继承,多个文件句柄才能引用同一个文件对象。
下表列出了每个内核对象,以及每个对象的创建者和销毁器函数。 创建器函数要么创建对象和对象句柄,要么创建新的现有对象句柄。
销毁函数关闭对象句柄。 当应用程序关闭内核对象的最后一个句柄时,系统会从内存中删除该对象。
内核对象创建 函数销毁 函数
访问令牌新建令牌、再造令牌、复制令牌、进程令牌、线程令牌关闭对象
更改通知初改通知停改通知
通信设备创建文件关闭对象
控制台输入创建文件,使用 CONIN$关闭对象
控制台屏幕缓冲区创建文件,使用 CONOUT$关闭对象
事件创建事件、新建事件、打开事件关闭对象
事件日志事件日志、注册事件、打开备份关闭日志
文件创建文件关闭对象、删除文件
文件映射映射文件、打开映射关闭对象
查找文件查找文件关闭查找
内存创建内存销毁
I/O 完成端口端口关联关闭对象
作业创建作业关闭对象
邮槽创建邮槽关闭对象
内存资源通知内存通知关闭对象
模块加载库、加载模块 模块地址释放引用
互斥创建互斥、新建互斥、打开互斥关闭对象
管道创建名管、创建管道关闭对象、断开名管
进程创建进程、打开进程、当前进程关闭对象、终止进程
信号器创建信号、新建信号、打开信号关闭对象
网络分配,接受关闭
线程创建线程、远程线程、当前线程关闭对象、终止线程
定时器创建延时、新建延时、 打开延时关闭对象
更新资源开更资源停更资源
桌面线程桌面应用程序无法删除此对象。
窗口工作站取窗口站应用程序无法删除此对象。

窗口(对话框/控件)——发送/接收消息:

窗口消息可以使用发送消息向窗口发送消息,也可以在窗体消息这里处理接收的消息
初级程序默认的代码都有窗体消息这个程序段,在这里可以控制键盘鼠标等各种消息
程序段 窗体消息(窗口,消息,参数,数据)
  文本 内容[16]="数值"-数据;
  判断(消息)为 窗口创建{信息框(0,"创建")}
  为 程序关闭{停止(0)}
  为 窗口移动{窗体~内容}
  为 窗口缩放{窗体~内容}
  为 单击左键{左键点击(参数)}
  否则 处理窗口(窗口,消息,参数,数据)
结束
上面这段代码是在收到窗口创建消息时, 弹出信息框;在收到程序关闭消息时停止程序运行
在收到窗口移动消息时,显示窗口的位置(左顶);在收到窗口缩放消息时,显示窗口的大小(宽高)
当然也可以使用发送消息给窗口,让程序来处理;发送消息(窗体,窗口关闭,0,0)
有些消息主要常用来接收处理,例如窗口改变或键盘鼠标等;有些消息就常用来发送,如获取设置文本等
对于控件有些通用的功能,比如:控制窗口(按钮,真) 启用按钮接受鼠标和键盘的控制
控制窗口(编辑框1,假) 禁用编辑框1接受鼠标和键盘的输入
整数 数值=取控件数(窗体,1)获取窗体上第一个控件内文字,并转换成数值
改控件数(窗体,2,数值,真)把数值转换成文字显示到窗体上第二个控件窗口
整个窗口界面可以叫它对话框,对话框里的子窗口叫它控件,设计控件时候都会有独立的编号,称之为标识
刚才读写控件内数值使用的数值编号就是标识,在控件操作中十分常用,也就是设计控件时候的编号叫做标识
中文名字常量数值英文名称释义
窗口创建1WM_CREATE新建一个窗口。③参数:0;④数据:创建窗口的数据结构
程序关闭2WM_DESTROY销毁一个窗口。③参数:0;④数据:0
窗口移动3WM_MOVE移动一个窗口。③参数:0;④数据:xy坐标(各占16位)
窗口缩放5WM_SIZE改变一个窗口的大小。③参数:0=已调整;1最小化;2最大化,3其它窗口还原;4其它窗口最大化;④数据:宽高大小(各16位)
窗口激活6WM_ACTIVATE一个窗口被激活或失去激活状态。③参数:0关闭,1非鼠标激活,2鼠标激活;④数据:参数为0是激活窗口,非0是停用的窗口
获得焦点7WM_SETFOCUS将键盘焦点转向一个窗口。③参数:失去焦点的窗口,可为0;④数据:0
失去焦点8WM_KILLFOCUS使一个窗口失去焦点。③参数:接收焦点的窗口,可为0;④数据:0
可用状态10WM_ENABLE使一个窗口处于可用状态。③参数:0为禁用,非零启用;④数据:0
是否重绘11WM_SETREDRAW设置窗口是否能重绘。③参数:0不重绘,非0重绘;④数据:0
窗口重绘15WM_PAINT当需要绘制一部分应用窗口的时候,发送本消息给所有者程序。③参数:0;④数据:0
窗口关闭$0010WM_CLOSE用户关闭窗口时会发送本消息,紧接着会发送程序关闭消息。③参数:0;④数据:0
消息结束$0012WM_QUIT提交退出函数提交一个代码数值,程序收到此消息,用以关闭消息循环,结束程序的运行。③参数:退出码;④数据:0
窗口恢复$0013WM_QUERYOPEN最小化的窗口即将被恢复以前的大小位置。③参数:0;④数据:0
擦除背景$0014WM_ERASEBKGND当一个窗口的背景必须被擦除时本消息会被触发(如:窗口大小改变时)。③参数:设备;④数据:0
显示窗口$0018WM_SHOWWINDOW发送本消息给一个窗口,以便隐藏或显示该窗口。③参数:0隐藏,非0显示;④数据:0不变,1最小化,2最大化,3正在还原,4已被还原
界面激活$001CWM_ACTIVATEAPP窗口进程激活状态改动,正被激活的窗口属于不同的应用程序。③参数:0停用,非0激活;④数据:线程标识
模态窗口$001FWM_CANCELMODE发送本消息来取消某种正在进行的模态(操作)(如鼠示捕获),例如:启动一个模态窗口时,父窗会收到本消息;③参数:0;④数据:0
窗口改变$0024WM_GETMINMAXINFO当窗口将要改变大小或位置时,由系统发送本消息给窗口,用户拖动一个可重置大小的窗口时便会发出本消息。③参数:0;④数据:MINMAXINFO结构
拖放小窗$0037WM_QUERYDRAGICON本消息发送给最小化的窗口,当该窗口将被拖放而其窗口类中没有定义图标,应用程序能返回一个图标或光标的句柄。③参数:0;④数据:0
显存不足$0041WM_COMPACTING显示内存已经很少了。③参数:时间比;④数据:0。例如,0x8000表示压缩内存所用的 CPU 时间的 50%。
首创窗口$0081WM_NCCREATE当某窗口首次被创建时,本消息在WM_CREATE消息发送前发送。③参数:0;④数据:创建窗口的全部数据
调整大小$214WM_SIZING当用户正在调整窗口大小时,发送本消息给窗口;③参数:1左边缘,2右边缘,3上边缘,4左上角,5右上角,下边缘,7左下角,8右下角;④数据:矩形类
循环调整$231WM_ENTERSIZEMOVE当某窗口进入移动或调整大小的模式循环时,本消息发送到该窗口。③参数:0;④数据:0
退出调整$232WM_EXITSIZEMOVE确定用户改变窗口大小或改变窗口位置的事件是何时完成的。③参数:0;④数据:0
窗口绘制$317WM_PRINT请求窗口在指定的设备(如打印机)绘制自身。③参数:设备;④数据:1绘可见窗口,2绘非工作区,4绘工作区,8擦除背景,16绘所有可见子窗,32绘所有窗口
绘客户区$318WM_PRINTCLIENT请求窗口在指定的设备(如打印机)绘制其客户区。③参数:设备;④数据:1绘可见窗口,2绘非工作区,4绘工作区,8擦除背景,16绘所有可见子窗,32绘所有窗口

中文名字英文名称长度作用解释
窗口类WNDCLASS40用来储存某一类窗口的信息,向系统注册此信息才能创建窗体。
窗口类——成员表
风格style整数窗口类的风格
消息lpfnWndProc整数窗口消息处理函数
类长cbClsExtra整数窗口类扩展
实长cbWndExtra整数窗口实例扩展
实例hInstance整数当前实例句柄,$400000
图标hIcon整数窗口的小图标
光标hCursor整数窗口鼠标光标
背景hbrBackground整数窗口背景色
菜单lpszMenuName整数窗口菜单
名称lpszClassName整数窗口类名

中文名字英文名称长度作用解释
消息类MSG28定义了传递给应用程序的窗口过程的初始化参数,它定义了窗口外观相关特性
消息类——成员表
窗口hwnd整数表示消息所属的窗口。
消息message整数表示消息类型的标识符
参数wParam整数附加消息1
附加lParam整数附加消息2
时间time整数表示消息投递到消息队列中的时间
左边pt.x整数鼠标在屏幕上左边的位置
顶部pt.y整数鼠标在屏幕上顶部的位置

读写控件文本/字体/热键——控制消息:

1.读写窗体/标签/文本框/按钮/单选钮/复选钮/分组框/组合框/高级组合框里的文字内容
发送消息(窗体,设置文本,0,"标题名称")  这个代码可以修改窗口的标题栏内容
文本 内容[64];整数 长度=发送消息(文本框1,获取文本,64,内容)  这个代码可以获取编辑框的内容
获取文本时第三参数要指定缓冲区的长度,并不是文字长度,返回值是文本内容的真实长度,接收文本的缓冲区应该用一个比较大的容量
内容这个缓冲区长度为64,那就只能获取63字节数据,因为文字内容必须以0结尾,如果填满了64字节,就会认为后面还有文字没有读取完
如果文本框内容比较多,不清楚有多少字,就需要先获取文字的长度,然后申请相应长度的内存缓冲区
整数 长度=发送消息(文本框1,文本长度,0,0) 真实长度不计算文字末尾的0
整数 内存=申请内存(长度+1) 申请的内存长度要比真实长度多一字节
如果是宽字符模式,需要多加三字节;动态申请内存缓冲区不能使用 文本 内容[长度]这种方法,只能用申请内存相关的函数
发送消息(文本框1,获取文本,长度+1,内存) 指定缓冲区的长度也要加上一
释放内存(内存) 内存使用完之后,要释放内存。注意内存这个变量使用了三次
2.修改控件的字体
创建字体可以使用创建字体和新建字体这两个函数,新建字体需要使用逻辑字体类这个结构体
逻辑字体类 字号(高度=-12,名字="微软雅黑")添加名为字号的逻辑字体类,高度也就是字体大小,使用负数表示
申请一个整数变量比如叫字体,然后在窗体启动时用 字体= 新建字体(字号),也就创建了一个字体
还有一种不用逻辑字体的创建方法:字体=创建字体(15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "宋体")
第一个参数逻辑高度是字体大小,详见:创建字体(逻辑高度,字符宽度,擒纵角,取向角,粗细,斜体,下划线,删除线,字符集,输出精度,剪辑精度,输出质量,间距和字体,字体名称)
创建字体函数不支持微软雅黑等字体,参数也太多,建议使用新建字体这个函数,只需要逻辑字体类这一个结构体参数即可创建
创建字体之后可以使用发送消息(按钮1,指定字体,字体,0)来指定标签,文本框,列表框,按钮等控件的字体
3.为窗口指定热键
发送消息(窗体,设置热键,0x71,0) 当用户按下F2键时,系统将激活窗口。键码参见键盘事件
第三参数的低8位是键码,高8位是组合类型:1 SHIFT,2 CTRL,4 ALT,8 扩展;参数为0取消热键关联
发送消息(窗体,设置热键,0x271,0) F2键前面加上2,高位就是CTRL,按下CTRL+F2就能激活主窗口 当用户按下热键时,系统会生成一条 系统命令 消息,交给处理窗口函数,会弹出该窗口;设置热键不能指定子窗口
中文名字常量数值英文名称释义
设置文本12WM_SETTEXT设置一个窗口的文本。③参数:0;④数据:内容文本
获取文本13WM_GETTEXT复制窗口的文本到缓冲区。③参数:最大长度;④数据:文本缓冲区
文本长度14WM_GETTEXTLENGTH得到窗口的文本长度(不含结束符)。③参数:0;④数据:0
指定字体$30WM_SETFONT指定控件所用字体。③参数:字体;④数据:0不重绘;非0立即重绘
获取字体$31WM_GETFONT得到当前控件绘制其文本所用的字体。③参数:0;④数据:0
设置热键$32WM_SETHOTKEY为某窗口关联一个热键。③参数:键码/高位1SHIFT,2CTRL,4ALT,8扩展;④数据:0
获取热键$33WM_GETHOTKEY为某窗口关联一个热键。③参数:0;④数据:0;返回值:键码/高位1SHIFT,2CTRL,4ALT,8扩展
系统命令$112WM_SYSCOMMAND当用户按下 设置热键 指定的按键。③参数:键值;④数据:窗口
热键消息$312WM_HOTKEY当用户按下由注册热键函数注册的热键时。③参数:-1窗口,-2桌面;④数据:低字=1Alt,2CTRL,4SHIFT,8WIN;高字=键码

窗口外观——控制消息:

整数 图标=加载图像(0,"sec.ico",图标类型,0,0,$10);从文件中加载一个图标,$10标志是从文件加载
发送消息(窗体,设置图标,0,图标);修改窗口标题栏显示的小图标,0是小图标,1是大图标
删除对象(图标);删除加载的图标对象,从而释放读取图标使用的内存
加载图标可以使用系统固有的图标,例如把图标换成整数 图标=载入图标(0,32518)
显示的就是一个盾牌图标;32512默认图标,32513错误图标,32514问号图标,32515警告图标,32516,信息图标
中文名字常量数值英文名称释义
图标重绘$0026WM_PAINTICON当一个最小化的窗口图标将被重绘时发送本消息。③参数:0;④数据:0
图标背景$0027WM_ICONERASEBKGND本消息发送给某个最小化的窗口,仅当它在画图标前它的背景必须被重画。③参数:0;④数据:0
打印变化$002AWM_SPOOLERSTATUS每当打印管理列队增加或减少一条作业时就会发出本消息。③参数:状态;④数据:作业数
外观改变$002BWM_DRAWITEM 按钮、组合框、列表框、菜单的外观改变时会发送本消息给这些控件的所有者。③参数:控件号;④数据:绘制项目类
改变窗口$0046WM_WINDOWPOSCHANGING本消息会发送给那些大小和位置(Z_Order)将被改变的窗口,以调用设置窗口函数或其它窗口管理函数。③参数:0;④数据: WINDOWPOS 结构
窗口变化$0047WM_WINDOWPOSCHANGED本消息会发送给那些大小和位置(Z_Order)已被改变的窗口,以调用设置窗口函数或其它窗口管理函数。③参数:0;④数据: WINDOWPOS 结构
改变风格$007CWM_STYLECHANGING将要改变一个或多个窗口的风格时,发送本消息给那个窗口。③参数:-16窗口样式,-20扩展样式;④数据:STYLESTRUCT 结构
风格变化$007DWM_STYLECHANGED改变一个或多个窗口的风格后,发送本消息给那个窗口。③参数:-16窗口样式,-20扩展样式;④数据:STYLESTRUCT 结构
窗口图标$007FWM_GETICON本消息发送给某个窗口,用于返回与某窗口有关联的大图标或小图标的句柄。③参数:0小图标,1大图标,2生成图标;④数据:DPI大小(16*16)
设置图标$0080WM_SETICON应用程序发送本消息让一个新的大图标或小图标与某窗口相关联。③参数:0小图标,1大图标;④数据:图标;窗口标题栏是小图标,“Alt+Tab”对话框中显示大图标

图片类型

中文名字常量英文名称释义
位图类型0IMAGE_BITMAP位图类型(bmp)
图标类型1IMAGE_ICON图标类型(ico)
光标类型2IMAGE_CURSOR光标类型(cur)
强图类型3IMAGE_ENHMETAFILE强图类型(emf)
窗口样式
中文名字英文名称数值作用解释
细线边框WS_BORDER0x00800000窗口具有细线边框
标题栏WS_CAPTION0x00C00000窗口具有标题栏, (包含 WS_BORDER 样式) 。
是子窗口WS_CHILD0x40000000窗口是子窗口。 具有此样式的窗口不能有菜单栏。 此样式不能与 WS_POPUP 样式一起使用。
是子窗口WS_CHILDWINDOW0x40000000与 WS_CHILD 样式相同。
不绘子窗WS_CLIPCHILDREN0x02000000排除在父窗口内进行绘制时子窗口占用的区域。 创建父窗口时使用此样式。
剪裁子窗WS_CLIPSIBLINGS0x04000000相对于彼此剪裁子窗口;重绘时若有不绘子窗样式会将其他重叠的子窗口剪裁到子窗口的区域之外进行更新。
是否禁用WS_DISABLED0x08000000窗口最初处于禁用状态。 已禁用的窗口无法接收用户的输入。
对话边框WS_DLGFRAME0x00400000窗口具有通常与对话框一起使用的样式的边框。 具有此样式的窗口不能具有标题栏。
分组控制WS_GROUP0x00020000窗口是一组控件的第一个控件。 组由第一个控件及其后定义的所有控件组成,以便用户可以在组之间移动焦点。
水平滚动WS_HSCROLL0x00100000窗口具有水平滚动条。
垂直滚动WS_VSCROLL0x00200000窗口具有垂直滚动条。
最小化WS_ICONIC0x20000000窗口最初最小化。
最大化WS_MAXIMIZE0x01000000窗口最初是最大化的。
最大化钮WS_MAXIMIZEBOX0x00010000窗口有一个“最大化”按钮。 不能与 WS_EX_CONTEXTHELP 样式组合使用。 还必须指定 WS_SYSMENU 样式。
最小化WS_MINIMIZE0x20000000窗口最初最小化。
最小化钮WS_MINIMIZEBOX0x00020000窗口有一个最小化按钮。 不能与 WS_EX_CONTEXTHELP 样式组合使用。 还必须指定 WS_SYSMENU 样式。
重叠窗口WS_OVERLAPPED0x00000000窗口是重叠的窗口。
重叠窗口WS_TILED0x00000000该窗口是一个重叠的窗口。
标题边框WS_OVERLAPPEDWINDOW0xCF0000重叠的窗口带有标题栏和边框。
标题边框WS_TILEDWINDOW0xCF0000重叠的窗口带有标题栏和边框。
弹出窗口WS_POPUP0x80000000窗口是弹出窗口。 此样式不能与子窗口样式一起使用。
弹出标题WS_POPUPWINDOW0x80880000窗口是弹出窗口带有菜单栏和细线边框。
可调边框WS_SIZEBOX0x00040000窗口具有大小调整边框。
可调边框WS_THICKFRAME0x00040000窗口具有调整大小边框。
系统菜单WS_SYSMENU0x00080000窗口的标题栏上有一个窗口菜单。 还必须指定 WS_CAPTION 样式。
制表选择WS_TABSTOP0x00010000窗口是一个控件,当用户按下 TAB 键时,该控件可以接收键盘焦点。
是否可见WS_VISIBLE0x10000000该窗口最初是可见的。
窗口扩展样式
中文名字英文名称数值作用解释
双边窗口WS_EX_DLGMODALFRAME1窗口有一个双边框
总在顶层WS_EX_TOPMOST8窗口应放置在所有非最顶部窗口的上方
文件拖曳WS_EX_ACCEPTFILES0x10窗口接受拖放文件。
窗口透明WS_EX_TRANSPARENT0x20窗口显示为透明,因为基础同级窗口的位已被绘制。
MDI 窗口WS_EX_MDICHILD0x40该窗口是 MDI 子窗口。
小标题栏WS_EX_TOOLWINDOW0x80工具窗口具有短于普通标题栏的标题栏和使用较小的字体绘制的窗口标题。
凸起边缘WS_EX_WINDOWEDGE0x100窗口的边框带有凸起的边缘。
阴影边界WS_EX_CLIENTEDGE0x200窗口有一个带有凹陷边缘的边框。
问号帮助WS_EX_CONTEXTHELP0x400窗口的标题栏包含问号。单击时光标将变成带指针的问号。随后单击子窗口将收到 WM_HELP 消息。
导航子窗WS_EX_CONTROLPARENT0x10000包含参与对话框导航的子窗口。执行导航操作(例如处理 TAB 键、箭头键或键盘助记键)时,对话管理器将递归为此窗口的子级。
静态边框WS_EX_STATICEDGE0x20000窗口具有三维边框样式,旨在用于不接受用户输入的项。
到任务栏WS_EX_APPWINDOW0x40000在顶级窗口可见时强行将其放在任务栏上。
分层窗口WS_EX_LAYERED0x80000该窗口是一个分层窗口。
不重定向WS_EX_NOREDIRECTIONBITMAP0x00200000窗口不会呈现到重定向图面。这适用于没有可见内容或使用表面以外的机制提供其视觉对象的窗口。
后台窗口WS_EX_NOACTIVATE0x8000000创建的顶级窗口不会成为前台窗口。

中文名字英文名称长度作用解释
窗口外观类CREATESTRUCT48定义了传递给应用程序的窗口过程的初始化参数,它定义了窗口外观相关特性
窗口外观类——成员表
参数lpCreateParams整数指向将被用于创建窗口的数据的指针
实例hInstance整数标识了拥有新窗口的模块的模块实例的句柄
菜单hMenu整数标识了要被用于新窗口的菜单。如果是子窗口,则包含整数ID。
父窗hwndParent整数父窗口句柄
高度cy整数指定新窗口的高度
宽度cx整数指定新窗口的宽度
顶部y整数指定新窗口的左上角y坐标
左边x整数指定新窗口的左上角x坐标
风格style整数指定了新窗口的风格。
名称lpszName整数指定了新窗口的名字
类名lpszClass整数指定了新窗口的类名
扩展dwExStyle整数指定了新窗口的扩展风格

修改窗口类的值——控制外观

示例1:修改窗口背景颜色 整数 红刷=创建画刷($FF);创建一个红色的画刷(用来填充颜色)
修改类值(窗体, 类背景色, 红刷);修改窗体的背景颜色为红色
重绘矩形(窗体, 0, 1)重绘窗体擦除背景,从而显示新的背景色
画刷可以使用系统固有的,有0-15种,把红刷改成整数 红刷=取控件数(窗体,1,0,0)
这里假定文本框的编号为1,在文本框里输入0-15的数字,可以修改查看修改窗体背景颜色的效果
示例2:修改窗口光标
整数 光标=加载图像(0,"sec.cur",光标类型,0,0,$10);从文件中加载一个图标,$10标志是从文件加载
修改类值(窗体,窗类光标,光标);修改窗体的光标为指定的cur文件
删除对象(光标);删除加载的光标对象,从而释放读取光标使用的内存
加载光标可以使用系统固有的光标,例如把光标换成整数 光标=载入光标(0,32649)
显示的就是一个手形光标;32512箭头,32513文本I,32514转圈(忙),32515十字,32516,向上
32631笔形,32642左上右下对角线,32643右上左下对角线,32644水平调整,32645垂直调整
32646移动光标,32648禁止,32649链接,32650后台工作,32651帮助,32671定位,32672人员
中文名字常量数值英文名称释义
类菜单名-8GCL_MENUNAME获取/替换菜单名字符串的地址。
类背景色-10GCL_HBRBACKGROUND获取/替换与类有关的背景刷子的句柄。
窗类光标-12GCL_HCURSOR获取/替换与类有关的光标的句柄。
窗类图标-14GCL_HICON获取/替换与类有关的图标的句柄。
窗类模块-16GCL_HMODULE获取/替换注册类的模块的句柄。
窗类内存-18GCL_CBWNDEXTRA获得/修改与类中的每个窗口相关的额外窗口中内存空间的字节大小
窗类尺寸-20GCL_CBCLSEXTRA设置与类相关的尺寸的大小。不改变己分配的额外字节数。
窗类过程-24GCL_WNDPROC获取/替换与窗口类有关的窗口过程的地址。
窗类风格-26GCL_STYLE获取/替换窗口类的风格位。
窗类原子-32GCW_ATOM获得一个唯一标识窗口类的原子值
类小图标-34GCL_HICONSM获得与类有关的小图标句柄。

修改窗口属性——外观指针

改窗口值(窗体,窗口过程,@消息函数);为窗口过程设置新的函数地址。
改窗口值(窗体,窗口扩展,$200);修改窗体的扩展窗口风格为3D边框
改窗口值(窗体,窗口数值,数据);修改窗体的定义数值为指定数据
中文名字常量数值英文名称释义
窗口过程-4GWL_WNDPROC获得/修改窗口过程的地址
窗口实例-6GWL_HINSTANCE获得/修改应用事例的句柄。
窗口父级-8GWL_HWNDPARENT获得/修改父窗口句柄。
窗口风格-16GWL_STYLE获/修改得窗口风格。
窗口扩展-20GWL_EXSTYLE获得/修改扩展窗口风格。
窗口数值-21GWL_USERDATA获得/修改与窗口有关的定义数值。
窗口标识-12GWL_ID获得/修改窗口标识。
对话消息0DWL_MSGRESULT获得/修改在对话框过程中一个消息处理的返回值。
对话过程4DWL_DLGPROC获得/修改对话框过程的地址
对话定义8DWL_USER获得/修改应用程序私有的额外信息,例如一个句柄或指针。

修改窗口显示

显隐窗口(窗体,窗口最小);激活窗口并将其最小化。
显隐窗口(窗体,窗口隐藏);隐藏窗口并激活其他窗口
显隐窗口(窗体,窗口显示);激活窗口并恢复原来的尺寸。
中文名字常量数值英文名称释义
窗口隐藏0SW_HIDE隐藏窗口并激活其他窗口。常用于显隐窗口
恢复原来1SW_SHOWNORMAL激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。
窗口最小2SW_SHOWMINIMIZED激活窗口并将其最小化。
窗口最大3SW_SHOWMAXIMIZED激活窗口并将其最大化
恢复最近4SW_SHOWNOACTIVATE以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。
窗口显示5SW_SHOW在窗口原来的位置以原来的尺寸激活和显示窗口。
最小切换6SW_MINIMIZE最小化指定的窗口并且激活在Z序中的下一个顶层窗口。
最小激活7SW_SHOWMINNOACTIVE窗口最小化,激活窗口仍然维持激活状态。
恢复激活8SW_SHOWNA以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。
激活原来9SW_RESTORE激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。
恢复设定10SW_SHOWDEFAULT依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态

修改窗口大小位置和显示隐藏

设置窗口(标签1,0,0,0,0,0,$23);在窗口周围画一个边框。尺寸位置不变
设置窗口(窗口,0,左,顶,0,0,1);设置窗口的位置,忽略宽高
设置窗口(窗口,0,0,0,宽,高,2);设置窗口的宽高,忽略位置。
中文名字常量数值英文名称释义
保持尺寸$0001SWP_NOSIZE维持当前尺寸(忽略宽高参数)。常用于设置窗口
保持位置$0002SWP_NOMOVE维持当前位置(忽略左顶参数)。
保持层序$0004SWP_NOZORDER维持当前Z序。
保持图像$0008SWP_NOREDRAW不重画改变的内容。如果设置了这个标志,则不发生任何重画动作。
保持状态$0010SWP_NOACTIVATE不激活窗口。
增加边框$0020SWP_DRAWFRAME在窗口周围画一个边框(定义在窗口类描述中)。
显现窗口$0040SWP_SHOWWINDOW显示窗口
隐藏窗口$0080SWP_HIDEWINDOW隐藏窗口
清空窗口$0100SWP_NOCOPYBITS清除客户区窗口的所有内容。
不变顺序$0200SWP_NOREPOSITION不改变z序中的所有者窗口的位置。
防止同步$2000SWP_DEFERERASE防止产生同步消息。
防止死锁$4000SWP_ASYNCWINDOWPOS如果进程没有窗口,系统会向有窗口的线程发出消息。防止在其他线程处理消息时发生死锁。

修改窗口层序

设置窗口(标签1,0,0,0,0,0,3);设置窗口显示在上层。尺寸位置不变
设置窗口(标签1,-1,0,0,0,0,3);设置窗口显示在最顶层。尺寸位置不变
中文名字常量数值英文名称释义
移至顶序0HWND_TOP将窗口置于Z序的顶部。常用于设置窗口
移至底层1HWND_BOTTOM将窗口置于Z序的底部。顶层窗口失去顶级位置,并且被置在其他窗口的底部。
移至顶层-1HWND_TOPMOST将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。
移至顶后-2HWND_NOTOPMOST将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。

查找指定窗口的指定关系窗口

整数 窗口=获取窗口(窗体,同级首个);查找窗体同级别第一个窗口
整数 窗口=获取窗口(窗体,同级最后);查找窗体同级别最后一个窗口
使用更多的是查找窗口:整数 窗口=查找窗口(0,窗口名)
中文名字常量数值英文名称释义
同级首个0GW_HWNDFIRST同级别第一个,常用于GetWindow
同级最后1GW_HWNDLAST同级别最后一个
同级下个2GW_HWNDNEXT同级别下一个
同级上个3GW_HWNDPREV同级别上一个
从主窗口4GW_OWNER属主窗口
属子窗口5GW_CHILD查子窗口
属弹出窗6GW_ENABLEDPOPUP查弹出窗

绘制控件——通知消息:

如果是指定多个或多种控件的字体,可以在绘制控件消息时指定,比如判断(消息) 为 绘制按钮{发送消息(数据,指定字体,字体,0)}
绘制不同的控件可以指定不同的字体,如果要所有控件都指定同一种字体,可以用 为 绘制弹窗 ~ 绘制静态{选择对象(参数,字体)}
使用波浪线符号是从绘制弹窗 到 绘制静态的消息,包括弹窗,编辑框,列表框,按钮,对话框,滚动条,静态标签框这些控件都指定为同一字体
在绘制控件的时候,第三参数为控件的设备,所以也可以用选择对象(参数,字体)来修改字体,但是这个方法不支持按钮一类的控件
也可以在绘制控件时指定文字颜色和背景颜色,如:文本改色(参数,$C0FFFF) 改背景色(参数,$C0FF30)
改背景色适合编辑框,其它控件可以使用创建画刷($C0FFC0)来修改背景,或者使用固有对象(5)让背景透明,这里5是空画刷
绘制弹窗$0132WM_CTLCOLORMSGBOX系统绘制消息框前发送本消息给消息框的所有者窗口,可用来设置消息框的文本和背景色③参数:设备;④数据:控件
绘制编辑$0133WM_CTLCOLOREDIT当一个编辑框控件将要被绘制时,发送本消息给其父窗;可用来设置编辑框的文本和背景色③参数:设备;④数据:控件
绘制列表$0134WM_CTLCOLORLISTBOX当一个列表框控件将要被绘制前,发送本消息给其父窗;可用来设置列表框的文本和背景色③参数:设备;④数据:控件
绘制按钮$0135WM_CTLCOLORBTN绘制按钮的背景色③参数:设备;④数据:控件
绘制对话$0136WM_CTLCOLORDLG绘制对话框的背景色③参数:设备;④数据:控件
绘制滚条$0137WM_CTLCOLORSCROLLBAR绘制滚动条的背景色③参数:设备;④数据:控件
绘制静态$0138WM_CTLCOLORSTATIC绘制一个静态控件的背景色③参数:设备;④数据:控件

控件事件——控制消息:

整数 数值=取控件数(窗体,1)获取窗体上1号控件内文字,并转换成数值
改控件数(窗体,2,数值,真)把数值转换成文字显示到窗体上2号控件窗口
文本 内容[16]=取控件字(窗体,3)获取窗体上3号控件内文字
改控件字(窗体,2,内容)把文字内容显示到窗体上2号控件窗口
判断(消息) 为 控件事件 公共事件(数据)调用公共事件这段程序代码,④数据:包含多项事件信息的数据
程序段 公共事件(数据)
  整数 窗口=数据&,参数=.&4,事件=.&8
  处理窗口(窗口,控件事件,参数,数据)
结束

数据地址里第一个整数是窗口,第二个整数是控件编号(对应窗体消息的参数),第三个整数是控件事件
这种事件是用负数表示,如-2是单击左键,-3是双击左键,具体参照下面:公用控件事件这个表
中文名字常量数值英文名称释义
绘制控件$0019WM_CTLCOLOR在每个控件开始绘制之前,都会向其父窗口发送此消息,可用来设置控件显示文本的前景色、背景色以及字体。③参数:设备;④数据:控件
控件创建$002CWM_MEASUREITEM按钮、组合框、列表框、列表控件、菜单项被创建时会发送本消息给这些控件的所有者。③参数:控件号;④数据:项目尺寸类
删除项目$002DWM_DELETEITEM 列表框或组合框被销毁或删除清空某些项时,会发送本消息给这些控件的所有者。③参数:控件号;④数据: 项目删除类
新项位置$0039WM_COMPAREITEM可发送本消息来确定组合框(CBS_SORT)或列表框(LBS_SORT)中新增项的相对位置。③参数:控件号;④数据:项目排序类
串口事件$0044WM_COMMNOTIFYWin3.1中,当串口事件产生时,通讯设备驱动程序发送消息本消息给系统,指示输入输出队列的状态。
控件事件$004EWM_NOTIFY当某控件的某事件已发生或该控件需得到一些信息时,发送本消息给其父窗。③参数:控件号;④数据:通知类
帮助按键$0053WM_HELP按下后,若某菜单是激活的,就发给此窗口关联的菜单;否则就发送给有焦点的窗口;若当前都没有焦点,发给当前激活的窗口。③参数:0;④数据:帮助类
消息判断$0055WM_NOTIFYFORMAT公用控件、自定义控件和其父窗通过本消息判断控件在WM_NOTIFY通知消息中是使用ANSI还是UNICODE。③参数:窗口;④数据:3控件,4父窗;返回值:1ANSi,2UNICODE
定时事件$0113WM_TIMER发生了定时器事件。③参数:编号;④数据:回调函数

公用控件事件——通知消息:

发生控件事件时,若无特别说明④数据:传递通知类 结构的数据
中文名字常量数值英文名称释义
控件内存不足-1NM_OUTOFMEMORY内存不足,操作不能完成
控件单击左键-2NM_CLICK用户在控件上点击了鼠标左键
控件双击左键-3NM_DBLCLK用户在控件上双击了鼠标左键
控件按下回车-4NM_RETURN控件获得键盘焦点并按下回车键
控件单击右键-5NM_RCLICK用户在控件上点击了鼠标右键
控件双击右键-6NM_RDBLCLK用户在控件上双击了鼠标右键
控件得到焦点-7NM_SETFOCUS控件收到输入焦点
控件失去焦点-8NM_KILLFOCUS用户失去输入焦点
控件自行绘制-12NM_CUSTOMDRAW通知控件的父窗口有关自定义绘制操作的信息。
控件鼠标掠过-13NM_HOVER用户的鼠标掠过控件
控件命中测试-14NM_NCHITTEST当控件收到消息时,由 伸缩条 控件发送。④数据:NMMOUSE 结构
控件按下键盘-15NM_KEYDOWN控件获得键盘焦点并按下某键
控件释放鼠标-16NM_RELEASEDCAPTURE控件要释放鼠标捕捉
控件设置光标-17NM_SETCURSOR控件响应消息要设置光标
控件键入字符-18NM_CHAR字符键被处理后由控件发送
控件工具提示-19NM_TOOLTIPSCREATED通知控件的父窗口控件已创建工具提示控件。④数据:NMTOOLTIPSCREATED 结构
控件鼠标左键-20NM_LDOWN通知控件的父窗口已按下鼠标左键。
控件鼠标右键-21NM_RDOWN不支持此通知代码。
控件主题更改-22NM_THEMECHANGED通知控件的父窗口主题已更改。
控件字体更改-23NM_FONTCHANGED当控件更改字体时,由列表视图控件发送。
控件自定文本-24NM_CUSTOMTEXT通知控件的父窗口有关自定义文本操作的信息。④数据:NMCUSTOMTEXT 结构
发送消息——常数表
控件背景颜色0x2001CCM_SETBKCOLOR此消息用于设置控件的背景颜色。③参数:0;④数据:颜色;
控件设置配色0x2002CCM_SETCOLORSCHEME此消息用于设置控件的颜色配置。③参数:0;④数据:COLORSCHEME;
控件获取配色0x2003CCM_GETCOLORSCHEME此消息用于获取控件的颜色配置。③参数:0;④数据:COLORSCHEME;
控件拖放接口0x2004CCM_GETDROPTARGET获取页码控件的 拖放目标对象 接口指针。③参数:0;④数据:@接口
控件设置宽字0x2005CCM_SETUNICODEFORMAT设置控件的 Unicode 字符格式标志。③参数:是否宽字;④数据:0;
控件获取宽字0x2006CCM_GETUNICODEFORMAT获取控件的 Unicode 字符格式标志。③参数:0;④数据:0;
控件设置版本0x2007CCM_SETVERSION此消息用于通知控件与特定版本关联。③参数:版本;④数据:0;
控件获取版本0x2008CCM_GETVERSION获取控件设置的版本号。③参数:0;④数据:0;
控件设置样式0x200BCCM_SETWINDOWTHEME此消息用于设置控件的视觉样式。③参数:0;④数据:样式(宽字符);
控件启用缩放0x200CCCM_DPISCALE树表、表格、强组合框、标题、按钮、工具栏、动画和图像列表)启用dpi缩放。③参数:真;④数据:0;
通知类——结构体定义:
中文名字英文名称长度作用解释
通知类NMHDR12包含有关通知消息的信息。
通知类——成员表
中文英文类型作用解释
窗口hwndFrom整数发送消息的控件的窗口句柄。
标识idFrom整数发送消息的控件的标识符。
事件code整数控件事件通知代码。

窗口非客户区——通知消息:

窗口非客户区包括标题栏菜单栏最小最大化关闭按钮等区域,也就是可以设计显示控件的区域是客户区
鼠标左键按住标题栏可以拖曳窗口移动位置,但是对于无标题栏的窗口怎么拖动位置呢?
判断(消息) 为 按下左键{发送消息(窗口,区外按左,2,0)}在窗口客户区按下鼠标左键
发送消息是区外按左,也就是在非客户区按下鼠标左键,参数写2是标题栏,模拟鼠标左键点击标题的消息
然后移动鼠标,窗体就会跟随鼠标一起移动了,松开鼠标左键再移动鼠标,窗体也不再跟随鼠标移动
③参数:点击区域,0在屏幕与窗口分界线上,1在窗口客户区,2在标题栏,3菜单或子窗口的关闭按钮,4在大小框中
5在菜单中,6在水平滚动条中,7在垂直滚动条,8在最小化按钮中,9在最大化按钮中,10在调整窗口宽度的左边框
11,在调整窗口宽度的右边框,12在窗口的上水平边框中,13边框的左上角,14边框的右上角,15垂直调整边框中
16边框左下角(对角调整),17边框右下角(对角调整),18不可调大小的边框中,20在关闭按钮中,21在帮助按钮中
中文名字常量数值英文名称释义
区外删除$0082WM_NCDESTROY本消息通知某窗口,非客户区正在销毁。③参数:0;④数据:0
区外调整$0083WM_NCCALCSIZE当某窗口的客户区的大小和位置须被计算时发送本消息。③参数:0不需要指示工作区的有效部分,非0需要;④数据:参数为真NCCALCSIZE_PARAMS 结构,参数为假 矩形类
区外鼠标$0084WM_NCHITTEST当用户在在非客户区移动鼠标、按住或释放鼠标时发送本消息(击中测试);若鼠标没有被捕获,则在得到光标之后发出。③参数:0;④数据:屏幕坐标x/y
区外重绘$0085WM_NCPAINT当窗口框架(非客户区)必须被被重绘时,应用程序发送本消息给该窗口。③参数:区域;④数据:0
区外激活$0086WM_NCACTIVATE本消息发送给某窗口,在窗口的非客户区被激活时重绘窗口。③参数:0绘制非活动标题栏或图标,非0活动;④数据:0活动窗口,-1不重绘,非活动窗口区域指针
经过区外$00A0WM_NCMOUSEMOVE当光标在某窗口的非客户区内移动时,发送本消息给该窗口。③参数:点击区域;④数据:坐标x/y;
区外按左$00A1WM_NCLBUTTONDOWN当光标在某窗口的非客户区内的同时按下鼠标左键,会发送本消息。③参数:点击区域;④数据:坐标x/y;
区外放左$00A2WM_NCLBUTTONUP当用户释放鼠标左键的同时光标在某窗口的非客户区内时,会发送本消息。③参数:点击区域;④数据:坐标x/y;
区外双左$00A3WM_NCLBUTTONDBLCLK当用户双击鼠标左键的同时光标在某窗口的非客户区内时,会发送本消息。③参数:点击区域;④数据:坐标x/y;
区外按右$00A4WM_NCRBUTTONDOWN当用户按下鼠标右键的同时光标在某窗口的非客户区内时,会发送本消息。③参数:点击区域;④数据:坐标x/y;
区外放右$00A5WM_NCRBUTTONUP当用户释放鼠标右键的同时光标在某窗口的非客户区内时,会发送本消息。③参数:点击区域;④数据:坐标x/y;
区外双右$00A6WM_NCRBUTTONDBLCLK当用户双击鼠标右键的同时光标在某窗口的非客户区内时,会发送本消息。③参数:点击区域;④数据:坐标x/y;
区外按中$00A7WM_NCMBUTTONDOWN当用户按下鼠标中键的同时光标在某窗口的非客户区内时,会发送本消息。③参数:点击区域;④数据:坐标x/y;
区外放中$00A8WM_NCMBUTTONUP当用户释放鼠标中键的同时光标在某窗口的非客户区内时,会发送本消息。③参数:点击区域;④数据:坐标x/y;
区外双中$00A9WM_NCMBUTTONDBLCLK当用户双击鼠标中键的同时光标在某窗口的非客户区内时,会发送本消息。③参数:点击区域;④数据:坐标x/y;
区外按向$00ABWM_NCXBUTTONDOWN当光标位于窗口非工作区中并且用户按下鼠标前进后退按钮时发送。③参数:1后退(X1),2前进(X2);④数据:坐标类;
区外放向$00ACWM_NCXBUTTONUP当光标位于窗口非工作区中并且用户释放鼠标前进后退按钮时发送。③参数:1后退(X1),2前进(X2);④数据:坐标类;
区外双向$00ADWM_NCXBUTTONDBLCLK当光标位于窗口非工作区中并且用户双击鼠标前进后退按钮时发送。③参数:1后退(X1),2前进(X2);④数据:坐标类;

键盘事件——通知消息:

判断(消息) 为 键盘按下 获取键值(参数)
  为 键盘松开 获取键值(参数)

在键盘按下的动作事件里,把参数提交给获取键值的程序段,也就是键值
程序段 获取键值(键码)
  判断(键码)为 37 左方向键
  为 38 上方向键 为 65 字母A键

根据不同的键码去执行相应的功能函数(程序段),按键对应的虚拟键代码请查看下面的表
中文名字常量数值英文名称释义
窗口激活6WM_ACTIVATE一个窗口被激活或失去激活状态。③参数:0关闭,1非鼠标激活,2鼠标激活;④数据:参数为0是激活窗口,非0是停用的窗口
获得焦点7WM_SETFOCUS将键盘焦点转向一个窗口。③参数:失去焦点的窗口,可为0;④数据:0
失去焦点8WM_KILLFOCUS使一个窗口失去焦点。③参数:接收焦点的窗口,可为0;④数据:0
键盘起始$0100WM_KEYFIRST用于WinCE系统,本消息在使用获取消息查探消息函数时,用于过滤键盘消息
键盘按下$0100WM_KEYDOWN当一个非系统按键被按下时(键没有被按下),会发送本消息给拥有键盘焦点的窗口。③参数:键码;④数据:扫描码
键盘松开$0101WM_KEYUP当一个非系统按键被释放弹起时(键没有被按下),会发送本消息给拥有键盘焦点的窗口。③参数:键码;④数据:扫描码
键入字符$0102WM_CHAR按下某按键,并已发出按下、松开消息,本消息包含被按下的按键的字符码。③参数:字码;④数据:扫描码
敲击按键$0103WM_DEADCHAR\"死字符\"消息,当使用翻译消息函数翻译WM_KEYUP消息时,发送本消息给拥有键盘焦点的窗口。③参数:键码;④数据:扫描码
ALT键按下$0104WM_SYSKEYDOWN当用户按住键的同时又按下其它键时,发送本消息给拥有焦点的窗口。③参数:键码;④数据:扫描码
ALT键松开$0105WM_SYSKEYUP当用户释放一个按键的同时键还按着时,发送本消息给拥有焦点的窗口。③参数:键码;④数据:扫描码
ALT键字符$0106WM_SYSCHAR当WM_SYSKEYDOWN消息被翻译消息函数翻译后,发送本消息给拥有焦点的窗口,注:键被按下。③参数:键码;④数据:扫描码
ALT敲字符$0107WM_SYSDEADCHAR\"死字符\"消息,当使用翻译消息函数翻译WM_SYSKEYDOWN消息时,发送本消息给拥有键盘焦点的窗口。③参数:键码;④数据:扫描码
键盘结束$0108WM_KEYLAST用于WinCE系统,本消息在使用获取消息查探消息函数时,用于过滤键盘消息
键入宽字$0109WM_UNICHAR此消息包含按下的键的字符代码。类似于键入字符,但它使用宽字符转换格式UTF-32,而键入字符使用 UTF-16。③参数:键码;④数据:扫描码
系统命令$0112WM_SYSCOMMAND当用户选择一条系统菜单命令、用户最大化或最小化或还原或关闭时。③参数:命令;④数据:点菜单时鼠标位置
热键消息$312WM_HOTKEY当用户按下由注册热键函数注册的热键时。③参数:-1窗口,-2桌面;④数据:低字=1Alt,2CTRL,4SHIFT,8WIN;高字=键码
程序命令$319WM_APPCOMMAND用户点击应用程序命令按钮或键盘命令键(如导航刷新搜索)③参数:窗口;④数据:命令/设备/按键
输入开始$010DWM_IME_STARTCOMPOSITION在输入法因为击键生成组合字符串之前立即发送。③参数:0;④数据:0
输入结束$010EWM_IME_ENDCOMPOSITION在输入法结束组合时发送到应用程序。③参数:0;④数据:0
输入更改$010FWM_IME_COMPOSITION当输入法因击键而更改组合状态时,发送到应用程序。③参数:字符;④数据:方式
输入启动$281WM_IME_SETCONTEXT应用程序的窗口激活时,系统将向应用程序发送消息。③参数:0非活动,非0活动;④数据:1显候选窗口(左移位数是索引几),
15显所有候选,0x40000000显指南窗口,0x80000000显合成窗口
输入改变$282WM_IME_NOTIFY可使用WM_IME_NOTIFY消息来通知关于IME窗口状态的常规改变。③参数:命令;④数据:相应数据
输入控制$283WM_IME_CONTROL可使用WM_IME_CONTROL消息来改变字母组合窗口的位置。③参数:命令;④数据:相应数据
输入超出$284WM_IME_COMPOSITIONFULL用户接口窗口不能增加编码窗口的尺寸时,IME用户接口窗口将发送消息。③参数:0;④数据:0
输入选择$285WM_IME_SELECT系统发此消息以便选择一个新的IME输入法。③参数:0未选,非0已选;④数据:区域
输入打字$286WM_IME_CHAR当打开输入法输入文字时发送消息。③参数:0字码;④数据:扫描码
输入请求$288WM_IME_REQUEST应用程序请求输入法时,触发发送本消息。③参数:命令;④数据:相应数据
输入按下$290WM_IME_KEYDOWN在输入法录字窗口中按下按键时,触发发送本消息。③参数:0键码;④数据:扫描码
输入松开$291WM_IME_KEYUP在输入法录字窗口中释放按键时,触发发送本消息。③参数:0键码;④数据:扫描码

虚拟键代码表:

0x01鼠标的左键0x02鼠标的右键0x03Ctrl+Break0x04鼠标的中键0x08Backspace键0x09Tab键0x0CClear键0x0DEnter键
0x10Shift键0x11Ctrl键0x12Alt键0x13Pause键0x14Caps0x15IME-朝鲜日文模式0x16IME-打开0x17IME-Junja模式
0x18IME-最终模式0x19IME-汉字0x1AIME-关闭0x1BEse键0x1CIME-转换0x1DIME-不转换0x1EIME-接受0x1FIME-模式更改请求
0x20空格键0x21上页键0x22下页键0x23End键0x24Home键0x25左键(←)0x26上键(↑)0x27右键(→)
0x28下键(↓)0x29Select键0x2APRINT键0x2BEXECUTE键0x2C(抓屏)0x2DIns键0x2EDel键0x2FHelp键
0x300键0x311键0x322键0x333键0x344键0x355键0x366键0x377键
0x388键0x399键0x41A键0x42B键0x43C键0x44D键0x45E键0x46F键
0x47G键0x48H键0x49I键0x4AJ键0x4BK键0x4CL键0x4DM键0x4EN键
0x4FO键0x50P键0x51Q键0x52R键0x53S键0x54T键0x55U键0x56V键
0x57W键0x58X键0x59Y键0x5AZ键0x5B左win键0x5右win键0x5菜单键0x5休眠键
0x60数字键0键0x61数字键1键0x62数字键2键0x62数字键3键0x64数字键4键0x65数字键5键0x66数字键6键0x67数字键7键
0x68数字键8键0x69数字键9键0x6A数字*键0x6B数字+键0x6C分隔符键0x6D数字-键0x6E数字.键0x6F数字/键
0x70F1键0x71F2键0x72F3键0x73F4键0x74F5键0x75F6键0x76F7键0x77F8键
0x78F9键0x79F10键0x7AF11键0x7BF12键0x7CF13键0x7DF14键0x7EF15键0x7FF16键
0x80F17键0x81F18键0x82F19键0x83F20键0x84F21键0x85F22键0x86F23键0x87F24键
0x90数字开关键0x91ScrollLock键0xA0左SHIFT键0xA1右SHIFT键0xA2左Ctrl键0xA3右Ctrl键0xA4左ALT键0xA5右ALT键
0xA6后退键0xA7前进键0xA8刷新键0xA9停止加载0xAA搜索键0xAB收藏键0xAC主页键0xAD静音键
0xAE音量减0xAF音量加0xB0下一曲0xB1上一曲0xB2停止播放0xB3播放/暂停0xB4邮件键0xB5选曲键
0xB6程序1键0xB7程序2键0xBB通用+键0xBC通用,键0xBD通用-键0xBE通用.键0xE5IME-PROCESS0xF6Attn 键
0xF7CrSel键0xF8ExSel键0xF9EraseEOF键0xFAPlay键0xFBZoom键0xFC预留0xFDPA1键0xFEClear键

菜单事件——通知消息:

菜单的单击事件可以在设计菜单的时候双击菜单列表项目进行绑定
其它的菜单事件都可以交给"处理窗口"这个函数自动完成,下面演示几种常用的菜单操作:
1.控制菜单项选中或者禁用
菜单复选(菜单,1001,8) 控制编号为1001的菜单选中
第一个窗体的菜单编号是从1001开始排序,一级菜单和弹出式菜单不计编号,只算可以点击的菜单
最后参数: 0是不选,1是灰色,2是禁用,8是选中,$400相对菜单项
菜单复选(菜单,1,$408) 控制相对位置为1的菜单选中
使用相对菜单项$400加上其它功能,然后控制第几个菜单,从0开始排序
2.托盘或控件右键事件弹出菜单
展示菜单(菜单.1,0,左,顶,窗口,0) 第一个一级菜单就叫菜单.1
第二个一级菜单就叫菜单.2,设计菜单的时候主菜单名称为空就不会在窗体上显示
中文名字常量数值英文名称释义
初始菜单$0116WM_INITMENU当一个菜单将被激活时发送本消息,它发生在用户点击了某菜单项或按下某菜单键。它允许程序在显示前更改菜单。③参数:菜单;④数据:0
弹出菜单$0117WM_INITMENUPOPUP当一个下拉菜单或子菜单将被激活时发送本消息,它允许程序在它显示前更改菜单,却不更改全部菜单。③参数:菜单;④数据:低位=序号,高位=是否菜单
选择菜单$011FWM_MENUSELECT当用户选择一条菜单项时,发送本消息给菜单的所有者(一般是窗口)。③参数:低位=序号,高位=标志;④数据:菜单
菜单激活$0120WM_MENUCHAR当菜单已被激活且用户按下了某菜单字符键(括号括着、带下划线,不同于快捷键)。③参数:低位=序号,高位=标志$10弹出菜单,$2000菜单;④数据:菜单;
菜单右键$0122WM_MENURBUTTONUP本消息允许程序为菜单项提供一个感知上下文的菜单(即快捷菜单)。③参数:序号;④数据:菜单
菜单点击$0123WM_MENUDRAG当用户拖动菜单项时,发送本消息给拖放菜单的拥有者,可让菜单支持拖拽,可使用OLE拖放传输协议启动拖放操作。③参数:序号;④数据:菜单;返回0保持活动,1菜单结束
单击菜单$0126WM_MENUCOMMAND当用户在一个菜单上作出选择时,会发送本消息,菜单要具有MNS_NOTIFYBYPOS风格(在MENUINFO结构体中设置)。③参数:序号;④数据:菜单
进入菜单循环$211WM_ENTERMENULOOP发送本消息通知应用程序的主窗口已进入菜单循环模式。③参数:是否显示菜单;④数据:0
退出菜单循环$212WM_EXITMENULOOP发送本消息通知应用程序的主窗口已退出菜单循环模式。③参数:是否快捷菜单;④数据:0
菜单切换$213WM_NEXTMENU当使用左箭头光标键或右箭头光标键在菜单条与系统菜单之间切换时触发本消息,③参数:键码;④数据:MDINEXTMENU

鼠标事件——通知消息:

计算鼠标手势: 坐标值 上次;坐标值 当前; 两个结构体分别记录上次和当前鼠标位置
判断(消息)
  为 按下左键,按下右键{上次=数据} 按下鼠标左键或右键时记住当前鼠标位置到上次
  为 鼠标移动{当前=数据;鼠标手势(参数)上次=数据;} 移动鼠标先记住当前鼠标位置到当前
然后调用鼠标手势并提交参数,通过它可以判断是否按下了鼠标左键或者右键,计算当前鼠标位置和上次位置差值,最后再把当前坐标写入上次
程序段 鼠标手势(参数) 在这个程序段里计算上次鼠标位置和当前位置差
  判断(参数)为 1{ 按下鼠标左键时移动鼠标的计算
  如果(上次.左<当前.左)鼠标向右移动
  如果(上次.左>当前.左)鼠标向左移动
  如果(上次.顶<当前.顶)鼠标向下移动
  如果(上次.顶>当前.顶)鼠标向上移动}
  为 2{ 按下鼠标右键时移动鼠标的计算
  如果(上次.左<当前.左)鼠标向右移动
  如果(上次.左>当前.左)鼠标向左移动
  如果(上次.顶<当前.顶)鼠标向下移动
  如果(上次.顶>当前.顶)鼠标向上移动}
捕获光标$0020WM_SETCURSOR若鼠标光标在某窗口内移动且鼠标没被捕获时,就会发送本消息给某个窗口。③参数:窗口;④数据:命中消息
拖曳后窗$0021WM_MOUSEACTIVATE当鼠标光标在某个未激活窗口内,而用户正按着鼠标的某个键时,会发送本消息给当前窗口。③参数:父窗;④数据:命中消息;
返回值:1激活窗口不丢弃鼠标,2激活丢弃鼠标,3不激活不丢弃,4不激活丢弃鼠标
点击右键$007BWM_CONTEXTMENU当用户在某窗口中点击右键就发送本消息给该窗口,设置右键菜单。③参数:窗口;④数据:屏幕坐标x/y
命令事件$0111WM_COMMAND用户选择一条菜单命令项或某控件发送一条通知消息给其父窗,或某快捷键被翻译时,本消息被发送。③参数:低位=编号,高位=事件;④数据:控件;菜单高位0,快捷键高位1,两者数据都是0
系统命令$0112WM_SYSCOMMAND当用户选择一条系统菜单命令、用户最大化或最小化或还原或关闭时。③参数:命令;④数据:点菜单时鼠标位置
程序命令$319WM_APPCOMMAND用户点击应用程序命令按钮或键盘命令键(如导航刷新搜索)③参数:窗口;④数据:命令/设备/按键
鼠标起始$0200WM_MOUSEFIRST鼠标移动时发生(与WM_MOUSEMOVE等值),常用于判断鼠标消息的范围
鼠标移动$0200WM_MOUSEMOVE当鼠标在窗口客户区移动时。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
按下左键$0201WM_LBUTTONDOWN当鼠标左键在窗口客户区按下。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
释放左键$0202WM_LBUTTONUP当鼠标左键在窗口客户区放开。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
双击左键$0203WM_LBUTTONDBLCLK当鼠标左键在窗口客户区双击。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
按下右键$0204WM_RBUTTONDOWN当鼠标右键在窗口客户区按下。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
释放右键$0205WM_RBUTTONUP当鼠标右键在窗口客户区放开。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
双击右键$0206WM_RBUTTONDBLCLK当鼠标右键在窗口客户区双击。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
按下中键$0207WM_MBUTTONDOWN当鼠标中键在窗口客户区按下。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
释放中键$0208WM_MBUTTONUP当鼠标中键在窗口客户区放开。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
双击中键$0209WM_MBUTTONDBLCLK当鼠标中键在窗口客户区双击。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
滚轮转动$020AWM_MOUSEWHEEL当滚动鼠标滚轮时。③参数:高位120向后,-120向前;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
鼠标结束$020AWM_MOUSELASTWM_MBUTTONDBLCLK的别名,通常用于判断鼠标消息的范围,对应的还有WM_MOUSEFIRST(鼠标起始)
侧键按下$020BWM_XBUTTONDOWN用户按下X按钮时发布。③参数:高位1第一个X按钮,2第二个X按钮;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
侧键松开$020CWM_XBUTTONUP用户松开X按钮时发布。③参数:高位1第一个X按钮,2第二个X按钮;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
侧键双击$020DWM_XBUTTONDBLCLK用户双击X按钮时发布。③参数:高位1第一个X按钮,2第二个X按钮;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
鼠标滚轮$020EWM_MOUSEHWHEEL当鼠标的水平滚轮倾斜或旋转时发送。③参数:高位120向后,-120向前;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
失去鼠标$215WM_CAPTURECHANGED当它失去捕获的鼠标时,发送本消息给窗口。③参数:0;④数据:窗口
移动消息$216WM_MOVING当用户在移动窗口时发送本消息,通过本消息应用程序以监视窗口大小和位置,也可修改它们。③参数:0;④数据:矩形类
拖放文件$233WM_DROPFILES鼠标拖放时,放下事件产生时发送本消息,比如:文件拖放功能。③参数:文件;④数据:0
鼠标经外$2A0WM_NCMOUSEHOVER当光标悬停在窗口的非工作区上的达到指定时间发送本消息。③参数:命中值;④数据:坐标类;
鼠标经过$2A1WM_MOUSEHOVER当光标悬停在窗口的工作区上的达到指定时间发送本消息。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
鼠标离外$2A2WM_NCMOUSELEAVE当光标离开之前调用 TrackMouseEvent 中指定的窗口的非工作区时发送本消息。③参数:0;④数据:0;
鼠标离开$2A3WM_MOUSELEAVE鼠标离开控件时,触发发送本消息。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;

系统事件——通知消息:

通过窗口可以实现跨进程通信:
整数 窗口=查找窗口(0,"窗口标题"); 通过窗口名获取到相应程序的窗口对象
发送消息(窗口,设置文本,0,"标题文字"); 修改窗口对象文字可以修改此窗口的标题栏
发送消息(窗中,设置图标,0,载入图标(0,32518)); 修改程序窗口的小图标为盾牌图标
整数 按钮=获取控件(窗口,1); 假如此窗口的1号控件是个按钮,获取到按钮控件的子窗口对象
整数 标签=获取控件(窗口,2); 假如此窗口的2号控件是个标签,获取到标签控件的子窗口对象
整数 编辑=获取控件(窗口,3); 假如此窗口的3号控件是个编辑框,获取到编辑框的子窗口对象
整数 列表=获取控件(窗口,4); 假如此窗口的4号控件是个列表框,获取到列表框的子窗口对象
整数 组合=获取控件(窗口,5); 假如此窗口的5号控件是个组合框,获取到组合框的子窗口对象
发送消息(按钮,模拟点击,0,0); 模拟点击另个程序窗口的1号按钮,窗口最小化和隐藏都可操作
发送消息(标签,设置文本,0,"修改内容"); 修改另个程序窗口的标签框内容,窗口最小化和隐藏都可操作
发送消息(编辑,获取文本,64,内容); 获取另个程序窗口的编辑框内容,窗口最小化和隐藏都可操作
发送消息(列表,列表添加,0,"项目内容"); 向另个程序窗口的列表框添加内容,窗口最小化和隐藏都可操作
发送消息(组合,组合添加,0,"项目文字"); 向另个程序窗口的组合框添加内容,窗口最小化和隐藏都可操作
跨进程操作窗口可以使用"控制窗口","显隐窗口","设置窗口","移动窗口"和"发送消息","提交消息"等函数
不能使用"取窗口字","改窗口字","窗口字长","取控件字","改控件字","取控件数","改控件数"等函数
通过传递数据类结构体可以自定义传递数据类型,接收方根据不同类型进行相应的处理
发送方:
传递数据类 传送; 先申请一个传递数据类的变量名为:传送
传送.数据="发送一段文字"; 定义传送的数据为一段文字的指针
传送.大小=字串长度(传送.数据); 定义传送的数据大小为该文字的长度
整数 窗口=查找窗口(0,"窗口标题"); 通过窗口名获取到相应程序的窗口对象
发送消息(窗口,传递数据,0,传送); 把自定义数据发送给另个程序的窗口
传送.分类 在没有指定的情况下,默认值是0,接收方可以判断为0的分类,是传送的文本内容
接收方:
为 传递数据 接收数据(数据); 在窗体消息里加入这句代码
程序段 接收数据(传递数据类 接收); 增加一个接收数据的程序段
传送内存(内容,接收.数据,接收.长度); 把数据复制到接收程序的变量里
信息框(0,内容,"收到数据",信息图标); 弹出提示数据已接收完成
配置更新$001AWM_WININICHANGE读写"win.ini"时会发送本消息给所有顶层窗口,通知其它进程该文件已被更改。③参数:0;④数据:名称
设备模式$001BWM_DEVMODECHANGE改变设备模式设置("win.ini")时,处理本消息的应用程序可重新初始化它们的设备模式设置③参数:0;④数据:名称
系统关机$0011WM_QUERYENDSESSION关机或注销时系统会按优先级给各进程发送,告诉应用程序要关机或注销了。③参数:0;④数据:0正在关闭事件;1文件要换或资源耗尽;4强制关闭程序;8用户正在注销
开始关机$0016WM_ENDSESSION关机或注销时系统会发出消息给应用程序,通知程序会话结束。③参数:0会话结束,非0正在结束;④数据:0正在关闭事件;1文件要换或资源耗尽;4强制关闭程序;8用户正在注销
时间错误$0017WM_SYSTEMERROR系统时间错误。③参数:0;④数据:0
字库更新$001DWM_FONTCHANGE当系统的字体资源库变化时发送本消息给所有顶级窗口。③参数:0;④数据:0
时间改变$001EWM_TIMECHANGE当系统的时间变化时发送本消息给所有顶级窗口。③参数:0;④数据:0
系统暂停$0048WM_POWER当系统将要进入暂停状态时发送本消息(适用于16位的windows)③参数:1即将挂起,2挂起恢复,3含两种;④数据:0
传递数据$004AWM_COPYDATA当一个应用程序传递数据给另一个应用程序时发送本消息。③参数:窗口;④数据:传递数据类
取消日志$004BWM_CANCELJOURNAL当用户取消程序日志激活状态时,发送本消息给那个应用程序。该消息使用空窗口句柄发送。③参数:0;④数据:0
用户出入$0054WM_USERCHANGED当用户已登入或退出后发送本消息给所有窗口;当用户登入或退出时以及系统更新用户设置时,立即发送本消息。③参数:0;④数据:0; 自 Windows Vista 起,不支持此消息。
调分辨率$007EWM_DISPLAYCHANGE当显示器的分辨率改变后,发送本消息给所有窗口。③参数:位深;④数据:分辨率x/y
电源消息$218WM_POWERBROADCAST通知它有关电源管理事件。③参数:4正在扶起,7正在恢复,10状态更改,18自动恢复,32781设置更改;④数据:无/POWERBROADCAST_SETTING/PBT_POWERSETTINGCHANGE
硬件修改$219WM_DEVICECHANGE当设备的硬件配置改变时,发送本消息给应用程序或设备驱动程序。③参数:事件;④数据:结构
主题更改$31AWM_THEMECHANGED在主题更改事件后广播到每个窗口。③参数:0;④数据:0
消息保留$0000PM_NOREMOVE查探消息处理后,消息不从队列里除掉。
消息清除$0001PM_REMOVE查探消息处理后,消息从队列里除掉。
消息空闲$0002PM_NOYIELD此标志使系统不释放等待调用程序空闲的线程。
用户消息$400WM_USER用于帮助应用程序自定义私有消息,通常形式为:WM_USER + X
程序消息$8000WM_APP用于帮助应用程序自定义私有消息,通常形式为:WM_APP + X
传递数据类——结构体定义:
中文名字英文名称长度作用解释
传递数据类COPYDATASTRUCT12包含要通过发送消息传递给另一个应用程序的数据。
传递数据类——成员表
中文英文类型作用解释
分类dwData整数要传递给接收应用程序的数据类型。
大小cbData整数指向的数据的大小(以字节为单位)。
数据lpData整数要传递给接收应用程序的数据。

子窗口事件——通知消息:

中文名字常量数值英文名称释义
通知子窗$0022WM_CHILDACTIVATE点击窗口标题栏或当窗口被激活、移动、大小改变时,会发送本消息给MDI子窗口。③参数:0;④数据:0
子窗变动$210WM_PARENTNOTIFY当MDI子窗口被创建或被销毁,或用户按了一下鼠标键而光标在子窗口上时,发送本消息给其父窗③参数:事件;④数据:坐标x/y;
子窗创建$220WM_MDICREATE发送本消息给多文档应用程序的客户窗口来创建一个MDI子窗口。③参数:0;④数据:子窗结构
子窗关闭$221WM_MDIDESTROY发送本消息给多文档应用程序的客户窗口来关闭一个MDI子窗口。③参数:子窗;④数据:0
子窗激活$222WM_MDIACTIVATE发送本消息通知客户窗口激活另一个MDI子窗口。③参数:0;④数据:0忽略,非0最大化
子窗恢复$223WM_MDIRESTORE发送本消息给MDI客户窗口,让子窗口从最大最小化恢复到原来的大小。③参数:子窗;④数据:0
子窗下个$224WM_MDINEXT发送本消息给MDI客户窗口,激活下一个或前一个窗口。③参数:子窗;④数据:0激活下个,非0激活上个
子窗最大$225WM_MDIMAXIMIZE发送本消息给MDI客户窗口来最大化一个MDI子窗口。③参数:子窗;④数据:0
子窗平铺$226WM_MDITILE发送本消息给MDI客户窗口,以平铺方式重新排列所有MDI子窗口。③参数:0垂直,1水平;④数据:0
子窗层叠$227WM_MDICASCADE发送本消息给MDI客户窗口,以层叠方式重新排列所有MDI子窗口。③参数:2不排禁用窗口,4按Z序;④数据:0
子窗排底$228WM_MDIICONARRANGE发送本消息给MDI客户窗口重新排列所有最小化的MDI子窗口。③参数:0;④数据:0
子窗活动$229WM_MDIGETACTIVE发送本消息给MDI客户窗口以找到激活的子窗口句柄。③参数:0;④数据:0忽略,非0最大化
子窗设置菜单$230WM_MDISETMENU发送本消息给MDI客户窗口,用MDI菜单代替子窗口的整个菜单和/或框架窗口菜单。③参数:框架菜单;④数据:窗口菜单
子窗更新菜单$234WM_MDIREFRESHMENU发送本消息给多文档应用程序的客户窗口,根据当前MDI子窗口更新MDI框架窗口的菜单。③参数:0;④数据:0

中文名字英文名称长度作用解释
子窗外观类MDICREATESTRUCT36定义了创建MDI窗口的外观相关特性
子窗外观类——成员表
类名szClass整数创建MDI Client 窗口的类名
标题szTitle整数创建MDI Client 窗口的标题
实例hOwner整数创建MDI Client 窗口的实例
左边x整数指定子窗口的左上角x坐标
顶部y整数指定子窗口的左上角y坐标
宽度cx整数指定子窗口的宽度
高度cy整数指定子窗口的高度
风格style整数指定了子窗口的风格。
参数lParam整数指定了子窗口的附加参数

剪切板操作——控制消息:

1.控制编辑框使用复制粘贴
发送消息(编辑框1,内容剪切,0,0) 剪切编辑框1选中的内容文本
发送消息(编辑框1,内容复制,0,0) 复制编辑框1选中的内容文本
发送消息(编辑框1,内容粘贴,0,0) 粘贴文本到编辑框1中
发送消息(编辑框1,内容删除,0,0) 删除编辑框1选中的内容文本
发送消息(编辑框1,内容撤销,0,0) 撤销编辑框1刚刚的操作
2.使用系统剪切板,需要在模块列表里选择剪切板模块
剪切板="要写入剪切板的内容" 向剪切板中写入一段文字
整数 内容=剪切板 获取剪切板的文本内容指针地址
发送消息(窗体,设置文本,0,内容) 把获取到的内容显示到窗口标题栏

剪切板格式

英文名字数值释义
CF_TEXT1文本格式。 每行以回车符/换行符 (CR-LF) 组合结束。 null 字符表示数据结束。 将此格式用于 ANSI 文本。
CF_BITMAP2位图 (HBITMAP) 的句柄。
CF_METAFILEPICT3METAFILEPICT 结构定义的图元文件图片格式的句柄。 通过 DDE 传递 CF_METAFILEPICT 句柄时,负责删除 hMem 的应用程序还应释放 CF_METAFILEPICT 句柄引用的图元文件。
CF_SYLK4Microsoft 符号链接 (SYLK) 格式。
CF_DIF5Software Arts 的数据交换格式。
CF_TIFF6标记图像文件格式。
CF_OEMTEXT7包含 OEM 字符集中字符的文本格式。 每行以回车符/换行符 (CR-LF) 组合结束。 null 字符表示数据结束。
CF_DIB8包含 BITMAPINFO 结构的内存对象,后跟位图位。
CF_PALETTE9调色板的句柄。 每当应用程序在依赖于或假定调色板的剪贴板中放置数据时,它也应该将调色板放在剪贴板上。
如果剪贴板包含 CF_PALETTE (逻辑调色板) 格式的数据,则应用程序应使用 SelectPalette 和 RealizePalette 函数实现 (剪贴板中) 任何其他数据与该逻辑调色板进行比较。
显示剪贴板数据时,剪贴板始终使用剪贴板上采用 CF_PALETTE 格式的任何对象作为其当前调色板。
CF_PENDATA10Microsoft Windows for Pen Computing 的笔扩展的数据。
CF_RIFF11表示的音频数据比以 CF_WAVE 标准波形格式表示的音频数据更为复杂。
CF_WAVE12表示其中一种标准波形的音频数据,例如 11 kHz 或 22 kHz PCM。
CF_UNICODETEXT13Unicode 文本格式。 每行以回车符/换行符 (CR-LF) 组合结束。 null 字符表示数据结束。
CF_ENHMETAFILE14增强型图元文件的句柄 (HENHMETAFILE) 。
CF_HDROP15类型 HDROP 的句柄,用于标识文件列表。 应用程序可以通过将句柄传递给 DragQueryFile 函数来检索有关文件的信息。
CF_LOCALE16数据是 HGLOBAL () 与剪贴板中的文本关联的区域设置标识符 (LCID) 的句柄。 关闭剪贴板时,如果剪贴板包含 CF_TEXT 数据但没有 CF_LOCALE 数据,系统会自动将 CF_LOCALE 格式设置为当前输入语言。 可以使用 CF_LOCALE 格式将不同的区域设置与剪贴板文本相关联。
从剪贴板粘贴文本的应用程序可以检索此格式,以确定用于生成文本的字符集。
请注意,剪贴板不支持多个字符集中的纯文本。 若要实现此目的,请改用带格式的文本数据类型,例如 RTF。
系统使用与 CF_LOCALE 关联的代码页从 CF_TEXT 隐式转换为 CF_UNICODETEXT。 因此,使用正确的代码页表进行转换。
CF_DIBV517包含 BITMAPV5HEADER 结构的内存对象,后跟位图颜色空间信息和位图位。
CF_OWNERDISPLAY0x0080所有者显示格式。 剪贴板所有者必须显示和更新剪贴板查看器窗口,并接收 WM_ASKCBFORMATNAME、 WM_HSCROLLCLIPBOARD、 WM_PAINTCLIPBOARD、 WM_SIZECLIPBOARD和 WM_VSCROLLCLIPBOARD 消息。 hMem 参数必须为 NULL。
CF_DSPTEXT0x0081与专用格式关联的文本显示格式。 hMem 参数必须是可以以文本格式显示的数据的句柄,而不是专用格式的数据。
CF_DSPBITMAP0x0082与专用格式关联的位图显示格式。 hMem 参数必须是可以以位图格式显示的数据的句柄,而不是专用格式的数据。
CF_DSPMETAFILEPICT0x0083与专用格式关联的图元文件图片显示格式。 hMem 参数必须是可以以图元文件图片格式显示的数据的句柄,而不是专用格式的数据。
CF_DSPENHMETAFILE0x008E与专用格式关联的增强型图元文件显示格式。 hMem 参数必须是可以以增强型图元文件格式显示的数据的句柄,而不是专用格式的数据。
CF_PRIVATEFIRST0x0200专用剪贴板格式的整数值范围的开头。 范围以 CF_PRIVATELAST结尾。 与专用剪贴板格式关联的句柄不会自动释放;剪贴板所有者必须释放此类句柄,通常是为了响应 WM_DESTROYCLIPBOARD 消息。
CF_PRIVATELAST0x02FF请参阅 CF_PRIVATEFIRST。
CF_GDIOBJFIRST0x0300应用程序定义的 GDI 对象剪贴板格式的整数值范围的开头。 范围的末尾为 CF_GDIOBJLAST。
清空剪贴板时,不会使用 GlobalFree 函数自动删除与此范围内剪贴板格式关联的句柄。 此外,在此范围内使用值时, hMem 参数不是 GDI 对象的句柄,而是由 GlobalAlloc 函数使用 GMEM_MOVEABLE 标志分配的句柄。
CF_GDIOBJLAST0x03FF请参阅 CF_GDIOBJFIRST。
中文名字常量数值英文名称释义
内容剪切0x300WM_CUT剪切删除当前选择的文本。③参数:0;④数据:0
内容复制0x301WM_COPY复制当前选择的文本到剪贴板。③参数:0;④数据:0
内容粘贴0x302WM_PASTE应用程序发送本消息给编辑框或组合框,以便从剪贴板中得到数据。③参数:0;④数据:0
内容删除0x303WM_CLEAR应用程序发送本消息给编辑框或组合框,以清除当前选择的内容。③参数:0;④数据:0
内容撤销0x304WM_UNDO应用程序发送本消息给编辑框或组合框,以撤消最后一次操作。③参数:0;④数据:0
剪切数据$305WM_RENDERFORMAT应用程序需要系统剪切板数据时,触发发送本消息。③参数:剪切格式;④数据:0
剪切数列$306WM_RENDERALLFORMATS应用程序退出时,系统会给当前程序发送该消息,要求提供所有格式的剪帖板数据,避免造成数据丢失。③参数:0;④数据:0
剪切清空$307WM_DESTROYCLIPBOARD当调用"清剪切板"函数时,发送本消息给剪贴板的所有者
剪切变更$308WM_DRAWCLIPBOARD当剪贴板的内容变化时,触发本消息;它允许用剪贴板观察窗口来显示剪贴板的新内容。③参数:0;④数据:0
剪切重绘$309WM_PAINTCLIPBOARD当剪贴板观察窗口的客户区需要重画时,触发发送本消息。③参数:窗口;④数据: PAINTSTRUCT 结构
剪切竖条$30AWM_VSCROLLCLIPBOARD当剪贴板查看器的垂直滚动条被单击时。③参数:窗口;④数据:0上滚一行,1下滚一行,2上滚一页,3下滚一页,4绝对位置(高字是位置),6到左上角,7到右下角,8结束滚动;
剪切缩放$30BWM_SIZECLIPBOARD当剪贴板包含CF_OWNERDIPLAY格式的数据,并且剪贴板观察窗口的大小已改变。③参数:窗口;④数据:矩形类
剪切取名$30CWM_ASKCBFORMATNAME通过剪贴板观察窗口发送本消息给剪贴板的所有者,以请求一个CF_OWNERDISPLAY格式的剪贴板的名字。③参数:大小;④数据:缓冲区
剪切移出$30DWM_CHANGECBCHAIN当一个窗口从剪贴板观察链中移去时,发送本消息给剪贴板观察链的首个窗口。③参数:窗口;④数据:下个窗口
剪切平条$30EWM_HSCROLLCLIPBOARD点击剪贴板观察窗的水平滚动条。③参数:窗口;④数据:0上滚一行,1下滚一行,2上滚一页,3下滚一页,4绝对位置(高字是位置),6到左上角,7到右下角,8结束滚动;
剪切板改$31DWM_CLIPBOARDUPDATE剪贴板的内容发生更改时发送。③参数:0;④数据:0
剪切板函数——用户界面库
中文名称英文名称示例作用
剪切板数CountClipboardFormats数量=剪切板数检索剪贴板上当前不同数据格式的数量。
有效剪切EnumClipboardFormats有效剪切(格式)判断指定格式的剪切板是否可用
清剪切板EmptyClipboard清剪切板清空剪贴板,所有权分配给当前打开剪贴板的窗口
开剪切板OpenClipboard开剪切板(窗口)打开剪贴板进行检查,并阻止其他程序修改剪贴板内容
关剪切板CloseClipboard关剪切板关闭剪贴板,使其他窗口或程序能访问剪贴板。
读剪切板GetClipboardData数据=读剪切板(格式)以指定的格式从剪贴板中获得数据,格式1文字2位图3图元4链接5软件数据
写剪切板SetClipboardData写剪切板(格式,数据)以指定的格式向剪贴板写入数据,格式6.TIFF图像7.OEM字符8.DIB图片
剪切板名GetClipboardFormatNameA剪切板名(格式,名称,长度)从剪贴板中检索指定注册格式的名称。
剪切板号GetClipboardSequenceNumberA序号=剪切板号检索当前窗口站的剪贴板序列号。
取剪切窗GetClipboardViewer窗口=取剪切窗检索剪贴板查看器链中第一个窗口的句柄。
改剪切窗SetClipboardViewer改剪切窗(窗口)将指定的窗口添加到剪贴板查看器链中。
查剪切窗GetOpenClipboardWindow窗口=查剪切窗检索当前已打开剪贴板的窗口的句柄。
剪切格式GetPriorityClipboardFormat格式=剪切格式(格式,数目检索指定列表中第一个可用的剪贴板格式。
可用剪板GetUpdatedClipboardFormats可用剪板(格式组,数量,数目)检索当前支持的剪贴板格式。
粘贴格式IsClipboardFormatAvailable粘贴格式(格式)确定剪贴板是否包含指定格式的数据。格式9调色板10画笔
11音频12波形声音13宽字符14增强图元15文件列表
注册剪板RegisterClipboardFormatA注册剪板(格式名)注册新的剪贴板格式。用作有效的剪贴板格式。
删除剪板RemoveClipboardFormatListener删除剪板(窗口)从系统维护的剪贴板格式侦听器列表中删除给定窗口。

编辑框——控件消息:

发送消息(编辑框1,设置文本,0,"文字内容")  这个代码可以修改编辑框里的内容
文本 内容[64];整数 长度=发送消息(编辑框1,获取文本,64,内容)  这个代码可以获取编辑框的内容
发送消息(编辑框1,编辑替换,真,"插入替换的文字") 替换编辑框1选中的内容,若无选中向光标处插入文本
发送消息(编辑框1,编辑选中,3,9) 控制选中编辑框1选中的从第3到第9个字之间的内容
文本 内容[120]=120;发送消息(编辑框1,编辑取行,2,内容) 获取编辑框1第三行文字到内容缓冲区,要先写入长度数值
中文名字常量数值英文名称释义
编辑获得焦点0x100EN_SETFOCUS在编辑控件收到键盘焦点时发送。③参数:控件号/通知码;④数据:编辑框
编辑失去焦点0x200EN_KILLFOCUS在编辑控件失去键盘焦点时发送。③参数:控件号/通知码;④数据:编辑框
编辑内容更改0x300EN_CHANGE已更改编辑控件中的文本时发送。③参数:控件号/通知码;④数据:编辑框
编辑更新重绘0x400EN_UPDATE在编辑控件即将重绘自身时发送。③参数:控件号/通知码;④数据:编辑框
编辑内存不足0x500EN_ERRSPACE当编辑控件无法分配足够的内存时发送。③参数:控件号/通知码;④数据:编辑框
编辑字数超出0x501EN_MAXTEXT当前文本插入超过编辑控件的指定字符数时发送。③参数:控件号/通知码;④数据:编辑框
编辑水平滚动0x601EN_HSCROLL当用户单击编辑控件的水平滚动条时发送。③参数:控件号/通知码;④数据:编辑框
编辑垂直滚动0x602EN_VSCROLL单击垂直滚动条或滚动鼠标滚轮时发送。③参数:控件号/通知码;④数据:编辑框
编辑从左向右0x700EN_ALIGN_LTR_EC当用户将编辑控件方向更改为从左到右时发送。③参数:控件号/通知码;④数据:编辑框
编辑从右向左0x701EN_ALIGN_RTL_EC当用户将编辑控件方向更改为从右到左时发送。③参数:控件号/通知码;④数据:编辑框
绘制编辑$0133WM_CTLCOLOREDIT当一个编辑框控件将要被绘制时,发送本消息给其父窗;可用来设置编辑框的文本和背景色③参数:设备;④数据:控件
发送消息——常数表
编辑所选$B0EM_GETSEL获取光标位置(④数据)或取得编辑控件中选定内容的范围(③参数为起点,④数据为终点)。返回值中低16位为起点,高16位为终点
编辑选中$B1EM_SETSEL设置编辑控件中文本选定内容范围(或设置光标位置),③参数为起点,④数据为终点。
编辑矩形$B2EM_GETRECT获取编辑控件的格式矩形(控件在其中绘制文本的限制矩形)。在④数据中获取
编辑范围$B3EM_SETRECT设置多行编辑控件的格式矩形(绘制范围)。它与编辑控件窗口的大小无关。在④数据中指定矩形
编辑大小$B4EM_SETRECTNP设置多行编辑控件的格式矩形。与编辑范围的区别是不重绘编辑控件窗口。
编辑竖翻$B5EM_SCROLL在多行编辑控件中垂直滚动文本。③参数:0上滚一行 1下滚一行 2上滚一页 3下滚一页
编辑滚动$B6EM_LINESCROLL滚动多行编辑控件中的文本。③参数:水平滚动字数(富文本框为0),④数据:垂直滚动的行数。
编辑滚点$B7EM_SCROLLCARET将插入点(光标)滚动到编辑控件的视图中。③参数:0;④数据:0
编辑状态$B8EM_GETMODIFY获取编辑控件的修改标志的状态。③参数:0;④数据:0,返回值非零表示编辑控件的内容已修改
编辑修改$B9EM_SETMODIFY设置或清除编辑控件的修改标志。③参数用真或假指定修改标志的状态。
编辑行数$BAEM_GETLINECOUNT获取多行编辑控件中的行数。③参数:0;④数据:0,返回行数。
编辑行位$BBEM_LINEINDEX获取多行编辑控件中指定行的第一个字符的字符索引。也就是从开头的第几个字,③参数:行号 -1表示光标所在行
编辑指针$BCEM_SETHANDLE设置多行编辑控件将使用的内存的句柄。③参数:指定新的内存缓冲区
编辑手柄$BDEM_GETHANDLE获取当前为多行编辑控件的文本分配的内存的句柄。③参数:0;④数据:0,返回句子手柄
编辑滑块$BEEM_GETTHUMB获取多行编辑控件垂直滚动条中滚动框 (滑块) 的位置。③参数:0;④数据:0,返回滑块位置
编辑行字$C1EM_LINELENGTH检索编辑控件中行的字符数。③参数:第几个字,-1是光标处
编辑替换$C2EM_REPLACESEL将编辑控件中的选定文本或丰富的编辑控件替换为指定的文本。③参数为真可撤销,④数据是文本指针
编辑取行$C4EM_GETLINE从编辑控件复制一行文本,并将其置于指定的缓冲区中。③参数:行号(0开始),④数据:接收内容的文本指针
编辑限字$C5EM_LIMITTEXT设置编辑控件的文本限制最大字数。③参数:限制字数
编辑可撤$C6EM_CANUNDO确定编辑控件的撤消队列中是否有任何操作。③参数:0;④数据:0,返回非0表示可以进行撤销
编辑撤销$C7EM_UNDO此消息撤消控件队列中最后一次编辑控件操作。③参数:0;④数据:0,返回真表示撤销成功
编辑软行$C8EM_FMTLINES设置一个标志,用于确定多行编辑控件是否包含软换行符(两个回车加一换行符,英文断词用)。③参数为真是可以有,为假则清除
编辑字行$C9EM_LINEFROMCHAR获取包含多行编辑控件中指定字符索引的行的索引。③参数:第几个字,-1是光标所在行
编辑制表$CBEM_SETTABSTOPS设置多行编辑控件中的制表位。③参数:制表位数目,④数据:制表位数组
编辑密码$CCEM_SETPASSWORDCHAR设置或删除编辑控件的密码字符。 ③参数:取代内容文字的字符,为0时恢复文字显示
编辑重置$CDEM_EMPTYUNDOBUFFER重置编辑控件的撤消标志。③参数:0;④数据:0。
编辑上字$CEEM_GETFIRSTVISIBLELINE获取多行编辑控件中最上端可见行的从零开始的索引。③参数:0;④数据:0
编辑只读$CFEM_SETREADONLY设置或删除编辑控件的只读样式。③参数为真是只读,为假是可写;④数据:0。
编辑函数$D0EM_SETWORDBREAKPROC将编辑控件的默认 文字显示处理 函数替换为应用程序自定义的处理函数。③参数:0;④数据:编辑框断字
编辑地址$D1EM_GETWORDBREAKPROC获取编辑控件的默认 文字显示处理 函数的地址。③参数:0;④数据:0,返回地址。
编辑密字$D2EM_GETPASSWORDCHAR获取编辑控件在用户输入文本时显示的密码字符。③参数:0;④数据:0,返回字符。
编辑边距$D3EM_SETMARGINS设置编辑控件的左右边距的宽度。 ③参数:1是左边距 2右边距,④数据:低位左边距,高位右边距
编辑边宽$D4EM_GETMARGINS获取编辑控件的左右边距的宽度。③参数:0;④数据:0,返回低位是左边宽,高位是右边宽。
编辑字限$D5EM_GETLIMITTEXT获取编辑控件的当前文本限制。 ③参数:0;④数据:0,返回限制字数
编辑坐标$D6EM_POSFROMCHAR检索编辑控件中指定字符的工作区坐标。③参数:字的索引,返回低位是左,高位是顶
编辑点字$D7EM_CHARFROMPOS获取与编辑控件的工作区中指定点最接近的字符的信息。④数据:富文本框是坐标结构指针,普通框是整数。低位左,高位顶。返回指定位置字的索引,编辑框高位包含该行的字索引
编辑交互$D8EM_SETIMESTATUS设置编辑控件如何与输入法编辑器交互。③参数:1组合字符串;④数据:1返回结果字符串,2焦点取消组合字符串,3失去焦点完成组合字符串
编辑方式$D9EM_GETIMESTATUS获取编辑控件如何与输入法编辑器交互。③参数:1组合字符串;④数据:0;返回值:1立即返回结果字符串,2焦点取消组合字符串,3失去焦点完成组合字符串
左边编距$1EC_LEFTMARGIN③参数的值,设置编辑控件的左边距的宽度。
右边编距$2EC_RIGHTMARGIN③参数的值,设置编辑控件的右边距的宽度。
精细编距$0FFFFEC_USEFONTINFO③参数的值,设置编辑控件的边距的精细宽度。
编辑框断字——回调函数:
中文名字英文名称参数作用解释
编辑框断字Editwordbreakproca4多行编辑控件或富编辑控件调用此函数来中断文本行
编辑框断字——参数表
中文英文类型作用解释
控件lpch整数指向编辑控件文本的指针。
断点ichCurrent整数文本缓冲区中字符位置的索引,该索引标识函数应开始检查断字符的点。
字数cch整数ANSI是字节数;Unicode是字数。
操作code整数回调函数要执行的断字操作
断字操作——常量定义:
英文名称数值作用解释
WB_LEFT0查找指定位置左侧的单词的开头。
WB_RIGHT1查找指定位置右侧的单词的开头。 这在右对齐的编辑控件中很有用。
WB_ISDELIMITER2检查指定位置处的字符是否为分隔符。
WB_CLASSIFY3检索位于指定位置的字符的字符类和断字符标志。此值及以下用于丰富的编辑控件。
WB_MOVEWORDLEFT4查找指定位置左侧的单词的开头。此值在 Ctrl+LEFT 键处理期间使用。
WB_MOVEWORDRIGHT5查找指定位置右侧的单词的开头。 此值在 Ctrl+RIGHT 键处理期间使用。
WB_LEFTBREAK6查找指定位置左侧的词尾分隔符。
WB_RIGHTBREAK7查找指定位置右侧的词尾分隔符。

按钮、单选钮、复选框、分组框——控件消息:

发送消息(按钮1,设置文本,0,"标题名称")  这个代码可以修改按钮、单选钮、复选框、分组框里的内容
文本 内容[64];整数 长度=发送消息(按钮1,获取文本,64,内容)  这个代码可以获取按钮、单选钮、复选框、分组框里的内容
整数 图标=载入图标(0,32518)
发送消息(按钮1,换按钮图,1,图标)
; 显示的是一个盾牌图标
删除对象(光标); 删除加载的光标对象,从而释放读取光标使用的内存
32512默认图标,32513错误图标,32514问号图标,32515警告图标,32516,信息图标
整数 光标=载入光标(0,32649); 显示的是一个手形光标
发送消息(按钮1,换按钮图,2,光标) 修改按钮1鼠标经过时显示的光标
删除对象(光标); 删除加载的光标对象,从而释放读取光标使用的内存
32512箭头,32513文本I,32514转圈(忙),32515十字,32516,向上
32631笔形,32642左上右下对角线,32643右上左下对角线,32644水平调整,32645垂直调整
32646移动光标,32648禁止,32649链接,32650后台工作,32651帮助,32671定位,32672人员
状态=发送消息(单选钮1,获取选择,0,0) 获取单选钮1的选中状态,0未选,1选中,2不可用
发送消息(复选框1,设置选择,1,0) 设置复选框1为选中的状态,0不选,1选中,2不可用
中文名字常量数值英文名称释义
按钮单击0BN_CLICKED用户单击按钮时发送。③参数:控件号/通知码;④数据:按钮
按钮绘制1BN_PAINT绘制按钮时发送。③参数:控件号/通知码;④数据:按钮
按钮选择2BN_HILITE/BN_PUSHED用户选择按钮/状态设置为已推送。③参数:控件号/通知码;④数据:按钮
按钮反选3BN_UNHILITE/BN_UNPUSHED从按钮中删除突出显示时/推送状态设置为未推送。③参数:控件号/通知码;④数据:按钮
按钮禁用4BN_DISABLE禁用按钮时发送。③参数:控件号/通知码;④数据:按钮
按钮双击5BN_DOUBLECLICKED当用户双击按钮时发送。③参数:控件号/通知码;④数据:按钮
按钮焦点6BN_SETFOCUS在按钮接收键盘焦点时发送。③参数:控件号/通知码;④数据:按钮
按钮失焦7BN_KILLFOCUS当按钮失去键盘焦点时发送。③参数:控件号/通知码;④数据:按钮
绘制按钮$0135WM_CTLCOLORBTN绘制按钮的背景色③参数:设备;④数据:控件
控件自行绘制-12NM_CUSTOMDRAW通知控件的父窗口有关自定义绘制操作的信息。
按钮点击下拉-1248BCN_DROPDOWN当用户单击按钮上的下拉箭头时发送。④数据:下拉类
按钮热项变更-1249BCN_HOTITEMCHANGE鼠标正在进入或离开按钮控件的工作区。④数据:热项类
发送消息——常数表
获取选择$00F0BM_GETCHECK获取单选按钮或复选框的状态。 ③参数:0;④数据:0
设置选择$00F1BM_SETCHECK设置单选按钮或复选框的状态。 ③参数:0不选,1选中,2变灰不可用;④数据:0
获取选形$00F2BM_GETSTATE确定单选按钮或复选框的状态。 ③参数:0;④数据:0
设置选形$00F4BM_SETSTATE改变按钮的高亮状态。 ③参数:0不突出,非0突出显示;④数据:0
改变按钮$00F4BM_SETSTYLE改变按钮的风格。 ③参数:样式;④数据:0不重绘,非0重绘
模拟点击$00F5BM_CLICK模拟用户点击按钮。 ③参数:0;④数据:0
取按钮图$00F6BM_GETIMAGE获取与按钮相关联的图片句柄。 ③参数:0位图,1图标;④数据:0
换按钮图$00F7BM_SETIMAGE把按钮与某张图片相关联。 ③参数:0位图,1图标;④数据:图片
设置单击$00F8BM_SETDONTCLICK控制单选按钮获得焦点时单击事件的生成。 ③参数:0不点,非0点击;④数据:0
按钮获取大小0x1601BCM_GETIDEALSIZE获取最适合其文本和图像的按钮的大小。③参数:0;④数据:尺寸类
按钮设置图表0x1602BCM_SETIMAGELIST将图像列表分配给按钮控件。③参数:0;④数据:按钮图表类
按钮获取图表0x1603BCM_GETIMAGELIST获取分配给按钮的图像列表。③参数:0;④数据:按钮图表类
按钮设置边框0x1604BCM_SETTEXTMARGIN设置用于在按钮控件中绘制文本的边距。③参数:0;④数据:矩形类
按钮获取边框0x1605BCM_GETTEXTMARGIN获取用于在按钮控件中绘制文本的边距。③参数:0;④数据:矩形类
按钮设置下拉0x1606BCM_SETDROPDOWNSTATE设置具有下拉样式按钮的下拉状态。③参数:是否下拉;④数据:0
按钮设置拆分0x1607BCM_SETSPLITINFO设置拆分按钮控件的信息。③参数:0;④数据:按钮拆分类
按钮获取拆分0x1608BCM_GETSPLITINFO获取拆分按钮控件的信息。③参数:0;④数据:按钮拆分类
按钮设置注释0x1609BCM_SETNOTE设置与命令链接按钮关联的笔记的文本。③参数:0;④数据:宽字符
按钮获取注释0x160ABCM_GETNOTE获取与命令链接按钮关联的笔记的文本。③参数:大小;④数据:缓冲区
按钮注释长度0x160BBCM_GETNOTELENGTH获取命令链接按钮中显示注释文本的长度。③参数:0;④数据:0
按钮设置提升0x160CBCM_SETSHIELD为按钮或命令链接设置提升图标所需的状态。③参数:0;④数据:是否提升
热项类——结构体定义:
中文名字英文名称长度作用解释
热项类NMBCHOTITEM16包含有关鼠标在按钮控件上移动的信息。
热项类——成员表
中文英文类型作用解释
窗口hwndFrom整数发送消息的控件的窗口句柄。
标识idFrom整数发送消息的控件的标识符。
事件code整数控件事件通知代码。
方式dwFlags整数鼠标的操作。0x10进入按钮,0x20离开按钮
下拉类——结构体定义:
中文名字英文名称长度作用解释
下拉类NMBCDROPDOWN28包含有关按钮点击下拉通知的信息。
下拉类——成员表
中文英文类型作用解释
窗口hwndFrom整数发送消息的控件的窗口句柄。
标识idFrom整数发送消息的控件的标识符。
事件code整数控件事件通知代码。
按钮rcButton矩形类包含按钮工作区的矩形结构。
按钮图表类——结构体定义:
中文名字英文名称长度作用解释
按钮图表类BUTTON_IMAGELIST24包含有关与按钮控件一起使用的图像列表的信息。
按钮图表类——成员表
中文英文类型作用解释
窗口himl整数图像列表的句柄。 提供程序保留映像列表的所有权,最终负责其处置。
边距margin矩形类一个矩形类,指定图标周围的边距。
对齐uAlign整数指定图像要使用的对齐方式。0左对齐,1右对齐,2上对齐,3下对齐,4图像居中
按钮拆分类——结构体定义:
中文名字英文名称长度作用解释
按钮拆分类BUTTON_SPLITINFO20包含定义拆分按钮的信息。
按钮拆分类——成员表
中文英文类型作用解释
掩码mask整数包含要设置的数据或正在请求哪些成员。1图像有效,2样式为8,4样式有效,8尺寸有效
图像himlGlyph整数图像列表的句柄。掩码:1
样式uSplitStyle整数拆分按钮样式。1=无拆分,2=拉伸字形,4=左对齐,8=图标图像;
宽度size.cx整数指定图像中字形的宽度。掩码:8
高度size.cy整数指定图像中字形的高度。掩码:8

组合框——控件消息:

发送消息(组合框1,组合添加,0,"内容");向组合框1添加项目
发送消息(组合框1,组合删除,0,0);删除组合框1的0号项目
数量=发送消息(组合框1,组合总项,0,0);获取组合框1里项目的总数
发送消息(组合框1,组合文件,0,"*");组合框1里显示当前目录下所有文件
中文名字常量数值英文名称释义
组合更改选择1CBN_SELCHANGE更改组合框列表框中的当前选择。③参数:控件号/通知码;④数据:组合框
组合双击事件2CBN_DBLCLK双击组合框列表框中的字符串。③参数:控件号/通知码;④数据:组合框
组合获得焦点3CBN_SETFOCUS组合框收到键盘焦点。③参数:控件号/通知码;④数据:组合框
组合失去焦点4CBN_KILLFOCUS组合框失去键盘焦点。③参数:控件号/通知码;④数据:组合框
组合编辑更改5CBN_EDITCHANGE更改组合框编辑控件部分文本的操作。③参数:控件号/通知码;④数据:组合框
组合编辑更新6CBN_EDITUPDATE组合框的编辑控件部分即将显示更改后的文本。③参数:控件号/通知码;④数据:组合框
组合点击下拉7CBN_DROPDOWN组合框的列表框即将可见时。③参数:控件号/通知码;④数据:组合框
组合列表关闭8CBN_CLOSEUP组合框的列表框已关闭时。③参数:控件号/通知码;④数据:组合框
组合选择表项9CBN_SELENDOK选择列表项,或选择一个项,然后关闭列表时。③参数:控件号/通知码;④数据:组合框
组合正在选择10CBN_SELENDCANCEL选择项时发送,随后选择另一个控件或关闭对话框。③参数:控件号/通知码;④数据:组合框
外观改变$002BWM_DRAWITEM 按钮、组合框、列表框、菜单的外观改变时会发送本消息给这些控件的所有者。④数据:绘制项目类
控件创建$002CWM_MEASUREITEM按钮、组合框、列表框、列表控件、菜单项被创建时会发送本消息给这些控件的所有者。③参数:控件号;④数据:项目尺寸类
删除项目$002DWM_DELETEITEM 列表框或组合框被销毁或删除清空某些项时,会发送本消息给这些控件的所有者。③参数:控件号;④数据: 项目删除类
新项位置$0039WM_COMPAREITEM可发送本消息来确定组合框(CBS_SORT)或列表框(LBS_SORT)中新增项的相对位置。③参数:控件号;④数据:项目排序类
发送消息——常数表
组合添加$143CB_ADDSTRING用于向组合框控件追加一个列表项。③参数:0;④数据:文字
组合删除$144CB_DELETESTRING用于删除组合框中指定的列表项。③参数:序号;④数据:0
组合文件$145CB_DIR用于向组合框控件所包含的列表框控件中添加一个文件名列表清单。③参数:路径选项;④数据:路径
组合总项$146CB_GETCOUNT用于返回组合框控件中列表项的总项数。③参数:0;④数据:0
取组合项$147CB_GETCURSEL用于返回当前被选择项的索引。③参数:0;④数据:0
组合读取$148CB_GETLBTEXT获取组合框控件中指定列表项的字符串。③参数:序号;④数据:缓冲区
组合长度$149CB_GETLBTEXTLEN用于返回组合框控件中指定列表项的字符串的长度。③参数:序号;④数据:0
组合插入$14ACB_INSERTSTRING在组合框控件所包含的列表框子控件中的指定位置插入字符串。③参数:序号,-1末尾;④数据:文字
组合清除$14BCB_RESETCONTENT用于清除组合框控件所有列表项。③参数:0;④数据:0
组合查找$14CCB_FINDSTRING在组合框控件中根据给定的字符串查找匹配字符串(忽略大小写)。③参数:序号,-1开头;④数据:文字
组合选择$14DCB_SELECTSTRING在组合框控件中设定与指定字符串相匹配的列表项为选中项。③参数:序号,-1开头;④数据:文字
选组合项$14ECB_SETCURSEL在组合框控件中设置指定的列表项为当前选择项。③参数:序号;④数据:0
下拉显示$14FCB_SHOWDROPDOWN用于显示或关闭下拉式和下拉列表式组合框的列表框。③参数:0隐藏,非0显示;④数据:0
组合数据$150CB_GETITEMDATA获取组合框控件指定列表项的附加数据。③参数:序号;④数据:0
组合附加$151CB_SETITEMDATA更新组合框指定的列表项的32位附加数据。③参数:序号;④数据:新值
组合位置$152CB_GETDROPPEDCONTROLRECT用于取组合框中列表框的屏幕位置。③参数:0;④数据:矩形类
改下拉高$153CB_SETITEMHEIGHT指定组合框中列表项的显示高度。③参数:0项高度,1选字高度;④数据:框高度
取下拉高$154CB_GETITEMHEIGHT用于返回指定列表项的高度。③参数:0项高度,-1选字高度;④数据:0
扩展组合$155CB_SETEXTENDEDUI指定下拉式或下拉列表式组合框是使用默认界面还是扩展界面。③参数:0默认,非0扩展;④数据:0
组合扩展$156CB_GETEXTENDEDUI用于返回组合框是否存在扩展界面。③参数:0;④数据:0
下拉可见$157CB_GETDROPPEDSTATE用于取组合框中列表框是否可见。③参数:0;④数据:0
查组合项$158CB_FINDSTRINGEXACT在组合框中查找字符串,本消息必须整个字符串相同。③参数:序号;④数据:文字
组合设区$159CB_SETLOCALE设置组合框的当前区域。③参数:区域;④数据:0
组合区域$15ACB_GETLOCALE获取组合框的当前区域设置。③参数:0;④数据:0
组合显项$15BCB_GETTOPINDEX检索组合框列表框部分中第一个可见项的从零开始的索引。③参数:0;④数据:0
组合滚项$15CCB_SETTOPINDEX滚动列表框让特定项在组合框的列表框中可见。③参数:序号;④数据:0
组合平宽$15DCB_GETHORIZONTALEXTENT获取列表框可以水平滚动的宽度(像素)。③参数:0;④数据:0
组合改宽$15ECB_SETHORIZONTALEXTENT修改列表框可以水平滚动的宽度(像素)。③参数:宽度;④数据:0
组合宽限$15FCB_GETDROPPEDWIDTH获取组合框的列表框的最小允许宽度(像素)。③参数:0;④数据:0
组合限宽$160CB_SETDROPPEDWIDTH设置组合框的列表框的最小允许宽度(像素)。③参数:宽度;④数据:0
组合内存$161CB_INITSTORAGE分配组合框用于存储列表框项的内存。③参数:项数;④数据:内存大小
组合最少$163CB_GETMINVISIBLE获取组合框下拉列表中可见项的最小数目。③参数:0;④数据:0
组合信息$164CB_SETDROPPEDWIDTH获取有关指定组合框的信息。③参数:0;④数据:组合信息类
组合信息类——结构体定义:
中文名字英文名称长度作用解释
组合信息类COMBOBOXINFO52包含组合框状态信息。
组合信息类——成员表
中文英文类型作用解释
大小cbSize整数结构的大小(以字节为单位)。
字框rcItem矩形类指定编辑框坐标的矩形结构。
按钮rcButton矩形类包含下拉箭头的按钮的坐标。
状态stateButton整数组合框按钮状态。0=按钮未按下,8=按钮已按下,0x8000=没有按钮
组合hwndCombo整数组合框的句柄。
编辑hwndItem整数编辑框的句柄。
列表hwndList整数下拉列表的句柄。
项目排序类——结构体定义:
中文名字英文名称长度作用解释
项目排序类COMPAREITEMSTRUCT32为排序的两个项提供标识符和应用程序提供的数据。
项目排序类——成员表
中文英文类型作用解释
分类CtlType整数2列表框,3组合框。
标识CtlID整数列表框或组合框的标识符。
按钮hwndItem整数控件的句柄。
序号1itemID1整数要比较的列表框或组合框中第一项的索引。
数据1itemData1整数要比较的第一个项的数据内容。
序号2itemID2整数要比较的列表框或组合框中第二项的索引。
数据2itemData2整数正在比较的第二个项目的数据内容。
区域dwLocaleId整数区域设置标识符。
绘制项目类——结构体定义:
中文名字英文名称长度作用解释
绘制项目类DRAWITEMSTRUCT40用于确定如何绘制所有者绘制的控件或菜单项的信息。
绘制项目类——成员表
中文英文类型作用解释
分类CtlType整数1菜单项,2列表框,3组合框,4按钮,5静态框,101=Tab控件,102=表格框。
标识CtlID整数组合框、列表框、按钮或静态控件的标识符。
序号itemID整数菜单项的菜单项标识符或列表框或组合框中项的索引。
绘图itemAction整数所需的绘图操作。1绘制全部,2检查新的选择状态,4失去或获得键盘焦点。
状态itemState整数当前绘图操作发生后项的视觉状态
控件hwndItem整数组合框、列表框、按钮和静态控件的控件的句柄。
设备hDC整数设备上下文的句柄;对控件执行绘图操作时,必须使用此设备上下文。
边界rcItem矩形类定义要绘制的控件的边界的矩形。
数据itemData整数列表框或组合框以及菜单项关联的应用程序定义值。
绘图视觉状态——常量值定义:
英文名称数值作用解释
ODS_SELECTED0x0001菜单项的状态处于选中状态。
ODS_GRAYED0x0002该项将灰显。 此位仅适用于菜单。
ODS_DISABLED0x0004该项将被绘制为已禁用。
ODS_CHECKED0x0008要检查菜单项。 此位仅适用于菜单。
ODS_FOCUS0x0010该项具有键盘焦点。
ODS_DEFAULT0x0020该项是默认项。
ODS_COMBOBOXEDIT0x1000绘图发生在组合框编辑选择字段中。
ODS_HOTLIGHT0x0040正在对项进行热跟踪,鼠标位于该项上时突出显示。
ODS_INACTIVE0x0080该项处于非活动状态,与菜单关联的窗口处于非活动状态。
ODS_NOACCEL0x0100控件是在没有键盘快捷键提示的情况下绘制的。
ODS_NOFOCUSRECT0x0200控件是在没有焦点指示器提示的情况下绘制的。
项目尺寸类——结构体定义:
中文名字英文名称长度作用解释
项目尺寸类MEASUREITEMSTRUCT24通知系统所有者绘制的控件或菜单项的尺寸。
项目尺寸类——成员表
中文英文类型作用解释
分类CtlType整数1菜单项,2列表框,3组合框,102=表格框。
标识CtlID整数组合框或列表框的标识符。不适用于菜单。
序号itemID整数菜单项的菜单项标识符或列表框或组合框中项的索引。
宽度itemWidth整数菜单项的宽度(以像素为单位)。
高度itemHeight整数列表框或菜单中单个项的高度(以像素为单位)。
数据itemData整数列表框或组合框以及菜单项关联的应用程序定义值。

组合框、列表框——读取文件列表类型

中文名字常量数值英文名称释义
包含只读1DDL_READONLY包括只读文件
包含隐藏2DDL_HIDDEN包括隐藏文件
包含系统4DDL_SYSTEM包括系统文件
包含目录$10DDL_DIRECTORY包括子目录
包含存档$20DDL_ARCHIVE包括存档文件
只传信息$2000DDL_POSTMSGS只把信息传给应用消息队列,不响应列表
包含盘符$4000DDL_DRIVES包括盘符文件
不含读写$8000DDL_EXCLUSIVE不包括默认已经包含的读写文件
全部路径$4037DIRATTR包括全部路径(读写,只读,隐藏,系统,目录,存档,盘符)

静态框——控件消息

发送消息(标签1,设置文本,0,"标题名称")  这个代码可以修改标签框里的内容
文本 内容[64];整数 长度=发送消息(标签1,获取文本,64,内容)  这个代码可以获取标签里的内容
整数 图片=加载图像(0,"sec.bmp",图片类型,0,0,$10);从文件中加载一个图片,$10标志是从文件加载
发送消息(图像框1,换静图片,0,图片); 修改图像框1显示的图片
删除对象(图片);删除加载的图片对象,从而释放读取图片使用的内存
在设计界面的时候图像框的文字设置为“#1”就会自动加载资源里的1号资源图标,资源号可以在添加资源时候查看
整数 图标=载入图标(0,32518)
发送消息(图像框1,换静图片,1,图标)
修改图像框1显示的图标
删除对象(图标); 删除加载的图标对象,从而释放读取图像使用的内存
显示的是一个盾牌图标;32512默认图标,32513错误图标,32514问号图标,32515警告图标,32516,信息图标
整数 光标=载入光标(0,32649); 显示的是一个手形光标
发送消息(图像框1,换静图片,2,光标) 修改图像框1鼠标经过时显示的光标
删除对象(光标); 删除加载的光标对象,从而释放读取光标使用的内存
32512箭头,32513文本I,32514转圈(忙),32515十字,32516,向上
32631笔形,32642左上右下对角线,32643右上左下对角线,32644水平调整,32645垂直调整
32646移动光标,32648禁止,32649链接,32650后台工作,32651帮助,32671定位,32672人员
中文名字常量数值英文名称释义
静态单击0STN_CLICKED用户单击具有"点击事件"样式的静态控件。③参数:控件号/通知码;④数据:静态框
静态双击1STN_DBLCLK用户双击具有"点击事件"样式的静态控件。③参数:控件号/通知码;④数据:静态框
静态启用2STN_ENABLE启用静态控件时,发送此通知代码。③参数:控件号/通知码;④数据:静态框
静态禁用3STN_DISABLE禁用静态控件时,发送此通知代码。③参数:控件号/通知码;④数据:静态框
绘制静态$0138WM_CTLCOLORSTATIC绘制一个静态控件的背景色③参数:设备;④数据:控件
发送消息——常数表
换静图标$170STM_SETICON更改静态图片框的图标。③参数:图标;④数据:0
取静图标$171STM_GETICON获取静态图片框的图标。③参数:0;④数据:0
换静图片$172STM_SETIMAGE更换静态图片框的位图。③参数:0位图,1图标,2光标,3图元;④数据:图片
取静图片$173STM_GETIMAGE获取静态图片框的位图。③参数:0位图,1图标,2光标,3图元;④数据:0

列表框——控件消息:

发送消息(列表框1,列表添加,0,"内容");向列表框1添加项目
发送消息(列表框1,列表删除,0,0);删除列表框1的0号项目
数量=发送消息(列表框1,列表数量,0,0);获取列表框1里项目的总数
序号=发送消息(列表框1,列表选项,0,0);获取列表框1里选中项目的序号
发送消息(列表框1,列表文件,0,"*");列表框1里显示当前目录下所有文件
中文名字常量数值英文名称释义
列表选择项目1LBN_SELCHANGE通知应用程序列表框中的选择已因用户输入而更改。③参数:控件号/通知码;④数据:列表框
列表双击项目2LBN_DBLCLK通知应用程序用户已双击列表框中的项。③参数:控件号/通知码;④数据:列表框
列表取消选择3LBN_SELCANCEL通知应用程序用户已取消列表框中的选择。③参数:控件号/通知码;④数据:列表框
列表获得焦点4LBN_SETFOCUS通知应用程序列表框已收到键盘焦点。③参数:控件号/通知码;④数据:列表框
列表失去焦点5LBN_KILLFOCUS通知应用程序列表框已失去键盘焦点。③参数:控件号/通知码;④数据:列表框
列表内存不足-2LBN_ERRSPACE无法分配足够的内存来满足特定请求。③参数:控件号/通知码;④数据:列表框
列表拖动按下0x485DL_BEGINDRAG通知用户已单击项上的鼠标左键。③参数:控件号;④数据:拖动类
列表拖动按下0x486DL_DRAGGING指示用户在拖动项时移动了鼠标。③参数:控件号;④数据:拖动类
列表拖动完成0x487DL_DROPPED指示用户释放鼠标左键已完成拖动操作。③参数:控件号;④数据:拖动类
列表拖动取消0x488DL_CANCELDRAG用户单击鼠标右键或按ESC键,取消拖动操作。③参数:控件号;④数据:拖动类
删除项目$002DWM_DELETEITEM 列表框或组合框被销毁或删除清空某些项时,会发送本消息给这些控件的所有者。③参数:控件号;④数据: 项目删除类
列表按键$002EWM_VKEYTOITEM响应按键风格的列表框会发出本消息给其所有者,以便响应键盘按下消息。③参数:键码/位置;④数据:列表框
列表字符$002FWM_CHARTOITEM 响应按键风格的列表框会发送本消息给其所有者,以便响应键入字符消息。③参数:键码/位置;④数据:列表框
绘制列表$0134WM_CTLCOLORLISTBOX当一个列表框控件将要被绘制前,发送本消息给其父窗;可用来设置列表框的文本和背景色③参数:设备;④数据:控件
发送消息——常数表
列表添加$180LB_ADDSTRING向列表框中添加字符串。③参数:序号;④数据:文字
列表插入$181LB_INSERTSTRING向列表框中插入一个条目数据或字符串(不排序)。③参数:序号,-1末尾;④数据:文字
列表删除$182LB_DELETESTRING删除列表框中的一个字符串。③参数:序号;④数据:0
列表选多$183LB_SELITEMRANGEEX在多选状态下的列表框中选择一个或多个连续的条目。③参数:首序号;④数据:末序号
列表清除$184LB_RESETCONTENT清除列表框中所有列表项。③参数:0;④数据:0
列表选择$185LB_SETSEL在多选状态下的列表框中选择一个字符串。③参数:0不选,非0选中;④数据:序号,-1所选
列表选中$186LB_SETCURSEL在列表框中选择一个字符串,并高亮新选中的字符串。③参数:序号,-1不选;④数据:0
列表状态$187LB_GETSEL获得列表框中一个条目的选择状态。③参数:序号;④数据:0
列表选项$188LB_GETCURSEL获得列表框中当前被选条目的索引。仅在单选状态的列表框有效。③参数:0;④数据:0
列表读取$189LB_GETTEXT从列表框中获得一个字符串。③参数:序号;④数据:文字
列表长度$18ALB_GETTEXTLEN获得一个列表框中字符串的长度。③参数:序号;④数据:0
列表数量$18BLB_GETCOUNT获得列表框中条目的数量。③参数:0;④数据:0
选列表项$18CLB_SELECTSTRING仅适用于单选择列表框,设定与指定字符串相匹配的列表项为选中项,会滚动列表框以使选择项可见。③参数:序号,-1开头;④数据:文字
列表文件$18DLB_DIR在列表框中列出文件名。③参数:路径选项;④数据:路径
列表查找$18FLB_FINDSTRING在列表框中查找匹配字符串(忽略大小写)。③参数:序号,-1开头;④数据:文字
列表选数$190LB_GETSELCOUNT本消息用于返回选择项的数目。③参数:0;④数据:0
列表选位$191LB_GETSELITEMS本消息用于获得选中项的数目及位置。③参数:数量;④数据:缓冲区
取列表宽$193LB_GETHORIZONTALEXTENT返回列表框的可滚动的宽度。③参数:0;④数据:0
改列表宽$194LB_SETHORIZONTALEXTENT本消息设置列表框的滚动宽度。③参数:像素;④数据:0
列表列数$195LB_SETCOLUMNWIDTH设置多列列表框中所有列的宽度。③参数:像素;④数据:0
列文件名$196LB_ADDFILE为列表框增加文件名。③参数:0;④数据:文字
列表区域$198LB_GETITEMRECT用于列表框中获得列表项的客户区的矩形。③参数:序号;④数据:矩形类
列表数据$199LB_GETITEMDATA本消息用于返回指定列表项的附加数据。③参数:序号;④数据:0
列表附加$19ALB_SETITEMDATA用于更新列表框中指定列表项的32位附加数据。③参数:序号;④数据:新值
列表非选$19BLB_SELITEMRANGE用来使指定范围内的列表项选中或落选。③参数:0不选,非0选择;④数据:开始-最后项
列表指定$19CLB_SETANCHORINDEX用于列表框中设置鼠标最后选中的表项成指定表项。③参数:序号;④数据:0
列表选取$19DLB_GETANCHORINDEX用于列表框中鼠标最后选中的项的索引。③参数:0;④数据:0
列表键选$19ELB_SETCARETINDEX用于列表框中设置键盘输入焦点到指定表项。③参数:序号;④数据:0完全可见,非0部分可见
列表键取$19FLB_GETCARETINDEX用于列表框中返回具有矩形焦点的项目索引。③参数:0;④数据:0
改列表高$1A0LB_SETITEMHEIGHT用于列表框中指定列表项显示高度。③参数:序号;④数据:像素数
取列表高$1A1LB_GETITEMHEIGHT用于列表框中返回列表框中某一项的高度。③参数:序号;④数据:0
查列表项$1A2LB_FINDSTRINGEXACT用于列表框中查找字符串(忽略大小写),本消息必须整个字符串相同。③参数:序号,-1开头;④数据:文字
改列表数$1A7LB_SETCOUNT用于列表框中设置表项数目。③参数:项数量;④数据:0
列表内存$1A8LB_INITSTORAGE分配用于存储列表框项的内存。③参数:项数量;④数据:内存大小
列表点项$1A9LB_ITEMFROMPOINT获取最接近列表框中指定点的项的从零开始的索引。③参数:0;④数据:坐标x/y
拖动类——结构体定义:
中文名字英文名称长度作用解释
拖动类DRAGLISTINFO16包含有关拖动事件的信息。
拖动类——成员表
中文英文类型作用解释
通知uNotification整数指定拖动事件的类型的通知代码。拖动按下$485到拖动取消$488
控件hWnd整数拖动列表框的句柄。
ptCursor.x整数包含鼠标光标的x坐标。
ptCursor.y整数包含鼠标光标的y坐标。
项目删除类——结构体定义:
中文名字英文名称长度作用解释
项目删除类DELETEITEMSTRUCT20描述已删除的列表框或组合框项。
项目删除类——成员表
中文英文类型作用解释
分类CtlType整数2列表框,3组合框
标识CtlID整数组合框或列表框的标识符。
序号itemID整数要删除的列表框或组合框中项的索引。
控件hwndItem整数控件的句柄。
数据itemData整数项的应用程序定义数据。

滚动条——控件消息:

发送消息(滚动条1,滚动位置,50,真);控制滚动条1的滑动块到指定位置
位置=发送消息(滚动条1,滚动取值,0,0);获取滚动条1的滑动块当前所在位置
发送消息(滚动条1,滚动限定,0,100);设置滚动条1的最小到最大滚动范围
发送消息(滚动条1,滚动取限,@最小,@最大);获取滚动条1的最小到最大滚动范围
发送消息(滚动条1,滚动箭头,2,0);设置滚动条1的右边(垂直滚动为下边)箭头禁止使用
中文名字常量数值英文名称释义
绘制滚条$0137WM_CTLCOLORSCROLLBAR绘制滚动条的背景色③参数:设备;④数据:控件
水平滚动$0114WM_HSCROLL当窗口的标准水平滚动条产生一个滚动事件时,发送本消息给该窗口。③参数:低位=0点左键,1点右/下键,2点滑块左,3点滑块右,4按住滑块,
5拖动滑块,6按home,7按END,8释放按键;高位=按住拖动位置;④数据:控件
垂直滚动$0115WM_VSCROLL当窗口的标准垂直滚动条产生一个滚动事件时,发送本消息给该窗口。③参数:低位=0点上键,1点下键,2点滑块上方,3点滑块下方,4按住滑块,
5拖动滑块,6按home,7按END,8释放按键;高位=按住拖动位置;④数据:控件
发送消息——常数表
滚动位置$E0SBM_SETPOS设置滚动框的位置 ,并根据需要重绘滚动条来反映新位置;③参数:位置;④数据:是否重绘;
滚动取值$E1SBM_GETPOS检索滚动条控件的滚动框的当前位置;③参数:0;④数据:0;
滚动限定$E2SBM_SETRANGE设置滚动条控件的最小和最大位置值。③参数:最小值;④数据:最大值;
滚动取限$E3SBM_GETRANGE获取滚动条控件的最小和最大位置值。③参数:@最小值;④数据:@最大值;
滚动箭头$E4SBM_ENABLE_ARROWS启用或禁用滚动条控件的一个或两个箭头。③参数:0都启用,1禁左/上,2禁右/下,3都禁用;④数据:0;
滚动范围$E6SBM_SETRANGEREDRAW设置滚动条最小和最大位置并重绘控件。③参数:最小值;④数据:最大值;
滚动设置$E9SBM_SETSCROLLINFO设置滚动条的位置范围等参数。③参数:是否重绘;④数据:滚动信息类;
滚动参数$EASBM_GETSCROLLINFO获取滚动条控件的位置范围等参数。③参数:0;④数据:滚动信息类;
滚动信息$EBSBM_GETSCROLLBARINFO获取滚动条控件的位置范围等信息。③参数:0;④数据:滚动条类;

中文名字英文名称长度作用解释
滚动信息类SCROLLINFO28用来储存滚动条信息
滚动信息类——成员表
长度cbSize整数结构长度字节数,该值在设置和查询参数时都必须填写。
标志fMask整数指定结构中的哪些成员是有效,0x17全部有效,8禁止滚动
最小nMin整数滚动范围最小值;标志:1
最大nMax整数滚动范围最大值;标志:1
页码nPage整数页尺寸,用来确定比例滚动框的大小;标志:2
位置nPos整数滚动框的位置;标志:4
跟踪nTrackPos整数拖动时滚动框的位置,标志:$10

中文名字英文名称长度作用解释
滚动条类SCROLLBARINFO40定义了包含滚动条信息
滚动条类——成员表
长度cbSize整数结构长度字节数,该值在设置和查询参数时都必须填写。
rcScrollBar.left整数滚动条的左边位置
rcScrollBar.top整数滚动条的顶部位置
rcScrollBar.right整数滚动条的宽度
rcScrollBar.bottom整数滚动条的高度
宽高dxyLineButton整数滑块的高度或宽度。
左上xyThumbTop整数滑块顶部或左侧的位置。
右下xyThumbBottom整数拇指底部或右侧的位置。
保留reserved整数保留。
元素rgstate整数元素的数组。每个元素都指示滚动条组件的状态。

网页框——对象使用

对象 浏览=浏览器对象; 申请一个浏览器对象的变量
程序段 窗体启动; 在程序段内控制网页框对象
  浏览=控件对象 网页框1; 获取网页框的浏览器对象
  浏览.改静默(1); 控制网页框的浏览器对象不显示对话提示
  浏览.连接("`https://www.baidu.com/",0,0,0,0); 控制网页框的浏览器对象访问一个网址
  浏览.主页; 控制网页框的浏览器对象显示默认主页
  浏览.后退; 控制网页框的浏览器对象返回之前打开的页面
  浏览.命令(17,0,0,0); 控制网页框的页面全部选中
  浏览.命令(12,0,0,0); 控制网页框的页面复制选中内容
英文名字中文名称作用解释
IWebBrowser2浏览器对象公开用于操作WebBrowser控件的方法。文字均为宽字符
浏览器对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetTypeInfoCount接口数(@是否)检索对象是否提供的类型信息接口数(0不提供 1提供)。
GetTypeInfo类信息(类型,区域,对象)检索对象的类型信息,然后可以使用该信息获取接口的类型信息。
GetIDsOfNames映射(IID_NULL,名称,名数,区域,@标号)将单个成员和一组可选的参数名称映射到一组相应的数组指针.区域:1033美国;2052中国;2048系统默认;
Invoke调用(标号,IID_NULL,区域,标志,参数,结果,0,0)提供对对象公开的属性和方法的访问。标志:1方法;2属性读;3属性写;4参照赋值
GoBack后退使你在当前历史列表中后退一项
GoForward前进递使你在当前历史列表中前进一项。
GoHome主页连接用户默认的主页。
GoSearch搜索连接用户默认的搜索页面。
Navigate连接(网址,标志,方式,参数,标头)连接到指定的URL网址。标志:1新窗口;2不加历史记录;16自动搜索;32导航栏;方式:_blank;_parent;_self;_top;
Refresh刷新重新加载当前网页。
Refresh2重载(级别)重新加载当前网页。0简单刷新;1过期刷新;3请求头
Stop停止停止当前页面及其内容的载入。
get_Application取控件(@控件)获取掌管WebBrowser控件的应用程序实现的自动化对象(IDispatch)。
get_Parent取父级(@控件)获取WebBrowser控件的父自动化对象,通常是一个容器,例如是宿主或IE窗口。
get_Container取容器(@控件)获取WebBrowser控件容器的自动化对象。通常该值与Parent属性返回的值相同。
get_Document取文档(@控件)获取活动文档的自动化对象。提供对DHTML Object Model的访问途径。
get_TopLevelContainer顶层(@是否)获取一个布尔值,表明IE是否是WebBrowser控件顶层容器,是就返回true
get_Type取类型(内容)获取已被WebBrowser控件加载的对象的类型。例如.doc文件是Microsoft Word Document
get_Left取左边(@数值)获取WebBrowser控件窗口的内部左边与容器窗口左边的距离。
put_Left改左边(数值)设置WebBrowser控件窗口的内部左边与容器窗口左边的距离。
get_Top取上边(@数值)获取WebBrowser控件窗口的内部左边与容器窗口顶边的距离
put_Top改上边(数值)设置WebBrowser控件窗口的内部左边与容器窗口顶边的距离。
get_Width取宽度(@数值)获取WebBrowser窗口的宽度,以像素为单位。
put_Width改宽度(数值)设置WebBrowser窗口的宽度,以像素为单位。
get_Height取高度(@数值)获取WebBrowser窗口的高度,以像素为单位。
put_Height改高度(数值)设置WebBrowser窗口的高度,以像素为单位。
get_LocationName取标题(内容)获取一个字符串,该字符串包含着WebBrowser当前显示资源的路径或标题。
get_LocationURL取网址(内容)获取WebBrowser当前正在显示的资源的URL。
get_Busy载入中(@真假)获取一个布尔值,说明WebBrowser当前是否正在加载URL。
Quit关闭关闭WebBrowser当前页面。
ClientToWindow取坐标(@左,@上)获取显示页面客户区与容器窗口的左边和顶边距离。
PutProperty改属性(名称,参数)设置WebBrowser指定名称的属性。参数为VARIANT变量结构数组
GetProperty取属性(名称,参数)获取WebBrowser指定名称的属性。参数为VARIANT变量结构数组。
get_Name取名称(内容)获取WebBrowser控件窗口的名称。
get_HWND取窗口(@窗口)获取WebBrowser控件窗口的句柄。
get_FullName取全名(内容)获取WebBrowser控件窗口的全名。
get_Path取路径(路径)检索 Windows Internet Explorer 可执行文件的系统文件夹。
get_Visible取可见(@是否)获取WebBrowser控件窗口是否可见。
put_Visible改可见(是否)设置WebBrowser控件窗口是否可见。
get_StatusBar取状态栏(@是否)获取WebBrowser控件的状态栏是否可见。
put_StatusBar改状态栏(是否)设置WebBrowser控件的状态栏是否可见。
get_StatusText取状态字(内容)获取WebBrowser控件的指示状态的文字。
put_StatusText改状态字(内容)设置WebBrowser控件的指示状态的文字。
get_ToolBar取工具栏(@是否)获取WebBrowser控件的工具栏是否可见。
put_ToolBar改工具栏(是否)设置WebBrowser控件的工具栏是否可见。
get_MenuBar取菜单栏(@是否)获取WebBrowser控件的菜单栏是否可见。
put_MenuBar改菜单栏(是否)设置WebBrowser控件的菜单栏是否可见。
get_FullScreen取全屏(@是否)获取WebBrowser控件的窗口是否全屏。
put_FullScreen改全屏(是否)设置WebBrowser控件的窗口是否全屏。
Navigate2转到(网址,标志,方式,参数,标头)连接到指定的URL网址(宽字符)。参数为POST提交数据(ANSI),标头为HTTP协议头
QueryStatusWB查状态(命令,@状态)查询控件对象以获取命令的状态。1可用;2已启用;4开关打开;8保留;16隐藏;32隐藏上下文
ExecWB命令(命令,选项,参数,数据)执行命令并返回命令执行的状态。选项:0缺省;1提示;2不提示;3显示帮助;参数数据为Variant结构的指针,可选写0
ShowBrowserBar显浏览栏(类,显示,大小)显示浏览器栏。参数均为Variant结构的指针
get_ReadyState就绪状态(@状态)获取WebBrowser控件的就绪状态。0初始状态;1正在加载;2加载完成;3交互模式;4接收完成
get_Offline取脱机(@是否)获取WebBrowser控件对象是否在脱机模式下运行。
put_Offline改脱机(是否)设置WebBrowser控件对象是否在脱机模式下运行。
get_Silent取静默(@是否)获取WebBrowser控件的对象是否可以显示对话框。
put_Silent改静默(是否)设置WebBrowser控件的对象是否可以显示对话框。
get_RegisterAsBrowser取顶级(@是否)获取WebBrowser控件的窗口是否注册为顶级浏览器窗口。
put_RegisterAsBrowser改顶级(是否)设置WebBrowser控件的窗口是否注册为顶级浏览器窗口。
get_RegisterAsDropTarget取拖曳(@是否)获取WebBrowser控件的对象是否注册为导航的放置目标。
put_RegisterAsDropTarget改拖曳(是否)设置WebBrowser控件的对象是否注册为导航的放置目标。
get_TheaterMode取影院(@是否)获取WebBrowser控件的对象是否处于影院模式。主窗口将填满整个屏幕
put_TheaterMode改影院(是否)设置WebBrowser控件的对象是否处于影院模式。主窗口将填满整个屏幕
get_AddressBar取地址栏(是否)设置WebBrowser控件对象的地址栏是否可见。
put_AddressBar改地址栏(是否)设置WebBrowser控件对象的地址栏是否可见。
get_Resizable取调整(是否)设置WebBrowser控件的窗口是否可以调整对象的大小。
put_Resizable改调整(是否)设置WebBrowser控件的窗口是否可以调整对象的大小。
浏览对象可执行命令表:
使用不同数值,执行相应功能的命令
英文数值功能
OLECMDID_OPEN1打开地址
OLECMDID_NEW2新建页面
OLECMDID_SAVE3保存
OLECMDID_SAVEAS4另存为
OLECMDID_SAVECOPYAS5另存复制内容
OLECMDID_PRINT6打印页面
OLECMDID_PRINTPREVIEW7打印预览
OLECMDID_PAGESETUP8页面设置
OLECMDID_SPELL9拼写
OLECMDID_PROPERTIES10查看页面属性
OLECMDID_CUT11剪切
OLECMDID_COPY12复制
OLECMDID_PASTE13粘贴
OLECMDID_PASTESPECIAL14粘贴特殊
OLECMDID_UNDO15撤消
OLECMDID_REDO16重做
OLECMDID_SELECTALL17全选
OLECMDID_CLEARSELECTION18清除选择
OLECMDID_ZOOM19缩放
OLECMDID_GETZOOMRANGE20获取的缩放范围
OLECMDID_UPDATECOMMANDS21更新命令
OLECMDID_REFRESH22刷新
OLECMDID_STOP23停止
OLECMDID_HIDETOOLBARS24隐藏工具栏
OLECMDID_SETPROGRESSMAX25设置进度条最大值
OLECMDID_SETPROGRESSPOS26设置进度条位置
OLECMDID_SETPROGRESSTEXT27设置进度条文本
OLECMDID_SETTITLE28设置标题
OLECMDID_SETDOWNLOADSTATE29设置下载状态
OLECMDID_STOPDOWNLOAD30停止下载
OLECMDID_ONTOOLBARACTIVATED31激活工具栏
OLECMDID_FIND32查找
OLECMDID_DELETE33删除
OLECMDID_HTTPEQUIV34http信息头
OLECMDID_HTTPEQUIV_DONE35http信息头结束
OLECMDID_ENABLE_INTERACTION36允许相互协作
OLECMDID_ONUNLOAD37激活卸载
OLECMDID_PROPERTYBAG238连续数据对象
OLECMDID_PREREFRESH39预刷新
OLECMDID_SHOWSCRIPTERROR40显示脚本错误
OLECMDID_SHOWMESSAGE41显示消息
OLECMDID_SHOWFIND42显示查找
OLECMDID_SHOWPAGESETUP43显示页面设置
OLECMDID_SHOWPRINT44显示打印
OLECMDID_CLOSE45关闭窗体
OLECMDID_ALLOWUILESSSAVEAS46另存为
OLECMDID_DONTDOWNLOADCSS47不加载CSS
OLECMDID_UPDATEPAGESTATUS48更新页面状态
OLECMDID_PRINT249打印2
OLECMDID_PRINTPREVIEW250打印预览2
OLECMDID_SETPRINTTEMPLATE51设置打印模板
OLECMDID_GETPRINTTEMPLATE52获取打印模板
OLECMDID_PAGEACTIONBLOCKED55页面动作锁定
OLECMDID_PAGEACTIONUIQUERY56页面操作界面查询
OLECMDID_FOCUSVIEWCONTROLS57焦点视图控件
OLECMDID_FOCUSVIEWCONTROLSQUERY58焦点视图控件查询
OLECMDID_SHOWPAGEACTIONMENU59显示页面操作菜单
OLECMDID_ADDTRAVELENTRY60增加入口
OLECMDID_UPDATETRAVELENTRY61更新入口
OLECMDID_UPDATEBACKFORWARDSTATE62更新放进后退状态
OLECMDID_OPTICAL_ZOOM63视窗缩放
OLECMDID_OPTICAL_GETZOOMRANGE64视角缩放范围
OLECMDID_WINDOWSTATECHANGED65窗口状态改变
OLECMDID_ACTIVEXINSTALLSCOPE66安装ActiveX控件
OLECMDID_UPDATETRAVELENTRY_DATARECOVERY67更新恢复数据
OLECMDID_SHOWTASKDLG68显示任务对话

进度条——控件消息:


发送消息(进度条1,进度限定,0,300);设置进度条1上下限范围是0-300
发送消息(进度条1,进度位置,50,0);设置进度条1的当前位置到50
发送消息(进度条1,进度步长,20,0);设置进度条1每次步进的值为20
发送消息(进度条1,进度步进,0,0);控制进度条1位置增加指定的步长
位置=发送消息(进度条1,进度取值,0,0);获取进度条1的当前位置
中文名字常量数值英文名称释义
进度范围$401PBM_SETRANGE设置进度条控件范围的上下限,并重绘进度条来反映新范围;③参数:0;④数据:低位最小值,高位最大值;默认0-100
进度位置$402PBM_SETPOS以指定位置来设置进度条的当前位置,并重绘进度条来反映新位置;③参数:位置;④数据:0
进度增量$403PBM_DELTAPOS以指定的增量来增加进度条控件的当前位置;③参数:增量;④数据:0
进度步长$404PBM_SETSTEP为进度条控件指定步长(缺省为10);③参数:步长;④数据:0
进度步进$405PBM_STEPIT用步进值来增加一个进度条控件的当前位置;③参数:0;④数据:0
进度限定$406PBM_SETRANGE32为进度条设置32位的上下限范围;③参数:最小值;④数据:最大值
进度取限$407PBM_GETRANGE获取当前进度条控件的上下限范围;③参数:真=低限,假=高限;④数据:双数类或者0
进度取值$408PBM_GETPOS检取进度条的当前位置;③参数:0;④数据:0;返回当前位置
进度块色$409PBM_SETBARCOLOR设置进度条控件上滑块的颜色(COLORREF值);③参数:0;④数据:颜色;返回之前颜色
进度动画$40APBM_SETMARQUEE将进度栏设置为选框模式(多彩流动)。③参数:打开/关闭;④数据:动画时间,0=30毫秒;
进度步增$40DPBM_GETSTEP从进度栏中检索步骤增量。③参数:0;④数据:0
进度取背$40EPBM_GETBKCOLOR获取进度栏的背景色。③参数:0;④数据:0
进度取色$40FPBM_GETBARCOLOR获取进度栏的颜色。③参数:0;④数据:0
进度变态$410PBM_SETSTATE设置进度栏的状态。③参数:1正常,2错误,3暂停;④数据:0
进度状态$411PBM_GETSTATE获取进度栏的状态。③参数:0;④数据:0;返回:1正常,2错误,3暂停
进度背色$2001PBM_SETBKCOLOR设置进度条控件的背景色;③参数:0;④数据:新颜色;返回之前颜色
双数类——结构体定义:
中文名字英文名称长度作用解释
双数类PBRANGE8包含有关进度栏控件的高低限制的信息。
双数类——成员表
中文英文类型作用解释
iLow整数进度栏控件的低限制。
iHigh整数进度栏控件的高限制。

表格框——通知消息:


1.可以在模块列表里选中表格模块,使用图标的话还需要选中图像列表
整数 大图=图像列表(100,32,0) //创建100个32*32的图像列表,最后参数0是bmp格式图片
整数 小图=图像列表(17,16,1) //创建17个16*16的图像列表,最后参数1是ico格式图标
整数 序号=0,行数=0;文本 内容[16] //申请三个变量用来循环添加表项
表格图像(表格1,1,小图) //指定表格1的图像列表为“小图”,参数1是小图模式;表格1为表格视图
表格扩展(表格1,$23) //指定表格1的扩展样式是:$20选择整行+2子项带图+1显表格线
循环{内容="测试列"+序号 //循环增加序号,把它转换成文本进行拼接
表头添加(表格1,内容,序号,70) //添加表格头,这里序号是第几列,最后70是列宽度
序号++}(序号=5) //序号从0增加到5为止,也就是添加5列
循环(行数<10){序号=0 //新的循环指定行数小于0,每次让序号归零
循环{内容="行"+行数"列"+序号 //第二层循环,拼接每行每列内容的文字
表格添加(表格1,内容,行数,序号,行数) //添加表格项,指定内容和行数,序号是列数,最后行数是指定小图片编号
序号++}(序号=5) //序号从0增加到5为止,给每一行都添加5列
行数++} //内层循环完,行数递增,总共循环10次,至此完成10行5列的两层循环
2.上面的表格1是用表格视图,小图标模式,下面的表格2使用大图模式,不需要添加表头和指定列数
表格图像(表格2,0,大图) //指定表格2的图像列表为“大图”,参数0是大图模式
序号=0;循环{内容="大图"+序号 //先让序号归零,再循环增加序号,把它转换成文本进行拼接
表格添加(表格2,内容,序号,0,序号) //添加表格项,指定内容,序号是第几个,最后序号是指定大图片编号
序号++}(序号=85) //序号从0增加到85为止,总共添加85个大图片
3.表格框的键盘鼠标事件
程序段 公共事件(数据)
整数 窗口=数据&,参数=.&4,事件=.&8,项=.&12,子项=.&16;
判断(事件)为 表项已被改变{项就是行号减1,子项是列数减1}
为 表项插入新项{有个新项目被插入了}
处理窗口(窗口,控件事件,参数,数据) 结束

中文名字常量数值英文名称释义
控件单击左键-2NM_CLICK用户在控件上点击了鼠标左键
控件双击左键-3NM_DBLCLK用户在控件上双击了鼠标左键
控件按下回车-4NM_RETURN控件获得键盘焦点并按下回车键
控件单击右键-5NM_RCLICK用户在控件上点击了鼠标右键
控件双击右键-6NM_RDBLCLK用户在控件上双击了鼠标右键
控件得到焦点-7NM_SETFOCUS控件收到输入焦点
控件失去焦点-8NM_KILLFOCUS用户失去输入焦点
控件自行绘制-12NM_CUSTOMDRAW通知控件的父窗口有关自定义绘制操作的信息。
控件鼠标掠过-13NM_HOVER用户的鼠标掠过控件
控件释放鼠标-16NM_RELEASEDCAPTURE控件要释放鼠标捕捉
表项正在改变-100LVN_ITEMCHANGING有个项目正被改变
表项已被改变-101LVN_ITEMCHANGED有个项目已经被改变
表项插入新项-101LVN_INSERTITEM有个新项目被插入了
表项删除单项-103LVN_DELETEITEM有个项目要被删除
表项删除全项-104LVN_DELETEALLITEMS所有项目要被删除
表项编辑起点-105LVN_BEGINLABELEDITA一个项目的文本标签编辑的起点
表项编辑终点-106LVN_ENDLABELEDITA一个项目的文本标签编辑的终点
表项列被点击-108LVN_COLUMNCLICK一个列被点击了
表项左键拖放-109LVN_BEGINDRAG鼠标左键的拖放操作开始了
表项右键拖放-111LVN_BEGINRDRAG鼠标右键的拖放操作开始了
表项内容改变-113LVN_ODCACHEHINT由虚列表控件在其可视区域的内容被改变时发送
表项用户激活-114LVN_ITEMACTIVATE由虚列表控件在用户激活了某个项目时发送
表项状态改变-115LVN_ODSTATECHANGED由虚列表控件在一个项目的状态或排列已被改变时发送
表项鼠标掠过-121LVN_HOTTRACK由虚列表控件在用户的鼠标掠过某个项目时发送
表项请求显示-150LVN_GETDISPINFOA请求父窗提供显示项目或对某个项目排序所需的信息
表项更新显示-151LVN_SETDISPINFOA需要更新某个项目的信息
表项查找回调-152LVN_ODFINDITEMA由虚列表控件在需要其所有者查找特定的回调项目时发送
表项键盘按下-155LVN_KEYDOWN通知列表视图控件的父窗口已按下某键。
表项选择边框-156LVN_MARQUEEBEGIN某个边框选择已开始
表项附加文本-157LVN_GETINFOTIPA请求附加的文本信息(显示于工具提示控件中)时发送
表项附加提示-158LVN_GETINFOTIPW请求附加的文本信息(显示于工具提示控件中)时发送
表项增量搜索-162LVN_INCREMENTALSEARCHA通知列表视图控件的父窗口,增量搜索已开始。
表项增量检索-163LVN_INCREMENTALSEARCHW通知列表视图控件的父窗口,增量搜索已开始。
表项开始滚动-180LVN_BEGINSCROLL滚动操作启动时,通知列表视图控件的父窗口。
表项结束滚动-181LVN_ENDSCROLL滚动操作结束时,通知列表视图控件的父窗口。
表项点击链接-184LVN_LINKCLICK通知列表视图控件的父窗口已单击链接。
表项标记文本-187LVN_GETEMPTYMARKUP当控件没有项时,为列表视图控件提供标记文本。NMLVEMPTYMARKUP 结构
表格模块——函数表
中文名字英文名称用法释义
表背景色ListView_BkColor表背景色(控件,颜色)获取或设置表格的背景颜色
表格图像ListViewImage表格图像(控件,格式,图列)获取或设置表格控件的图像列表,格式:0大图,1小图标,2状态
表格项数ListView_ItemCount表格项数(控件,数量)获取或设置表格的所有项数,包括子项
表格读取ListView_GetItem表格读取(控件,项,子项,内容,长度)读取表格指定项和子项内的文字内容;点击表项时,数据偏移12为项(行),16为子项(列);
表格添加ListView_AddItem表格添加(控件,内容,行,列,图)向表格添加或修改子项内容,指定行列和图像
表格删除ListView_DeleteItem表格删除(控件,项)删除表格控件的指定项
表格清除ListView_DeleteAllItems表格清除(控件)清除表格控件的所有项
表格回调ListView_Callback掩码=表格回调(控件)获取或设置表格控件的回调掩码
表格查找ListView_FindItem表格查找(控件,内容,起始)返回查到的项序号,从头查找起始值要写负1
表头添加ListView_InsertItem表头添加(控件,列名,序号,宽度)向表格控件添加表头;宽度-1是自动调整列宽,-2是适应标题内容
表头删除ListView_DeleteColumn表头删除(控件,序号)删除表格已添加的表头
表头宽度ListView_ColumnWidth表头宽度(控件,序号,宽度)获取或设置指定表头的宽度
表格字色ListView_TextColor表格字色(控件,颜色)获取或设置表格的文字颜色
表字背色ListView_TextBkColor表字背色(控件,颜色)获取或设置表格的文字背景颜色
表格顶项ListView_GetTopIndex表格顶项(控件)获取列表或报表视图中最顶部可见项的索引。
表格行数ListView_GetCountPerPage表格行数(控件)计算可以垂直容纳在列表视图控件的可见区域中的项数。
表格原点ListView_GetOrigin表格原点(控件,原点)获取列表视图控件的当前坐标视图原点。
表格更新ListView_Update表格更新(控件,项)汇报更新列表视图项。
表格状态ListView_SetItemState表格状态(控件,项,掩码,状态)获取或更改列表视图控件中项的状态。
表格选中ListView_GetCheckState表格选中(控件,项)确定是否选择了列表视图控件中的项。
表格文字ListView_ItemText表格文字(控件,项,子项,内容)读取或设置表格视图控件指定项和子顶的文字内容;点击表项时,数据偏移12为项(行),16为子项(列);
表格排序ListView_SortItems表格排序(控件,函数,参数)使用应用程序定义的比较函数对列表视图控件的项进行排序。可指定参数传递给比较函数的第三个参数
表项移动ListView_SetItemPosition32表项移动(控件,项,左,项)将项移动到列表视图控件中的指定位置, (图标视图或小图标视图) 。
表格选数ListView_GetSelectedCount表格选数(控件)获取表格列表视图控件中所选项的数目。
表格间距ListView_GetItemSpacing表格间距(控件,小图)获取列表视图控件中项之间的间距。 小图标模式为真,大图模式为假
表格搜索ListView_GetISearchString表格搜索(控件,内容)在列表视图中键入字符,将字符追加到搜索内容缓冲区
表格图距ListView_SetIconSpacing表格图距(控件,宽,高)将列表视图控件中图标之间的间距设置为图标视图样式。
表格扩展ListViewExtStyle样式=表格扩展(控件)获取或设置表格扩展样式:1显表格线,2子项带图,4显复选框,8热点选择,$10拖放列头,$20选择整行,$40单击激活,$80双击激活,$100平面滚条
表格提示ListView_ToolTips表格提示(控件,项,子项,内容)设置获取表格提示内容,文字为宽字符编码

标头框——通知消息:


程序段 公共事件(数据)
整数 窗口=数据&,参数=.&4,事件=.&8,项=.&12,方向=.&16;
判断(事件)为 标头已被改变{项就是从零开始的索引}
为 标头单击项目{方向:0向左,1向右,2中间}
处理窗口(窗口,控件事件,参数,数据) 结束

中文名字常量数值英文名称释义
控件单击右键-5NM_RCLICK用户在控件上点击了鼠标右键
控件自行绘制-12NM_CUSTOMDRAW通知控件的父窗口有关自定义绘制操作的信息。
控件释放鼠标-16NM_RELEASEDCAPTURE控件要释放鼠标捕捉
标头正在改变-300HDN_ITEMCHANGINGA有个项目正被改变
标头已被改变-301HDN_ITEMCHANGEDA有个项目已经被改变
标头单击项目-302HDN_ITEMCLICKA用户单击项目
标头双击项目-303HDN_ITEMDBLCLICKA用户双击项目
标头双击分割-305HDN_DIVIDERDBLCLICKA用户双击控件的分隔线区域。
标头拖起分割-306HDN_BEGINTRACKA用户已开始拖动控件中的分隔符
标头拖完分割-307HDN_ENDTRACKA用户已完成拖动分隔符。
标头拖动分割-308HDN_TRACKA用户正在拖动标题控件中的分隔符
标头显示回调-309HDN_GETDISPINFOA有关回调标头项的信息
标头开始拖动-310HDN_BEGINDRAG对其某个项开始拖动操作
标头结束拖动-311HDN_ENDDRAG拖动操作对其某个项结束
标头筛选更改-312HDN_FILTERCHANGE通知标头控件的父窗口正在更改或编辑标头控件筛选器的属性。
标头筛选点击-313HDN_FILTERBTNCLICK单击筛选器按钮或响应 HDM_SETITEM 消息
标头编辑筛选-314HDN_BEGINFILTEREDIT通知标头控件的父窗口,筛选器编辑已开始。
标头改完筛选-315HDN_ENDFILTEREDIT通知标头控件的父窗口筛选器编辑已结束。
标头单击图标-316HDN_ITEMSTATEICONCLICK通知标头控件的父窗口用户单击了项的状态图标。
标头选中项目-317HDN_ITEMKEYDOWN通知标头控件的父窗口,已按下某个键并选中某个项。
标头单击箭头-318HDN_DROPDOWN单击标题控件上的下拉箭头时,由标头控件发送到其父控件。
标头单击溢出-319HDN_OVERFLOWCLICK单击标头的溢出按钮时,由标头控件发送到其父级。
标头正在变更-320HDN_ITEMCHANGINGW有个项目正被改变
标头已被变更-321HDN_ITEMCHANGEDW有个项目已经被改变
标头项目单击-322HDN_ITEMCLICKW用户单击项目
标头项目双击-323HDN_ITEMDBLCLICKW用户双击项目
标头分割双击-325HDN_DIVIDERDBLCLICKW用户双击控件的分隔线区域。
标头分割拖起-326HDN_BEGINTRACKW用户已开始拖动控件中的分隔符
标头分割拖完-327HDN_ENDTRACKW用户已完成拖动分隔符。
标头分割拖动-328HDN_TRACKW用户正在拖动标题控件中的分隔符
标头回调显示-329HDN_GETDISPINFOW有关回调标头项的信息

标头框——发送消息:

中文名字英文名称数值释义
标头获取项数HDM_GETITEMCOUNT0x1200获取标头控件中项的计数。③参数:0;④数据:0
标头插入新项HDM_INSERTITEMA0x1201将新项插入标题控件。③参数:序号;④数据:HDITEM 结构
标头插入项目HDM_INSERTITEMW0x120A将新项插入标题控件。③参数:序号;④数据:HDITEM 结构
标头删除项目HDM_DELETEITEM0x1202从标题控件中删除项。③参数:序号;④数据:0
标头项目信息HDM_GETITEMA0x1203获取有关标头控件中的项的信息。③参数:序号;④数据:HDITEM 结构
标头取项信息HDM_GETITEMW0x120B获取有关标头控件中的项的信息。③参数:序号;④数据:HDITEM 结构
标头修改项目HDM_SETITEMA0x1204设置有关标头控件中的项的信息。③参数:序号;④数据:HDITEM 结构
标头改项信息HDM_SETITEMW0x120C设置有关标头控件中的项的信息。③参数:序号;④数据:HDITEM 结构
标头布局信息HDM_LAYOUT0x1205检索用于设置父窗口目标矩形内标题控件的大小和位置的信息。③参数:0;④数据: HDLAYOUT 结构
标头点项测试HDM_HITTEST0x1206测试点以确定哪个标头项位于指定点。③参数:0;④数据: HDHITTESTINFO 结构
标头项目边框HDM_GETITEMRECT0x1207获取标题控件中给定项的边框。③参数:序号;④数据: 矩形类
标头分配图表HDM_SETIMAGELIST0x1208将图像列表分配给现有标头控件。 ③参数:0普通,1状态图;④数据: 图像列表
标头获取图表HDM_GETIMAGELIST0x1209获取为现有标头控件设置的图像列表的句柄。 ③参数:0普通,1状态图;④数据:0
标头获取序号HDM_ORDERTOINDEX0x120F根据项在标头控件中(从0递增)的顺序检索项的索引值。 ③参数:顺序;④数据:0
标头创建拖图HDM_CREATEDRAGIMAGE0x1210创建项图像的半透明版本,用作拖动图像。 ③参数:序号;④数据:0
标头获取顺序HDM_GETORDERARRAY0x1211获取标题控件中项的当前从左到右的顺序。 ③参数:项数;④数据:数组
标头设置顺序HDM_SETORDERARRAY0x1212设置标题控件中项的当前从左到右的顺序。 ③参数:项数;④数据:数组
标头拖放热点HDM_SETHOTDIVIDER0x1213更改标题项之间的分隔线的颜色,以指示外部拖放操作的目标。 ③参数:真=坐标,假=索引;④数据:坐标、分隔线索引
标头设置图宽HDM_SETBITMAPMARGIN0x1214设置现有标头控件中位图的边距的宽度(以像素为单位)。 ③参数:宽度;④数据:0
标头获取图宽HDM_GETBITMAPMARGIN0x1215获取标题控件的位图边距的宽度。 ③参数:0;④数据:0
标头筛选间隔HDM_SETFILTERCHANGETIMEOUT0x1216设置筛选器属性发生更改与发布 标头筛选更改 通知之间的超时间隔。 ③参数:0;④数据:毫秒
标头编辑焦点HDM_EDITFILTER0x1217当筛选器按钮具有焦点时,将输入焦点移动到编辑框。 ③参数:编辑的列;④数据:真=放弃,假=接受
标头清筛选器HDM_CLEARFILTER0x1218清除给定标头控件的筛选器。 ③参数:筛选器列;④数据:0
标头分按钮框HDM_GETITEMDROPDOWNRECT0x1219获取具有样式HDF_SPLITBUTTON的标题项的拆分按钮 的边框。 ③参数:序号;④数据:矩形类
标头溢按钮框HDM_GETOVERFLOWRECT0x121A获取在标头控件上设置 自绘事件 样式且溢出按钮可见时溢出按钮的边框。 ③参数:0;④数据:矩形类
标头获取选项HDM_GETFOCUSEDITEM0x121B获取具有焦点的标头控件中的项。 ③参数:0;④数据:0
标头设置选项HDM_SETFOCUSEDITEM0x121C获取在标头控件上设置 自绘事件 样式且溢出按钮可见时溢出按钮的边框。 ③参数:0;④数据:0
控件设置宽字0x2005CCM_SETUNICODEFORMAT设置控件的 Unicode 字符格式标志。③参数:是否宽字;④数据:0;
控件获取宽字0x2006CCM_GETUNICODEFORMAT获取控件的 Unicode 字符格式标志。③参数:0;④数据:0;

标头框——控件样式:

中文名字英文名称数值释义
按钮样式HDS_BUTTONS2控件中的每个项看起来和行为都类似于一个按钮。 当用户单击标头控件中的项时,应用程序执行任务时,此样式非常有用。 例如,应用程序可以根据用户单击的项以不同的方式对列中的信息进行排序。
拖放调整HDS_DRAGDROP允许对标题项进行拖放重新排序。
筛选器栏HDS_FILTERBAR0x100将筛选器栏作为标准标头控件的一部分。 此栏允许用户方便地将筛选器应用于显示。 调用 HDM_LAYOUT 将生成控件的新大小,并导致列表视图更新。
平面样式HDS_FLAT0x200版本 6.0 及更高版本。 当操作系统在经典模式下运行时,使标头控件绘制平整。
拖动显列HDS_FULLDRAG0x80使标题控件显示列内容,即使用户调整列的大小。
高度为零HDS_HIDDEN8指示要隐藏的标头控件。 此样式不会隐藏控件。 相反,当你将HDM_LAYOUT消息发送到具有HDS_HIDDEN样式的标头控件时,该控件在 WINDOWPOS 结构的 cy 成员中返回零。 然后,通过将控件的高度设置为零来隐藏控件。 如果要将控件用作信息容器而不是可视控件,这非常有用。
水平显示HDS_HORZ0创建具有水平方向的标题控件。
允许热点HDS_HOTTRACK4启用热跟踪。
放复选框HDS_CHECKBOXES0x400版本 6.00 及更高版本。 允许在标题项上放置复选框。 有关详细信息,请参阅 HDITEM 的 fmt 成员。
禁拖分割HDS_NOSIZING0x800版本 6.00 及更高版本。 用户无法拖动标题控件上的分隔符。
自绘事件HDS_OVERFLOW0x1000版本 6.00 及更高版本。 当并非所有项都可以显示在标题控件的矩形中时,将显示按钮。 单击后,此按钮将发送 HDN_OVERFLOWCLICK 通知。

树表框——通知消息:


1.可以在模块列表里选中树表模块,使用图标的话还需要选中图像列表
整数 小图=图像列表(17,16,1) //创建17个16*16的图像列表,最后参数1是ico格式图标
整数 序号=0,项目;文本 内容[16] //申请三个变量用来循环添加表项
树表图像(树表1,0,小图) //指定树表1的图像列表为“小图”,参数0是普通图像;树表只能用小图标
项目=树表添加(树表1,"好友",0,16,0) //添加一个根节点,名称后面写0;然后是图标指定16,最后关联可以存储一个数值
循环{内容="测试"+序号 //循环增加序号,把它转换成文本进行拼接
树表添加(树表1,内容,项目,序号,序号) //内容后面是项目,在刚才的根节点中插入子节点,图标是递增的序号,最后序号是关联值
序号++}(序号=15) //序号从0增加到15为止,也就是添加15个子节点
2.添加的关联值可以在点击子项目的时候得到这个数值,树表的项是对象的内存地址,通过它可以获取项目内容等信息
程序段 公共事件(数据)
整数 窗口=数据&,参数=.&4,事件=.&8,项=.&60,关联=.&92;
判断(事件)为 树项选择正改{树控件项目的选择将改变}
为 树项选择已改{内容=树表文字(窗口,项)}//获取当前选中项的文字,关联是该项定义的数值,如QQ号
处理窗口(窗口,控件事件,参数,数据) 结束

中文名字常量数值英文名称释义
控件单击左键-2NM_CLICK用户在控件上点击了鼠标左键
控件双击左键-3NM_DBLCLK用户在控件上双击了鼠标左键
控件按下回车-4NM_RETURN控件获得键盘焦点并按下回车键
控件单击右键-5NM_RCLICK用户在控件上点击了鼠标右键
控件双击右键-6NM_RDBLCLK用户在控件上双击了鼠标右键
控件得到焦点-7NM_SETFOCUS控件收到输入焦点
控件失去焦点-8NM_KILLFOCUS用户失去输入焦点
控件自行绘制-12NM_CUSTOMDRAW通知控件的父窗口有关自定义绘制操作的信息。
控件设置光标-17NM_SETCURSOR控件响应消息要设置光标
树表图像更改-24NM_TVSTATEIMAGECHANGING由树视图控件发送到其状态图像正在更改的父窗口。④数据:NMTVSTATEIMAGECHANGING 结构
树项选择正改-401TVN_SELCHANGINGA用户对树控件项目的选择将改变
树项选择已改-402TVN_SELCHANGEDA用户已改变树控件项目的选择
树项单击项目-403TVN_GETDISPINFOA需要得到树控件的某结点信息
树项双击项目-404TVN_SETDISPINFOA通知更新树控件项目的信息
树项即将开合-405TVN_ITEMEXPANDINGA树控件某结点将被展开或收缩
树项已经开合-406TVN_ITEMEXPANDEDA树控件某结点已被展开或收缩
树项左键拖起-407TVN_BEGINDRAGA树控件中鼠标左键拖放开始
树项右键拖起-408TVN_BEGINRDRAGA树控件中鼠标右键拖放开始
树项删除项目-409TVN_DELETEITEMA删除树控件中的项目
树项修改标签-410TVN_BEGINLABELEDITA开始编辑项目的标签
树项改完标签-411TVN_ENDLABELEDITA用户完成编辑项目的标签
树项键盘按下-412TVN_KEYDOWN用户在树控件中按下了某键盘按键
树项显示文字-413TVN_GETINFOTIPA请求显示结点信息或提示文字
树项请求显示-414TVN_GETINFOTIPW请求显示结点信息或提示文字
树项单击开合-415TVN_SINGLEEXPAND用户使用鼠标单击打开或关闭树控件项目
树项属性正改-416TVN_ITEMCHANGINGA通知树视图控件的父窗口项属性即将更改。
树项属性将改-417TVN_ITEMCHANGINGW通知树视图控件的父窗口项属性即将更改。
树项属性已改-418TVN_ITEMCHANGEDA通知树视图控件的父窗口项属性已更改。
树项属性改变-419TVN_ITEMCHANGEDW通知树视图控件的父窗口项属性已更改。
树项选择将改-450TVN_SELCHANGINGW用户对树控件项目的选择将改变
树项选择改变-451TVN_SELCHANGEDW用户已改变树控件项目的选择
树项项目单击-452TVN_GETDISPINFOW需要得到树控件的某结点信息
树项项目双击-453TVN_SETDISPINFOW通知更新树控件项目的信息
树项准备开合-454TVN_ITEMEXPANDINGW树控件某结点将被展开或收缩
树项完成开合-455TVN_ITEMEXPANDEDW树控件某结点已被展开或收缩
树项拖起左键-456TVN_BEGINDRAGW树控件中鼠标左键拖放开始
树项拖起右键-457TVN_BEGINRDRAGW树控件中鼠标右键拖放开始
树项条目删除-458TVN_DELETEITEMW删除树控件中的项目
树项标签修改-459TVN_BEGINLABELEDITW开始编辑项目的标签
树项标签改完-460TVN_ENDLABELEDITW用户完成编辑项目的标签
树表模块——函数表
中文名字英文名称用法释义
树表添加TreeView_InsertItem树表添加(控件,内容,项目,图标,关联)给树表添加项,根节点数值写0
树表删除TreeView_DeleteItem树表删除(控件,项目)从树视图控件中删除项及其所有子项。
树表清除TreeView_DeleteAllItems树表清除(控件,项目)从树视图控件中删除所有项。
树表展开TreeView_Expand树表展开(控件,项目,方式)方式:1折叠;2展开;3开合切换;0x4000部分展开;0x8000折叠并删除子项;
树表数量TreeView_GetCount树表数量(控件)检索树视图控件中的项计数。
树表缩进TreeView_Indent像素=树表缩进(控件)获取或设置子项相对于其父项缩进的数量(以像素为单位)。
树表图像TreeView_ImageList树表图像(控件,方式,图像列表)获取或设置树表视图控件的图像列表,方式:0普通图像;2状态图像
树表关系TreeView_GetNextItem树表关系(控件,关系,项目)获取与指定项承载关系的树视图项。关系:0根节点;1下一项;2前一项;3父项;4项的首个子项;5可见首项;
6下个可见项;7项的可见首项;8拖放目标项;9选中项;10最后可见项
树表选中TreeView_Select树表选中(控件,关系,项目)选中与指定项承载关系的树视图项。关系同树表关系
树表文字TreeView_GetItem内容=树表文字(控件,项目)获取或设置树表文字内容;获取时返回关联值,内容可选;树项改变时,数据偏移60为项目,92为关联,20为旧项目,52为旧关联;
树表拖图TreeView_CreateDragImage树表拖图(控件,项目)为树视图控件中的指定项创建拖动位图的图像列表。
树表升序TreeView_SortChildren树表升序(控件,递归,项目)对树表子项文字进行升序排列;递归为真对所有子项排序,为假只为直属子项排序
树表可见TreeView_EnsureVisible树表可见(控件,项目)确保树视图项可见,如有必要,请展开父项或滚动树视图控件。
树表排序TreeView_SortChildrenCB树表排序(控件,项目,回调,参数)用程序定义的回调函数进行排序
树表停改TreeView_EndEditLabelNow树表停改(控件,取消)结束对树视图项标签的编辑。取消为真不保存,为假保存修改
树表搜索TreeView_GetISearchString树表搜索(控件,内容)在树表视图中键入字符,将字符追加到搜索内容缓冲区
树表提示TreeView_SetToolTips提示=树表提示(控件)获取或设置树视图控件的子工具提示控件。
树表标记TreeView_SetInsertMark树表标记(控件,项目,前后)设置树视图控件中的插入标记。前后非零插入项目之后,为零在项目之前
树表高度TreeView_SetItemHeight高度=树表高度(控件)获取或设置树视图项的高度。以像素为单位
树表背色TreeView_SetBkColor颜色=树表背色(控件)获取或设置树视图项的背景颜色。
树表字色TreeView_SetTextColor颜色=树表字色(控件)获取或设置树视图项的文字颜色。
树表记色TreeView_SetInsertMarkColor颜色=树表记色(控件)获取或设置树视图插入标记的颜色。

工具提示——通知消息:


中文名字常量数值英文名称释义
控件自行绘制-12NM_CUSTOMDRAW通知控件的父窗口有关自定义绘制操作的信息。
提示显示信息-520TTN_GETDISPINFOA检索显示工具提示窗口所需的信息
提示即将显示-521TTN_SHOW即将显示工具提示控件
提示即将隐藏-522TTN_POP工具提示即将隐藏。
提示点击链接-523TTN_LINKCLICK单击批注框工具提示中的文本链接时发送。
提示取得信息-530TTN_GETDISPINFOW检索显示工具提示窗口所需的信息
发送消息——常数表
提示激活控件0x401TTM_ACTIVATE激活或停用工具提示控件。③参数:真=激活,假=停用;④数据:0
提示设置延时0x403TTM_SETDELAYTIME设置初始等待时间3、弹出持续时间2和重新显示持续时间1。③参数:0默认,1间隔,2保持,3初始;④数据:毫秒
提示添加信息0x404TTM_ADDTOOLA向工具提示控件注册工具。③参数:0;④数据:提示信息类
提示删除信息0x405TTM_DELTOOLA从工具提示控件中删除工具。③参数:0;④数据:提示信息类
提示设置边界0x406TTM_NEWTOOLRECTA设置工具的新边界矩形。③参数:0;④数据:提示信息类
提示鼠标事件0x407TTM_RELAYEVENT将鼠标消息传递给工具提示控件进行处理。③参数:0;④数据:消息类
提示获取信息0x408TTM_GETTOOLINFOA检索为工具维护的相关信息。③参数:0;④数据:提示信息类
提示设置信息0x409TTM_SETTOOLINFOA设置为工具维护的相关信息。③参数:0;④数据:提示信息类
提示点框信息0x40ATTM_HITTESTA测试点在指定矩形内的信息。③参数:0;④数据:提示点框类
提示获取文本0x40BTTM_GETTEXTA检索为工具维护的相关信息。③参数:字数;④数据:提示信息类
提示设置文本0x40CTTM_UPDATETIPTEXTA设置工具提示文本。③参数:0;④数据:提示信息类
提示获取计数0x40DTTM_GETTOOLCOUNT检索维护的工具计数。③参数:0;④数据:0
提示当前显示0x40ETTM_ENUMTOOLSA获取当前显示文本的工具。③参数:序号;④数据:提示信息类
提示当前信息0x40FTTM_GETCURRENTTOOLA检索当前工具的信息。③参数:0;④数据:提示信息类
提示点外窗口0x410TTM_WINDOWFROMPOINT允许光标下方窗口以外的提示。③参数:0;④数据:坐标类
提示激活跟踪0x411TTM_TRACKACTIVATE激活或停用跟踪工具提示。③参数:真=激活,假=停用;④数据:提示信息类
提示跟踪位置0x412TTM_TRACKPOSITION设置跟踪工具提示的位置。③参数:0;④数据:x/y
提示改背景色0x413TTM_SETTIPBKCOLOR设置提示窗口的背景色。③参数:颜色;④数据:0
提示改文字色0x414TTM_SETTIPTEXTCOLOR设置提示窗口的文本颜色。③参数:颜色;④数据:0
提示获取延时0x415TTM_GETDELAYTIME设置初始等待时间3、弹出持续时间2和重新显示持续时间1。③参数:0默认,1间隔,2保持,3初始;④数据:0
提示取背景色0x416TTM_GETTIPBKCOLOR检索窗口的背景颜色。③参数:0;④数据:0
提示取文字色0x417TTM_GETTIPTEXTCOLOR检索窗口的文本颜色。③参数:0;④数据:0
提示设置宽度0x418TTM_SETMAXTIPWIDTH设置窗口的最大宽度。③参数:0;④数据:宽度,-1不限
提示获取宽度0x419TTM_GETMAXTIPWIDTH获取窗口的最大宽度。③参数:0;④数据:0
提示设置边距0x41ATTM_SETMARGIN设置窗口与文本的边框距离。③参数:0;④数据:矩形类
提示获取边距0x41BTTM_GETMARGIN设置窗口与文本的边框距离。③参数:0;④数据:矩形类
提示移除显示0x41CTTM_POP从视图中移除显示的工具提示窗口。③参数:0;④数据:0
提示更新显示0x41DTTM_UPDATE强制重绘当前工具提示。③参数:0;④数据:0
提示控件大小0x41ETTM_GETBUBBLESIZE返回控件的宽度和高度。③参数:0;④数据:提示信息类
提示计算矩形0x41FTTM_ADJUSTRECT从窗口或文本矩形中计算其文本显示矩形。③参数:真=文本,假=窗口;④数据:矩形类
提示标题图标0x420TTM_SETTITLEA向工具提示添加标准图标和标题字符串。③参数:图标;④数据:标题;0无图标,1信息,2警告,3错误,4大信息,5大警告,6大错误
提示图标标题0x421TTM_SETTITLEW向工具提示添加标准图标和标题字符串。③参数:图标;④数据:标题;0无图标,1信息,2警告,3错误,4大信息,5大警告,6大错误
提示鼠标显示0x422TTM_POPUP显示在最后一条鼠标消息的坐标处。③参数:0;④数据:0
提示获取标题0x423TTM_GETTITLE检索有关工具提示控件标题的信息。③参数:0;④数据:提示标题类
提示添加数据0x432TTM_ADDTOOLW向工具提示控件注册工具。③参数:0;④数据:提示信息类
提示删除数据0x433TTM_DELTOOLW从工具提示控件中删除工具。③参数:0;④数据:提示信息类
提示设置边框0x434TTM_NEWTOOLRECTW设置工具的新边界矩形。③参数:0;④数据:提示信息类
提示获得信息0x435TTM_GETTOOLINFOW检索为工具维护的相关信息。③参数:0;④数据:提示信息类
提示修改信息0x436TTM_SETTOOLINFOW设置为工具维护的相关信息。③参数:0;④数据:提示信息类
提示点内信息0x437TTM_HITTESTW测试点在指定矩形内的信息。③参数:0;④数据:提示点框类
提示获取文字0x438TTM_GETTEXTW检索为工具维护的相关信息。③参数:字数;④数据:提示信息类
提示设置文字0x439TTM_UPDATETIPTEXTW设置工具提示文本。③参数:0;④数据:提示信息类
提示当前内容0x43ATTM_ENUMTOOLSW获取当前显示文本的工具。③参数:序号;④数据:提示信息类
提示现在信息0x43BTTM_GETCURRENTTOOLW检索当前工具的信息。③参数:0;④数据:提示信息类
提示信息类——结构体定义:
中文名字英文名称长度作用解释
提示信息类TTTOOLINFOA48包含有关工具提示控件中的工具的信息。
提示信息类——成员表
中文英文类型作用解释
大小cbSize整数此结构的大小(以字节为单位)。
标志uFlags整数控制工具提示显示的标志。1标识为控件窗口;2提示窗口居中(控件下方);4文本反向显示;0x10截获子类窗口消息;
0x20定位到控件旁边(跟踪位置);0x80定位到跟踪位置的绝对坐标;0x100将鼠标事件消息转发到父窗口;0x1000分析文本中的链接
窗口hwnd整数包含该工具的窗口的句柄。
标识uId整数工具的应用程序定义的标识符(控件编号)。
rect.left整数工具的边框坐标。相对于窗口工作区的左上角。
rect.top整数工具的边框坐标。相对于窗口工作区的左上角。
rect.right整数工具的边框坐标。相对于窗口工作区的左上角。
rect.bottom整数工具的边框坐标。相对于窗口工作区的左上角。
实例hinst整数包含工具字符串资源的实例的句柄。
文字lpszText整数指向包含工具文本的缓冲区的指针,或包含文本的字符串资源的标识符。
定义lParam整数版本4.70及更高版本。与工具关联的32位应用程序定义值。
预留lpReserved整数保留。必须设置为0。
提示点框类——结构体定义:
中文名字英文名称长度作用解释
提示点框类TTHITTESTINFOA60包含用于确定某个点是否位于指定工具的边框中的信息。如果在,则结构将接收有关该工具的信息。
提示点框类——成员表
中文英文类型作用解释
窗口hwnd整数使用指定工具的工具或窗口的句柄。
左边pt.x整数要测试的点的客户端坐标的水平位置。
顶边pt.y整数要测试的点的客户端坐标的垂直位置。
提示ti提示信息类如果指定的点位于指定窗口的工具中,则此结构接收有关该工具的信息。
提示标题类——结构体定义:
中文名字英文名称长度作用解释
提示标题类TTGETTITLE16提供有关工具提示控件标题的信息。
提示标题类——成员表
中文英文类型作用解释
大小dwSize整数此结构的大小(以字节为单位)。
图标uTitleBitmap整数指定工具提示图标的序号
字数cch整数指定标题中的字符数的大小
标题pszTitle整数指向包含标题的宽字符串的指针。

选项卡——通知消息:


程序段 公共事件(数据)
整数 窗口=数据&,参数=.&4,事件=.&8,标识=.&12,数值=.&16,左边=.&20,顶边=.&24;
判断(事件)为 控件单击左键{标题是特定于控件的项标识符}
为 控件双击左键{数值是特定于控件的项数据}
为 控件单击右键{左边和顶边是鼠标位置}
处理窗口(窗口,控件事件,参数,数据)
结束

程序段 公共事件(数据)
整数 窗口=数据&,参数=.&4,事件=.&8,键码=.&12,扫码=.&16;
判断(事件)为 选卡键盘按下{键码是虚拟密钥代码}
为 选卡键盘按下{扫码是扫描代码、扩展键标志、上下文代码}
处理窗口(窗口,控件事件,参数,数据)
结束

中文名字常量数值英文名称释义
控件单击左键-2NM_CLICK用户在控件上点击了鼠标左键
控件双击左键-3NM_DBLCLK用户在控件上双击了鼠标左键
控件单击右键-5NM_RCLICK用户在控件上点击了鼠标右键
控件双击右键-6NM_RDBLCLK用户在控件上双击了鼠标右键
控件释放鼠标-16NM_RELEASEDCAPTURE控件要释放鼠标捕捉
选卡键盘按下-550TCN_KEYDOWN用户已按下某键
选卡已被改变-551TCN_SELCHANGE选项卡的当前选择已被改变
选卡将要改变-552TCN_SELCHANGING选项卡的当前选择将要改变
选卡放置目标-553TCN_GETOBJECT请求放置目标对象
选卡焦点更改-554TCN_FOCUSCHANGE按钮焦点已更改。
发送消息——常数表
选卡获取图表0x1302TCM_GETIMAGELIST检索与选项卡控件关联的图像列表。③参数:0;④数据:0
选卡设置图表0x1303TCM_SETIMAGELIST将图像列表分配给选项卡控件。③参数:0;④数据:图表
选卡获取数量0x1304TCM_GETITEMCOUNT检索选项卡控件中选项卡的数目。③参数:0;④数据:0
选卡获取项目0x1305TCM_GETITEMA检索选项卡的属性信息。③参数:序号;④数据:选卡项目类
选卡设置项目0x1306TCM_SETITEMA设置选项卡的部分或全部属性。③参数:序号;④数据:选卡项目类
选卡插入项目0x1307TCM_INSERTITEMA在选项卡控件中插入新选项卡。③参数:序号;④数据:选卡项目类
选卡删除项目0x1308TCM_DELETEITEM从选项卡控件中移除项。③参数:序号;④数据:0
选卡清除项目0x1309TCM_DELETEALLITEMS从选项卡控件中移除所有项。③参数:0;④数据:0
选卡获取边框0x130ATCM_GETITEMRECT检检索选项卡控件中选项卡的边框。③参数:序号;④数据:矩形类
选卡获取选项0x130BTCM_GETCURSEL确定选项卡控件中当前选定的选项卡。③参数:0;④数据:0
选卡设置选项0x130CTCM_SETCURSEL在选项卡控件中选择一个选项卡。③参数:序号;④数据:0
选卡获取点位0x130DTCM_HITTEST确定哪个选项卡位于指定的屏幕位置。③参数:0;④数据:选卡点框类
选卡定义长度0x130ETCM_SETITEMEXTRA设置每个选项卡定义数据保留的字节数(默认4)。③参数:数值;④数据:0
选卡计算边框0x1328TCM_ADJUSTRECT计算选项卡控件的显示区域或窗口矩形。③参数:真=窗口,假=区域;④数据:矩形类
选卡设置大小0x1329TCM_SETITEMSIZE设置选项卡的宽度和高度。③参数:0;④数据:宽/高
选卡移除图像0x132ATCM_REMOVEIMAGE从选项卡控件的图像列表中移除图像。③参数:序号;④数据:0
选卡设置边距0x132BTCM_SETPADDING设置每个选项卡图标和标签周围的空间大小。③参数:0;④数据:宽/高
选卡获取行数0x132CTCM_GETROWCOUNT检索选项卡控件中选项卡的当前行数。③参数:0;④数据:0
选卡获取控件0x132DTCM_GETTOOLTIPS检索与选项卡控件关联的工具提示控件的句柄。③参数:0;④数据:0
选卡设置控件0x132ETCM_SETTOOLTIPS将工具提示控件分配给选项卡控件。③参数:控件;④数据:0
选卡获取焦点0x132FTCM_GETCURFOCUS返回选项卡控件中具有焦点的项的索引。③参数:0;④数据:0
选卡设置焦点0x1330TCM_SETCURFOCUS将焦点设置为选项卡控件中的指定选项卡。③参数:序号;④数据:0
选卡最小宽度0x1331TCM_SETMINTABWIDTH设置选项卡控件中项的最小宽度。③参数:0;④数据:宽度,-1默认
选卡重置项目0x1332TCM_DESELECTALL重置选项卡控件中的项。③参数:真=选中除外,假=全部;④数据:0
选卡突出项目0x1333TCM_HIGHLIGHTITEM设置选项卡项的突出显示状态。③参数:序号;④数据:真=突出,假=不突出
选卡设置扩展0x1334TCM_SETEXTENDEDSTYLE设置选项卡控件将使用的扩展样式。③参数:选项0=全改;④数据:样式,1绘制分隔符,2支持拖放
选卡获取扩展0x1335TCM_GETEXTENDEDSTYLE检索当前用于选项卡控件的扩展样式。③参数:0;④数据:0
选卡读取项目0x133CTCM_GETITEMW检索选项卡的属性信息。③参数:序号;④数据:选卡项目类
选卡修改项目0x133DTCM_SETITEMW设置选项卡的部分或全部属性。③参数:序号;④数据:选卡项目类
选卡穿插项目0x133ETCM_INSERTITEMW在选项卡控件中插入新选项卡。③参数:序号;④数据:选卡项目类
控件设置宽字0x2005CCM_SETUNICODEFORMAT设置控件的 Unicode 字符格式标志。③参数:是否宽字;④数据:0;
控件获取宽字0x2006CCM_GETUNICODEFORMAT获取控件的 Unicode 字符格式标志。③参数:0;④数据:0;
选卡项目类——结构体定义:
中文名字英文名称长度作用解释
选卡项目类TCITEMA28指定或接收选项卡项的属性。
选卡项目类——成员表
中文英文类型作用解释
掩码mask整数指定要检索或设置的成员的值。8=反向显示文本
状态dwState整数 指定项的当前状态。掩码:0x10
状态掩码dwStateMask整数指定状态成员的有效信息。1=项已选定,2项已突出显示
文字pszText整数设置或接收选项卡的文本缓冲区。掩码:1
字长cchTextMax整数指向的缓冲区的大小(以字节为单位)。
图像iImage整数选项卡控件的图像列表中的索引;没有则为-1。掩码:2
定义lParam整数与选项卡控件项关联的应用程序定义数据。掩码:8
选卡点框类——结构体定义:
中文名字英文名称长度作用解释
选卡点框类TCHITTESTINFO12包含有关命中测试的信息。
选卡点框类——成员表
中文英文类型作用解释
左边pt.x整数要测试的点的客户端坐标的水平位置。
顶边pt.y整数要测试的点的客户端坐标的垂直位置。
标志flags整数接收命中测试结果的变量。1=位置不在选项卡上,2在图标上,4在文本上,6在选项卡非图标非文本上

对话框——示例代码:

1.显示消息框 最简单的模式对话框形式是消息框。 使用 信息框 或 消息框 函数创建消息框,指定要显示的消息以及按钮的数量和类型。
系统将创建一个模式对话框,用户关闭消息框后,信息框 或 消息框 将返回一个值,该值标识用户选择用于关闭消息框的按钮。
整数 编号=信息框(0,"中国","你好",[是否取消 + 问号图标]);//弹出一个信息框上面有是、否、取消三个按钮和问号图标
如果(编号=选了是)退出程序判断返回的数值:编号,如果等于选了是,也就是点击了是这个按钮,就退出程序
消息框类 信息(风格=用户图标,实例=$400000,图标=1)消息框类的风格跟信息框的图标样式相同,用户自定义图标要指定实例
32位exe程序的实例可以使用0x400000这个固定的数值,内置模块有一个“程序.实例”,是一个全局整数变量,可以在其它程序段里使用
消息框类也是一个全局变量,初始化赋值只能使用已知数值或者常量,不能使用变量
信息.标题="标题文字";//在程序段内指定消息框显示的标题文字
信息.内容="内容文字";//在程序段内指定消息框显示的内容文字
整数 编号=消息框(信息)弹出消息框,并返回关闭消息框时点击了哪个按钮
延时框是弹出一个消息框,如果用户没有点击,会在指定时间关闭消息框
整数 编号=延时框(0,"中国","你好",[弹出是否 + 惊叹图标],0,5000);//弹出一个延时消息框上面有是、否两个按钮和惊叹图标
最后一个参数指定5000毫秒,就会在5秒之后自动关闭消息框
2.模式对话框
整数 编号=资源模态($400000,1,窗体,@对话消息,0);//加载资源里的1号对话框,指定对话消息这个程序段来接收消息
对话消息跟窗体消息的处理过程十分相似,结束模态对话之后,返回值就会赋值给编号的变量,跟弹出信息框一样,只有关闭对话,才会得到返回值,执行后面的代码
程序段 对话消息(窗口,消息,参数,数据)
判断(消息)为 窗口关闭{结束模态(窗口,0)返回(真)}
为 单击左键{如果(参数=选了确定)
内容=取控件字(窗口,1)
如果(参数=选了取消){
结束模态(窗口,真)返回(真)}}
否则 处理对话(窗口,消息,参数,数据)
结束

3.无模式对话框
整数 对话=资源对话($400000,1,窗体,@对话框消息,0);//加载资源里的1号对话框,指定对话框消息这个程序段来接收消息
桌面.左=对话;//桌面.左是内置模块里用来处理框体消息的全局变量,它可以指定为某个窗口或对话框
窗口程序在创建完窗口和控件后会执行下面这段程序,循环读取系统发来的消息;其中框体消息的第一个参数是"桌面.左"
程序段 读取消息
循环{如果(获取消息(系统,0,0,0)<>0 而且 框体消息(桌面.左,系统)=0)
{翻译消息(系统)分派消息(系统)}}(系统.消息=消息结束)
结束

无模式对话框跟创建窗口一样,执行资源对话函数创建一个对话框,不再等待对话框关闭时得到返回值,直接执行后面的代码
程序段 对话框消息(窗口,消息,参数,数据)
判断(消息)为 窗口关闭{销毁窗口(窗口,0)}
为 单击左键{如果(参数=选了确定)
数值=取控件数(窗口,1)
如果(参数=选了取消)
销毁窗口(窗口)}
否则 处理对话(窗口,消息,参数,数据)
结束

4.在内存中创建模板对话框 应用程序有时会根据正在处理的数据的当前状态来调整或修改对话框的内容。那就需要在内存中动态生成模板来创建对话框。
在以下示例中,应用程序在内存中为模式对话框创建一个模板,其中包含一条消息以及 “确定” 和“ 帮助” 按钮。
在对话模板中,所有字符串(如对话框和按钮标题)都必须是宽字符串。
整数 模板=申请内存(1024)//申请1K内存用来存储模板数据
模板&=0x80C80080//对话框样式为:弹出窗口+细线边框+标题栏+系统菜单+模式对话
.&4=0x80//扩展样式为矮小标题栏
.%8=3//指定控件为三个
.%10=10;.%12=10//指定对话框左边和顶边距为10
.%14=100;.%16=100//指定对话框宽度和高度为100
.&18=0;.&22=?//菜单和类名为空
到宽字符(936,0,"窗口标题",-1,#@26,12)//把ANSI转成宽字符
.&40=0x50000001;.&44=0//按钮风格为子窗口+可见+默认按钮;扩展样式为0
.%48=10;.%50=70//指定对话框左边距为10;顶边距为70
.%52=80;.%54=20//指定对话框宽度为80,高度为20
.&56=1//指定按钮为确定按钮
.&58=0xFFFF//指定为附加元素,控件为系统定义的类
.&62=0x0080//系统定义的按钮类
传送内存(#@66,"`确定",6)//复制宽字符文字
.&72=0//没有创建数据
.&76=0x50000000;.&80=0//按钮风格为子窗口+可见;扩展样式为0
.%84=55;.%86=10//指定对话框左边距为55;顶边距为10
.%88=40;.%90=20//指定对话框宽度为40,高度为20
.&92=150//指定按钮为帮助按钮标识符
.&94=0xFFFF//指定为附加元素,控件为系统定义的类
.&98=0x0080//系统定义的按钮类
传送内存(#@102,"`帮助",6)//复制宽字符文字
.&108=0//没有创建数据
.&112=0x50000000;.&116=0//按钮风格为子窗口+可见;扩展样式为0
.%120=55;.%122=10//指定对话框左边距为55;顶边距为10
.%124=40;.%126=20//指定对话框宽度为40,高度为20
.&128=200//指定按钮为静态文本标识符
.&130=0xFFFF//指定为附加元素,控件为系统定义的类
.&134=0x0082//系统定义的静态类
传送内存(#@138,"`显示文字",10)//复制宽字符文字
.&148=0//没有创建数据
模态对话($400000,模板,窗口,@对话框消息,0) //创建模式对话框
释放内存(模板)//没有创建数据

模式对话框-user32库函数

中文名称英文名称示例作用
资源对话CreateDialogParamA资源对话(实例,模板,窗口,@回调,数据)从对话框模板资源创建一个无模式对话框。
创建对话CreateDialogIndirectParamA创建对话(实例,模板,窗口,@回调,数据)从对话框模板创建一个无模式对话框。
资源模态DialogBoxParamA资源模态(实例,模板,窗口,@回调,数据)从对话框模板资源创建一个模态对话框。
模态对话DialogBoxIndirectParamA模态对话(实例,模板,窗口,@回调,数据)从对话框模板创建一个模态对话框。
处理对话DefDlgProcA处理对话(对话,消息,参数,数据)为程序定义的对话框类的窗口过程提供缺省的消息处理
结束模态EndDialog结束模态(窗口,真)结束模态对话框
字符宽高GetDialogBaseUnits宽高=字符宽高检索系统的对话框基本单位,即系统字体中字符的平均宽度和高度。
控件标识GetDlgCtrlID标识=控件标识(控件)返回指定控件的标识符。
获取控件GetDlgItem控件=获取控件(窗口,标识)通过标识获取窗体上的子窗控件
取控件数GetDlgItemInt数=取控件数(窗口,标识,@成功,符号)获取对话框控件的标题文本,并转换为数字,符号为真包含负数
改控件数SetDlgItemInt改控件数(窗口,标识,数值,符号)用指定数值修改对话框控件的标题文本(数字自动转文本),符号为假不检查"-"符号
取控件字GetDlgItemTextA取控件字(窗口,标识,内容,长度)获取对话框控件的文本和标题
改控件字SetDlgItemTextA改控件字(窗口,标识,内容)修改对话框控件的文本和标题
前后控件GetNextDlgGroupItem前后控件(窗口,起始,向前)检索对话框中指定起始控件之前或后一个控件的句柄。向前为假是向后
前后切换GetNextDlgTabItem前后切换(窗口,起始,向前)检索对话框中指定起始控件之前或后一个具有WS_TABSTOP样式控件的句柄。向前为假是向后
框体消息IsDialogMessageA框体消息(窗口,消息)确定消息是否针对指定的对话框,如果是,则处理消息。
转换像素MapDialogRect转换像素(窗口,矩形)将指定的对话框单位转换为屏幕单位(像素)。将指定矩形中的坐标替换为转换后的屏幕单位
按钮字符MB_GetString按钮字符(标识)返回标准消息框按钮的字符串。
信息框MessageBoxA信息框(窗口,内容,标题,样式)弹出一个消息框,样式通过数字控制
消息框MessageBoxIndirectA消息框(消息框类)弹出一个消息框,样式通过消息类结构控制
延时框MessageBoxTimeoutA延时框(0,内容,标题,样式,0,毫秒)弹出一个消息框,超过设定时间未点击则自动关闭
控件消息SendDlgItemMessageA控件消息(窗口,控件,消息,参数,数据)在对话框中向指定的控件发送消息。
模式对话框——回调函数
中文名称英文名称示例作用 对话回调Dlgproc对话回调(窗口,消息,参数,数据)处理发送到模式或无模式对话框的消息。 消息回调Msgboxcallback消息回调(帮助类)处理发送到模式或无模式对话框的消息。
模式对话框——通知消息
中文名字常量英文名称作用解释
切换焦点$0028WM_NEXTDLGCTL发送本消息给一个对话框程序窗口过程,以便在各控件间设置键盘焦点位置。③参数:0下个控件,非0上个控件;④数据:0参数为方向,非0参数为控件对象
切换控件$0087WM_GETDLGCODE发送本消息给某个与对话框程序关联的控件,系统控制方位键和TAB键使输入进入该控件。③参数:键码;④数据:消息类
窗口初始$0110WM_INITDIALOG在某对话框程序被显示前发送本消息给该对话框程序,通常用本消息对控件进行一些初始化工作和执行其它任务。③参数:控件;④数据:其它
模框空载$0121WM_ENTERIDLE当一个模态对话框或菜单进入空闲状态时,发送本消息给它的所有者,就是在处理完先前的消息后,消息队列为空时。③参数:0对话框,2菜单;④数据:窗口对象
绘制对话$0136WM_CTLCOLORDLG绘制对话框的背景色③参数:设备;④数据:控件
模式对话框——发送消息
中文名字常量英文名称作用解释
对话取号0x400DM_GETDEFID检索对话框的默认按钮控件的标识符。③参数:0;④数据:0
对话改号0x401DM_SETDEFID更改对话框的默认按钮的标识符。③参数:标识符;④数据:0
对话定位0x402DM_GETDEFID重新定位顶级对话框,使其适合桌面区域。③参数:0;④数据:0
消息框类
中文名字英文名称长度作用解释
消息框类MSGBOXPARAMS40包含有显示一个消息(对话框信息)的数据结构。
消息框类——成员表
长度cbSize整数这个结构的大小,以字节计算。
窗口hwndOwner整数对话框所有者窗口的句柄。
实例hInstance整数对话框所有者实例的句柄
内容lpszText整数包含着消息要显示的内容。
标题lpszCaption整数包含着消息的标题,默认用“错误”作为标题。
风格dwStyle整数设置对话框的内容和行为。
图标lpszIcon整数图标资源的ID。字符串或数字
帮助dwContextHelpId整数帮助内容的ID。如果一个Help事件发生,这个值在消息框发送到所有者窗口或回调函数
回调lpfnMsgBoxCallback整数一个处理消息框帮助信息的回调函数的指针。
语言dwLanguageId整数包含在原先定义的按钮中的文本的语言。中文4,英文9。默认是根据系统的语言
对话框类
中文名字英文名称长度作用解释
对话框类DLGTEMPLATE18定义对话框的尺寸和样式。始终是对话框的标准模板中的第一个结构,还指定对话框中的控件数
对话框类 成员表
中文英文类型作用解释
风格style整数对话框的样式。是窗口样式值和对话框样式值的组合
扩展dwExtendedStyle整数窗口的扩展样式。不用于创建对话框,而用它来创建其他类型的窗口。
项目cdit整形对话框中的项数。
x整形对话框左上角的 x 坐标
y整形对话框左上角的 y 坐标
cx整形对话框的宽度。
cy整形对话框的高度
对话项类
中文名字英文名称长度作用解释
对话项类DLGITEMTEMPLATE18定义对话框中控件的尺寸和样式。一个或多个结构与对话框类组合在一起,形成对话框的标准模板。
对话项类 成员表
中文英文类型作用解释
风格style整数对话框的样式。是窗口样式值和对话框样式值的组合
扩展dwExtendedStyle整数窗口的扩展样式。不用于创建对话框,而用它来创建其他类型的窗口。
x整形对话框左上角的 x 坐标
y整形对话框左上角的 y 坐标
cx整形对话框的宽度。
cy整形对话框的高度
标识id整形控件标识符编号。
对话框样式
中文名字英文名称数值作用解释
绝对坐标DS_ABSALIGN1指示对话框的坐标是屏幕坐标。 如果未指定此样式,则坐标为客户端坐标。
对话置顶DS_SYSMODAL2此样式已过时。创建具有 WS_EX_TOPMOST样式的 对话框。 此样式不会阻止用户访问桌面上的其他窗口。
三维外观DS_3DLOOK4已过时。 系统会自动将三维外观应用于应用程序创建的对话框。
兼容字体DS_FIXEDSYS8使对话框使用16位DOS系统兼容的单空间字体。Windows3.0 以下。
忽略错误DS_NOFAILCREATE0x10创建对话框,即使发生错误,例如,如果无法创建子窗口或系统无法为编辑控件创建特殊数据段。
数据内存DS_LOCALEDIT0x20用于16位程序。对话框中的编辑控件从应用程序的数据段分配内存。
对话字体DS_SETFONT0x40指示对话框模板的标题和控件中的文本的字体数据。
系统字体DS_SHELLFONT0x48指示对话框应使用系统字体。扩展对话框模板的 字样 成员必须设置为 MS Shell Dlg。
模式对话DS_MODALFRAME0x80使用模式对话框框架创建一个对话框,该框可通过指定标题栏和窗口菜单结合使用。
不显空载DS_NOIDLEMSG0x100禁止显示 模框空载 消息,否则系统将在显示对话框时发送给对话框所有者的消息。
对话前台DS_SETFOREGROUND0x200将对话框引入前台。无论所有者窗口是否为前台窗口,此样式都是前台的模式对话框。
制表控制DS_CONTROL0x0400允许用户在子对话框的控件窗口中按 Tab 键、使用其快捷键等。
显示居中DS_CENTER0x0800将对话框在包含所有者窗口的监视器工作区中居中。
光标居中DS_CENTERMOUSE0x1000鼠标光标上的对话框居中。
问号标题DS_CONTEXTHELP0x2000在对话框的标题栏中包括问号。单击时光标变成问号。随后单击对话框中的控件将收到帮助消息。
帮助类
中文名字英文名称长度作用解释
帮助类HELPINFO18包含有关已为其请求上下文相关帮助的项的信息。
帮助类 成员表
中文英文类型作用解释
大小cbSize整数结构大小(以字节为单位)。
分类iContextType整数请求帮助的上下文类型。1窗口,2菜单
标识iCtrlId整数窗口控件或菜单项的标识符。
子项hItemHandle整数子窗口控件或关联菜单的标识符。
编号dwContextId整数窗口或控件的帮助上下文标识符。
左边MousePos.x整数包含鼠标光标的屏幕坐标的左边位置。
顶边MousePos.y整数包含鼠标光标的屏幕坐标的顶边位置。

工具栏——通知消息:

工具栏是包含一个或多个按钮的控件。用户单击每个按钮时,都会向父窗口发送一条命令消息。
通常,工具栏中的按钮对应于应用程序菜单项,为用户另外提供了一种更直接的方式来访问应用程序命令。

以下屏幕截图显示了一个窗口,其中包含用于文件操作的简单工具栏。 应用程序已启用视觉样式。
“保存”按钮是“热”的,因为拍摄屏幕截图时光标悬停在它上方。 控件的实际外观因操作系统和用户选择的主题而异。

指定工具栏大小和位置
如果使用 建工具栏 创建工具栏,则使用 函数可以指定工具栏的高度和宽度(以像素为单位)。
不建议使用 建工具栏 ,因为它不支持工具栏的新功能,包括图像列表。 
创建窗口 函数没有用于指定工具栏大小的参数。 工具栏窗口过程会自动设置工具栏窗口的大小和位置。 高度基于工具栏中按钮的高度。宽度与父窗口工作区的宽度一样。
若要更改自动大小设置,请发送 工具按钮大小 消息。顶部和底部常见控件样式确定工具栏是沿工作区的顶部还是底部放置。 默认情况下,工具栏具有 顶部左侧 样式。

此外,工具栏窗口过程会在收到 窗口缩放 或 工具自动调整 消息时自动调整工具栏的大小。 每当父窗口的大小发生更改或发送需要调整工具栏大小的消息
例如, 工具按钮大小 消息)后,应用程序应发送其中任一消息。可以通过设置 禁止缩放 和 自由位置 常用控件样式
来关闭工具栏默认大小调整和定位行为。 伸缩条 控件承载的工具栏控件必须设置这些样式,因为 伸缩条 控件会调整工具栏的大小和位置。

透明工具栏
工具栏控件支持透明外观,允许工具栏下的工作区显示。 有两种类型的透明工具栏,一种是带有平面按钮,一种是带有三维按钮。
如果希望应用程序与 Windows 界面匹配,请使用平面透明样式工具栏。以下屏幕截图显示了两种透明工具栏,不使用视觉样式。

若要创建透明工具栏,在设计工具栏控件时只需将 平面效果 或 背景透明 勾选上。 如果不希望显示指示工具栏底部的线条,请不要使用 细线边框 窗口样式。
列表样式工具栏
使用工具栏按钮可以同时显示文本和位图。 使用 文本置右 样式创建的工具栏上的按钮将文本放置在位图的右侧而不是位图下方。
以下屏幕截图显示了具有列表样式的工具栏。

可以将 文本置右 工具栏样式与 平面效果 样式结合使用,以创建带有平面按钮的工具栏。

定义按钮图像
有两种方法可以指定按钮的图像 - 按位图或按图像列表。 应用程序必须选择要使用的方法。想要使用图像列表方法的应用程序必须使用 创建窗口 函数来创建工具栏控件。

使用位图定义按钮图像
工具栏中的每个按钮都可以包含位图图像。 工具栏使用内部列表来存储绘制图像所需的信息。设计的工具栏控件图像的大小为 16 x 15 像素的默认尺寸。
可以使用 工具图像大小 消息更改位图图像的尺寸,但必须在将任何图像添加到内部列表之前执行此操作。 

每个图像都有一个从零开始的索引。 添加到内部列表的第一个图像的索引为 0,第二个图像的索引为 1,依依此。 工具添加图像 将图像添加到列表末尾,
并返回它添加的第一个新图像的索引。 若要将图像与按钮相关联,必须在向内部图像列表添加位图后发送 工具添加按钮 消息并指定图像的索引。

使用图像列表定义按钮图像
还可以将按钮图像存储在一组 图像列表中。 图像列表是大小相同的图像的集合,每个图像都可以通过其索引来引用。 图像列表用于管理大型图标或位图集。
最多可以使用三个不同的图像列表来显示处于不同状态的按钮,如下表所示。
状态数值释义
普通0处于默认状态的按钮。
热项1指针下或按下的按钮。 热项仅在具有 平面效果 样式的工具栏控件中受支持。
已禁用2已禁用的按钮。
销毁工具栏后,应用程序必须释放其创建的任何图像列表。

定义按钮的文本
除了图像之外,每个按钮还可以显示字符串,也可以显示而不是图像。 工具栏维护一个内部列表,其中包含可用于工具栏按钮的所有字符串。 使用 工具添加字符 
消息将字符串添加到内部列表,并指定包含要添加的字符串的缓冲区的地址。 每个字符串必须以 0 结尾,最后一个字符串必须以两个 0 字符结尾。

每个字符串都有一个从零开始的索引。 添加到内部字符串列表中的第一个字符串的索引为 0,第二个字符串的索引为 1,依次类推。 
工具添加字符 将字符串添加到列表末尾,并返回第一个新字符串的索引。 使用字符串的索引将字符串与按钮相关联。

使用 工具添加字符 不是将字符串添加到工具栏的唯一方法。 通过在传递给 工具添加按钮 的 工具按钮类 结构的 文字 成员中传递字符串指针,
可以在按钮中显示字符串。此外,还可以使用 工具修改信息 将文本分配给工具栏按钮。

添加工具栏按钮
如果使用 CreateToolbarEx 函数创建工具栏,可以通过填充 工具按钮类 结构的数组并在函数调用中指定数组的地址,将按钮添加到工具栏。 
但是设计工具栏控件不能指定 工具按钮类 结构。可以通过发送 工具添加按钮 消息并指定 工具按钮类 结构的地址,创建一个空工具栏。

创建工具栏后,可以通过发送 工具插入按钮 或 工具添加按钮 消息来添加按钮。 每个按钮由 工具按钮类 结构描述,
该结构定义按钮的属性,包括其字符串和位图的索引,以及其样式、状态、命令标识符和应用程序定义的 32 位值。
如果使用界面设计器创建工具栏,则必须在添加任何按钮之前发送 工具结构大小 消息。 消息将 工具按钮类 结构的大小传递到工具栏。

工具栏按钮样式
按钮的样式决定了按钮的显示方式以及按钮对用户输入的响应方式。 例如, 标准按钮 样式会创建一个行为类似于标准按下按钮的工具栏按钮。
具有 复选按钮 样式的按钮类似于标准按钮,不同之处在于每次用户单击按钮时,它都会在按下状态和非按下状态之间切换。

可以使用 分组单选 或加上 复选按钮 样式创建类似于单选按钮的工具栏按钮组。 这会导致按钮保持按下状态,直到用户选择组中的另一个按钮。
组定义为按钮的连续集合,全部采用这种样式。是分隔条样式在按钮之间创建一个小间隙,或在平面工具栏上的按钮之间绘制刻字。按钮不会接收用户输入。

工具栏按钮状态
工具栏中的每个按钮都有一个 状态。 工具栏更新按钮的状态以反映用户操作,例如单击按钮。 状态指示按钮当前是按下还是未按下、启用或禁用、隐藏或可见。
尽管应用程序在将按钮添加到工具栏时设置按钮的初始状态,但它可以通过向工具栏发送 工具获取状态	 和 工具设置状态 消息来更改和检索状态。工具栏状态

命令标识符
每个按钮都有一个与之关联的应用程序定义的命令标识符。 按钮标识符通常在应用程序头文件中定义。 例如,“粘贴”按钮可以定义为:常量 粘贴=100
当用户选择按钮时,工具栏会向父窗口发送包含按钮命令标识符的 命令事件 或 控件事件 消息。 父窗口检查命令标识符并执行与按钮关联的命令。 

按钮大小和位置
工具栏通过为每个按钮分配位置索引来跟踪其按钮。 索引从零开始;也就是说,最左侧的按钮的索引为 0,右侧的下一个按钮的索引为 1,依此而行。
应用程序必须在发送消息时指定按钮的索引,以检索有关按钮的信息或设置按钮的属性。工具栏在插入和删除按钮时更新位置索引。
应用程序可以使用 工具按钮序号 消息检索按钮的当前位置索引。 消息指定按钮的命令标识符,工具栏窗口使用该标识符查找按钮并返回其位置索引。

工具栏中的所有按钮大小均相同。设计的工具栏控件,初始大小设置为 24 x 22 像素的默认尺寸。 可以使用 工具按钮大小 消息更改按钮大小,
但必须在将任何按钮添加到工具栏之前执行此操作。工具按钮边框 消息检索按钮的当前尺寸。

添加的字符串比工具栏中当前任何字符串都长时,工具栏会自动重置其按钮的宽度。 宽度设置为容纳工具栏中最长的字符串。

启用自定义
工具栏具有内置自定义功能,你可以通过为工具栏提供 拖动调整 通用控件样式来向用户提供这些功能。 用户可以通过自定义功能将按钮拖动到新位置,
或通过将按钮拖出工具栏删除该按钮。 此外,用户可以双击工具栏以显示“自定义工具栏”对话框,以便添加、删除和重排工具栏按钮。
若要显示对话框,请使用 工具自定义框 消息。 应用程序确定自定义功能是否对用户可用,并控制用户可自定义工具栏的程度。

作为自定义过程的一部分,应用程序通常需要保存和还原工具栏的状态。 例如,许多应用程序在用户开始自定义工具栏之前存储工具栏状态,
以防用户以后想要将工具栏还原到其原始状态。 工具栏控件不会自动保留其预自定义状态的记录。 应用程序必须保存工具栏状态才能还原它。

启用热跟踪
热跟踪意味着当指针移到某个项上时,按钮的外观会更改。 启用视觉样式后,工具栏默认支持热跟踪。 否则,只有使用 平面效果 样式。
可以将其他窗口样式与 平面效果 结合使用,以生成启用热跟踪但具有与平面工具栏不同的外观的工具栏。
如何创建工具栏
使用界面设计器生成的工具栏最初不包含任何按钮。 使用 工具添加按钮 或 工具插入按钮 消息将按钮添加到工具栏。
必须将所有项和字符串插入控件后发送 工具自动调整 消息,使工具栏根据其内容重新计算其大小。
以下示例代码使用标准系统图标创建图中显示的工具栏。设计时勾选多行按钮样式 。

程序段 窗体启动
	整数 图列=图表创建(16,16,[图像16位 | 图像掩码],3,0)
	文本 数组[60];
	发送消息(工具栏1,工具设置图表,0,图列)
	发送消息(工具栏1,工具加载图表,0,-1)
	工具按钮类 数组[3]={
	{6,1,4,0x10,0,0,"新建"},
	{7,1,4,0x10,0,0,"打开"},
	{8,1,4,0x10,0,0,"保存"}}
	发送消息(工具栏1,工具结构大小,20,0)
	发送消息(工具栏1,工具按钮添加,3,数组)
	发送消息(工具栏1,工具自动调整,0,0)
结束
最初禁用“ 保存 ”按钮。

以下示例以大致相同的方式创建相同的工具栏,但在本例中,字符串是从资源读取的。

程序段 窗体启动
	整数 图列=图表创建(16,16,[图像16位 | 图像掩码],3,0)
	发送消息(工具栏1,工具设置图表,0,图列)
	发送消息(工具栏1,工具加载图表,0,-1)
	整数 新字=发送消息(工具栏1,工具添加字符,0x400000,1)
	文本 数组[60];
	数组&=6;.&4=1;.&8=0x1004;.&12=0;.&16=新字;
	.&20=7;.&24=2;.&28=0x1004;.&32=0;.&16=新字+1;
	.&40=8;.&44=3;.&48=0x1000;.&52=0;.&16=新字+2;
	发送消息(工具栏1,工具结构大小,20,0)
	发送消息(工具栏1,工具按钮添加,3,数组)
	发送消息(工具栏1,工具自动调整,0,0)
结束
创建垂直工具栏
创建垂直工具栏的关键是在窗口样式中勾选 垂直显示 ,并为每个按钮设置 0x20按钮换行 样式。
以下示例代码创建如下图所示的垂直工具栏。

程序段 窗体启动
	整数 图列=图表创建(24,24,[图像16位 | 图像掩码],3,0)
	发送消息(工具栏1,工具设置图表,0,图列)
	发送消息(工具栏1,工具加载图表,0,-1)
	工具按钮类 数组[3]={
	{6,1,0x24,0,0,0,0},
	{7,2,0x24,0,0,0,0},
	{8,3,0x24,0,0,0,0}}
	发送消息(工具栏1,工具结构大小,20,0)
	发送消息(工具栏1,工具按钮添加,3,数组)
结束

动态标记工具栏按钮
以下示例演示如何将前面示例中第三个按钮的文本从 “保存” 更改为 “另存为”。假定保存按钮的标识为102

工具信息类 改信息(大小=20,掩码=2)
程序段 更改按钮
	改信息.文字="另存为"
	发送消息(工具栏1,工具修改信息,102,改信息)
结束
如何显示按钮的工具提示
指定 提示文本 样式时,工具栏将创建和管理工具提示控件。当用户将指针移到工具栏按钮上并留在那里大约一秒钟时才会显示。

应用程序可以通过以下任一方式向工具提示控件提供文本:
将工具提示文本设置为每个按钮的 工具按钮类 结构的 文字 成员。 还必须发送 工具限最多行 消息,
	并将最大文本行设置为 0,以便文本不显示为按钮标签而不是工具提示。
使用 文本置右 样式创建工具栏,然后设置 8 扩展样式。 标签仅显示具有 显示文本 样式的按钮。否则将显示包含按钮文本的工具提示。
响应 提示显示信息 通知代码。
响应 工具提示信息 通知代码。

需要将消息直接发送到工具提示控件的应用程序可以使用 工具获取提示 消息检索控件的句柄。
应用程序可以使用 工具设置提示 消息将工具栏的工具提示控件替换为另一个工具提示控件。

提供工具提示文本的最灵活方法是响应工具栏控件以控件事件消息的形式发送给其父级的提示显示信息或工具提示信息通知代码。
对于 提示显示信息, ④数据 参数包含指向 提示显示类 结构的指针,该结构指定需要帮助文本的按钮的命令标识符。
此标识符位于 通知.标识 成员中。 应用程序可以将帮助文本复制到结构、指定包含帮助文本的字符串的地址,或指定字符串资源的实例句柄和资源标识符。
以下示例代码通过提供资源标识符中的文本来处理 提示显示信息 工具提示通知代码。这里把提示指定为标识符对应的数值1 2 3

程序段 公共事件(数据)
	整数 窗口=数据&,标识=.&4,事件=.&8,提示=.&12;
	判断(事件)为 提示显示信息{.&12=标识}
结束
中文名字常量数值英文名称释义
控件单击左键-2NM_CLICK用户在控件上点击了鼠标左键
控件双击左键-3NM_DBLCLK用户在控件上双击了鼠标左键
控件单击右键-5NM_RCLICK用户在控件上点击了鼠标右键
控件双击右键-6NM_RDBLCLK用户在控件上双击了鼠标右键
控件自行绘制-12NM_CUSTOMDRAW通知控件的父窗口有关自定义绘制操作的信息。
控件按下键盘-15NM_KEYDOWN控件获得键盘焦点并按下某键
控件释放鼠标-16NM_RELEASEDCAPTURE控件要释放鼠标捕捉
控件键入字符-18NM_CHAR字符键被处理后由控件发送
控件工具提示-19NM_TOOLTIPSCREATED通知控件的父窗口控件已创建工具提示控件。④数据:NMTOOLTIPSCREATED 结构
控件鼠标左键-20NM_LDOWN通知控件的父窗口已按下鼠标左键。
工具按钮信息-700TBN_GETBUTTONINFOA获取工具栏的自定义信息
工具拖起按钮-701TBN_BEGINDRAG用户已开始拖动工具栏的某个按钮
工具拖放按钮-702TBN_ENDDRAG用户已停止拖动工具栏的某个按钮
工具开始定义-703TBN_BEGINADJUST用户已开始自定义一个工具栏
工具结束定义-704TBN_ENDADJUST用户已停止自定义一个工具栏
工具已经重置-705TBN_RESET用户在自定义工具栏对话框中已经对工具栏进行重置了
工具可插左侧-706TBN_QUERYINSERT按钮是否可被插入到指定按钮的左侧
工具可被删除-707TBN_QUERYDELETE用户自定义工具栏时一个按钮是否可被删除
工具已被改变-708TBN_TOOLBARCHANGE用户已经定制完一个工具栏
工具选择帮助-709TBN_CUSTHELP用户已经选择了自定义工具栏对话框上的帮助按钮
工具单击下拉-710TBN_DROPDOWN当用户单击下拉按钮时,工具栏控件发送。
工具放置目标-712TBN_GETOBJECT请求放置目标对象。
工具热项更改-713TBN_HOTITEMCHANGE突出显示的热 () 项更改
工具拖出按钮-714TBN_DRAGOUT用户单击按钮,然后将光标移出按钮
工具按钮删除-715TBN_DELETINGBUTTON按钮即将被删除
工具显示信息-716TBN_GETDISPINFOA检索工具栏项的显示信息
工具信息显示-717TBN_GETDISPINFOW检索工具栏项的显示信息
工具提示信息-718TBN_GETINFOTIPA检索工具栏项的信息提示信息。
工具信息提示-719TBN_GETINFOTIPW检索工具栏项的信息提示信息。
工具按钮定义-720TBN_GETBUTTONINFOW获取工具栏的自定义信息
工具正在还原-721TBN_RESTORE通知工具栏的父窗口正在还原工具栏。
工具正在保存-722TBN_SAVE通知工具栏的父窗口正在保存工具栏。
工具定义开始-723TBN_INITCUSTOMIZE通知工具栏的父窗口自定义已开始。
工具热项要改-724TBN_WRAPHOTITEM使用两个或多个工具栏通知应用程序热项即将更改。
工具查快捷键-725TBN_DUPACCELERATOR确定加速键是否可以在两个或多个活动工具栏上使用。
工具快捷序号-726TBN_WRAPACCELERATORA请求与指定快捷键字符对应的一个或多个工具栏中的按钮索引。
工具拖动显示-727TBN_DRAGOVER确定是否应为拖动的按钮发送突出显示消息。
工具快捷索引-728TBN_MAPACCELERATORW请求工具栏中对应于指定快捷键字符的按钮的索引。
发送消息——常数表
工具启用按钮0x401TB_ENABLEBUTTON启用或禁用工具栏中的指定按钮。③参数:标识;④数据:假=禁用,真=启用
工具选择按钮0x402TB_CHECKBUTTON选中或取消选中工具栏中的给定按钮。③参数:标识;④数据:假=不检查,真=检查
工具按下按钮0x403TB_PRESSBUTTON按下或释放工具栏中的指定按钮。③参数:标识;④数据:假=释放,真=按下
工具隐藏按钮0x404TB_HIDEBUTTON隐藏或显示工具栏中的指定按钮。③参数:标识;④数据:假=显示,真=隐藏
工具不明按钮0x405TB_INDETERMINATE设置或清除工具栏中指定按钮的不确定状态。③参数:标识;④数据:假=清除,真=不确定(暗灰)
工具突出按钮0x406TB_MARKBUTTON设置工具栏控件中给定按钮的突出显示状态。③参数:标识;④数据:假=平常,真=突出
工具按钮可用0x409TB_ISBUTTONENABLED确定工具栏中的指定按钮是否已启用。③参数:标识;④数据:0
工具按钮已选0x40ATB_ISBUTTONCHECKED确定是否选中工具栏中的指定按钮。③参数:标识;④数据:0
工具按钮按下0x40BTB_ISBUTTONPRESSED确定是否按下工具栏中的指定按钮。③参数:标识;④数据:0
工具按钮隐藏0x40CTB_ISBUTTONHIDDEN确定是否隐藏工具栏中的指定按钮。③参数:标识;④数据:0
工具按钮不明0x40DTB_ISBUTTONINDETERMINATE确定工具栏中的指定按钮是否不确定。③参数:标识;④数据:0
工具按钮突出0x40ETB_ISBUTTONHIGHLIGHTED检查工具栏按钮的突出显示状态。③参数:标识;④数据:0
工具设置状态0x411TB_SETSTATE设置工具栏中指定按钮的状态。③参数:标识;④数据:1选中,2按下,4可用,8隐藏,16灰显,32换行,64省略号,128标记
工具获取状态0x412TB_GETSTATE检索有关工具栏中指定按钮是启用、按下还是选中。③参数:标识;④数据:0
工具添加图像0x413TB_ADDBITMAP将一个或多个图像添加到按钮图像列表中。③参数:数量;④数据:工具图像类
工具添加按钮0x414TB_ADDBUTTONSA将一个或多个按钮添加到工具栏。③参数:数量;④数据:工具按钮类
工具插入按钮0x415TB_INSERTBUTTONA在工具栏中插入按钮。③参数:序号;④数据:工具按钮类
工具删除按钮0x416TB_DELETEBUTTON从工具栏中删除按钮。③参数:序号;④数据:0
工具获取按钮0x417TB_GETBUTTON检索有关工具栏中指定按钮的信息。③参数:序号;④数据:工具按钮类
工具按钮数量0x418TB_BUTTONCOUNT检索工具栏中当前按钮的计数。③参数:0;④数据:0
工具按钮序号0x419TB_COMMANDTOINDEX检索与指定命令标识符关联的按钮的序号。③参数:标识;④数据:0
工具保存状态0x41ATB_SAVERESTOREA启动保存或还原工具栏状态。③参数:真=保存,假=还原;④数据:工具保存类
工具自定义框0x41BTB_CUSTOMIZE显示“自定义工具栏”对话框。③参数:0;④数据:0
工具添加字符0x41CTB_ADDSTRINGA将新字符串添加到工具栏的字符串池。③参数:0=字符串,实例=资源;④数据:资源标识或字符数组
工具按钮边框0x41DTB_GETITEMRECT检索工具栏中按钮的边框。③参数:序号;④数据:矩形类
工具结构大小0x41ETB_BUTTONSTRUCTSIZE指定 工具按钮类的大小。③参数:大小;④数据:0
工具按钮大小0x41FTB_SETBUTTONSIZE设置工具栏上按钮的大小。③参数:0;④数据:宽高各16位
工具图像大小0x420TB_SETBITMAPSIZE设置要添加到工具栏的位图图像的大小。③参数:0;④数据:宽高各16位
工具自动调整0x421TB_AUTOSIZE导致调整工具栏的大小。③参数:0;④数据:0
工具获取提示0x423TB_GETTOOLTIPS检索与工具栏关联的工具提示控件的句柄。③参数:0;④数据:0
工具设置提示0x424TB_SETTOOLTIPS将工具提示控件与工具栏相关联。③参数:控件;④数据:0
工具设置父窗0x425TB_SETPARENT设置工具栏控件向其发送通知消息的窗口。③参数:窗口;④数据:0
工具设置行数0x427TB_SETROWS设置工具栏中按钮的行数。③参数:低16位行数,高位真=可超行;④数据:矩形(改后边框)
工具获取行数0x428TB_GETROWS获取工具栏中按钮的行数。③参数:0;④数据:0
工具设置标识0x42ATB_SETCMDID设置工具栏按钮的命令标识符。③参数:序号;④数据:标识
工具更换图像0x42BTB_CHANGEBITMAP更改工具栏中按钮的位图。③参数:标识;④数据:图像序号
工具图像序号0x42CTB_GETBITMAP检索与工具栏中的按钮关联的位图的索引。③参数:标识;④数据:0
工具按钮文本0x42DTB_GETBUTTONTEXTA检索工具栏上按钮的显示文本。③参数:标识;④数据:内容
工具替换图像0x42ETB_REPLACEBITMAP将现有位图替换为新位图。③参数:0;④数据:工具替换类
工具设置缩进0x42FTB_SETINDENT设置工具栏控件中第一个按钮的缩进。③参数:像素值;④数据:0
工具设置图表0x430TB_SETIMAGELIST设置工具栏按钮的图像列表。③参数:0序号;④数据:图像列表
工具获取图表0x431TB_GETIMAGELIST获取工具栏按钮的图像列表。③参数:0;④数据:0
工具加载图表0x432TB_LOADIMAGES加载系统定义的图像列表。③参数:0标准小图,1标准大图,系统图像列表;④数据:-1;
工具获取边框0x433TB_GETRECT检索指定工具栏按钮的边框。③参数:标识;④数据:矩形
工具设置热图0x434TB_SETHOTIMAGELIST设置工具栏显示热按钮的图像列表。③参数:0;④数据:图像列表
工具获取热图0x435TB_GETHOTIMAGELIST获取工具栏显示热按钮的图像列表。③参数:0;④数据:0
工具设置禁图0x436TB_SETDISABLEDIMAGELIST设置工具栏显示禁用按钮的图像列表。③参数:0;④数据:图表
工具获取禁图0x437TB_GETDISABLEDIMAGELIST检索工具栏显示非活动按钮的图像列表。③参数:0;④数据:0
工具设置样式0x438TB_SETSTYLE设置工具栏控件的样式。③参数:0;④数据:样式
工具获取样式0x439TB_GETSTYLE获取工具栏控件的样式。③参数:0;④数据:0
工具按钮宽高0x43ATB_GETBUTTONSIZE检索工具栏按钮当前的大小。③参数:0;④数据:0
工具按钮宽度0x43BTB_SETBUTTONWIDTH设置工具栏控件中的最小和最大按钮宽度。③参数:0;④数据:最小/最大
工具限最多行0x43CTB_SETMAXTEXTROWS设置工具栏按钮上显示的文本行的最大数量。③参数:行数;④数据:0
工具取最多行0x43DTB_GETTEXTROWS检索工具栏按钮上可显示的最大文本行数。③参数:0;④数据:0
工具获取对象0x43ETB_GETOBJECT检索工具栏控件的拖放目标对象。③参数:拖放标识;④数据:@接口
工具获取信息0x43FTB_GETBUTTONINFOW检索工具栏中的现有按钮的信息。③参数:标识;④数据:工具信息类
工具设置信息0x440TB_SETBUTTONINFOW设置工具栏中的现有按钮的信息。③参数:标识;④数据:工具信息类
工具读取信息0x441TB_GETBUTTONINFOA检索工具栏中的现有按钮的信息。③参数:标识;④数据:工具信息类
工具修改信息0x442TB_SETBUTTONINFOA设置工具栏中的现有按钮的信息。③参数:标识;④数据:工具信息类
工具按钮插入0x443TB_INSERTBUTTONW在工具栏中插入按钮。③参数:序号;④数据:工具按钮类
工具按钮添加0x444TB_ADDBUTTONSA将一个或多个按钮添加到工具栏。③参数:数量;④数据:工具按钮类
工具获取点位0x445TB_HITTEST确定某个点在工具栏控件中的位置。③参数:0;④数据:坐标类;返回负数不在按钮内,否则是按钮索引
工具绘制标志0x446TB_SETDRAWTEXTFLAGS设置工具栏的文本绘制标志。③参数:DT_位标志;④数据:DT_方式标志
工具获取热项0x447TB_GETHOTITEM检索工具栏中热项的索引。③参数:0;④数据:0
工具设置热项0x448TB_SETHOTITEM设置工具栏中的热项。③参数:序号,-1取消;④数据:0
工具设置突出0x449TB_SETANCHORHIGHLIGHT设置工具栏的定位点突出显示设置。③参数:真=启用,假=禁用;④数据:0
工具获取突出0x44ATB_GETANCHORHIGHLIGHT检索工具栏的定位点突出显示设置。③参数:0;④数据:0
工具按钮文字0x44BTB_GETBUTTONTEXTW检索工具栏上按钮的显示文本。③参数:标识;④数据:内容
工具保存还原0x44CTB_SAVERESTOREW启动保存或还原工具栏状态。③参数:真=保存,假=还原;④数据:工具保存类
工具添加字组0x44DTB_ADDSTRINGW将新字符串添加到工具栏的字符串池。③参数:0=字符串,实例=资源;④数据:资源标识或字符数组
工具快捷键号0x44ETB_MAPACCELERATORA确定对应于指定加速键字符的按钮的编号。③参数:快捷键;④数据:@编号
工具获取标记0x44FTB_GETINSERTMARK检索工具栏的当前插入标记。③参数:0;④数据:工具标记类
工具设置标记0x450TB_SETINSERTMARK设置工具栏的当前插入标记。③参数:0;④数据:工具标记类
工具取点标记0x451TB_INSERTMARKHITTEST检索工具栏中点的插入标记信息。③参数:坐标类;④数据:工具标记类
工具移动按钮0x452TB_MOVEBUTTON将按钮从一个索引移到另一个索引。③参数:原序号;④数据:新序号
工具总体大小0x453TB_GETMAXSIZE检索工具栏中所有可见的按钮和分隔符的总大小。③参数:0;④数据:尺寸类
工具设置扩展0x454TB_SETEXTENDEDSTYLE设置工具栏控件的扩展样式。③参数:0;④数据:扩展样式
工具获取扩展0x455TB_GETEXTENDEDSTYLE获取工具栏控件的扩展样式。③参数:0;④数据:0
工具获取填充0x456TB_GETPADDING获取工具栏有自动大小样式的填充区域大小。③参数:0;④数据:0
工具设置填充0x457TB_SETPADDING设置工具栏有自动大小样式的填充区域大小。③参数:0;④数据:宽/高
工具改标记色0x458TB_SETINSERTMARKCOLOR设置用于绘制工具栏的插入标记的颜色。③参数:0;④数据:颜色
工具取标记色0x459TB_GETINSERTMARKCOLOR检索用于绘制工具栏的插入标记的颜色。③参数:0;④数据:0
工具快捷编号0x45ATB_MAPACCELERATORW确定对应于指定加速键字符的按钮的编号。③参数:快捷键;④数据:@编号
工具获取文本0x45BTB_GETSTRINGW从工具栏的字符串池中检索字符串。③参数:长度/序号;④数据:内容
工具获取文字0x45CTB_GETSTRINGA从工具栏的字符串池中检索字符串。③参数:长度/序号;④数据:内容
工具多列边界0x45DTB_SETBOUNDINGSIZE设置多列工具栏控件的边界大小。③参数:0;④数据:尺寸类(忽略宽度)
工具修改热项0x45ETB_SETHOTITEM2设置工具栏中的热项。③参数:序号,-1取消;④数据:热项修改标志
工具快捷计数0x45FTB_HASACCELERATOR检索具有指定快捷键字符的工具栏按钮计数。③参数:键字;④数据:@计数
工具设置间距0x460TB_SETLISTGAP设置特定工具栏上的工具栏按钮之间的距离。③参数:像素值;④数据:0
工具取图表数0x462TB_GETIMAGELISTCOUNT获取与工具栏关联的图像列表数。③参数:0;④数据:0
工具理想大小0x463TB_GETIDEALSIZE获取工具栏的理想大小。③参数:真=高度,假=宽度;④数据:尺寸类
工具获取指标0x465TB_GETMETRICS检索工具栏控件的指标。③参数:0;④数据:工具指标类
工具设置指标0x466TB_SETMETRICS设置工具栏控件的指标。③参数:0;④数据:工具指标类
工具下拉边框0x467TB_GETITEMDROPDOWNRECT获取具有下拉样式的工具栏项的下拉窗口边框。③参数:序号;④数据:边框
工具设置按图0x468TB_SETPRESSEDIMAGELIST设置工具栏按下状态的按钮的图像列表。③参数:0;④数据:图表
工具获取按图0x469TB_GETPRESSEDIMAGELIST获取工具栏按下状态的按钮的图像列表。③参数:0;④数据:0
控件设置配色0x2002CCM_SETCOLORSCHEME此消息用于设置控件的颜色配置。③参数:0;④数据:COLORSCHEME;
控件获取配色0x2003CCM_GETCOLORSCHEME此消息用于获取控件的颜色配置。③参数:0;④数据:COLORSCHEME;
控件设置宽字0x2005CCM_SETUNICODEFORMAT设置控件的 Unicode 字符格式标志。③参数:是否宽字;④数据:0;
控件获取宽字0x2006CCM_GETUNICODEFORMAT获取控件的 Unicode 字符格式标志。③参数:0;④数据:0;
控件设置样式0x200BCCM_SETWINDOWTHEME此消息用于设置控件的视觉样式。③参数:0;④数据:样式(宽字符);
控件启用缩放0x200CCCM_DPISCALE树表、表格、强组合框、标题、按钮、工具栏、动画启用dpi缩放。③参数:真;④数据:0;

工具栏——控件样式:

中文名字英文名称数值释义
顶部左侧CCS_TOP1使控件自身位于父窗口工作区的顶部,并将宽度设置为与父窗口的宽度相同。 默认情况下,工具栏具有此样式。
缩放调整CCS_NOMOVEY2导致控件在响应 WM_SIZE 消息时水平(而不是垂直)调整大小并移动自身。 如果使用CCS_NORESIZE,则此样式不适用。 默认情况下,标题窗口具有此样式。
底部右侧CCS_BOTTOM3使控件将自身定位在父窗口工作区的底部,并将宽度设置为与父窗口的宽度相同。 默认情况下,状态窗口具有此样式。
禁止缩放CCS_NORESIZE4防止控件在设置其初始大小或新大小时使用默认宽度和高度。 相反,控件使用在创建或调整大小的请求中指定的宽度和高度。
自由位置CCS_NOPARENTALIGN8防止控件自动移动到父窗口的顶部或底部。 相反,控件会将其位置保留在父窗口中,尽管更改了父窗口的大小。
如果还使用了CCS_TOP或CCS_BOTTOM,则会将高度调整为默认值,但位置和宽度保持不变。
拖动调整CCS_ADJUSTABLE0x20启用工具栏的内置自定义功能,使用户能够将按钮拖动到新位置,或通过将按钮从工具栏上拖动来删除按钮。
此外,用户可以双击工具栏以显示“ 自定义工具栏 ”对话框,使用户能够添加、删除和重新排列工具栏按钮。
禁止突显CCS_NODIVIDER0x40防止在控件顶部绘制双像素的突出显示。
垂直显示CCS_VERT0x80版本 4.70。 使控件垂直显示。
垂直左侧CCS_LEFT0x81版本 4.70。 使控件垂直显示在父窗口的左侧。
垂直缩放CCS_NOMOVEX0x82版本 4.70。 导致控件调整大小并垂直移动自身,而不是水平移动,以响应 WM_SIZE 消息。 如果使用CCS_NORESIZE,则此样式不适用。
垂直右侧CCS_RIGHT0x83版本 4.70。 使控件垂直显示在父窗口的右侧。
提示文本TBSTYLE_TOOLTIPS0x100创建一个工具提示控件,应用程序可以使用该控件显示工具栏中按钮的描述性文本。
多行按钮TBSTYLE_WRAPABLE0x200创建可以包含多行按钮的工具栏。
Alt拖动TBSTYLE_ALTDRAG0x400按住 Alt 键的同时拖动工具栏按钮来更改工具栏按钮的位置。否则拖动按钮时按住 Shift 键。
平面效果TBSTYLE_FLAT0x800创建平面工具栏。在平面工具栏中,工具栏和按钮都是透明的,并且已启用热跟踪。
文本置右TBSTYLE_LIST0x1000创建一个平面工具栏,其按钮文本在位图右侧。
自绘通知TBSTYLE_CUSTOMERASE0x2000当工具栏处理 擦除背景 消息时,生成 自绘控件 通知代码。
支持拖放TBSTYLE_REGISTERDROP0x4000生成 获取对象 通知代码,以在光标经过工具栏按钮时请求放置目标对象。
背景透明TBSTYLE_TRANSPARENT0x8000 创建透明工具栏。在透明工具栏中,工具栏是透明的,但按钮不是。

工具栏——系统定义的按钮图像列表:

英文名称常量释义
IDB_STD_SMALL_COLOR0小的彩色标准位图。
IDB_STD_LARGE_COLOR1大型彩色标准位图。
IDB_VIEW_SMALL_COLOR4小的颜色视图位图。
IDB_VIEW_LARGE_COLOR5大的颜色视图位图。
IDB_HIST_SMALL_COLOR8小尺寸的 Windows 资源管理器位图。
IDB_HIST_LARGE_COLOR9大尺寸的 Windows 资源管理器位图。
IDB_HIST_NORMAL12处于正常状态的 Windows 资源管理器旅行按钮和收藏夹位图。
IDB_HIST_HOT13处于热状态的 Windows 资源管理器旅行按钮和收藏夹位图。
IDB_HIST_DISABLED14处于禁用状态的 Windows 资源管理器旅行按钮和收藏夹位图。
IDB_HIST_PRESSED15处于按下状态的 Windows 资源管理器旅行按钮和收藏夹位图。

工具栏——标准小图和标准大图:

英文名称常量释义
STD_CUT0剪切操作。
STD_COPY1复制操作。
STD_PASTE2粘贴操作。
STD_UNDO3撤消操作。
STD_REDOW4恢复操作。
STD_DELETE5删除操作。
STD_FILENEW6新建文件操作。
STD_FILEOPEN7打开文件操作。
STD_FILESAVE8保存文件操作。
STD_PRINTPRE9打印预览操作。
STD_PROPERTIES10属性操作。
STD_HELP11帮助操作。
STD_FIND12查找操作。
STD_REPLACE13替换操作。
STD_PRINT14打印操作。

工具栏——视窗小图和视窗大图:

英文名称常量释义
VIEW_LARGEICONS0大图标视图。
VIEW_SMALLICONS1小图标视图。
VIEW_LIST2列表视图。
VIEW_DETAILS3详细信息视图。
VIEW_SORTNAME4按名称排序。
VIEW_SORTSIZE5按大小排序。
VIEW_SORTDATE6按日期排序。
VIEW_SORTTYPE7
VIEW_PARENTFOLDER8转到父文件夹。
VIEW_NETCONNECT9连接到网络驱动器。
VIEW_NETDISCONNECT10断开与网络驱动器的连接。
VIEW_NEWFOLDER11新建文件夹。
VIEW_VIEWMENU12菜单视图

工具栏——文件资源管理器小图和资源管理器大图:

英文名称常量释义
HIST_BACK0退后。
HIST_FORWARD1前进。
HIST_FAVORITES2打开收藏夹文件夹。
HIST_ADDTOFAVORITES3释义
HIST_VIEWTREE4视图树。

工具栏——扩展样式:

英文名称常量释义
TBSTYLE_EX_DRAWDDARROWS1允许按钮具有单独的下拉箭头。指定"下拉按钮"样式
TBSTYLE_EX_MULTICOLUMN2为工具栏提供垂直方向,并将工具栏按钮组织成列。
TBSTYLE_EX_VERTICAL4为工具栏提供垂直方向。 工具栏按钮从上到下流动,而不是水平排列。
TBSTYLE_EX_MIXEDBUTTONS8允许你为所有按钮设置文本,未显示在按钮上的文本将自动用作按钮的工具提示文本。
TBSTYLE_EX_HIDECLIPPEDBUTTONS0x10隐藏部分剪辑的按钮。 如果相邻的带区覆盖按钮的一部分,则不会显示该按钮。
TBSTYLE_EX_DOUBLEBUFFER0x80对工具栏进行双重缓冲。 双重缓冲是一种检测工具栏何时更改的机制。

工具栏——热项修改原因标志:

英文名称常量释义
HICF_OTHER0热项中的更改是由于无法确定的事件导致的。
HICF_MOUSE1热项中的更改由鼠标事件导致。
HICF_ARROWKEYS2热项中的更改是由箭头键引起的。
HICF_ACCELERATOR4热项中的更改是由快捷键引起的。
HICF_DUPACCEL8多个项具有相同的快捷键字符。
HICF_ENTERING0x10设置了此标志,则不存在以前的热项
HICF_LEAVING0x20设置了此标志,则不存在新的热项
HICF_RESELECT0x40热项中的更改是由于用户输入已热项的快捷键导致的。
HICF_LMOUSE0x80热项中的更改是左键单击鼠标事件导致的。
HICF_TOGGLEDROPDOWN0x100版本 5.80。使按钮切换状态。

工具栏——按钮样式:

中文名字英文名称常量释义
标准按钮TBSTYLE_BUTTON0创建标准按钮。
是分隔条TBSTYLE_SEP1创建一个分隔符,在按钮组之间提供小间隔。
复选按钮TBSTYLE_CHECK2创建一个双状态推送按钮,该按钮在用户每次单击时在按下状态和非按下状态之间切换。
分组单选TBSTYLE_GROUP4创建一个保持按下状态的按钮,直到按下组中的另一个按钮。
下拉按钮TBSTYLE_DROPDOWN8创建可在单击按钮时显示列表的下拉样式按钮。
自动适应TBSTYLE_AUTOSIZE0x10指定工具栏控件不应为按钮分配标准宽度。 相反,按钮的宽度将基于文本宽度加上按钮的图像计算。
不处理&符TBSTYLE_NOPREFIX0x20指定按钮文本将不具有与之关联的加速键前缀。
标准按钮BTNS_BUTTON0版本 5.80。创建标准按钮。此标志定义为 0,应用于表示未设置其他标志。
是分隔条BTNS_SEP1版本 5.80。 创建一个分隔符,在按钮组之间提供小间隔。 具有此样式的按钮不接收用户输入。
复选按钮BTNS_CHECK2版本 5.80。 创建一个双状态推送按钮,该按钮在用户每次单击时在按下状态和非按下状态之间切换。 按钮处于按下状态时具有不同的背景色。
分组单选BTNS_GROUP4版本 5.80。 与 BTNS_CHECK 结合使用时,创建一个保持按下状态的按钮,直到按下组中的另一个按钮。
分组复选BTNS_CHECKGROUP6版本 5.80。 创建一个在按下组中另一个按钮之前保持按下状态的按钮,类似于选项按钮 (也称为单选按钮) 。
下拉按钮BTNS_DROPDOWN8版本 5.80。 创建可在单击按钮时显示列表的下拉样式按钮。 下拉按钮发送TBN_DROPDOWN通知代码,而不是用于普通按钮的 WM_COMMAND 消息。可以让通知处理程序显示选项列表。
自动适应BTNS_AUTOSIZE0x10版本 5.80。指定工具栏控件不应为按钮分配标准宽度。 相反,按钮的宽度将基于文本宽度加上按钮的图像计算。
不处理&符BTNS_NOPREFIX0x20版本 5.80。 指定按钮文本将不具有与之关联的加速键前缀。
显示文本BTNS_SHOWTEXT0x40版本 5.80。指定应显示按钮文本。否则当光标悬停在按钮上时,工具栏控件将自动将其显示为工具提示。
下拉箭头BTNS_WHOLEDROPDOWN0x80版本 5.80。指定按钮将具有下拉箭头,但不能作为单独的部分。
标准按钮TBSTYLE_BUTTON0等效于 BTNS_BUTTON。 对 版本 4.72 及更早版本使用 TBSTYLE_BUTTON。
是分隔条TBSTYLE_SEP1等效于 BTNS_SEP。 对 版本 4.72 及更早版本使用 TBSTYLE_SEP。
复选按钮TBSTYLE_CHECK2等效于 BTNS_CHECK。 对 版本 4.72 及更早版本使用 TBSTYLE_CHECK。
分组单选TBSTYLE_GROUP4等效于 BTNS_GROUP。 对 版本 4.72 及更早版本使用 TBSTYLE_GROUP。
分组复选TBSTYLE_CHECKGROUP6等效于 BTNS_CHECKGROUP。 对 版本 4.72 及更早版本使用 TBSTYLE_CHECKGROUP。
下拉按钮TBSTYLE_DROPDOWN8等效于 BTNS_DROPDOWN。 对 版本 4.72 及更早版本使用 TBSTYLE_DROPDOWN。
自动适应TBSTYLE_AUTOSIZE0x10等效于 BTNS_AUTOSIZE。 对 版本 4.72 及更早版本使用 TBSTYLE_AUTOSIZE。
不处理&符TBSTYLE_NOPREFIX0x20等效于 BTNS_NOPREFIX。 对 版本 4.72 及更早版本使用 TBSTYLE_NOPREFIX。

工具栏——按钮状态:

英文名称常量释义
TBSTATE_CHECKED1选中状态
TBSTATE_PRESSED2按下状态
TBSTATE_ENABLED4可用状态
TBSTATE_HIDDEN8隐藏状态
TBSTATE_INDETERMINATE0x10灰暗状态
TBSTATE_WRAP0x20按钮后跟换行符。
TBSTATE_ELLIPSES0x40按钮的文本被截断,并显示省略号。
TBSTATE_MARKED0x80已标记按钮。标记项的解释取决于应用程序。
工具按钮类——结构体定义:
中文名字英文名称长度作用解释
工具按钮类TBBUTTON20包含有关工具栏中的按钮的信息。
工具按钮类——成员表
中文英文类型作用解释
图像iBitmap整数按钮图像的从零开始的索引。
标识idCommand整数与按钮关联的命令标识符。用于 WM_COMMAND 消息中。
状态fsState字节按钮状态标志。工具栏按钮状态列出的值的组合。
风格fsStyle字节按钮样式标志。工具栏按钮样式列出的值的组合。
预留bReserved整形预留。
数据dwData整数应用程序定义的值。
文字iString整数按钮字符串的从零开始的索引,或指向包含按钮文本的字符串缓冲区的指针。
工具信息类——结构体定义:
中文名字英文名称长度作用解释
工具信息类TBBUTTONINFO20包含或接收工具栏中特定按钮的信息。
工具信息类——成员表
中文英文类型作用解释
大小cbSize整数结构的大小。
掩码dwMask整数指示哪些成员包含有效信息的标志集。
标识idCommand整数按钮的命令标识符。掩码:0x20
图像iBitmap整数按钮图像的从零开始的索引。掩码:1
状态fsState字节按钮状态标志。掩码:4;工具栏按钮状态列出的值的组合。
风格fsStyle字节按钮样式标志。掩码:8;工具栏按钮样式列出的值的组合。
宽度cx整形按钮的宽度(以像素为单位)。掩码:0x40
数据lParam整数与按钮关联的应用程序定义值。掩码:0x10
文字pszText整数包含或接收按钮文本的字符缓冲区的地址。掩码:2
长度cchText整数接收按钮文本缓冲区的大小。掩码:2
工具保存类——结构体定义:
中文名字英文名称长度作用解释
工具保存类TBSAVEPARAMS12指定注册表中 保存还原 消息存储和检索工具栏状态信息的位置。
工具保存类——成员表
中文英文类型作用解释
表项hkr整数注册表项的句柄。
子项pszSubKey整数子项名称。
值名pszValueName整数值名称。
工具指标类——结构体定义:
中文名字英文名称长度作用解释
工具指标类TBMETRICS32定义用于收缩或展开工具栏项的工具栏的指标。
工具指标类——成员表
中文英文类型作用解释
大小cbSize整数结构的大小。
掩码dwMask整数获取指标的掩码。1取填充宽高,2取工具条宽高,4取间距宽高
填充宽cxPad整数按钮内填充的宽度,介于内容和按钮边缘之间。
填充高cyPad整数按钮内填充的高度,介于内容和按钮边缘之间。
宽度cxBarPad整数工具栏的宽度。未使用。
高度cyBarPad整数工具栏的高度。未使用。
间宽cxButtonSpacing整数工具栏按钮之间间距的宽度。
间高cyButtonSpacing整数工具栏按钮之间间距的高度。
工具标记类——结构体定义:
中文名字英文名称长度作用解释
工具标记类TBINSERTMARK8包含有关工具栏控件中插入标记的信息。
工具标记类——成员表
中文英文类型作用解释
序号iButton整数插入标记的从零开始的索引。如果此成员为-1,则没有插入标记。
标志dwFlags整数定义插入标记相对于指定按钮的位置。0左侧,1右侧,2背景(仅限取点标记)
工具图像类——结构体定义:
中文名字英文名称长度作用解释
工具图像类TBADDBITMAP8将包含按钮图像的位图添加到工具栏。
工具图像类——成员表
中文英文类型作用解释
实例hInst整数包含包含位图资源的可执行文件的模块实例的句柄。非资源写0
标识nID整数位图句柄或图像资源标识
工具替换类——结构体定义:
中文名字英文名称长度作用解释
工具替换类TBREPLACEBITMAP32将一个工具栏位图替换为另一个。
工具替换类——成员表
中文英文类型作用解释
原例hInstOld整数要替换的位图资源的模块实例句柄。0位图柄
原图nIDOld整数要替换的位图的位图柄或资源标识。
新例hInstNew整数包含新位图资源的模块实例句柄。0位图柄
新图nIDNew整数新位图的位图柄或资源标识。
数量nButtons整数新位图中包含的按钮图像数。 新映像的数量应与替换的图像数相同。
工具提示类——结构体定义:
中文名字英文名称长度作用解释
工具提示类NMTTDISPINFOA108包含用于处理 工具显示信息 通知代码的信息。
工具替换类——成员表
中文英文类型作用解释
通知hdr通知类包含有关通知的其他信息的 通知类 结构。
提示lpszText整数指向以 0 结尾的字符串的指针,该字符串将显示为工具提示文本。 如果 hinst 指定了实例句柄,则此成员必须是字符串资源的标识符。
内容szText[80]文本接收工具提示文本的缓冲区。 应用程序可以将文本复制到此缓冲区,而不是指定字符串地址或字符串资源。
实例hinst整数包含要用作工具提示文本的字符串资源的实例的句柄。 如果 提示 是工具提示文本字符串的地址,则此成员必须为 0。
标志uFlags整数指示如何解释包含的 通知类 结构的 标识 成员的标志。0=标识符,1=工具的句柄,4=从右到左阅读,0x8000保留提供的信息
附加lParam整数版本 4.70。 与工具关联的应用程序定义数据。

调节框——通知消息:


程序段 公共事件(数据)
整数 窗口=数据&,参数=.&4,事件=.&8,位置=.&12,方向=.&16;
判断(事件)为 控件释放鼠标{控件要释放鼠标捕捉}
为 调节位置更改{位置是当前位置,向上-1,向下为1}
处理窗口(窗口,控件事件,参数,数据)
结束

中文名字常量数值英文名称释义
控件释放鼠标-16NM_RELEASEDCAPTURE控件要释放鼠标捕捉
调节位置更改-722UDN_DELTAPOS调节器控件的位置即将更改。④数据:NMUPDOWN 结构
发送消息——常数表
调节设置范围0x465UDM_SETRANGE设置上下控件范围的最小和最大位置。③参数:0;④数据:最大/最小
调节获取范围0x466UDM_GETRANGE获取上下控件范围的最小和最大位置。③参数:0;④数据:0
调节设置位置0x467UDM_SETPOS设置上下控件16位精度的当前位置。③参数:0;④数据:新位置
调节获取位置0x468UDM_GETPOS获取上下控件16位精度的当前位置。③参数:0;④数据:0
调节设置窗口0x469UDM_SETBUDDY设置上下控件的伙伴窗口。③参数:窗口;④数据:0
调节获取窗口0x46AUDM_GETBUDDY获取上下控件的伙伴窗口。③参数:0;④数据:0
调节设置加速0x46BUDM_SETACCEL设置上下控件的加速。③参数:数目;④数据:UDACCEL 结构的数组
调节获取加速0x46CUDM_GETACCEL获取上下控件的加速。③参数:数目;④数据:UDACCEL 结构的数组
调节设置基数0x46DUDM_SETBASE设置上下控件的基数。③参数:10十进制,16十六进制;④数据:0
调节获取基数0x46EUDM_GETBASE获取上下控件的基数。③参数:0;④数据:0
调节设置限定0x46FUDM_SETRANGE32设置上下控件的32 位范围。③参数:下限;④数据:上限
调节获取限定0x470UDM_GETRANGE32获取上下控件的32 位范围。③参数:@下限;④数据:@上限;为0不获取
调节设置定位0x471UDM_SETPOS32设置上下控件32位精度的当前位置。③参数:0;④数据:新位置
调节获取定位0x472UDM_GETPOS32获取上下控件32位精度的当前位置。③参数:0;④数据:0
控件设置宽字0x2005CCM_SETUNICODEFORMAT设置控件的 Unicode 字符格式标志。③参数:是否宽字;④数据:0;
控件获取宽字0x2006CCM_GETUNICODEFORMAT获取控件的 Unicode 字符格式标志。③参数:0;④数据:0;

月历框——通知消息:


程序段 公共事件(数据)
整数 窗口=数据&,参数=.&4,事件=.&8,年=.%12,月=.%14,星期=.%16,
日=.%18,时=.%20,分=.%22,秒=.%24,毫秒=.%26;
判断(事件)为 月历显示风格{12到28是开始日期;.&28 是数组总数;.&32 是日期状态数组地址}
为 月历选择日期{12到28是选择范围中第一天的日期}
为 月历选项改变{28到44是选择范围中最后一天的日期}
处理窗口(窗口,控件事件,参数,数据)
结束

程序段 公共事件(数据)
整数 窗口=数据&,参数=.&4,事件=.&8,旧图=.&12,新图=.&16;
判断(事件)为 月历视图改变{旧视图:0每月,1年度,2十年,3世纪}
为 月历视图改变{新视图:0每月,1年度,2十年,3世纪}
处理窗口(窗口,控件事件,参数,数据)
结束

中文名字常量数值英文名称释义
控件释放鼠标-16NM_RELEASEDCAPTURE控件要释放鼠标捕捉
月历显示风格-743MCN_GETDAYSTATE获取月历控件的日期显示风格。NMDAYSTATE 结构
月历选择日期-746MCN_SELECT在月历控件中选择一个日期。 NMSELCHANGE 结构
月历选项改变-749MCN_SELCHANGE当前选择项已被改变。NMSELCHANGE 结构
月历视图改变-750MCN_VIEWCHANGE当前视图发生更改。NMVIEWCHANGE 结构

日期框——通知消息:

中文名字常量数值英文名称释义
控件得到焦点-7NM_SETFOCUS控件收到输入焦点
控件失去焦点-8NM_KILLFOCUS用户失去输入焦点
日历内容改变-759DTN_DATETIMECHANGEDTP控件中的内容已发生改变
日历完成编辑-758DTN_USERSTRINGA用户已完成DTP控件的编辑
日历单击回调-757DTN_WMKEYDOWNA用户单击了DTP控件的回调域
日历显示回调-756DTN_FORMATADTP控件中的文本需要显示在回调域中
日历显示尺寸-755DTN_FORMATQUERYADTP控件中的文本显示所需最大尺寸
日历显示月历-754DTN_DROPDOWNDTP控件中的月历控件将要显示
日历关闭月历-753DTN_CLOSEUPDTP控件中的月历控件将要关闭

超组合框——通知消息:

中文名字英文名称数值释义
控件设置光标NM_SETCURSOR-17控件响应消息要设置光标
组框显示信息CBEN_GETDISPINFOA-800获取组框控件的回调条目的显示信息
组框插入条目CBEN_INSERTITEM-801一个新条目已插入到组框控件
组框删除条目CBEN_DELETEITEM-802组框控件的某条目已被删除
组框激活编辑CBEN_BEGINEDIT-804用户激活下拉列表或点击组框控件的编辑框
组框结束编辑CBEN_ENDEDITA-805用户已结束对组框控件的编辑框的操作或选择了下拉列表
组框完成编辑CBEN_ENDEDITW-806用户已结束对组框控件的编辑框的操作或选择了下拉列表
组框信息显示CBEN_GETDISPINFOW-807获取组框控件的回调条目的显示信息
组框拖起图像CBEN_DRAGBEGINA-808用户开始拖动组框控件的编辑框中的条目图像
组框拖起条目CBEN_DRAGBEGINW-809用户开始拖动组框控件的编辑框中的条目图像
超组合框——发送消息
中文名字英文名称数值释义
组框添加项目CBEM_INSERTITEMA0x401高级组合框添加项目。③参数:0;④数据:COMBOBOXEXITEM 结构
组框设置图表CBEM_SETIMAGELIST0x402设置高级组合框控件的图像列表。③参数:0;④数据:图像列表
组框获取图表CBEM_GETIMAGELIST0x403获取高级组合框控件的图像列表。③参数:0;④数据:0
组合删除CBEM_DELETEITEM0x144高级组合框删除指定项目。③参数:索引;④数据:0
组框取项信息CBEM_GETITEMA0x404获取高级组合框的指定项目的信息。③参数:0;④数据:COMBOBOXEXITEM 结构
组框改项信息CBEM_SETITEMA0x405修改高级组合框的指定项目的信息。③参数:0;④数据:COMBOBOXEXITEM 结构
组框子项对象CBEM_GETCOMBOCONTROL0x406获取子组合框控件的句柄。③参数:0;④数据:0
组框编辑对象CBEM_GETEDITCONTROL0x407获取组合框控件的编辑控件部分句柄。③参数:0;④数据:0
组框设置样式CBEM_SETEXSTYLE0x408修改组合框风格样式。③参数:0;④数据:样式
组框扩展样式CBEM_GETEXTENDEDSTYLE0x409获取组合框扩展样式。③参数:0;④数据:0
组框修改扩展CBEM_SETEXTENDEDSTYLE0x40E修改组合框扩展样式。③参数:0所有,掩码;④数据:1不显图像;2不显缩进;4单词分割/.\;8允许剪裁;$10搜索分大小写
组框是否更改CBEM_HASEDITCHANGED0x40A确定用户是否已更改高级组合框编辑控件的文本。③参数:0;④数据:0返回真表示已更改
组框增加项目CBEM_INSERTITEMW0x40B高级组合框添加项目。③参数:0;④数据:COMBOBOXEXITEM 结构
组框取项数据CBEM_GETITEMW0x40C获取高级组合框的指定项目的信息。③参数:0;④数据:COMBOBOXEXITEM 结构
组框改项数据CBEM_SETITEMW0x40D修改高级组合框的指定项目的信息。③参数:0;④数据:COMBOBOXEXITEM 结构
组框模块——函数表
中文名字英文名称用法释义
组框添加CBEM_INSERTITEMA组框添加(控件,内容,图标,选中,缩进)高级组合框添加项目,可指定图标和选中图标,每个缩进等于10像素。
组框删除CBEM_DELETEITEM组框添加(控件,序号)高级组合框删除指定项目
组框文字CBEM_SETITEMA内容=组框文字(控件,序号)获取或修改高级组合框的指定项目的文字
组框扩展CBEM_GETEXSTYLE样式=组框扩展(控件)获取或修改组合框扩展样式:1不显图像;2不显缩进;4单词分割/.\;8允许剪裁;$10搜索分大小写
组框更改CBEM_HASEDITCHANGED组框更改(控件)确定用户是否已更改高级组合框编辑控件的文本。返回真表示已更改

伸缩条——通知消息:

中文名字常量数值英文名称释义
控件自行绘制-12NM_CUSTOMDRAW通知控件的父窗口有关自定义绘制操作的信息。
控件命中测试-14NM_NCHITTEST当控件收到消息时,由 伸缩条 控件发送。④数据:NMMOUSE 结构
控件释放鼠标-16NM_RELEASEDCAPTURE控件要释放鼠标捕捉
伸缩高度改变-831RBN_HEIGHTCHANGE高度已被更改
伸缩放置目标-832RBN_GETOBJECT对象被拖动到此控件中的带区上
伸缩更改布局-833RBN_LAYOUTCHANGED用户更改此控件的带区布局
伸缩自动调整-834RBN_AUTOSIZE控件自己自动调整大小
伸缩开始拖动-835RBN_BEGINDRAG用户开始拖动带区
伸缩结束拖动-836RBN_ENDDRAG用户停止拖动带区
伸缩将被删除-837RBN_DELETINGBAND带区即将被删除
伸缩已被删除-838RBN_DELETEDBAND带区已被删除
伸缩调整子窗-839RBN_CHILDSIZE调整带区的子窗口大小

伸缩条——控件样式:

中文名字英文名称数值释义
顶部左侧CCS_TOP1使控件自身位于父窗口工作区的顶部,并将宽度设置为与父窗口的宽度相同。 默认情况下,工具栏具有此样式。
缩放调整CCS_NOMOVEY2导致控件在响应 WM_SIZE 消息时水平(而不是垂直)调整大小并移动自身。 如果使用CCS_NORESIZE,则此样式不适用。 默认情况下,标题窗口具有此样式。
底部右侧CCS_BOTTOM3使控件将自身定位在父窗口工作区的底部,并将宽度设置为与父窗口的宽度相同。 默认情况下,状态窗口具有此样式。
禁止缩放CCS_NORESIZE4防止控件在设置其初始大小或新大小时使用默认宽度和高度。 相反,控件使用在创建或调整大小的请求中指定的宽度和高度。
自由位置CCS_NOPARENTALIGN8防止控件自动移动到父窗口的顶部或底部。 相反,控件会将其位置保留在父窗口中,尽管更改了父窗口的大小。
如果还使用了CCS_TOP或CCS_BOTTOM,则会将高度调整为默认值,但位置和宽度保持不变。
拖动调整CCS_ADJUSTABLE0x20启用工具栏的内置自定义功能,使用户能够将按钮拖动到新位置,或通过将按钮从工具栏上拖动来删除按钮。
此外,用户可以双击工具栏以显示“ 自定义工具栏 ”对话框,使用户能够添加、删除和重新排列工具栏按钮。
禁止突显CCS_NODIVIDER0x40防止在控件顶部绘制双像素的突出显示。
垂直显示CCS_VERT0x80版本 4.70。 使控件垂直显示。
垂直左侧CCS_LEFT0x81版本 4.70。 使控件垂直显示在父窗口的左侧。
垂直缩放CCS_NOMOVEX0x82版本 4.70。 导致控件调整大小并垂直移动自身,而不是水平移动,以响应 WM_SIZE 消息。 如果使用CCS_NORESIZE,则此样式不适用。
垂直右侧CCS_RIGHT0x83版本 4.70。 使控件垂直显示在父窗口的右侧。
调整大小SBARS_SIZEGRIP0x100状态栏控件将包括状态栏右端的大小调整手柄。 大小调整手柄类似于大小调整边框;它是用户可以通过单击和拖动来重设父窗口大小的矩形区域。
适应大小RBS_AUTOSIZE0x2000版本 4.71。 当控件的大小或位置发生更改时,rebar 控件将自动更改带的布局。 发生这种情况时,将发送 RBN_AUTOSIZE 通知。
窄线分隔RBS_BANDBORDERS0x400版本 4.71。 rebar 控件显示窄线以分隔相邻带。
双击大小RBS_DBLCLKTOGGLE0x8000版本 4.71。 当用户双击带区时,rebar 带将切换其最大化或最小化状态。 如果没有此样式,当用户单击带区时,将切换最大化或最小化状态。
顺序显示RBS_FIXEDORDER0x800版本 4.70。 rebar 控件始终按相同的顺序显示带区。 可以将带区移动到不同的行,但带区顺序是静态的。
拖放通知RBS_REGISTERDROP0x1000版本 4.71。 当对象拖动到控件中的带区上时,rebar 控件将生成 RBN_GETOBJECT 通知代码。 若要接收RBN_GETOBJECT通知,请使用调用 OleInitialize 或 CoInitialize 初始化 OLE。
工具提示RBS_TOOLTIPS0x100版本 4.71。 尚不支持。
最小高度RBS_VARHEIGHT0x200版本 4.71。 rebar 控件尽可能以所需的最小高度显示带区。 如果没有此样式,rebar 控件将使用最高可见带的高度来确定其他带的高度,以相同的高度显示所有带。
垂直把手RBS_VERTICALGRIPPER0x4000版本 4.71。 大小手柄将垂直显示,而不是在垂直 rebar 控件中水平显示。 对于没有 CCS_VERT 样式的 rebar 控件,将忽略此样式。

IP控件——使用说明:

IP框允许用户以易于理解的格式输入 IP 地址。 此控件还允许应用程序以数字形式而不是文本形式获取地址。
这是一种类似于编辑控件的新控件,允许用户在 Internet 协议中输入数字地址 (IP) 格式。 此格式由四个三位数字段组成。 每个字段单独处理;字段编号从零开始,从左到右继续,如下图所示。
控件只允许在每个字段中输入数字文本。 在给定字段中输入三位数字后,键盘焦点会自动移动到下一个字段。 如果应用程序不需要填写整个字段,则用户可以输入少于三位数。 例如,如果字段应仅包含数字 21,则键入“21”并按 键会将用户带到下一个字段。 每个字段的默认范围为 0 到 255,但应用程序可以使用 IP框设置范围 消息将范围设置为这些限制之间的任何值。

IP控件——通知消息:

中文名字常量数值英文名称释义
IP框内容改变-860IPN_FIELDCHANGED更改控件中的字段或从一个字段移动到另一个字段
发送消息——常数表
IP框清除内容$464IPM_CLEARADDRESS清除 IP 地址控件的内容。③参数:0;④数据:0
IP框设置地址$465IPM_SETADDRESS设置 IP 地址控件中所有四个字段的地址值。 ③参数:0;④数据:32位IP地址
IP框获取地址$466IPM_GETADDRESS获取 IP 地址控件中所有四个字段的地址值。 ③参数:0;④数据:@地址
IP框设置范围$467IPM_SETRANGE设置 IP 地址控件中指定字段的有效范围。③参数:0-3字段;④数据:低/高(各1字节)
IP框设置焦点$468IPM_SETFOCUS将键盘焦点选中为控件中的指定字段。 ③参数:0-3字段;④数据:0
IP框是否为空$469IPM_ISBLANK确定控件中的所有字段是否为空。③参数:0;④数据:0

IP框改变类——通知消息:

中文名字英文名称长度作用解释
IP框改变类NMIPADDRESS20包含 IP框内容改变 通知代码的信息。
IP框改变类——成员表
中文英文类型作用解释
通知hdr通知类包含有关通知的信息的类结构。
字段iField整数已更改的字段的从零开始的编号。
新值iValue整数字段 成员中指定的字段的新值。 处理 IP框内容改变 通知时,可以将此成员设置为字段范围内的任何值,控件会将此新值置于字段中。

状态栏——使用说明:

状态栏是父窗口底部的水平窗口,应用程序可在其中显示各种状态信息。 状态栏可以分为多个部分以显示多种类型的信息。
类型和样式
状态栏的默认位置位于父窗口底部,但你可以指定 顶部 样式,使其显示在父窗口工作区的顶部。
可以指定 调整大小 样式,以在状态栏的右端包含大小调整手柄。
不建议结合使用 顶部 和 调整大小 样式,因为生成的大小调整手柄不起作用。

大小和高度
状态栏的窗口过程会自动设置窗口的初始大小和位置,忽略 创建窗口 函数中指定的值。 宽度与父窗口工作区的一样。
高度基于当前在状态栏的设备上下文中选择的字体的指标,以及窗口边框的宽度。
每当收到 窗口缩放 消息时,窗口过程都会自动调整状态栏的大小。 通常,当父窗口的大小更改时,父窗口会向状态栏发送 窗口缩放 消息。

应用程序可以通过向窗口发送 状态最小高度 消息(指定最小高度(以像素为单位)来设置状态栏绘图区的最小高度。 绘图区不包括窗口边框。
最小高度对于在所有者绘制的状态栏中绘图很有用。 有关详细信息,请参阅本章后面的 所有者绘制状态栏 。

通过向窗口发送 状态获取边框 消息来检索状态栏边框的宽度。 该消息包含接收宽度的三元素数组的地址。

多部件状态栏
状态栏可以具有许多不同的部分,每个部分显示不同的文本行。 通过向窗口发送 状态设置部件 消息,指定要创建的部件数和整数数组的地址,
将状态栏划分为多个部分。 数组包含每个部件的一个元素,每个元素指定部件右边缘的客户端坐标。一个状态栏最多可以有 256 个部分,
尽管应用程序通常使用的部件要少得多。 通过向窗口发送 状态获取部件消息, 检索状态栏中各部分的计数以及每个部件右边缘的坐标。

状态栏文本操作
可以通过发送 状态设置文本 消息、指定部件的从零开始的索引、在部件中绘制的字符串地址以及绘制字符串的技术来设置状态栏的任何部分的文本。
绘制技术确定文本是否具有边框,如果具有边框,则确定边框的样式。 它还确定父窗口是否负责绘制文本。 有关详细信息,请参阅所有者绘制状态栏。

默认情况下,文本在状态栏的指定部分中左对齐。可以在文本中嵌入制表符,使其居中或右对齐。 单个制表符右侧的文本居中,第二个制表符右侧的文本右对齐。
若要从状态栏中检索文本,请使用 状态获取长度 和 状态获取文本 消息。如果应用程序使用只有一个部分的状态栏,
则可以使用 设置文本、获取文本和 文本长度 消息来执行文本操作。 这些消息仅处理索引为零的部分,使你可以将状态栏视为静态文本控件。

若要在不创建状态栏的情况下显示状态行,请使用 状态栏字 函数。 函数使用与状态栏的窗口过程相同的技术来绘制状态,但它不会自动设置状态信息的大小和位置。 
调用函数时,必须指定状态信息的大小和位置,以及要在其中绘制它的窗口的设备上下文。
简单模式状态栏
通过向状态栏发送 状态简单样式 消息,将状态栏置于“简单模式”。简单模式状态栏仅显示一个部分。设置窗口的文本后,窗口将失效,但在下一窗口重绘之前不会重绘。
等待消息可最大程度地减少重绘窗口的次数,从而减少屏幕闪烁。 简单模式状态栏可用于在用户滚动浏览菜单时显示菜单项的帮助文本。

状态栏在简单模式下显示的字符串与在非简单模式下显示的字符串分开维护。 这意味着你可以将窗口置于简单模式,设置其文本,并切换回非简单模式,
而不会更改非简单模式文本。设置简单模式状态栏的文本时,可以指定除 父窗绘制 之外的任何绘图技术。 简单模式状态栏不支持所有者绘图。
状态设置文本——参数样式
中文名字英文名称常量数值释义
凹陷边框00文本带有边框,显示位置低于窗口平面。
不带边框SBT_NOBORDERS0x100文本不带边框。
父窗绘制SBT_OWNERDRAW0x1000文本由父窗口绘制。注意:简单模式状态栏不支持所有者绘图。
凸起边框SBT_POPOUT0x200文本带有边框,显示位置高于窗口平面。
反向显示SBT_RTLREADING0x400系统将以与父窗口中文本相反的方向显示文本。
忽略制表SBT_NOTABPARSING0x800将忽略 Tab 字符。
默认状态栏消息处理
本部分介绍由预定义类的窗口过程处理的消息。
中文名字常量数值英文名称释义
窗口创建WM_CREATE1初始化状态栏。
程序关闭WM_DESTROY2释放为状态栏分配的资源。
获取字体WM_GETFONT0x31返回状态栏用于绘制其文本的当前字体的句柄。
获取文本WM_GETTEXT13将文本从状态栏的第一部分复制到缓冲区。 它返回一个 32 位值,该值指定文本的长度(以字符为单位)以及用于绘制文本的技术。
文本长度WM_GETTEXTLENGTH14返回一个 32 位值,该值指定状态栏第一部分中文本的长度(以字符为单位),以及用于绘制文本的技术。
区外鼠标WM_NCHITTEST0x84如果鼠标光标位于大小调整手柄中,导致系统显示大小调整光标,则返回 HTBOTTOMRIGHT 值。 如果鼠标光标不在大小调整手柄中,状态栏会将此消息传递给 DefWindowProc 函数。
窗口重绘WM_PAINT15绘制状态栏的无效区域。 如果 wParam 参数为非 NULL,则控件假定该值是 HDC 并使用该设备上下文进行绘制。
指定字体WM_SETFONT0x30在状态栏的设备上下文中选择字体句柄。
设置文本WM_SETTEXT12使用默认绘制操作将指定文本复制到状态栏的第一部分, (指定为零) 。 如果成功,则返回 TRUE ,否则返回 FALSE 。
窗口缩放WM_SIZE5根据父窗口工作区的当前宽度和状态栏当前字体的高度调整状态栏的大小。

状态栏——通知消息:

中文名字常量数值英文名称释义
控件单击左键-2NM_CLICK用户在控件上点击了鼠标左键。④数据:NMMOUSE 结构
控件双击左键-3NM_DBLCLK用户在控件上双击了鼠标左键。④数据:NMMOUSE 结构
控件单击右键-5NM_RCLICK用户在控件上点击了鼠标右键。④数据:NMMOUSE 结构
控件双击右键-6NM_RDBLCLK用户在控件上双击了鼠标右键。④数据:NMMOUSE 结构
状态模式改变-880SBN_SIMPLEMODECHANGE状态栏简单模式发生改变
发送消息——常数表
状态设置文本0x401SB_SETTEXTA设置状态窗口的指定部分中的文本。③参数:序号/样式(各1字节);④数据:内容文本;
序号=255单窗口;样式=0凹陷边框,0x100无边框,0x200凸起边框,0x400反向显示,0x800忽略制表,0x1000父窗口绘制
状态获取文本0x402SB_GETTEXTA从状态窗口的指定部分检索文本。③参数:序号;④数据:文本;
状态获取长度0x403SB_GETTEXTLENGTHA从状态窗口的指定部分检索文本的字数。③参数:序号;④数据:0;返回值:低字=字数,高字=样式
状态设置部件0x404SB_SETPARTS设置状态窗口中的部件数以及每个部件右边缘的坐标。③参数:数量;④数据:整数数组;
状态获取部件0x406SB_GETPARTS获取状态窗口中的部件数以及每个部件右边缘的坐标。③参数:数量;④数据:整数数组;返回部件数
状态获取边框0x407SB_GETBORDERS获取状态窗口的水平边框和垂直边框的当前宽度。③参数:0;④数据:3整数=0宽度,1高度,2边框宽;
状态最小高度0x408SB_SETMINHEIGHT设置状态窗口绘图区域的最小高度。③参数:高度;④数据:0;
状态简单样式0x409SB_SIMPLE指定状态窗口是显示简单文本还是上一个设置部件。③参数:是否简单;④数据:0;
状态边框矩形0x40ASB_GETRECT检索状态窗口中部件的边框。③参数:序号;④数据:矩形;
状态设置文字0x40BSB_SETTEXTW设置状态窗口的指定部分中的文本。③参数:序号/样式(各1字节);④数据:内容文本;
状态获取字数0x40CSB_GETTEXTLENGTHW从状态窗口的指定部分检索文本的字数。③参数:序号;④数据:0;返回值:低字=字数,高字=样式
状态获取文字0x40DSB_GETTEXTW从状态窗口的指定部分检索文本。③参数:序号;④数据:文本;
状态是否简单0x40ESB_ISSIMPLE检查状态栏控件以确定它是否处于简单模式。③参数:0;④数据:0;
状态设置图标0x40FSB_SETICON设置状态栏中部件的图标。③参数:序号;④数据:图标;
状态设置提示0x410SB_SETTIPTEXTA设置状态栏中部件的工具提示文本。③参数:序号;④数据:文本;
状态修改提示0x411SB_SETTIPTEXTW设置状态栏中部件的工具提示文本。③参数:序号;④数据:文本;
状态获取提示0x412SB_GETTIPTEXTA检索状态栏中部件的工具提示文本。③参数:序号/大小;④数据:文本;
状态获得提示0x413SB_GETTIPTEXTW检索状态栏中部件的工具提示文本。③参数:序号/大小;④数据:文本;
状态获取图标0x414SB_GETICON检索状态栏中部件的图标。③参数:序号;④数据:0;
控件设置宽字0x2005CCM_SETUNICODEFORMAT设置控件的 Unicode 字符格式标志。③参数:是否宽字;④数据:0;
控件获取宽字0x2006CCM_GETUNICODEFORMAT获取控件的 Unicode 字符格式标志。③参数:0;④数据:0;

状态栏——控件样式:

中文名字英文名称数值释义
顶部左侧CCS_TOP1使控件自身位于父窗口工作区的顶部,并将宽度设置为与父窗口的宽度相同。 默认情况下,工具栏具有此样式。
缩放调整CCS_NOMOVEY2导致控件在响应 WM_SIZE 消息时水平(而不是垂直)调整大小并移动自身。 如果使用CCS_NORESIZE,则此样式不适用。 默认情况下,标题窗口具有此样式。
底部右侧CCS_BOTTOM3使控件将自身定位在父窗口工作区的底部,并将宽度设置为与父窗口的宽度相同。 默认情况下,状态窗口具有此样式。
禁止缩放CCS_NORESIZE4防止控件在设置其初始大小或新大小时使用默认宽度和高度。 相反,控件使用在创建或调整大小的请求中指定的宽度和高度。
自由位置CCS_NOPARENTALIGN8防止控件自动移动到父窗口的顶部或底部。 相反,控件会将其位置保留在父窗口中,尽管更改了父窗口的大小。
如果还使用了CCS_TOP或CCS_BOTTOM,则会将高度调整为默认值,但位置和宽度保持不变。
拖动调整CCS_ADJUSTABLE0x20启用工具栏的内置自定义功能,使用户能够将按钮拖动到新位置,或通过将按钮从工具栏上拖动来删除按钮。
此外,用户可以双击工具栏以显示“ 自定义工具栏 ”对话框,使用户能够添加、删除和重新排列工具栏按钮。
禁止突显CCS_NODIVIDER0x40防止在控件顶部绘制双像素的突出显示。
垂直显示CCS_VERT0x80版本 4.70。 使控件垂直显示。
垂直左侧CCS_LEFT0x81版本 4.70。 使控件垂直显示在父窗口的左侧。
垂直缩放CCS_NOMOVEX0x82版本 4.70。 导致控件调整大小并垂直移动自身,而不是水平移动,以响应 WM_SIZE 消息。 如果使用CCS_NORESIZE,则此样式不适用。
垂直右侧CCS_RIGHT0x83版本 4.70。 使控件垂直显示在父窗口的右侧。
调整大小SBARS_SIZEGRIP0x100状态栏控件将包括状态栏右端的大小调整手柄。 大小调整手柄类似于大小调整边框;它是用户可以通过单击和拖动来重设父窗口大小的矩形区域。
工具提示SBT_TOOLTIPS0x800版本 4.71。使用此样式启用工具提示。
工具提示SBARS_TOOLTIPS0x800版本 5.80。与SBT_TOOLTIPS相同。 将此标志用于版本 5.00 或更高版本。

分页导航——使用说明:

分页控件是一个窗口容器,与没有足够的显示区域来显示其所有内容的窗口一起使用。 寻呼控件允许用户滚动到当前不在视图中的窗口区域。
当窗口没有足够的区域显示子窗口时,此控件非常有用。 例如,如果应用程序的工具栏不够宽,无法显示其所有项,则可以将工具栏分配给寻呼控件,
用户将能够向左或向右滚动以访问所有项。 还可以创建垂直滚动的寻呼控件。分配给寻呼程序控件的窗口称为 包含的窗口。
以下屏幕截图显示了页码控件中包含的工具栏。 寻呼控件以红色显示,以显示控件的哪些区域可见。

创建寻呼控件后,很可能想要为其分配包含的窗口。 如果包含的窗口是子窗口,则应使子窗口成为寻呼控件的子窗口,以便正确计算大小和位置。
然后发送 分页设置窗口 消息将窗口分配给分页控件。 请注意,此消息实际上不会更改包含窗口的父窗口;它只是分配包含的窗口。
如果包含的窗口是公共控件之一,它必须具有 禁止缩放 样式,以防止控件尝试将自身大小调整为页码页控件的大小。

进程寻呼控件通知 至少需要处理 分页滚动尺寸 通知。 如果不处理此通知并输入宽度或高度的值,则不会显示寻呼控件中的滚动箭头。这是因为寻呼控件使用分页滚动尺寸通知中提供的宽度或高度来确定包含窗口的“理想”大小。
以下示例演示如何处理 分页滚动尺寸 通知案例。 在此示例中,包含的窗口是一个工具栏控件,其中包含未知数量的按钮,大小未知。 该示例演示如何使用 工具总体大小 消息来确定工具栏中所有项的大小。
然后,该示例将所有项的宽度放入传递到通知的 分页滚区类 结构的 宽度 成员中。
判断(消息) 为 控件事件 公共事件(数据) //调用公共事件这段程序代码,④数据:包含多项事件信息的数据
程序段 公共事件(数据)
	整数 窗口=数据&,参数=.&4,事件=.&8,方向=.&30
	判断(方向)为 1,2,4,8 //向上向下向左向右
	.&42 =20;//修改默认滚动增量为20
	处理窗口(窗口,控件事件,参数,数据)
结束

分页导航——通知消息:

中文名字常量数值英文名称释义
控件释放鼠标-16NM_RELEASEDCAPTURE控件要释放鼠标捕捉
分页开始滚动-901PGN_SCROLL所包含窗口即将被滚动。④数据:分页滚向类 结构
分页滚动尺寸-902PGN_CALCSIZE获得所包含窗口的可滚动尺寸。④数据:分页滚区类 结构
分页热项更改-903PGN_HOTITEMCHANGE通知父窗口突出显示的热项已更改。④数据:分页热项类 结构
发送消息——常数表
分页设置窗口0x1401PGM_SETCHILD设置页码控件的包含窗口。③参数:0;④数据:窗口
分页重算大小0x1402PGM_RECALCSIZE强制控件重新计算包含窗口的大小。③参数:0;④数据:0
分页鼠标转发0x1403PGM_FORWARDMOUSE为页码控件启用或禁用鼠标转发。③参数:是否转发;④数据:0
分页设置背景0x1404PGM_SETBKCOLOR设置页码控件的当前背景色。③参数:0;④数据:颜色
分页获取背景0x1405PGM_GETBKCOLOR获取页码控件的当前背景色。③参数:0;④数据:0
分页设置边框0x1406PGM_SETBORDER设置页码控件的当前边框大小。③参数:0;④数据:像素
分页获取边框0x1407PGM_GETBORDER获取页码控件的当前边框大小。③参数:0;④数据:0
分页设置位置0x1408PGM_SETPOS设置页码控件的当前滚动位置。③参数:0;④数据:位置
分页获取位置0x1409PGM_GETPOS获取页码控件的当前滚动位置。③参数:0;④数据:0
分页设置按钮0x140APGM_SETBUTTONSIZE设置页码控件的当前按钮大小。③参数:0;④数据:像素
分页获取按钮0x140BPGM_GETBUTTONSIZE获取页码控件的当前按钮大小。③参数:0;④数据:0
分页按钮状态0x140CPGM_GETBUTTONSTATE设置页码控件指定按钮的状态。③参数:0;④数据:像素
分页超时行数0x140DPGM_SETSCROLLINFO设置超时值、每超时行数和每行像素。③参数:超时数;④数据:超时行数/每行像素(各2字节)
控件拖放接口0x2004PGM_GETDROPTARGET获取页码控件的 拖放目标对象 接口指针。③参数:0;④数据:@接口

分页框——控件样式:

中文名字英文名称长度作用解释
垂直滚动PGS_VERT0创建可垂直滚动的寻呼控件。 如果未指定方向样式,则这是默认方向。 此样式和 PGS_HORZ 样式是互斥的,不能组合使用。
水平滚动PGS_HORZ1创建可水平滚动的寻呼控件。 此样式和 PGS_VERT 样式是互斥的,不能组合使用。
悬停滚动PGS_AUTOSCROLL2当用户将鼠标悬停在其中一个滚动按钮上时,页导航控件将滚动。
支持拖放PGS_DRAGNDROP4包含的窗口可以是拖放目标。 如果某个项从寻呼器外部拖动到其中一个滚动按钮上,则页导航控件将自动滚动。

分页滚向类——通知消息:

中文名字英文名称长度作用解释
分页滚向类NMPGSCROLL46包含并接收页导航控件在滚动包含的窗口时使用的信息。
分页滚向类——成员表
中文英文类型作用解释
通知hdr通知类包含有关通知的信息的类结构。
闭键fwKeys整形发生滚动时关闭的修改键。0 所有修改键均未关闭。1 按下了 Shift 键。2 CONTROL 键已关闭。4 ALT键已关闭。
外框rcParent矩形类包含分页控件的客户端矩形。
方向iDir整数指示滚动的发生方向的值。1向上滚动。2向下滚动。4向左滚动。8向右滚动。
水平iXpos整数包含滚动操作之前包含窗口的水平滚动位置(以像素为单位)。
垂直iYpos整数包含滚动操作之前包含窗口的垂直滚动位置(以像素为单位)。
增量iScroll整数输入时,包含默认滚动增量(以像素为单位)。可以修改此成员以包含不同的滚动增量(正数值)。

分页滚区类——通知消息:

中文名字英文名称长度作用解释
分页滚区类NMPGCALCSIZE24包含并接收分页控件用于计算包含窗口的可滚动区域的信息。
分页滚区类——成员表
中文英文类型作用解释
通知hdr通知类包含有关通知的信息的类结构。
标志dwFlag整数指示所请求的维度的值。1=正在请求可滚动区域的宽度。2=请求可滚动区域的高度。
宽度iWidth整数接收可滚动区域所需的宽度(以像素为单位)。
高度iHeight整数接收可滚动区域所需的高度(以像素为单位)。

分页热项类——通知消息:

中文名字英文名称长度作用解释
分页热项类NMPGHOTITEM24包含与 分页热项更改 通知代码一起使用的信息。
分页热项类——成员表
中文英文类型作用解释
通知hdr通知类包含有关通知的信息的类结构。
旧项idOld整数指定前面突出显示的项的命令标识符。
新项idNew整数指定突出显示项的命令标识符。
原因dwFlags整数包含指示热项更改原因的标志。0x10没有以前的热项。0x20没有新的热项

链接框——使用简介:

链接框 控件是一个窗口,用于呈现标记文本,并在用户单击其嵌入的超链接时通知应用程序。 此控件提供了使用 “命令链接”按钮的便捷替代方法。
每个 链接框 控件都可以支持多个超链接,并且可以通过从零开始的索引访问每个超链接。 链接框 控件需要一个清单或指令,指定应使用版本 6 的 DLL。
链接标记
链接框 控件支持定位标记 (<>) 以及属性 HREF 和 ID。 HREF 可以是任何协议,例如 http、ftp 和 mailto。 ID 是可选名称,在 链接框 控件中是唯一的,
它与单个链接相关联。 还会根据链接在字符串中的位置为其分配从零开始的索引。 此索引用于访问链接。

链接属性
可以在每个链接的定位标记中设置每个链接的属性,也可以通过发送 链接修改属性 消息来设置。 通过在初始化字符串中指定属性来设置它只是初始化值。
可以通过后续使用 链接修改属性 消息来更改属性的值。

链接状态
链接项可以处于三种状态中的任何一种,由下表中的标志表示。
英文名称数值释义
LIS_FOCUSED1链接具有键盘焦点,按 Enter 可激活它。
LIS_ENABLED2链接已启用。
LIS_VISITED4用户已访问链接表示的 URL。
双向文本显示的限制
某些语言(如阿拉伯语或希伯来语)在 RTL) (从右到左书写;英语采用从左到右 (LTR) 。 将 RTL 与 LTR 组合称为双向文本。 使用 链接框 控件时,
混合使用资源字符串中的 LTR 和 RTL 宽字 或 HTML 定向标记构造(作为用于控制字符串流的双向流标记)可能不会产生预期结果。 
在所有情况下,链接框控件都不支持双向显示。 仅当知道简单的 LTR 或 RTL 布局足够时,才使用 链接框 控件。 否则,请考虑使用更先进的技术。
使用 链接框 通知
以下示例代码演示如何处理当用户单击 上一示例中的两个链接之一时生成的 链接框 通知。 当用户单击 网址 时,关联的网页将在默认浏览器中打开。
当用户单击应用程序定义的超链接时,将显示一个消息框。
判断(消息) 为 控件事件 公共事件(数据) //调用公共事件这段程序代码,④数据:包含多项事件信息的数据

程序段 公共事件(数据)
	整数 窗口=数据&,参数=.&4,事件=.&8,标识=.$28,链接=.$124
	判断(事件)为 -2,-4 //控件单击左键 控件按下回车
	信息框(0,链接,标识,信息图标)
结束

链接框——通知消息:

中文名字常量数值英文名称释义
控件单击左键-2NM_CLICK用户在控件上点击了鼠标左键。④数据:链接通知类
控件按下回车-4NM_RETURN控件获得键盘焦点并按下回车键
发送消息——常数表
链接是否点击0x700LM_HITTEST确定用户是否单击了指定链接。③参数:0;④数据:链接点类
链接首选高度0x701LM_GETIDEALHEIGHT检索控件当前宽度的链接的首选高度。③参数:0;④数据:0
链接修改属性0x702LM_SETITEM设置项的状态和属性。③参数:0;④数据:链接项类
链接获取属性0x703LM_GETITEM检索项的状态和属性。③参数:0;④数据:链接项类

链接框——控件样式:

中文名字英文名称数值作用解释
背景透明LWS_TRANSPARENT1背景混合模式是透明的。
忽略回车LWS_IGNORERETURN2当链接具有键盘焦点且用户按 Enter 时,控件将忽略击键并将其传递给主机对话框。
显示&字符LWS_NOPREFIX4Windows Vista。 如果文本包含与号,则会将其视为文本字符,而不是快捷键的前缀。
当前样式LWS_USEVISUALSTYLE8Windows Vista。 链接以当前视觉样式显示。
绘制通知LWS_USECUSTOMTEXT16Windows Vista。 绘制控件时会发送 NM_CUSTOMTEXT 通知,以便应用程序可以动态提供文本。
向右对齐LWS_RIGHT32Windows Vista。 文本右对齐。

链接项类——数据结构:

中文名字英文名称长度作用解释
链接项类LITEM4280用于设置和检索有关链接项的信息。
链接项类——成员表
中文英文类型作用解释
掩码mask整数标志的组合
序号iLink整数控件链接的索引。掩码:1
状态state整数1有键盘焦点,2启用链接,4已点击,8悬停突出,16定义颜色
标志stateMask整数状态项的标志组合。与状态相同。掩码:2。
标识szID[96]文本包含标识名称的宽字符串。掩码:4
链接szUrl[4168]文本包含链接表示的URL的宽字符串。掩码:8

链接通知类——通知消息:

中文名字英文名称长度作用解释
链接通知类NMLINK4292包含链接通知信息。
链接通知类——成员表
中文英文类型作用解释
通知hdr通知类包含有关通知的信息的类结构。
项目item链接项类有关链接项的信息的类结构

链接点类——通知消息:

中文名字英文名称长度作用解释
链接点类LHITTESTINFO4288用于获取与给定位置对应的链接的相关信息。
链接点类——成员表
中文英文类型作用解释
pt.x整数有关链接项的信息的类结构
pt.y整数命中测试的位置,以客户端坐标 (而不是屏幕坐标) 。
项目item链接项类有关链接项的信息的类结构

热键框——使用说明:

热键控件是一个窗口,允许用户输入要用作热键的击键组合。 热键是用户可按以快速执行操作的组合键。例如用户需要定义一个热键,用于激活指定窗口。
热键控件显示用户的选择并确保用户选择有效的组合键。 以下屏幕截图显示了用户按下 Alt 键后热键控件在对话框中的显示方式。

使用热键控件

当用户输入要用作热键的组合键时,键的名称将显示在热键控件中。 组合键可以包含一个修饰键(如CTRL、Alt或SHIFT)和一个随附的键(如字符键、箭头键、功能键等) 。

用户选择组合键后,应用程序将从热键控件检索组合键,并使用它在系统中设置热键。 从热键控件检索的信息包括一个标志,指示修饰键和随附密钥的虚拟密钥代码。

应用程序可以使用热键控件提供的信息来设置全局热键或特定于线程的热键。 全局热键与特定窗口相关联;它允许用户从系统的任何部分激活窗口。
应用程序使用 设置热键 消息设置全局热键。 每当用户按下全局热键时, 设置热键 中指定的窗口都会收到指定 0xF150 值的 系统命令 消息。
此消息会激活接收它的窗口。 在调用 设置热键 的应用程序退出之前,热键将保持有效。

特定于线程的热键会生成 热键消息 消息,该消息将发布到特定线程的开头,以便消息循环的下一次迭代将其删除。 应用程序使用 注册热键 函数设置线程特定的热密钥。

热键控制消息

创建热键控件后,应用程序使用三条消息与之交互:热键设置组合、 热键设置按键和 热键获取按键。 应用程序可以发送 热键设置组合 消息,以指定一组被视为无效热键的 CTRL、ALT 和 SHIFT 组合键。 如果应用程序指定了无效的组合键,则它还应指定用户选择无效组合时 要使用的默认修饰符组合。 当用户输入无效组合时,系统会对无效组合和默认组合执行逻辑 OR 操作。 结果被视为有效组合;它转换为字符串并显示在 控件中。 热键设置按键消息允许应用程序为热键控件设置热键组合。 创建热键控件时也会使用此消息。程序使用 热键获取按键 消息检索用户选择的热键的虚拟密钥代码和修饰符标志。

热键控制通知

热键控件不会通过 控件事件 消息发送任何通知代码。 但是,当用户更改 控件 的内容时,它将通过命令事件消息发送 编辑内容更改 通知。

默认热键消息处理

本部分介绍与热键控件一起使用的窗口过程处理的窗口消息。
中文名字常量数值英文名称释义
键入字符WM_CHAR0x102检索虚拟密钥代码。
窗口创建WM_CREATE1初始化热键控件,清除任何热键规则,并使用系统字体。
擦除背景WM_ERASEBKGND0x14隐藏插入点,调用 处理窗口 函数,然后再次显示插入符号。
切换控件WM_GETDLGCODE0x87返回 DLGC_WANTCHARS 和 DLGC_WANTARROWS 值的组合。
中文WM_GETFONT4检索字体。
键盘按下WM_KEYDOWN0x100如果键为 ENTER、TAB、空格键、DEL、ESC 或 BACKSPACE,则调用 处理窗口 函数。 如果键为 SHIFT、CTRL 或 Alt,它会检查组合是否有效,如果有效,则使用组合设置热键。 所有其他密钥都设置为热键,而无需先检查其有效性。
键盘松开WM_KEYUP0x101检索虚拟密钥代码。
失去焦点WM_KILLFOCUS8销毁插入点。
按下左键WM_LBUTTONDOWN0x201将焦点设置为窗口。
首创窗口WM_NCCREATE0x81设置 WS_EX_CLIENTEDGE 窗口样式。
窗口重绘WM_PAINT15绘制热键控件。
获得焦点WM_SETFOCUS7创建并显示插入点。
指定字体WM_SETFONT0x30设置字体。
ALT键字符WM_SYSCHAR0x107检索虚拟密钥代码。
ALT键按下WM_SYSKEYDOWN0x104如果键为 ENTER、TAB、空格键、DEL、ESC 或 BACKSPACE,则调用 处理窗口 函数。 如果键为 SHIFT、CTRL 或 Alt,它会检查组合是否有效,如果有效,则使用组合设置热键。 所有其他密钥都设置为热键,而无需先检查其有效性。
ALT键松开WM_SYSKEYUP0x105检索虚拟密钥代码。

如何检索和设置热键

本主题演示如何检索或设置热键控件的组合键。热键设置按键消息允许应用程序设置热键控件的热键组合。 应用程序使用 热键获取按键 消息检索用户选择的热键的虚拟密钥代码和修饰符标志。
使用热键框可以显示用户按下的组合键,使用 热键获取按键 消息从热键控件中检索组合键,然后使用 设置热键 消息设置全局热键。
程序段 按钮1_点击
  整数 键值=发送消息(热键框1, 热键获取按键, 0, 0)
  发送消息(窗体, 设置热键, 键值, 0)
结束

热键框——发送消息:

中文名字常量数值英文名称释义
热键设置按键0x401HKM_SETHOTKEY设置热键控件的热键组合。③参数:键码/修饰符(各1字节);④数据:0
热键获取按键0x402HKM_GETHOTKEY获取热键控件的键码和修饰符标志。③参数:0;④数据:0;返回值1SHIFT,2CTRL,4ALT,8扩展
热键设置组合0x403HKM_SETRULES定义热键控件的无效组合和默认修饰符组合。③参数:标志,1无,2SHIFT,4CTRL,8ALT,16S+C,32S+A,64C+A,128SCA;④数据:组合1SHIFT,2CTRL,4ALT,8扩展;

富编辑——使用说明

只写 ④数据 为控件事件;同时写 ③参数④数据 或不写时为单击左键
富编辑框——通知消息:
中文名字常量数值英文名称释义
编辑内容更改0x300EN_CHANGE通知无窗口富编辑控件的主机窗口发生了更改。④数据:CHANGENOTIFY 结构
编辑更新重绘0x400EN_UPDATE在编辑控件即将重绘自身时发送。③参数:控件号/通知码;④数据:编辑框
编辑内存不足0x500EN_ERRSPACE当编辑控件无法分配足够的内存时发送。③参数:控件号/通知码;④数据:编辑框
编辑字数超出0x501EN_MAXTEXT当前文本插入超过编辑控件的指定字符数时发送。③参数:控件号/通知码;④数据:编辑框
编辑水平滚动0x601EN_HSCROLL当用户单击编辑控件的水平滚动条时发送。③参数:控件号/通知码;④数据:编辑框
编辑垂直滚动0x602EN_VSCROLL单击垂直滚动条或滚动鼠标滚轮时发送。③参数:控件号/通知码;④数据:编辑框
编辑键盘鼠标0x0700EN_MSGFILTER通知富编辑控件的父窗口,该控件中的键盘或鼠标事件。④数据:MSGFILTER 结构
编辑超出大小0x0701EN_REQUESTRESIZE通知富编辑控件的父窗口,控件的内容小于或大于控件的窗口大小。④数据:REQRESIZE 结构
编辑选字更改0x0702EN_SELCHANGE通知富编辑控件的父窗口当前所选内容已更改。④数据:SELCHANGE 结构
编辑文件拖放0x0703EN_DROPFILES通知富编辑控件父窗口,用户正在尝试将文件拖放到控件中。④数据:ENDROPFILES 结构
编辑保护文本0x0704EN_PROTECTED通知富编辑控件的父窗口,用户正在执行的操作将更改受保护的文本范围。④数据:ENPROTECTED 结构
编辑校正手势0x0705EN_CORRECTTEXT通知富编辑控件父窗口发生了SYV_CORRECT手势,使父窗口有机会取消更正文本。④数据:ENCORRECTTEXT 结构
编辑撤销不足0x0706EN_STOPNOUNDO通知富编辑控件的父窗口该控件无法为其分配足够的内存来维持撤消状态。④数据:通知类
编辑换输入法0x0707EN_IMECHANGE通知富编辑控件的父级 IME 转换状态已更改。③参数:标识/代码;④数据:控件
编辑存剪切板0x0708EN_SAVECLIPBOARD通知富编辑控件的父窗口控件正在关闭,并且剪贴板包含信息。④数据:ENSAVECLIPBOARD 结构
编辑对象失败0x0709EN_OLEOPFAILED通知富编辑控件的父窗口,用户对组件对象模型(COM)对象的操作失败。④数据:ENOLEOPFAILED 结构
编辑对象读取0x070AEN_OBJECTPOSITIONS当控件在对象中读取时,通知富编辑控件的父窗口。④数据:OBJECTPOSITIONS 结构
编辑链接通知0x070BEN_LINK控件在收到各种消息时发送EN_LINK通知代码。④数据:ENLINK 结构
编辑拖放完成0x070CEN_DRAGDROPDONE通知富编辑控件的父窗口拖放操作已完成。④数据:通知类
编辑展开大纲0x070DEN_PARAGRAPHEXPANDED通知富编辑控件的父级已展开大纲。④数据:通知类
编辑页面更改0x070EEN_PAGECHANGE通知富编辑控件的父窗口页面已更改。
编辑无效字符0x070FEN_LOWFIRTF通知控件的父窗口收到不支持的RTF格式关键字。④数据:ENLOWFIRTF 结构
编辑从左到右0x0710EN_ALIGNLTR通知富编辑控件的父窗口段落方向已更改为从左到右。③参数:标识/代码;④数据:控件
编辑从右到左0x0711EN_ALIGNRTL通知富编辑控件的父窗口段落方向更改为从右到左。③参数:标识/代码;④数据:控件
编辑特定格式0x0712EN_CLIPFORMAT通知富编辑控件的父窗口,特定剪贴板格式发生粘贴。④数据:CLIPBOARDFORMAT 结构
编辑输入服务0x0713EN_STARTCOMPOSITION通知用户开始使用IME或文本服务框架键入的丰富编辑控件父窗口。④数据:通知类
编辑完成输入0x0714EN_ENDCOMPOSITION用户已输入新数据或已完成使用IME或文本服务框架的输入数据。④数据:ENDCOMPOSITIONNOTIFY 结构
富编辑框——发送消息:
中文名字常量数值英文名称释义
编辑获取字限0x425EM_GETLIMITTEXT获取编辑控件的当前文本限制。③参数:0;④数据:0;返回限制字数
编辑获取坐标0x426EM_POSFROMCHAR检索编辑控件中指定字符的工作区坐标。③参数:字符索引;④数据:0;返回低位是左,高位是顶
编辑坐标点位0x427EM_CHARFROMPOS获取编辑控件最靠近指定点的字符的信息。③参数:0;④数据:坐标类;返回字符索引
编辑光标可视0x431EM_SCROLLCARET将插入点滚动到编辑控件的视图中。③参数:0;④数据:0;
编辑粘贴格式0x432EM_CANPASTE确定富编辑控件是否可以粘贴指定的剪贴板格式。③参数:格式;④数据:0;返回非零可以粘贴
编辑显示区域0x433EM_DISPLAYBAND显示丰富编辑控件的一部分内容。 ③参数:0;④数据:矩形;
编辑选中范围0x434EM_EXGETSEL检索丰富编辑控件中所选内容的起始和结束字符位置。 ③参数:0;④数据:范围类;
编辑最大粘贴0x435EM_EXLIMITTEXT设置用户可键入或粘贴到富编辑控件的文本量的上限。 ③参数:0;④数据:数量(默认64K);
编辑字符行号0x436EM_EXLINEFROMCHAR确定哪个行包含富编辑控件中的指定字符。 ③参数:0;④数据:字符索引;返回行号索引
编辑设置选中0x437EM_EXSETSEL选择控件中的一系列字符或组件对象模型。 ③参数:0;④数据:范围类;
编辑查找文本0x438EM_FINDTEXT在富编辑控件中查找文本。查找方式 ③参数:方式1向下,2全字匹配,4分大小写;④数据:文字类;
编辑格式范围0x439EM_FORMATRANGE在特定设备的 Rich Edit 控件中格式化文本范围。 ③参数:是否呈现文本;④数据:格式范围类;
编辑取字格式0x43AEM_GETCHARFORMAT确定富编辑控件中的字符格式。 ③参数:0默认,1所选字符;④数据:字符格式类;
编辑获取事件0x43BEM_GETEVENTMASK检索富编辑控件的事件掩码。事件掩码指定控件发送到其父窗口的通知代码。 ③参数:0;④数据:0;返回:事件掩码
编辑对象接口0x43CEM_GETOLEINTERFACE获取丰富编辑控件的组件对象模型接口。 ③参数:0;④数据:@接口:富编辑对象;
编辑取段格式0x43DEM_GETPARAFORMAT检索丰富编辑控件中当前所选内容的段落格式。 ③参数:0;④数据:段落格式类;
编辑取选中字0x43EEM_GETSELTEXT检索格式编辑控件中当前选择的文本。 ③参数:0;④数据:缓冲区;
编辑隐藏选中0x43FEM_HIDESELECTION隐藏或显示富编辑控件中的选定内容。 ③参数:真=隐藏,假=显示;④数据:0;
编辑特殊粘贴0x440EM_PASTESPECIAL将特定剪贴板格式粘贴到富编辑控件中。 ③参数:格式;④数据:特殊粘贴类;
编辑超出通知0x441EM_REQUESTRESIZE强制富编辑控件将 编辑超出大小 通知代码发送到其父窗口。 ③参数:0;④数据:0;
编辑选中类型0x442EM_SELECTIONTYPE确定富编辑控件的选择内容的类型。 ③参数:0;④数据:0;返回:0为空,1文本,2对象,4多个字符,8多个对象
编辑背景颜色0x443EM_SETBKGNDCOLOR设置丰富编辑控件的背景色。 ③参数:真=系统颜色,假=指定颜色;④数据:颜色值;返回原始背景色。
编辑改字格式0x444EM_SETCHARFORMAT在富编辑控件中设置字符格式。 ③参数:字符格式;④数据:字符格式类;
编辑设置事件0x445EM_SETEVENTMASK设置丰富编辑控件的事件掩码。事件掩码指定控件发送到其父窗口的通知代码。 ③参数:0;④数据:事件掩码;
编辑回调对象0x446EM_SETOLECALLBACK为丰富编辑控件提供富编辑回调对象,控件使用该对象从客户端获取与 OLE 相关的资源和信息。 ③参数:0;④数据:对象;
编辑改段格式0x447EM_SETPARAFORMAT在富编辑控件中设置当前选定内容的段落格式。 ③参数:0;④数据:段落格式类;
编辑设备行宽0x448EM_SETTARGETDEVICE设置用于“所见即所得”的目标设备和行宽, (WYSIWYG) 丰富编辑控件中的格式设置。 ③参数:设备;④数据:线条宽度;
编辑传数据流0x449EM_STREAMIN将富编辑控件的内容替换为由应用程序定义的编辑流回调函数提供的数据流。 ③参数:选项;④数据:编辑流类;选项:1文本,2RTF;控件字 \objattph 后跟空格表示对象位置。
选项组合标志:0x10宽字符文本,0x20其他代码页(0xFDE90021高位65001是CP_UTF8),0x4000仅流式传输所有语言通用的关键字,0x8000数据流将替换当前所选内容
编辑取数据流0x44AEM_STREAMOUT将富编辑控件的内容传递给由应用程序定义的编辑流回调函数。 ③参数:选项;④数据:编辑流类;选项:1文本,2RTF,3空格代替对象的RTF,4对象文本;
选项组合标志:0x10宽字符文本,0x20其他代码页(0xFDE90021高位65001是CP_UTF8),0x4000仅流式传输所有语言通用的关键字,0x8000数据流将替换当前所选内容
编辑字符范围0x44BEM_GETTEXTRANGE从丰富编辑控件中检索指定的字符范围。 ③参数:0;④数据:文字类;
编辑前后断字0x44CEM_FINDWORDBREAK查找指定字符位置之前或之后的下一个断字符,或检索有关该位置的字符的信息。 ③参数:操作;④数据:位置;
操作:0=查找以单词开头的指定位置之前最近的字符。 1=查找在指定位置后开始单词的下一个字符。2=如果指定位置处的字符是分隔符,则返回真,否则返回假。
3=返回字符在指定位置的字符类和断字符标志。4=查找在指定位置之前开始单词的下一个字符。 此值在 CTRL+向左键处理期间使用。
5=查找在指定位置后开始单词的下一个字符。 此值在 CTRL+向右键处理期间使用。6=在指定位置之前查找下一个单词结尾。7=查找指定位置后的下一个词尾分隔符。
编辑设置选项0x44DEM_SETOPTIONS设置富编辑控件的选项。 ③参数:1指定选项,2增加选项,3保留新项,4异或选项;④数据:1双击时自动选择单词,
0x40向上滚动,0x80水平滚动,0x100选中反显,0x800只读,0x1000允许多行,0x8000保留所选,0x01000000选择整行,0x00400000竖向文字;
编辑获取选项0x44EEM_GETOPTIONS检索富编辑控件选项。 ③参数:0;④数据:0;返回当前选项标志值的组合。
编辑搜索文本0x44FEM_FINDTEXTEX查找格式编辑控件中的文本。查找方式 ③参数:0;④数据:1向下,2全字匹配,4分大小写;④数据:查找文字类;
编辑分词函数0x450EM_GETWORDBREAKPROCEX检索当前注册的扩充编辑控件的扩展分词过程的地址。 ③参数:0;④数据:0;
编辑设置分词0x451EM_SETWORDBREAKPROCEX设置丰富编辑控件的扩展分词过程。 ③参数:0;④数据:编辑分词回调;
编辑撤销次数0x452EM_SETUNDOLIMIT设置可存储在丰富编辑控件的撤消队列中的最大操作数。 ③参数:数值;④数据:0;
编辑重复操作0x454EM_REDO向丰富编辑控件发送重做消息,以重复控件重做队列中的下一个操作。 ③参数:0;④数据:0;
编辑能否重复0x455EM_CANREDO确定控制重做队列中是否有任何操作。 ③参数:0;④数据:0;返回0无队列,否则可重做
编辑撤销类型0x456EM_GETUNDONAME检索下一个撤消操作的类型。 ③参数:0;④数据:0;返回:0未知,1键入操作。2删除操作。3拖放操作。4剪切操作。5粘贴操作。6自动表格插入
编辑重做类型0x457EM_GETREDONAME检索重做队列中下一个操作的类型。③参数:0;④数据:0;返回:0未知,1键入操作。2删除操作。3拖放操作。4剪切操作。5粘贴操作。6自动表格插入
编辑阻止撤销0x458EM_STOPGROUPTYPING阻止控件将其他键入操作收集到当前撤消操作中。 ③参数:0;④数据:0;
编辑文本模式0x459EM_SETTEXTMODE设置富编辑控件的文本模式或撤消级别。 如果控件包含任何文本,则消息失败。 ③参数:模式;④数据:0;
编辑获取模式0x45AEM_GETTEXTMODE获取丰富的编辑控件的当前文本模式和撤消级别。 ③参数:0;④数据:0;返回:文本模式
编辑链接检测0x45BEM_AUTOURLDETECT启用或禁用富编辑控件对超链接的自动检测。③参数:0禁用检测,1识别路径域名,2识别邮件,4识别电话,8识别东亚域名,
16识别盘符路径,32禁止拉丁文、希腊语和西里尔文的域名;④数据:0默认名字,或者news:http:ftp:telnet:等等
编辑是否检测0x45CEM_GETAUTOURLDETECT指示是否在富编辑控件中启用自动 URL 检测。 ③参数:0;④数据:0;返回1活动检测,0非活动
编辑改调色板0x45DEM_SETPALETTE更改富编辑控件用于其显示窗口的调色板。 ③参数:调色板;④数据:0;
编辑获取文本0x45EEM_GETTEXTEX获取富编辑控件中的文本。 ③参数:取文字类;④数据:文本缓冲区;
编辑文本长度0x45FEM_GETTEXTLENGTHEX以各种方式计算文本长度。 ③参数:文字长度类;④数据:0;返回字数
编辑显滚动条0x460EM_SHOWSCROLLBAR显示或隐藏丰富编辑控件的主机窗口中的滚动条之一。 ③参数:0水平,1垂直;④数据:真=显示,假=隐藏;
编辑设置文本0x461EM_SETTEXTEX插入替换文本,可使用代码页和格式文本。 ③参数:改文字类;④数据:文字内容;开头使用“{\rtf”或“{urtf”序列,则使用 RTF 读取器读取文本。
编辑设置标点0x464EM_SETPUNCTUATION设置富编辑控件的标点符号。 ③参数:1以下标点,2前导符号,3溢出,4分隔符;④数据:标点类;
编辑获取标点0x465EM_GETPUNCTUATION获取富编辑控件的当前标点符号。 ③参数:1以下标点,2前导符号,3溢出,4分隔符;④数据:标点类;
编辑设置换行0x466EM_SETWORDWRAPMODE设置丰富编辑控件的自动换行和断字选项。 ③参数:0x010自动换行,0x020中日韩英断字,0x040识别溢出,0x080设为级别1,0x100级别2,0x200自定义符号;④数据:0;
编辑获取换行0x467EM_GETWORDWRAPMODE获取丰富编辑控件的当前换行和分词选项。 ③参数:0;④数据:0;
编辑改合成色0x468EM_SETIMECOLOR为丰富编辑控件设置输入法编辑器合成颜色。 ③参数:0;④数据:合成色类;
编辑取合成色0x469EM_GETIMECOLOR检索输入法编辑器合成颜色。 ③参数:0;④数据:合成色类;
编辑改输入项0x46AEM_SETIMEOPTIONS设置输入法编辑器选项。 ③参数:1指定选项,2组合添加,3保留指定,4独占异或;④数据:1禁用IME,2输入焦点时启用IME,4输入焦点时禁用IME,
8输入焦点时关闭IME状态窗口,0x20使用的注释,0x40输入焦点时激活IME,0x80输入焦点时停用IME,0x100输入焦点时还原IME,0x400单独的组合字符串编辑器;
编辑取输入项0x46BEM_GETIMEOPTIONS获取输入法编辑器选项。 ③参数:0;④数据:0;
编辑转换坐标0x46CEM_CONVPOSITION此消息未实现。 ③参数:0;④数据:0;
编辑改语言项0x478EM_SETLANGOPTIONS在丰富编辑控件中设置输入法编辑器和亚洲语言支持的选项。 ③参数:0;④数据:选项;
编辑取语言项0x479EM_GETLANGOPTIONS获取输入法编辑器的丰富编辑控件选项设置和亚洲语言支持。 ③参数:0;④数据:0;返回:语言选项
编辑输入模式0x47AEM_GETIMECOMPMODE检索丰富编辑控件的当前输入法编辑器模式。 ③参数:0;④数据:0;返回:0未打开。1真内联模式。2级别2。3级别2.5。4特殊界面
编辑查找文字0x47BEM_FINDTEXTW在富编辑控件中查找宽文本。查找方式 ③参数:方式1向下,2全字匹配,4分大小写;④数据:文字类;
编辑搜索文字0x47CEM_FINDTEXTEXW查找格式编辑控件中的宽文本。查找方式 ③参数:0;④数据:1向下,2全字匹配,4分大小写;④数据:查找文字类;
编辑转换输入0x47DEM_RECONVERSION重新转换对话框调用输入法编辑器。 ③参数:0;④数据:0;
编辑设置偏差0x47EEM_SETIMEMODEBIAS为丰富编辑控件设置输入法编辑器模式偏差。 ③参数:1名字偏差,2没有偏差;④数据:与参数相同;
编辑获取偏差0x47FEM_GETIMEMODEBIAS检索富编辑控件的输入法编辑器模式偏差。 ③参数:0;④数据:0;
编辑设置双向0x4C8EM_SETBIDIOPTIONS设置富编辑控件中双向选项的当前状态。 ③参数:0;④数据:双向信息类;
编辑获取双向0x4C9EM_GETBIDIOPTIONS获取富编辑控件中双向选项的当前状态。 ③参数:0;④数据:双向信息类;
编辑设置版式0x4CAEM_SETTYPOGRAPHYOPTIONS设置丰富编辑控件的版式选项的当前状态。 ③参数:1高级换行格式,2简单换行;④数据:与参数相同;
编辑获取版式0x4CBEM_GETTYPOGRAPHYOPTIONS返回丰富编辑控件的版式选项的当前状态。 ③参数:0;④数据:0;
编辑设置样式0x4CCEM_SETEDITSTYLE设置格式编辑控件的当前编辑样式标志。 ③参数:样式;④数据:与参数相同;
编辑获取样式0x4CDEM_GETEDITSTYLE检索当前编辑样式标志。 ③参数:0;④数据:0;
编辑轮廓外形0x4DCEM_OUTLINE未实现。 ③参数:0;④数据:0;
编辑取滚动点0x4DDEM_GETSCROLLPOS获取编辑控件的当前滚动位置。 ③参数:0;④数据:坐标类;
编辑改滚动点0x4DEEM_SETSCROLLPOS将富编辑控件的内容滚动到指定点。 ③参数:0;④数据:坐标类;
编辑设置字号0x4DFEM_SETFONTSIZE设置富编辑控件中所选文本的字号。 ③参数:-1637 到 1638磅;④数据:0;
编辑获取缩放0x4E0EM_GETZOOM获取多行编辑控件或丰富编辑控件的当前缩放比例。缩放比例始终在 1/64 和 64 之间。 ③参数:分子;④数据:分母;
编辑设置缩放0x4E1EM_SETZOOM设置获取多行编辑控件或丰富编辑控件的当前缩放比例。缩放比例始终在 1/64 和 64 之间。③参数:分子;④数据:分母;
编辑获取视图0x4E2EM_GETVIEWKIND未使用。 ③参数:0;④数据:0;
编辑设置视图0x4E3EM_SETVIEWKIND未使用。 ③参数:0;④数据:0;
编辑获取页面0x4E4EM_GETPAGE未使用。 ③参数:0;④数据:0;
编辑设置页面0x4E5EM_SETPAGE未使用。 ③参数:0;④数据:0;
编辑获取连字0x4E6EM_GETHYPHENATEINFO检索有关富编辑控件的连字的信息。 ③参数:连字类;④数据:0;
编辑设置连字0x4E7EM_SETHYPHENATEINFO设置富编辑控件执行断字的方式。 ③参数:连字类;④数据:0;
编辑获取布局0x4EBEM_GETPAGEROTATE获取富编辑控件中的文本布局。 ③参数:0;④数据:0;返回布局相当于旋转角度:0=0度,1=270度,2=180度,3=90度,5蒙古文
编辑设置布局0x4ECEM_SETPAGEROTATE设置富编辑控件中的文本布局。 ③参数:0左右/上下,1上下-右左,2右左-下上,3下上-左右,5上下-左右;④数据:0;
编辑取字偏差0x4EDEM_GETCTFMODEBIAS获取富编辑控件中文本服务框架模式偏差值。 ③参数:0;④数据:0;
编辑改字偏差0x4EEEM_SETCTFMODEBIAS设置富编辑控件中文本服务框架 (TSF) 模式偏差。 ③参数:0无,1文件名,2名称,3阅读,4日期
,5对话,6数字,7平假名,8片假名,9朝鲜文,10半角片假,11全角字母,12半角字母;④数据:0;
编辑获取键盘0x4F0EM_GETCTFOPENSTATUS确定文本服务框架 (TSF) 键盘是打开还是关闭。 ③参数:0;④数据:0;返回:真=打开,假=关闭
编辑设置键盘0x4F1EM_SETCTFOPENSTATUS打开或关闭文本服务框架 (TSF) 键盘。 ③参数:真=打开,假=关闭;④数据:0;
编辑合成文本0x4F2EM_GETIMECOMPTEXT检索输入法编辑器合成文本。 ③参数:合成字类;④数据:缓冲区;
编辑东亚区域0x4F3EM_ISIME使用丰富编辑控件的当前输入区域设置确定是东亚区域设置。 ③参数:0;④数据:0;
编辑输入功能0x4F4EM_GETIMEPROPERTY检索与当前输入区域设置关联的输入法编辑器的属性和功能。 ③参数:功能属性;④数据:0;
编辑获取对象0x50DEM_GETQUERYRTFOBJ未实现。 ③参数:0;④数据:0;
编辑设置对象0x50EEM_SETQUERYRTFOBJ未实现。 ③参数:0;④数据:0;
编辑获取纠错0x4E9EM_GETAUTOCORRECTPROC获取指向应用程序定义的 编辑纠错回调 函数的 指针。 ③参数:0;④数据:0;
编辑设置纠错0x4EAEM_SETAUTOCORRECTPROC定义当前自动更正回调过程。 ③参数:编辑纠错回调;④数据:0;
编辑调用纠错0x4FFEM_CALLAUTOCORRECTPROC调用设置的自动更正回调函数,前提是插入点前面的文本是自动更正的候选项。 ③参数:宽字符;④数据:0;
编辑获取表格0x509EM_GETTABLEPARMS检索表行的表参数和指定数量的单元格参数。 ③参数:表行类;④数据:表列类;
编辑设置表格0x533EM_SETTABLEPARMS更改表中行的参数。 ③参数:表行类;④数据:表列类;
编辑设置扩展0x513EM_SETEDITSTYLEEX设置当前的扩展编辑样式标志。 ③参数:样式;④数据:同参数;
编辑获取扩展0x514EM_GETEDITSTYLEEX检索当前的扩展编辑样式标志。 ③参数:0;④数据:0;
编辑获取故事0x522EM_GETSTORYTYPE获取故事类型。 ③参数:0;④数据:0;
编辑设置故事0x523EM_SETSTORYTYPE设置故事类型。 ③参数:索引;④数据:类型;
编辑获取省略0x531EM_GETELLIPSISMODE检索当前省略号模式。 ③参数:0;④数据:@模式;0不使用省略号。1末尾的省略号 (强行中断) 。3结尾的省略号 (分词) 。
编辑设置省略0x532EM_SETELLIPSISMODE设置当前省略号模式。 ③参数:0;④数据:0不使用省略号,1末尾的省略号 (强行中断) 。3结尾的省略号 (分词) ;
编辑获取触摸0x536EM_GETTOUCHOPTIONS检索与丰富编辑控件关联的触摸选项。 ③参数:1触摸手柄是否可见,2未实现;④数据:0;
编辑设置触摸0x537EM_SETTOUCHOPTIONS设置与丰富编辑控件关联的触摸选项。 ③参数:1显示或隐藏触摸手柄,2启用或禁用触摸手柄;④数据:真/假;
编辑插入图像0x53AEM_INSERTIMAGE将所选内容替换为显示图像的数据。 ③参数:0;④数据:编辑图像类;
编辑自动化名0x540EM_SETUIANAME设置 UI 自动化 (UIA) 的丰富编辑控件的名称。 ③参数:0;④数据:名称;
编辑省略状态0x542EM_GETELLIPSISSTATE检索当前省略号状态。 ③参数:0;④数据:0;显示省略号则返回真,否则返回假。

编辑纠错回调——函数结构:

中文名字英文名称参数作用解释
编辑纠错回调Autocorrectproc5为输入到丰富编辑控件中的文本提供应用程序定义的自动错误更正。
编辑纠错回调——成员表
中文英文类型作用解释
语言langid整数标识要用于自动更正的自动更正文件的语言 ID。
候选pszBefore整数自动更正候选字符串。
更正pszAfter整数生成的自动更正字符串(如果未 ATP_NOCHANGE返回值)。
字数cchAfter整数自动更正字符串的字符计数。
尾字pcchReplaced整数候选字符串要替换为自动更正字符串的尾随字符计数。

编辑纠错回调——返回值:

英文名称数值作用解释
ATP_NOCHANGE0无更改。
ATP_CHANGE1更改但不替换大多数分隔符,并且不要替换未更改的尾随字符范围, (保留其格式) 。
ATP_NODELIMITER2更改但不替换未更改的尾随字符范围。
ATP_REPLACEALLTEXT4替换尾随字符,即使它们未更改, (对整个替换字符串) 使用相同的格式。

编辑分词回调——函数结构:

中文名字英文名称参数作用解释
编辑分词回调Editwordbreakprocex4确定指定文本中字符的断字符索引或字符类和分词标志。
编辑分词回调——成员表
中文英文类型作用解释
文字pchText整数指向当前位置的文本的指针。
长度cchText整数缓冲区 中代码指定方向的字符数。
字集bCharSet整数文本的字符集。
功能action整数指向变量的指针,回调函数将该变量设置为实际读取或写入的字节数。

编辑流回调——函数结构:

中文名字英文名称参数作用解释
编辑流回调Editstreamcallback4用于将数据流传入或传出丰富的编辑控件。
编辑流回调——成员表
中文英文类型作用解释
标识dwCookie整数编辑流类 结构的 标识 成员指定的值。
指针pbBuff整数指向要从中读取或写入的缓冲区的指针。
长度cb整数要读取或写入的字节数。
实长pcb整数指向变量的指针,回调函数将该变量设置为实际读取或写入的字节数。

编辑连字回调——函数结构:

中文名字英文名称参数作用解释
编辑连字回调HyphenateProc4它确定如何在丰富编辑控件中执行断字。
编辑连字回调——成员表
中文英文类型作用解释
标识pszWord整数指向用于连字符的单词的指针。
指针langid整数控件的当前语言 ID。
长度ichExceed整数传递的字符串中超出行宽的字符的索引。
实长phyphresult整数指向断字结果填充的 断字类 结构的指针。

断字类——数据结构:

中文名字英文名称长度作用解释
断字类HYPHRESULT12包含有关丰富编辑控件中断字结果的信息。
断字类——成员表
中文英文类型作用解释
种类khyph整数断字的类型
位置ichHyph整数发生断字符的传递字符串中 宽字符 的索引。
换字chHyph整数断字需要替换、添加或更改时使用的字符。如果不需要新字符,则值为零。

连字类——数据结构:

中文名字英文名称长度作用解释
连字类HYPHENATEINFO8包含有关丰富编辑控件的连字信息。
连字类——成员表
中文英文类型作用解释
大小cbSize整形指定结构的大小(以字节为单位)。
区域dxHyphenateZone整形缇大小 (1/1440 英寸) ,其边距附近不包括连字。如果空格字符比此值更接近边距,请不要将以下单词连字符。
回调pfnHyphenate整数客户端定义的 编辑连字回调 回调函数。

编辑图像类——数据结构:

中文名字英文名称长度作用解释
编辑图像类RICHEDIT_IMAGE_PARAMETERS24定义要由 编辑插入图像 消息插入的图像的属性。
编辑图像类——成员表
中文英文类型作用解释
宽度xWidth整数图像的宽度(以 像素 为单位) (0.01 毫米) 。
高度yHeight整数图像的宽度(以 像素 为单位) (0.01 毫米) 。
上升Ascent整数如果是基线对齐,则此参数是图像顶部超出文本基线的距离(以 像素 为单位)。 如果是基线对齐且上升为零,则图像底部位于文本基线处。
对齐Type整数图像的垂直对齐方式。0顶部对齐,1底部对齐,2文本基线对齐
备注pwszAlternateText整数图像的备用文本。
图像pIStream整数包含图像数据的流。

双向信息类——数据结构:

中文名字英文名称长度作用解释
双向信息类BIDIOPTIONS8包含有关丰富编辑控件的双向信息。
双向信息类——成员表
中文英文类型作用解释
大小cbSize整数指定结构的大小(以字节为单位)。
掩码wMask整形指定效果的标志,跟效果值相同。掩码效果标志对照
效果wEffects整形指示效果或当前状态。1默认段落方向。2纯文本布局。4 !"#&'()*+,-./:;<=> 被视为强 LTR 字符。8上下文段落方向性处于活动状态。
,$10上下文段落对齐方式处于活动状态。$20重新计算双向信息并重绘。0x40加减号没有隐式方向斜杠字符为通用分隔符。0x80宽字符双向算法 (UBA) 。

双向信息掩码和效果标志——对照表:

掩码名字掩码值作用效果名称效果值作用
BOM_CONTEXTALIGNMENT0x10BOE_CONTEXTALIGNMENT值有效。BOE_CONTEXTALIGNMENT0x10 如果此标志为 1,则上下文段落对齐方式处于活动状态。 此功能仅用于纯文本控件。 活动时,如果第一个强方向字符为 LTR,则段落对齐方式设置为PFA_LEFT;如果第一个强方向字符为 RTL,则PFA_RIGHT。 如果控件没有强方向字符,则当控件重新获得焦点时,将根据键盘语言的方向性选择对齐方式 (默认值:0) 。
BOM_CONTEXTREADING8BOE_CONTEXTREADING值有效。BOE_CONTEXTREADING8 如果此标志为 1,则上下文段落方向性处于活动状态。 此功能仅用于纯文本控件。 活动时,如果第一个强方向字符为 LTR,则PFE_RTLPARA段落方向性效果设置为 0;如果第一个强方向字符为 RTL,则为 1。 如果控件没有强方向字符,则根据 的方向性选择方向。控件重新获得焦点时的键盘语言 (默认值:0) 。
BOM_FORCERECALC0x20BOE_FORCERECALC有效BOE_FORCERECALC0x20Windows 8:强制富编辑控件重新计算双向信息,然后重绘控件。
BOM_LEGACYBIDICLASS0x40BOE_LEGACYBIDICLASS值有效。BOE_LEGACYBIDICLASS0x40 导致加号和减号字符被视为没有隐式方向的中性字符。 还会导致斜杠字符被视为通用分隔符。
BOM_NEUTRALOVERRIDE4BOE_NEUTRALOVERRIDE值有效。BOE_NEUTRALOVERRIDE4 如果此标志为 1,则为字符 !”#&' () *+,-./:;<=> 被视为强 LTR 字符 (默认值:0) 。
BOM_PLAINTEXT2BOE_PLAINTEXT值有效。BOE_PLAINTEXT2使用纯文本布局 (过时) 。
BOM_DEFPARADIR1BOE_RTLDIR值有效。BOE_RTLDIR1默认段落方向 - 表示对齐方式 (过时) 。
BOM_UNICODEBIDI0x80BOE_UNICODEBIDI值有效。BOE_UNICODEBIDI0x80 如果此标志为 1,则 Unicode 双向算法 (UBA) 用于富文本控件。 UBA 始终用于纯文本控件 (默认值:0) 。

范围类——数据结构:

中文名字英文名称长度作用解释
范围类CHARRANGE8指定编辑控件中的字符范围。
范围类——成员表
中文英文类型作用解释
cpMin整数紧邻范围中第一个字符的字符位置索引。
cpMax整数紧跟在范围中最后一个字符之后的字符位置。

查找文字类——数据结构:

中文名字英文名称长度作用解释
查找文字类FINDTEXTEXA20包含有关富编辑控件中的搜索操作的信息。
查找文字类——成员表
中文英文类型作用解释
chrg.cpMin整数要搜索的第一个字符的字符位置索引。
chrg.cpMax整数要搜索的最后一个字符之后的字符位置。-1是整个范围
文字lpstrText整数查找操作中使用的以 0 结尾的字符串。
chrgText.cpMin整数在其中找到文本的第一个字符的字符位置索引。
chrgText.cpMax整数在其中找到文本的最后一个字符之后的字符位置。

格式范围类——数据结构:

中文名字英文名称长度作用解释
格式范围类FORMATRANGE32丰富编辑控件用于为特定设备设置其输出格式的信息。
格式范围类——成员表
中文英文类型作用解释
设备hdc整数如果正在使用 编辑格式范围 将输出发送到设备,则为设备呈现的 HDC。
目标hdcTarget整数要格式化的目标设备的 HDC。
区域rc矩形类要呈现到 的 全区 矩形中的区域。 单位以缇为单位。
全区rcPage矩形类呈现设备上页面的整个区域。 单位以缇为单位。
chrg.cpMin整数紧邻范围中第一个字符的字符位置索引。
chrg.cpMax整数紧跟在范围中最后一个字符之后的字符位置。

字符格式类——数据结构:

中文名字英文名称长度作用解释
字符格式类CHARFORMATA64包含有关富编辑控件中的字符格式的信息。
字符格式类——成员表
中文英文类型作用解释
大小cbSize整数指定结构的大小(以字节为单位)。
掩码dwMask整数要格式化的目标设备的 HDC。
效果dwEffects整数1粗体,2斜体,4下划线,8删除线,$10受保护,$20链接,0x40000000窗口文本色;掩码:与效果值相同
高度yHeight整数字符高度,以缇为单位 (1/1440 英寸或打印机点 的 1/20)。掩码:0x80000000
偏移yOffset整数与基线之间的字符偏移量(以缇为单位)。负数为下标。掩码:0x10000000
字色crTextColor整数文本颜色。 如果指定了窗口文本颜色效果,则忽略此成员。掩码:0x40000000
字集bCharSet整数字符集值。以是为 逻辑字体类 结构的 字符集 成员指定的值之一。掩码:0x08000000
间距bPitchAndFamily整数字体系列和间距。与 逻辑字体类 结构的 间距 成员相同。
字体szFaceName[32]文本以 0 结尾的字符数组,用于指定字体名称。掩码:0x20000000

合成色类——数据结构:

中文名字英文名称长度作用解释
合成色类COMPCOLOR12包含合成字符串的颜色设置。
标点类——成员表
中文英文类型作用解释
文字crText整数文本的颜色。
背景crBackground整数背景颜色。
效果dwEffects整数字符效果值,1粗体,2斜体,4下划线,8删除线,$10受保护,$20链接,0x40000000窗口文本色。

合成字类——数据结构:

中文名字英文名称长度作用解释
合成字类IMECOMPTEXT8包含有关输入法编辑器 (IME) 在富编辑控件中的合成文本的信息。
合成字类——成员表
中文英文类型作用解释
大小cbSize整数指定结构的大小(以字节为单位)。
标志flags整数组合字符串的类型。1最终组合的字符串。

标点类——数据结构:

中文名字英文名称长度作用解释
标点类PUNCTUATION8包含有关在富编辑控件中使用的标点的信息。
标点类——成员表
中文英文类型作用解释
大小iSize整数标点字符缓冲区大小(以字节为单位)。
文字szPunctuation整数包含标点字符的缓冲区。

改文字类——数据结构:

中文名字英文名称长度作用解释
改文字类SETTEXTEX8包含用于向富编辑控件写入文本的信息。
改文字类——成员表
中文英文类型作用解释
标志flags整数指定文本操作的值。0=删除撤消堆栈和文本格式,替换所有文本。1保留撤消堆栈。2替换选定内容并保留格式文本。4输入新字符。8宽字符文本
码页codepage整数翻译中使用的代码页。0=ANSI,1200=Unicode

文字长度类——数据结构:

中文名字英文名称长度作用解释
文字长度类GETTEXTLENGTHEX8含有关如何计算富编辑控件的文本长度的信息。
文字长度类——成员表
中文英文类型作用解释
标志flags整数指定文本操作的值。0字符数,1行数,2精确答案,4近似答案,8字符数,16字节数
码页codepage整数翻译中使用的代码页。0=ANSI,1200=Unicode

取文字类——数据结构:

中文名字英文名称长度作用解释
取文字类GETTEXTEX20包含用于从富编辑控件获取文本的信息。
取文字类——成员表
中文英文类型作用解释
大小cb整数用于存储检索到的文本的缓冲区的大小(以字节为单位)。
标志flags整数指定文本操作的值。0默认所有文本,1回车转换行回车,2所选文本,4带结构特殊字符,8不含隐藏文本
码页codepage整数翻译中使用的代码页。0=ANSI,1200=Unicode
默字lpDefaultChar整数如果无法在指定的代码页中表示宽字符,则使用的字符。0=系统默认字符;
默认lpUsedDefChar整数指示是否使用了默认字符。如果宽字符不能在指定的代码页中表示,则为真

编辑流类——数据结构:

中文名字英文名称长度作用解释
编辑流类EDITSTREAM12丰富编辑控件使用信息将数据流传入或传出控件。
编辑流类——成员表
中文英文类型作用解释
标识dwCookie整数指定富编辑控件传递给回调函数的应用程序定义值。
结果dwError整数指示流式传入 (读取) 或流出 (写入) 操作的结果。 值为零表示没有错误。
回调pfnCallback整数指向回调函数的指针。控件重复调用回调函数,每次调用时传输一部分数据。

文字类——数据结构:

中文名字英文名称长度作用解释
文字类TEXTRANGEA/FINDTEXTA12富编辑控件的文本范围和搜索操作的信息。
文字类——成员表
中文英文类型作用解释
chrg.cpMin整数紧邻范围中第一个字符的字符位置索引。
chrg.cpMax整数紧跟在范围中最后一个字符之后的字符位置。
文字lpstrText整数查找操作中使用的以 0 结尾的字符串。

特殊粘贴类——数据结构:

中文名字英文名称长度作用解释
特殊粘贴类REPASTESPECIAL8包含标识粘贴对象的显示方面是否应基于对象的内容或表示对象的图标的信息。
特殊粘贴类——成员表
中文英文类型作用解释
方面dwAspect整数显示方面。1内容,4图标
数据dwParam整数方面数据。方面为图标则包含具有对象的图标视图的图元文件的句柄。

表行类——数据结构:

中文名字英文名称长度作用解释
表行类TABLEROWPARMS26定义表中行的属性。 定义包括 RTF规范中定义的相应 RTF 格式。
表行类——成员表
中文英文类型作用解释
大小cbRow字节此结构中的字节计数。
长度cbCell字节表列类中的字节计数。
格数cCell字节行中单元格的计数,最大为63。
行数cRow字节行计数。
左距dxCellMargin整数单元格中左右边距的大小(\trgaph)。
左缩dxIndent整数左缩进量,如果 fRTL 成员为 TRUE ,则为右缩进量, (类似于 \trleft) 。
高度dyHeight整数行的高度 (\trrh) 。
对齐nAlignment
fRTL
fKeep
fKeepFollow
fWrap
fIdentCells
整数对齐方式
右对齐
保持
保持跟随
换行
识别单元格
位置cpStartRow整数指示插入表格的位置的字符位置。 值 –1 指示所选内容的字符位置。
级别bTableLevel字节表嵌套级别 (仅 EM_GETTABLEPARMS) 。
索引iCell字节要插入或删除单元格的索引 (仅 EM_SETTABLEPARMS) 。

表列类——数据结构:

中文名字英文名称长度作用解释
表列类TABLECELLPARMS40定义表格行中单元格的属性。 定义包括 RTF规范中定义的相应 RTF 格式。
表列类——成员表
中文英文类型作用解释
宽度dxWidth整数单元格 (\cellx) 的宽度。
对齐nVertAlign
fMergeTop
fMergePrev
fVertical
fMergeStart
fMergeCont
整形垂直对齐
位于顶部
置前
垂直
置于起始
居中
着色wShading整形0.01% (\clshdng) 。 这将控制用于创建单元格背景色 (crForePat) 和图案背景色 (crBackPat) 的图案前景色的数量。
如果 wShading 为 0,则单元格背景为 crBackPat。 如果是 10000,则单元格背景为 crForePat。 中间的 wShading 值是两种图案颜色的混合。
左宽dxBrdrLeft整形左边框宽度,以缇为单位 (\clbrdrl\brdrwN) 。
上宽dyBrdrTop整形上边框宽度 (\clbrdrt\brdrwN) 。
右宽dxBrdrRight整形右边框宽度 (\clbrdrr\brdrwN) 。
下宽dyBrdrBottom整形底边框宽度 (\clbrdrb\brdrwN) 。
左边crBrdrLeft整数左边框颜色 (\clbrdrl\brdrcf) 。
上边crBrdrTop整数上边框颜色 (\clbrdrt\brdrcf) 。
右边crBrdrRight整数右边框颜色 (\clbrdrr\brdrcf) 。
下边crBrdrBottom整数底边框颜色 (\clbrdrb\brdrcf) 。
背景crBackPat整数背景色 (\clcbpat) 。
前景crForePat整数前景色 (\clcfpat) 。

富编辑控件文本模式——常量数值:

英文名称数值作用解释
设置文本模式参数
TM_PLAINTEXT1指示纯文本模式,其中控件类似于标准编辑控件。
TM_RICHTEXT2指示富文本模式,在该模式下,控件具有标准的丰富编辑功能。 格式文本模式是默认设置。
设置撤消级别参数
TM_SINGLELEVELUNDO4控件允许用户仅撤消撤消队列中的最后一个操作。
TM_MULTILEVELUNDO8控件支持多个撤消操作。 这是默认设置。 使用 编辑撤销次数 消息设置撤消操作的最大数目。
设置代码页参数
TM_SINGLECODEPAGE16控件仅允许英语键盘和对应于默认字符集的键盘。可以使用希腊语和英语。
这会阻止 Unicode 文本进入控件。如果控件必须限制为 ANSI 文本,请使用此值。
TM_MULTICODEPAGE32控件允许多个代码页和 Unicode 文本进入 控件。 这是默认设置。

富编辑控件文章故事类型——常量数值:

英文名称数值作用解释
tomFontStyleUpright0表示正常的直立字体样式。
tomFontStyleOblique1表示倾斜字体样式。
tomFontStyleItalic2表示斜体字体样式。
tomFontStretchDefault0没有定义的字体拉伸。
tomFontStretchUltraCondensed1超浓缩字体拉伸 (正常) 的 50%。
tomFontStretchExtraCondensed2额外压缩字体拉伸 (正常) 的 62.5%。
tomFontStretchCondensed3压缩字体拉伸 (正常) 的 75%。
tomFontStretchSemiCondensed4半浓缩字体拉伸 (正常) 的 87.5%。
tomFontStretchNormal5所有其他字体拉伸值相关的正常字体拉伸 (100%) 。
tomFontStretchSemiExpanded6半展开字体 (正常) 的 112.5%。
tomFontStretchExpanded7展开的字体拉伸 (正常) 的 125%。
tomFontStretchExtraExpanded8额外展开的字体拉伸 (正常) 的 150%。
tomFontStretchUltraExpanded9超扩展字体 (正常) 的 200%。
tomFontWeightDefault0默认字体粗细。
tomFontWeightThin100较细的字体粗细。
tomFontWeightExtraLight200额外轻量字体粗细。
tomFontWeightLight300浅色字体粗细。
tomFontWeightNormal400正常字体粗细。
tomFontWeightRegular400与 tomFontWeightNormal 相同。
tomFontWeightMedium500中等字体粗细。
tomFontWeightSemiBold600半粗体字体粗细。
tomFontWeightBold700粗体字体粗细。
tomFontWeightExtraBold800加粗字体粗细。
tomFontWeightBlack900字体粗细。
tomFontWeightHeavy900与 tomFontWeightBlack 相同。
tomFontWeightExtraBlack950额外的重字体粗细。
tomParaPropMathAlign0x437数学段落的对齐属性。
tomDocMathBuild0x80与 ITextDocument2::SetProperty 方法一起使用,可设置 tomMathAutoCorrect、 tomTeX 或 tomMathAlphabetics 的任意组合。
tomMathLMargin0x81显示数学的左边距。
tomMathRMargin0x82显示数学运算的右边距。
tomMathWrapIndent0x83用于显示数学的公式换行缩进。
tomMathWrapRight0x84公式右换行缩进,用于在从左到右 (LTR) 数学区域) 中显示数学 (。
tomMathPostSpace0x86显示数学公式后的空格。
tomMathPreSpace0x85显示数学公式前的空格。
tomMathInterSpace0x87数学段落中公式之间的间距。
tomMathIntraSpace0x88显示数学公式中的行之间的间距。
tomCanCopy0x89指示是否可以将数据复制到剪贴板。
tomCanRedo0x8a指示是否存在一个或多个重做操作。
tomCanUndo0x8b指示是否存在一个或多个撤消操作。
tomUndoLimit0x8c撤消堆栈计数限制。
tomDocAutoLink0x8d文档自动链接。
tomEllipsisMode0x8e省略号模式。
tomEllipsisState0x8f省略号状态。
tomEllipsisNone0省略号已禁用。
tomEllipsisEnd1省略号强制在行中的任何位置中断。
tomEllipsisWord3省略号强制在单词之间休息。
tomEllipsisPresent1省略号存在。
tomVTopCell1垂直合并单元格集中的顶部单元格。
tomVLowCell2垂直合并单元格集中除顶部单元格以外的任何单元格。
tomHStartCell4在水平合并的单元格集中启动单元格。
tomHContCell8水平合并单元格集中除开头之外的任何单元格。
tomRowUpdate1更新行,使表格行的属性由关联的文本范围标识。
tomRowApplyDefault0表行应用程序默认值
tomCellStructureChangeOnly1更改单元格宽度 () 或单元格计数 (更改列宽度和插入/删除列而不更改单元格边框属性,等等。)
tomRowHeightActual0x80b表行的实际高度。

富编辑控件事件掩码——常量数值:

英文名称数值作用解释
ENM_NONE0x00000000不发送通知
ENM_CHANGE0x00000001发送 编辑窗口更改 通知
ENM_UPDATE0x00000002发送 编辑更新重绘 通知
ENM_SCROLL0x00000004发送 编辑水平滚动和编辑垂直滚动 通知
ENM_SCROLLEVENTS0x00000008发送 编辑键盘鼠标 滚轮通知
ENM_DRAGDROPDONE0x00000010发送 编辑拖放完成 通知
ENM_PARAGRAPHEXPANDED0x00000020发送 编辑展开大纲 通知
ENM_PAGECHANGE0x00000040发送 编辑页面更改 通知
ENM_CLIPFORMAT0x00000080发送 编辑特定格式 通知
ENM_KEYEVENTS0x00010000发送 编辑键盘鼠标 键盘通知
ENM_MOUSEEVENTS0x00020000发送 编辑键盘鼠标 鼠标通知
ENM_REQUESTRESIZE0x00040000发送 编辑超出大小 通知
ENM_SELCHANGE0x00080000发送 编辑选字更改 通知
ENM_DROPFILES0x00100000发送 编辑文件拖放 通知
ENM_PROTECTED0x00200000发送 编辑保护文本 通知
ENM_CORRECTTEXT0x00400000发送 编辑校正手势 通知
ENM_IMECHANGE0x00800000发送 编辑换输入法 通知
ENM_LANGCHANGE0x01000000发送 语言更改 通知
ENM_OBJECTPOSITIONS0x02000000发送 编辑对象读取 通知
ENM_LINK0x04000000发送 编辑链接通知 通知
ENM_LOWFIRTF0x08000000发送 编辑无效字符 通知
ENM_STARTCOMPOSITION0x10000000发送 编辑输入服务 通知
ENM_ENDCOMPOSITION0x20000000发送 编辑完成输入 通知
ENM_GROUPTYPINGCHANGE0x40000000发送 分组打字更改 通知
ENM_HIDELINKTOOLTIP0x80000000发送 隐藏链接工具提示 通知

富编辑控件编辑样式标志——常量数值:

英文名称数值作用解释
SES_BEEPONMAXTEXT2如果用户尝试输入超过最大字符数,Rich Edit 将调用系统蜂鸣器。
SES_BIDI0x1000启用双向处理。 如果以下任一窗口样式处于活动状态,Rich Edit 会自动启用此功能: WS_EX_RIGHT、 WS_EX_RTLREADINGWS_EX_LEFTSCROLLBAR。 但是,在使用 ITextHost 的自定义实现时,此设置对于处理这些窗口样式很有用, (默认值:0) 。
SES_CTFALLOWEMBED0x00200000带 SP1 的 Windows XP:允许使用 TSF 插入嵌入对象 (默认值:0) 。
SES_CTFALLOWPROOFING0x00800000带 SP1 的 Windows XP:允许 TSF 校对提示 (默认值:0) 。
SES_CTFALLOWSMARTTAG0x00400000带 SP1 的 Windows XP:允许 TSF SmartTag 提示 (默认值:0) 。
SES_CTFNOLOCK0x10000000Windows 8:不允许 TSF 锁读取/写入访问。 这会暂停 TSF 输入。
SES_DEFAULTLATINLIGA0x10Windows 8:使用默认 OpenType 功能显示具有 fi 连字的字体,从而改进了版式 (默认值:0) 。
SES_DRAFTMODE0x8000Windows XP SP1:使用草稿模式字体显示文本。 草稿模式是一个辅助功能选项,其中控件使用单一字体显示文本;字体由消息框中所用字体的系统设置确定。 例如,如果文本是统一的,则可访问的用户可以更轻松地阅读文本,而不是将字体和样式混合 (默认值:0) 。
SES_EMULATE1016Windows 8:模拟 RichEdit 1.0 行为。注意: 如果确实需要此行为,请使用 Windows riched32.dll,而不是 riched20.dll 或 msftedit.dll。 Riched32.dll 具有更多功能。
SES_EMULATESYSEDIT1当此位处于打开状态时,rich edit 将尝试模拟系统编辑控件 (默认值:0) 。
SES_EXTENDBACKCOLOR4将背景色一直扩展到客户端矩形的边缘 (默认值:0) 。
SES_HIDEGRIDLINES0x00020000带 SP1 的 Windows XP:如果表格网格线的宽度为零,则不显示网格线。 这等效于Word表菜单中的隐藏网格线功能,默认 (:0) 。
SES_HYPERLINKTOOLTIPS8Windows 8:当光标悬停在某个链接上时,显示工具提示,其目标链接地址 (默认值:0) 。
SES_LOGICALCARET0x01000000Windows 8:提供逻辑插入符号信息而不是插入点位图,如 ITextHost::TxSetCaretPos (默认值:0) 。
SES_LOWERCASE0x400将所有输入字符转换为小写 (默认值:0) 。
SES_MAPCPS8已过时。 请勿使用。
SES_MULTISELECT0x08000000Windows 8:在按 Ctrl 键时使用单个鼠标选择启用多选 (默认值:0) 。
SES_NOEALINEHEIGHTADJUST0x20000000Windows 8:不调整东亚文本的行高 (默认值:0,它将行高调整 15%) 。
SES_NOFOCUSLINKNOTIFY32从没有焦点的链接发送 EN_LINK 通知。
SES_NOIME0x80禁止此格式编辑控件实例的 IME, (默认值:0) 。
SES_NOINPUTSEQUENCECHK0x800当此位处于打开状态时,丰富编辑不会验证键入文本的顺序。 某些语言 ((如泰语和越南语)) 要求先验证输入序列顺序,然后再将其提交到后备存储 (默认值:0) 。
SES_SCROLLONKILLFOCUS0x2000发生 KillFocus 时,滚动到文本的开头, (字符位置等于 0) (默认值:0) 。
SES_SMARTDRAGDROP0x04000000Windows 8:在删除文本时根据上下文添加或删除空格 (默认值:0) 。
SES_USECRLF0x00010000已过时。 请勿使用。
SES_WORDDRAGDROP0x02000000Windows 8:如果 word select 处于活动状态,请确保放置位置位于单词边界 (默认值:0) 。
SES_UPPERCASE0x200将所有输入字符转换为大写 (默认值:0) 。
SES_USEAIMM0x100使用 Internet Explorer 4.0 或更高版本随附的 Active IMM 输入法组件 (默认值:0) 。
SES_USEATFONT0x00040000Windows XP SP1:使用 @ 字体,专为垂直文本设计;这与 ES_VERTICAL 窗口样式一起使用。 @ 字体的名称以 @ 符号开头,例如,“@Batang” (默认值:0,但会自动打开垂直文本布局) 。
SES_USECTF0x00010000Windows XP SP1:启用 TSF 支持。 (默认值:0)
SES_XLTCRCRLFTOCR0x4000打开将 CRCRLF 转换为 PR。 打开此位并读取文件时,所有 CRCRLF 实例都将在内部转换为硬性 PR。 这会影响文本环绕。 请注意,如果此类文件保存为纯文本,则 CRL 将替换为 CRLF。 这是纯文本 (默认值为 0 的 .txt 标准,用于删除输入) 上的 CRCRLF。

富编辑控件扩展编辑样式标志——常量数值:

英文名称数值作用解释
SES_EX_HANDLEFRIENDLYURL0x00000100显示与自动链接相同的文本颜色和下划线的友好名称链接,前提是未使用临时格式或使用文本自动颜色 (默认值:0) 。
SES_EX_MULTITOUCH0x08000000在 Rich Edit 中启用触摸支持。 这包括选择、插入点放置和上下文菜单调用。 如果未设置此标志,则鼠标命令会模拟触摸,这些命令不考虑触摸模式的详细信息, (默认值:0) 。
SES_EX_NOACETATESELECTION0x00100000使用经典Windows选择文本和背景色而不是背景色来显示所选文本, (默认值:0) 。
SES_EX_NOMATH0x00000040禁用 (默认值插入数学区域:1) 。 若要启用数学编辑和显示,请将 wParam 设置为 0 且 lParam 设置为SES_EX_NOMATH发送EM_SETEDITSTYLEEX消息。
SES_EX_NOTABLE0x00000004禁用插入表。 默认为 (0) ,EM_INSERTTABLE消息返回E_FAIL,RTF 表将跳过 。
SES_EX_USESINGLELINE0x00200000使多行控件像单行控件一样,当单行高度大于窗口高度 (默认值:0) 时,能够垂直滚动。
SES_HIDETEMPFORMAT0x10000000隐藏使用 tomApplyTmp 调用 ITextFont.Reset 时创建的临时格式。 例如,拼写检查器使用此类格式在可能拼写错误的字词下显示波浪下划线。
SES_EX_USEMOUSEWPARAM0x20000000处理WM_MOUSEMOVE消息时使用 wParam,而不调用 按键开关。

字符格式——常量数值:

RichEdit 4.1: 阻止键盘切换以匹配字体。 例如,如果设置了阿拉伯语字体,则通常 Bidi 语言的自动键盘功能会将键盘更改为阿拉伯语键盘。
英文名称数值作用解释
SCF_SELECTION0x0001将格式应用于当前所选内容。 如果所选内容为空,则字符格式将应用于插入点,并且新字符格式仅在插入点更改之前生效。
SCF_WORD0x0002将格式应用于所选的一个或多个单词。 如果所选内容为空,但插入点位于单词内,则将格式应用于该单词。 SCF_WORD值必须与SCF_SELECTION值结合使用。
SCF_DEFAULT0x0000RichEdit 4.1:设置控件的默认字体。
SCF_ALL0x0004将格式应用于 控件中的所有文本。 对 SCF_SELECTION 或 SCF_WORD 无效。
SCF_USEUIRULES0x0008RichEdit 4.1: 与 SCF_SELECTION 一起使用。 指示格式来自工具栏或其他 UI 工具,因此应使用 UI 格式规则而不是文本格式设置。
SCF_ASSOCIATEFONT0x0010RichEdit 4.1: 将字体关联到给定脚本,从而更改该脚本的默认字体。
SCF_NOKBUPDATE0x0020
SCF_ASSOCIATEFONT20x0040RichEdit 4.1: 将代理项 (平面 2) 字体关联到给定脚本,从而更改该脚本的默认字体。
SCF_SMARTFONT0x0080仅当字体可以处理脚本时,才应用字体。
SCF_CHARREPFROMLCID0x0100从 LCID 获取字符剧目。
SPF_DONTSETDEFAULT0x0002当 Richedit 控件为空时,阻止设置默认段落格式。
SPF_SETDEFAULT0x0004设置默认段落格式属性。

富编辑控件输入法语言选项——常量数值:

英文名称数值作用解释
IMF_AUTOKEYBOARD0x0001如果设置了此标志,则当用户显式更改为其他字体或用户将插入点显式更改为文本中的新位置时,控件会自动更改键盘布局。 将为双向控件自动打开。 对于所有其他控件,默认情况下会将其关闭。 此选项默认关闭 (0) 。
IMF_AUTOFONT0x0002如果设置了此标志,当用户显式更改为其他键盘布局时,控件会自动更改字体。 关闭通用 Unicode 字体 IMF_AUTOFONT 很有用。 此选项默认为 启用(1) 。
IMF_IMECANCELCOMPLETE0x0004此标志确定控件在用户取消输入法时如何使用它的组合字符串。 如果设置了此标志,则控件放弃该字符串。 如果未设置此标志,则控件将该字符串用作结果字符串。 此选项默认关闭 (0) 。
IMF_IMEALWAYSSENDNOTIFY0x0008此标志控制丰富编辑控件在 IME 合成期间通知客户端的方式: 0:未确定状态期间没有 EN_CHANGE 或 EN_SELCHANGE 通知。 当最后一个字符串传入时发送通知。 这是默认值。1:在不确定状态下发送 EN_CHANGE 和 EN_SELCHANGE 事件。
IMF_AUTOFONTSIZEADJUST0x0010如果设置了此标志,控件将根据脚本从插入点大小缩放字体绑定字体大小。 例如,亚洲字体略大于西方字体。 此选项默认为 启用(1)。
IMF_UIFONTS0x0020使用用户界面默认字体。 此选项默认关闭 (0) 。
IMF_NOIMPLICITLANG0x0040Windows 8:如果设置了此标志,请使用键盘语言禁用标记键盘输入,并确保非东亚语言 ID 与字符集兼容。 此选项默认关闭 (0) 。
IMF_DUALFONT0x0080如果设置了此标志,控件将使用双字体模式。 用于亚洲语言支持。 控件对 ASCII 文本使用英文字体,对亚洲文本使用亚洲字体。 此选项默认为 启用(1) 。
IMF_NOKBDLIDFIXUP0x0200Windows 8:如果设置了此标志,则丰富编辑控件将禁用对空控件的键盘语言进行标记。 此选项默认关闭 (0)
IMF_NORTFFONTSUBSTITUTE0x0400如果设置了此标志,则不使用RTF字体文本替换
IMF_SPELLCHECKING0x0800Windows 8:如果设置了此标志,则丰富编辑控件将打开拼写检查。 此选项默认关闭 (0) 。
IMF_TKBPREDICTION0x1000Windows 10:忽略。Windows 8:如果设置了此标志,则丰富编辑控件将启用触摸键盘预测。 此选项默认关闭 (0) 。
IMF_DISABLEAUTOBIDIAUTOKEYBOARDWindows 8:如果设置了此标志,控件将使用非特定语言逻辑进行自动键盘切换。 此选项默认关闭 (0) 。
IMF_TKBAUTOCORRECTIONindows 8:如果设置了此标志,请启用触摸键盘自动更正。 此选项默认关闭 (0) 。

富编辑控件文字服务框架模式偏差标志——常量数值:

英文名称数值作用解释
CTFMODEBIAS_DEFAULT0x0000不存在模式偏差。
CTFMODEBIAS_FILENAME0x0001偏差是文件名。
CTFMODEBIAS_NAME0x0002偏向于名称。
CTFMODEBIAS_READING0x0003偏见是阅读。
CTFMODEBIAS_DATETIME0x0004偏差为日期或时间。
CTFMODEBIAS_CONVERSATION0x0005偏见是对话。
CTFMODEBIAS_NUMERIC0x0006偏差是数字的偏差。
CTFMODEBIAS_HIRAGANA0x0007偏向于平假名字符串。
CTFMODEBIAS_KATAKANA0x0008偏差是片假名字符串。
CTFMODEBIAS_HANGUL0x0009偏向于朝鲜文字符。
CTFMODEBIAS_HALFWIDTHKATAKANA0x000a偏差为半角片假名字符串。
CTFMODEBIAS_FULLWIDTHALPHANUMERIC0x000b偏差为全角字母数字字符。
CTFMODEBIAS_HALFWIDTHALPHANUMERIC0x000c偏差为半角字母数字字符。

段落格式类——数据结构:

中文名字英文名称长度作用解释
段落格式类PARAFORMAT2194包含有关丰富编辑控件中的段落格式设置属性的信息。
段落格式类——成员表
中文英文类型作用解释
大小cbSize整数结构大小(以字节为单位)。
掩码dwMask整数包含结构成员有效信息的组合。
符号wNumbering整形掩码:0x20。用于项目符号或编号段落的选项:0无,1开头插入,2阿拉伯数字,3小写字母,4大写字母,5小写罗马字母,6写罗马字母,7wNumberingStart 成员指定的 Unicode 字符开头的字符序列;
效果wEffects整形一组指定段落效果的位标志。参见:段落效果掩码标志
首缩dxStartIndent整数段落第一行的缩进,以缇为单位。掩码:1
右缩dxRightIndent整数段落右侧相对于右边距的缩进,以缇为单位。掩码:2
后缩dxOffset整数相对于第一行的缩进,第二行和后续行的缩进,以缇为单位。掩码:4
对齐wAlignment整形段落对齐方式。1左对齐,2右对齐,3居中,4两端对齐/单独展开空白;掩码:8。
表数cTabCount整形在 rgxTabs 数组中定义的制表位数。
表位rgxTabs[128]文本绝对制表位位置的数组。低24位指定绝对偏移量(缇)。24-27位:0普通,1居中,2右对齐,3小数,4垂直条
28-31位:0无前导符,1虚线,2虚线,3下划线,4粗线,5双行;掩码:0x10
上距dySpaceBefore整数段落上方间距的大小(以缇为单位)。 掩码:0x40
下距dySpaceAfter整数段落下方间距的大小(以缇为单位)。 掩码:0x80
间距dyLineSpacing整数行之间的间距。掩码:0x100
样式sStyle整形文本样式。 掩码:0x400
行间bLineSpacingRule整形行距的类型。0单间距,1一个半,2双倍间距,3指定间距不小于单间距,4指定确切间距,
5间距值的1/20(20=单间距40=双间距60=3间距) 掩码:0x100
明暗wShadingWeight整形着色中使用的前景色百分比。5表示底纹颜色由5%的前景色和95%的背景色组成。 掩码:0x1000
背景wShadingStyle整形用于背景着色的样式和颜色。0-3位包含着色样式,4-7位包含前景色索引,8-11位包含背景色索引。掩码:0x1000
底纹样式:0无,1深色水平,2深色垂直,3深色向下对角线,4深色向上对角线,5深色网格,6深色格子,7浅色水平,8浅色垂直,9浅色向下对角线,10,亮起对角线,11浅色网格,12浅色格栅
前景色索引和背景色索引:0黑色,1蓝色,2青色,3绿色,4洋红色,5红色,6黄色,7白色,8深蓝色,9深青色,10暗绿色,11深洋红色,12深红色,13深黄色,14,深灰色,15浅灰色
始值wNumberingStart整形用于编号段落的起始数字或 Unicode 值。与符号成员结合使用 掩码:0x8000
段式wNumberingStyle整形与带编号的段落一起使用的编号样式。与符号成员结合使用 掩码:0x2000
0后跟带右括号的数字,0x100将数字括在括号中,0x200后跟带句点的数字,0x300仅显示数字,0x400继续编号列表不用下个符号,0x8000使用 始值 启动新数字。
段距wNumberingTab整形段落编号与段落文本之间的最小间距(以缇为单位)。与符号成员结合使用 掩码:0x4000
边宽wBorderWidth整形边框宽度(以缇为单位)。 掩码:0x800
边框wBorders整形边框位置、样式和颜色。0-7位指定边框位置,8-11位指定边框样式,12-15位指定边框颜色索引。掩码:0x800
边框位置:1左边框。2右边框。4上边框。8下边框。16内部边框。32外边框。64自动着色(不用颜色索引)。
边框样式:0=无,1=3/4 磅,2=11/2 磅,3=21/4 磅,4=3 磅,5=41/2 磅,6=6 磅,7=3/4 磅双,8=11/2 磅双,9=21/4 分双,10=3/4 磅灰色,11=3/4 磅灰色虚线
边框颜色:0黑色,1蓝色,2青色,3绿色,4洋红色,5红色,6黄色,7白色,8深蓝色,9深青色,10暗绿色,11深洋红色,12深红色,13深黄色,14,深灰色,15浅灰色

段落效果掩码标志

掩码标志数值作用解释段落效果数值作用解释
PFM_RTLPARA0x10000PFE_RTLPARA值有效。PFE_RTLPARA0x1使用从右到左的阅读顺序显示文本。
PFM_KEEP0x20000PFE_KEEP值有效。PFE_KEEP0x2段落内无分页符。
PFM_KEEPNEXT0x40000PFE_KEEPNEXT值有效。PFE_KEEPNEXT0x4此段落与下一段之间没有分页符。
PFM_PAGEBREAKBEFORE0x80000PFE_PAGEBREAKBEFORE值有效。PFE_PAGEBREAKBEFORE0x8在所选段落之前插入分页符。
PFM_NOLINENUMBER0x100000PFE_NOLINENUMBER值有效。PFE_NOLINENUMBER0x10禁用行号(未实现) 。
PFM_NOWIDOWCONTROL0x200000PFE_NOWIDOWCONTROL值有效。PFE_NOWIDOWCONTROL0x20禁用所选段落的寡妇和孤立控件。
PFM_DONOTHYPHEN0x400000PFE_DONOTHYPHEN值有效。PFE_DONOTHYPHEN0x40禁用自动断字。
PFM_SIDEBYSIDE0x800000PFE_SIDEBYSIDE值有效。PFE_SIDEBYSIDE0x80并排显示段落(未实现)。
PFM_COLLAPSED0x1000000PFE_COLLAPSED值有效。PFE_COLLAPSED0x100作用
PFM_OUTLINELEVEL0x2000000PFE_OUTLINELEVEL值有效。PFE_OUTLINELEVEL0x200作用
PFM_BOX0x4000000PFE_BOX值有效。PFE_BOX0x400作用
PFM_RESERVED20x8000000PFE_RESERVED2值有效。PFE_RESERVED20x800作用
PFM_TABLEROWDELIMITER0x10000000PFE_TABLEROWDELIMITER值有效。PFE_TABLEROWDELIMITER0x1000段落是表中行 (U+FFF9 U+000D) 或结束分隔符 (U+FFFB U+000D) 。
PFM_TEXTWRAPPINGBREAK0x20000000PFE_TEXTWRAPPINGBREAK值有效。PFE_TEXTWRAPPINGBREAK0x2000作用
PFM_TABLE0x40000000PFE_TABLE值有效。PFE_TABLE0x4000段落是表格行。

输入法属性和功能

英文名称数值作用解释
要检索的属性信息的类型
IGP_PROPERTY4属性信息。
IGP_CONVERSION8转换功能。
IGP_SENTENCE12句子模式功能。
IGP_UI0x10用户界面功能。
IGP_SETCOMPSTR0x14组合字符串功能。
IGP_SELECT0x18选择继承功能。
IGP_GETIMEVERSION-4检索为其创建了指定 IME 的系统版本号。
IGP_PROPERTY 属性信息常量
IME_PROP_AT_CARET0x00010000如果设置,则转换窗口位于插入点位置。 如果清除,则窗口接近插入点位置。
IME_PROP_SPECIAL_UI0x00020000如果设置,IME 具有非标准用户界面。 应用程序不应在 IME 窗口中绘制。
IME_PROP_CANDLIST_START_FROM_10x00040000如果设置,候选列表中的字符串从 1 开始编号。 如果清除,则字符串从零开始。
IME_PROP_UNICODE0x00080000系统和 IME 将通过 UnicodeIME 接口进行通信。 如果清除,IME 将使用 ANSI 接口与系统通信。
IME_PROP_COMPLETE_ON_UNSELECT0x00100000如果设置,则转换窗口位于插入点位置。 如果清除,则窗口接近插入点位置。
IME_PROP_ACCEPT_WIDE_VKEY0x00000020如果设置,IME 将使用 VK_PACKET 处理来自 SendInput 函数的注入 Unicode。
如果清除,IME 可能不会处理注入的 Unicode,并且注入的 Unicode 可能会直接发送到应用程序。
IGP_UI 用户界面常量
UI_CAP_27001支持文本转义值 0 或 2700。
UI_CAP_ROT902支持文本转义值 0、900、1800 或 2700。
UI_CAP_ROTANY4支持任何文本转义值。
IGP_SETCOMPSTR 组合字符串常量
SCS_CAP_COMPSTR1可以通过使用 SCS_SETSTR 值调用 ImmSetCompositionString 函数来创建组合字符串。
SCS_CAP_MAKEREAD2在将 ImmSetCompositionString 函数与 SCS_SETSTR 一起使用且不设置 lpRead 时,可以从相应的组合字符串创建读取字符串。
SCS_CAP_SETRECONVERTSTRING4此输入法可以支持重新转换。 使用 ImmSetCompositionString 执行重新转换。
IGP_SELECT 选择继承功能常量
SELECT_CAP_CONVMODE1选择新的 IME 时继承转换模式。
SELECT_CAP_SENTENCE2选择新的 IME 时继承句子模式。
IGP_GETIMEVERSION 获取IME版本功能常量
IMEVER_03100x0003000AIME 是为 Windows 3.1 创建的。
IMEVER_04000x00040000IME 是为 Windows 95 或更高版本创建的

查找方式

英文名称数值作用解释
FR_DOWN1如果设置,则搜索从当前所选内容的末尾到文档末尾。否则搜索将从当前所选内容的末尾到文档的开头。
FR_WHOLEWORD2如果已设置,则操作仅搜索与搜索字符串匹配的整个单词。 如果未设置,该操作还会搜索与搜索字符串匹配的单词片段。
FR_MATCHALEFHAMZA0x80000000Microsoft Rich Edit 3.0 及更高版本:如果设置,搜索将区分具有不同口音的阿拉伯语 alef。 如果未设置,则由 alef 字符单独匹配所有 alef。
FR_MATCHDIAC0x20000000Microsoft Rich Edit 3.0 及更高版本:如果设置,搜索操作将考虑阿拉伯语和希伯来语音调符号。 如果未设置,则忽略音调符号。
FR_MATCHKASHIDA0x40000000Microsoft Rich Edit 3.0 及更高版本:如果设置,则搜索操作将视为阿拉伯语 kashida。 如果未设置,则忽略 kashidas。
FR_MATCHWIDTH0x10000000Windows 8:如果设置,则同一字符的单字节和双字节版本被视为不相等。

富编辑对象——功能模型:

英文名称中文名字作用解释
富编辑对象IRichEditOle公开组件对象模型 (COM) 丰富编辑控件的功能。
富编辑对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetClientSite站点(@接口)检索创建新对象时要使用的 客户站点对象 接口。客户端站点可以只与一个对象一起使用。
GetObjectCount对象数返回格式编辑控件中当前包含的对象数。
GetLinkCount链接数返回富编辑控件中作为链接的对象数。
GetObject信息(索引,富对象类,方式)检索存储在 富对象类 结构中的有关丰富编辑控件中的对象的信息。方式:0无,1对象,2存储,4网站界面,7所有
InsertObject插入(富对象类)将对象插入到富编辑控件中。
ConvertObject转换(索引,类标识,新名)将对象转换为新类型名称的字符串。会重新加载对象但不强制更新;调用方必须执行此操作。索引=-1为所选对象
ActivateAs激活(旧类标识,新类标识)通过卸载旧类的所有对象、通知 OLE 将这些对象视为新类的对象并重新加载对象来处理 Activate As 行为。 如果无法重新加载对象,则会删除它们。
SetHostNames改名(程序名,文档对象名)设置在对象插入到富编辑控件时要提供给对象的主机名。 主机名在服务器的用户界面中用于描述已打开对象的容器上下文。
SetLinkAvailable链接位(索引,真)设置对象标志中链接可用位的值。默认为真。如果链接上出现任何错误,表示连接到链接对象或应用程序时出现问题,则应将其设置为假装。修复问题再设置为真。索引=-1为所选对象
SetDvaspect绘面(索引,方面)设置丰富编辑控件用于绘制对象的方面。 此调用不会更改对象中缓存的绘图信息;这必须由调用方完成。 调用会导致重绘对象。索引=-1为所选对象
HandsOffStorage免提(索引)指示何时要释放对与指定对象关联的存储接口的丰富编辑控件的引用。索引=-1为所选对象
SaveCompleted保存(索引,存储)指示完成最近保存操作的时间,并且富编辑控件应保留对象的不同存储。索引=-1为所选对象
InPlaceDeactivate停用指示格式编辑控件何时停用当前活动的就地对象(如果有)。
ContextSensitiveHelp帮助(真)指示丰富编辑控件是应转换到上下文相关帮助模式还是应退出上下文相关帮助模式。
GetClipboardData剪贴板(范围类,0,数据对象)检索编辑控件中某个区域的剪贴板对象
ImportDataObject导入(对象,格式,图像)将剪贴板对象导入富编辑控件,替换当前所选内容。

富编辑回调对象——功能模型:

英文名称中文名字作用解释
富编辑回调对象IRichEditOle从其客户端检索与 OLE 相关的信息。
富编辑回调对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetNewStorage存储(@接口)为从剪贴板粘贴的新对象或从RTF格式读取的新对象提供存储接口
GetInPlaceContext环境(@框架框架,@文档@文档,加速器)提供支持就地激活所需的应用程序和文档级接口和信息。
ShowContainerUI显容器(真)指示应用程序是否显示其容器 UI。真:显示,假:不显示;富编辑控件会向前看双击,并在适当时延迟调用。
QueryInsertObject插入(类标识符,存储,字符位置)查询应用程序是否应插入对象。当粘贴和阅读 RTF 格式时,将调用 该成员。
DeleteObject删除(对象)发送通知指出对象即将从富编辑控件中删除。但不一定释放对象。
QueryAcceptData接受(对象,格式,操作,拖放,图像)在粘贴操作或拖动事件期间,确定是否应接受粘贴或拖动的数据。格式:剪切板格式;操作:0拖放,1粘贴;拖放为真表示已经拖放
ContextSensitiveHelp帮助(真)指示应用程序是应转换到上下文相关帮助模式(真)还是从上下文相关帮助模式转换(假)。
GetClipboardData复制(范围类,操作,@数据对象)允许客户端提供其自己的剪贴板对象。操作:2复制,3剪切
GetDragDropEffect效果(拖放,键状态,效果)允许客户端指定放置操作的效果。拖放为真代表完成拖放,效果为允许拖放;拖放为假表示正在拖放,效果为拖放使用中
GetContextMenu菜单(选中,对象,范围类,@菜单)查询应用程序以查找要用于右键单击事件的上下文菜单。选中:0为空,1文本,2对象,4多个字符,8多个对象,0x8000右键菜单

富编辑控件对象信息接口标志

英文名称数值作用解释
REO_GETOBJ_NO_INTERFACES0不获取接口。
REO_GETOBJ_POLEOBJ1获取对象接口。
REO_GETOBJ_PSTG2获取存储接口。
REO_GETOBJ_POLESITE4获取网站界面。
REO_GETOBJ_ALL_INTERFACES7获取所有接口。

富对象类——数据结构:

中文名字英文名称长度作用解释
富对象类REOBJECT56包含有关丰富编辑控件中的 OLE 或图像对象的信息。
富对象类——成员表
中文英文类型作用解释
大小cbStruct整数结构大小(以字节为单位)。
位置cp整数对象的字符位置。
类标识clsid[16]文本对象的类标识符。
接口poleobj整数对象的 IOleObject 接口的实例。
存储pstg整数存储对象 接口的实例。这是与对象关联的存储对象。
站点polesite整数客户站点对象 接口的实例。 必须从 富编辑对象.站点 方法获取此地址。
宽度sizel.cx整数对象的大小。度量单位为 0.01 毫米,这是 HIMETRIC 度量单位。
高度sizel.cy整数对象的大小。度量单位为 0.01 毫米,这是 HIMETRIC 度量单位。
方位dvaspect整数使用的显示方面。视图方位
标志dwFlags整数对象状态标志。它可以是状态标志值的组合。
定义dwUser整数为用户定义的值保留。

视图方位常量——在绘制或获取数据时,指定所需对象数据或对象视图方位。DVASPECT

英文名称数值作用解释
DVASPECT_CONTENT1提供对象的表示形式,以便它可以显示为容器内的嵌入对象。 通常为复合文档对象指定此值。 该演示可提供给屏幕或打印机。
DVASPECT_THUMBNAIL2提供对象的缩略图表示形式,以便可以在浏览工具中显示该对象。
缩略图大约为 120 x 120 像素、16 色 (建议) 可能包装在图元文件中的与设备无关的位图。
DVASPECT_ICON4提供对象的图标表示形式。
DVASPECT_DOCPRINT8提供屏幕上对象的表示形式,就像使用“文件”菜单中的“打印”命令打印到打印机一样。 该描述数据可以表示页序列。
DVASPECT2指定用于优化绘图过程的新绘图方面。
英文名称数值作用解释
DVASPECT_OPAQUE16表示不透明、易于剪辑对象的部分。
DVASPECT_TRANSPARENT32表示 对象上的透明或不规则部分,通常是昂贵或无法剪裁的部分。对象可能支持(也可能不支持)这一方面。

丰富编辑控件状态标志组合

英文名称数值作用解释
REO_RESIZABLE1对象可以调整大小。
REO_BELOWBASELINE2对象位于周围文本的基线下方;默认值为位于基线上。
REO_INVERTEDSELECT4选定对象时将完全反转绘制;默认为使用边框绘制。
REO_BLANK0x10对象是新的。 此值使对象有机会不保存任何内容并自动从控件中删除。
REO_CANROTATE0x80对象可以在旋转的位置显示自身。
REO_ALIGNTORIGHT0x100将 对象与视图的右侧对齐。 如果未指定REO_WRAPTEXTAROUND,则忽略此值。
REO_DONTNEEDPALETTE0x20对象在创建和实现半色调调色板之前呈现。 仅适用于 32 位平台。
REO_DYNAMICSIZE8对象始终确定其盘区,尽管修改标志被关闭,但可能会更改。
REO_GETMETAFILE0x00400000Rich edit 控件从 对象检索图元文件,以正确确定对象的范围。 可以读取此标志,但不能设置。
REO_HILITED0x01000000对象当前突出显示以指示选择。 当焦点位于控件中并设置
REO_SELECTED 时发生。 可以读取此标志,但不能设置。
REO_INPLACEACTIVE0x02000000对象当前处于就地活动状态。 可以读取此标志,但不能设置。
REO_LINK0x80000000对象是一个链接。 可以读取此标志,但不能设置。
REO_LINKAVAILABLE0x00800000对象是一个链接,据信是可用的。 可以读取此标志,但不能设置。
REO_OPEN0x04000000对象当前在其服务器中处于打开状态。 可以读取此标志,但不能设置。
REO_OWNERDRAWSELECT0x40所有者绘制所选对象。
REO_SELECTED0x08000000对象当前在 Rich edit 控件中处于选中状态。 可以读取此标志,但不能设置。
REO_STATIC0x40000000对象是静态对象。 可以读取此标志,但不能设置。
REO_USEASBACKGROUND0x400使用 对象作为背景图片。
REO_WRAPTEXTAROUND0x00000200文本环绕对象。

字符集

英文名字数值编码代码页
ANSI_CHARSET0x0001252
DEFAULT_CHARSET0x011
SYMBOL_CHARSET0x022
SHIFTJIS_CHARSET0x80128932
HANGUL_CHARSET0x81129949
GB2312_CHARSET0x86134936
CHINESEBIG5_CHARSET0x88136950
GREEK_CHARSET0xA11611253
TURKISH_CHARSET0xA21621254
HEBREW_CHARSET0xB11771255
ARABIC_CHARSET0xB21781256
BALTIC_CHARSET0xBA1861257
RUSSIAN_CHARSET0xCC2041251
THAI_CHARSET0xDE222874
EE_CHARSET0xEE2381250
OEM_CHARSET0xFF255

滑块条——使用简介:

跟踪条是一个窗口,其中包含一个滑块 (有时称为通道中的拇指) 和可选的刻度线。 当用户使用鼠标或方向键移动滑块时,跟踪条会发送通知消息以指示更改。
当希望用户选择一个离散无符号整数值或一个范围内的一组连续无符号整数值时,跟踪栏非常有用。 例如,可以使用跟踪条来允许用户通过将滑块移动到给定刻度线来设置键盘的重复速率。 下图显示了一个典型的跟踪条。

跟踪栏中的滑块以创建时指定的增量移动。 此范围内的值称为逻辑单元。 例如,如果指定跟踪条的逻辑单元范围为 0 到 5,则滑块只能占据六个位置:跟踪条左侧的一个位置,以及范围中每个增量的一个位置。
通常,每个位置都由刻度线标识;但是,刻度线的数量是任意的,并且可能小于逻辑位置的数量。
使用 创建窗口 函数创建跟踪条,指定 "msctls_trackbar32" 窗口类。 创建跟踪栏后,可以使用跟踪条消息来设置和检索其许多属性。可进行的更改包括设置滑块的最小和最大位置、绘制刻度线、设置选择范围以及重新定位滑块。

选择范围

如果创建具有 TBS_ENABLESELRANGE样式的 跟踪条,则可以指定选择范围。 跟踪条突出显示选择范围,并在开始和结束位置显示三角形刻度线,如下图所示。
跟踪条的选择范围不会以任何方式影响其功能。 由应用程序来实现范围。 可以通过以下方法之一执行此操作:
使用选择范围使用户能够设置某些参数的最大值和最小值。 例如,用户可以将滑块移动到某个位置,然后单击标有“Max”的按钮。 然后,应用程序设置选择范围以显示用户选择的值。
通过处理 水平滚动 或 垂直滚动 通知并禁止任何超出选择范围的任何移动,将滑块的移动限制为控件内预先确定的子范围。 例如,如果用户可用的值范围可能因用户所做的其他选择或根据可用资源而更改,则可以执行此操作。

跟踪栏通知消息

跟踪栏通过向父级发送 水平滚动 或 垂直滚动 消息来通知其父窗口的用户操作。 具有 水平方向 样式的 跟踪条发送 水平滚动 消息。 具有 垂直方向 样式的跟踪条发送 垂直滚动 消息。
水平滚动 或垂直滚动的 ③参数 参数的低序字包含通知代码。 对于松开滑块和拖动滑块通知代码, ③参数 参数的高序字指定滑块的位置。 对于所有其他通知代码,高序字为零;发送 滑块获取位置 消息以确定滑块位置。 ④数据 参数是跟踪条的句柄。
仅当用户使用键盘与跟踪条交互时,系统才会发送按左上键、按右下键、按首页键和按结尾键通知代码。 仅当用户使用鼠标时,才会发送松开滑块和拖动滑块通知代码。
在这两种情况下,都会发送 结束滑键、按上页键 和 按下页键 通知代码。 下表列出了跟踪栏通知代码,以及导致发送虚拟密钥代码通知 (虚拟 密钥代码或鼠标事件) 的事件。

滑块条——移动类型:

中文名字英文名称数值释义
按左上键TB_LINEUP0用户按下了向左键 (VK_LEFT) 或向上键 (VK_UP) 键。
按右下键TB_LINEDOWN1用户按下了向右键 (VK_RIGHT) 或向下键 (VK_DOWN) 键。
按上页键TB_PAGEUP2用户单击了滑块上方或左侧的通道 (VK_PRIOR)。
按下页键TB_PAGEDOWN3用户单击了滑块下方或右侧的通道 (VK_NEXT)。
松开滑块TB_THUMBPOSITION4跟踪条在收到 TB_THUMBTRACK 通知代码后收到 WM_LBUTTONUP。
拖动滑块TB_THUMBTRACK5用户拖动了滑块。
按结尾键TB_BOTTOM7用户按下了 END 键 (VK_END)。
搂首页键TB_TOP6用户按下了 Home 键 (VK_HOME)。
结束滑键TB_ENDTRACK8跟踪条收到 WM_KEYUP,这表示用户释放了发送相关虚拟键代码的键。

默认跟踪条消息处理

本部分介绍由跟踪条执行的窗口消息处理。
中文名字英文名称数值释义
失去鼠标WM_CAPTURECHANGED0x215如果在 WM_LBUTTONDOWN 处理期间设置了计时器,则终止计时器,并在必要时发送TB_THUMBPOSITION通知代码。 它始终发送TB_ENDTRACK通知代码。
窗口创建WM_CREATE0x1执行其他初始化,例如将行大小、页面大小和刻度线频率设置为默认值。
程序关闭WM_DESTROY0x2释放资源。
可用状态WM_ENABLE0xA重新绘制跟踪条窗口。
擦除背景WM_ERASEBKGND0x14使用跟踪条的当前背景色擦除窗口背景。
切换控件WM_GETDLGCODE0x87返回DLGC_WANTARROWS值。
键盘按下WM_KEYDOWN0x100处理方向键,并根据需要发送TB_TOP、TB_BOTTOM、TB_PAGEUP、TB_PAGEDOWN、TB_LINEUP和TB_LINEDOWN通知代码。
键盘松开WM_KEYUP0x101如果键是方向键之一,则发送TB_ENDTRACK通知代码。
失去焦点WM_KILLFOCUS0x8重新绘制跟踪条窗口。
按下左键WM_LBUTTONDOWN0x201将焦点和鼠标捕获设置为跟踪条。 如有必要,它会设置一个计时器,用于确定当用户在窗口中按住鼠标按钮时滑块向鼠标光标移动的速度。
释放左键WM_LBUTTONUP0x202释放鼠标捕获并在 WM_LBUTTONDOWN 处理期间设置计时器并终止计时器。 如有必要,它会发送TB_THUMBPOSITION通知代码。 它始终发送TB_ENDTRACK通知代码。
鼠标移动WM_MOUSEMOVE0x200移动滑块并在跟踪鼠标时发送TB_THUMBTRACK通知代码, (看到 WM_TIMER) 。
窗口重绘WM_PAINT0xF绘制跟踪条。 如果 wParam 参数为非 NULL,则控件假定该值是 HDC 并使用该设备上下文进行绘制。
获得焦点WM_SETFOCUS0x7重新绘制跟踪条窗口。
窗口缩放WM_SIZE0x5设置跟踪条的尺寸,如果没有足够的空间显示滑块,则删除滑块。
定时事件WM_TIMER0x113检索鼠标位置并更新滑块的位置。 (仅在用户拖动 slider 时收到它。)
配置更新WM_WININICHANGE0x1A初始化滑块维度。

跟踪条工具提示

使用 支持提示 样式创建的跟踪条具有默认的工具提示控件。 当用户使用鼠标拖动滑块时,工具提示将保持可见并显示当前值。
可以通过发送 滑块设置提示 消息将新的工具提示控件分配给跟踪条。 若要检索已分配的工具提示控件的句柄,请使用 滑块获取提示 消息。

滑块条——通知消息:

中文名字常量数值英文名称释义
控件自行绘制-12NM_CUSTOMDRAW通知控件的父窗口有关自定义绘制操作的信息。④数据:NMCUSTOMDRAW 结构的 dwItemSpec 成员:1边缘显示刻度,2拇指标记,3拇指沿轨道滑动
控件释放鼠标-16NM_RELEASEDCAPTURE通知控件的父窗口控件要释放鼠标捕捉
滑块位置更改-1502TRBN_THUMBPOSCHANGING通知跟踪条上的拇指位置正在更改。④数据:跟踪通知类 结构
水平滚动$0114WM_HSCROLL当窗口的标准水平滚动条产生一个滚动事件时,发送本消息给该窗口。③参数:低位=0点左键,1点右/下键,2点滑块左,3点滑块右,4松开滑块,
5拖动滑块,6按home,7按END,8释放按键;高位=滑块当前位置;④数据:控件
垂直滚动$0115WM_VSCROLL当窗口的标准垂直滚动条产生一个滚动事件时,发送本消息给该窗口。③参数:低位=0点上键,1点下键,2点滑块上方,3点滑块下方,4松开滑块,
5拖动滑块,6按home,7按END,8释放按键;高位=滑块当前位置;④数据:控件

滑块条——发送消息:

中文英文名称数值释义
滑块获取位置TBM_GETPOS0x400检索跟踪栏中滑块的当前逻辑位置。 逻辑位置是跟踪条最小到最大滑块位置范围内的整数值。③参数:0;④数据:0
滑块取最小位TBM_GETRANGEMIN0x401检索跟踪栏中滑块的最小位置。③参数:0;④数据:0
滑块取最大位TBM_GETRANGEMAX0x402检索跟踪栏中滑块的最大位置。③参数:0;④数据:0
滑块取刻度线TBM_GETTIC0x403检索跟踪栏中刻度线的逻辑位置。 逻辑位置可以是跟踪条的最小到最大滑块位置范围内的任意整数值。③参数:索引0到2;④数据:0
滑块改刻度线TBM_SETTIC0x404在指定逻辑位置的跟踪栏中设置刻度线。③参数:0;④数据:位置
滑块修改位置TBM_SETPOS0x405设置跟踪栏中滑块的当前逻辑位置。③参数:是否重绘;④数据:新位置
滑块位置范围TBM_SETRANGE0x406设置跟踪栏中滑块的最小和最大逻辑位置范围。③参数:是否重绘;④数据:最小/最大位置
滑块改最小位TBM_SETRANGEMIN0x407设置跟踪栏中滑块的最小逻辑位置。③参数:是否重绘;④数据:最小位置
滑块改最大位TBM_SETRANGEMAX0x408设置跟踪栏中滑块的最大逻辑位置。③参数:是否重绘;④数据:最大位置
滑块删刻度线TBM_CLEARTICS0x409从跟踪条中删除当前刻度线。此消息不会删除由跟踪条自动创建的第一个和最后一个刻度线。③参数:是否重绘;④数据:0
滑块选择范围TBM_SETSEL0x40A设置跟踪栏中可用选择范围的起始和结束位置。③参数:是否重绘;④数据:起始/结束位置
滑块取起始位TBM_SETSELSTART0x40B设置跟踪栏中当前选择范围的起始逻辑位置。 如果跟踪条没有 范围显示 样式,则忽略此消息。③参数:是否重绘;④数据:起始位置
滑块取结束位TBM_SETSELEND0x40C设置跟踪栏中当前选择范围的结束逻辑位置。 如果跟踪条没有 范围显示 样式,则忽略此消息。③参数:是否重绘;④数据:结束位置
滑块刻度数组TBM_GETPTICS0x40E检索包含跟踪条刻度线位置的数组的地址。③参数:0;④数据:0
滑块刻度位置TBM_GETTICPOS0x40F检索跟踪栏中刻度线的当前物理位置。③参数:索引(不包括第一和最后);④数据:0
滑块刻度线数TBM_GETNUMTICS0x410检索跟踪栏中的刻度线数。③参数:0;④数据:0
滑块改起始位TBM_GETSELSTART0x411检索跟踪栏中当前选择范围的起始位置。③参数:0;④数据:0
滑块改结束位TBM_GETSELEND0x412检索跟踪栏中当前选择范围的结束位置。③参数:0;④数据:0
滑块清除选择TBM_CLEARSEL0x413清除跟踪栏中的当前选择范围。③参数:是否重绘;④数据:0
滑块间隔频率TBM_SETTICFREQ0x414设置跟踪栏中刻度线的间隔频率。例如频率设置为2,则跟踪条范围中每隔一个增量显示一个刻度线。默认为1。③参数:频率;④数据:0
滑块取翻页量TBM_GETPAGESIZE0x415检索跟踪条的滑块在响应键盘或鼠标输入时移动的逻辑位置数。③参数:0;④数据:0
滑块改翻页量TBM_SETPAGESIZE0x416设置跟踪条的滑块在响应键盘或鼠标输入时移动的逻辑位置数。③参数:0;④数据:增量
滑块取移动量TBM_GETLINESIZE0x417检索跟踪条滑块在响应键盘或鼠标输入时移动的逻辑位置数。③参数:0;④数据:0
滑块改移动量TBM_SETLINESIZE0x418设置跟踪条滑块在响应键盘或鼠标输入时移动的逻辑位置数。③参数:0;④数据:增量
滑块边框矩形TBM_GETTHUMBRECT0x419检索跟踪栏中滑块的边框的大小和位置。③参数:0;④数据:矩形类
滑块通道矩形TBM_GETCHANNELRECT0x41A检索跟踪条通道的边框的大小和位置。通道是滑块移动的区域。③参数:0;④数据:矩形类
滑块修改长度TBM_SETTHUMBLENGTH0x41B设置跟踪栏中滑块的长度。如果跟踪条没有 滑块调整 样式,则忽略此消息。③参数:长度;④数据:0
滑块获取长度TBM_GETTHUMBLENGTH0x41C检索跟踪栏中滑块的长度(以像素为单位)。③参数:0;④数据:0
滑块设置提示TBM_SETTOOLTIPS0x41D将工具提示控件分配给跟踪条控件。③参数:提示控件;④数据:0
滑块获取提示TBM_GETTOOLTIPS0x41E检索分配给跟踪栏的工具提示控件的句柄(如果有)。③参数:0;④数据:0
滑块提示方位TBM_SETTIPSIDE0x41F放置使用支持提示样式跟踪条控件使用的工具提示控件。③参数:0上方,1左边,2下边,3右边;④数据:0
滑块修改伴窗TBM_SETBUDDY0x420将窗口分配为跟踪条控件的伙伴窗口。伙伴窗口将自动显示在相对于控件方向的位置。③参数:真=伙伴在左/上,假=伙伴在右/下;④数据:窗口
滑块获取伴窗TBM_GETBUDDY0x421检索给定位置的跟踪条控件伙伴窗口的句柄。指定位置相对于控件的方向 (水平或垂直) 。③参数:真=取左/上伙伴,假=取右/下伙伴;④数据:0
滑块改变位置TBM_SETPOSNOTIFY0x422设置跟踪栏中滑块的当前逻辑位置。③参数:0;④数据:新位置
控件设置宽字TBM_SETUNICODEFORMAT0x2005设置控件的 Unicode 字符格式标志。③参数:是否宽字;④数据:0;
控件获取宽字TBM_GETUNICODEFORMAT0x2006获取控件的 Unicode 字符格式标志。③参数:0;④数据:0;

滑块条——自定义绘制:

本部分列出了用于标识滑块条控件部分的值。
中文英文名称数值释义
通道TBCD_CHANNEL0x3标识跟踪条控件的拇指标记滑行的通道。
滑块TBCD_THUMB0x2标识跟踪条控件的拇指标记。 这是用户移动的控件的一部分。
刻度TBCD_TICS0x1标识沿跟踪条控件边缘显示的刻度线。

滑块条——控件样式:

中文名字英文名称数值释义
显刻度线TBS_AUTOTICKS0x1跟踪条控件在其值范围中的每个增量中都有一个刻度线。
垂直方向TBS_VERT0x2跟踪条控件垂直方向。
水平方向TBS_HORZ0跟踪条控件是水平方向的。这是默认方向。
左上刻度TBS_TOP0x4跟踪条控件在控件上方显示刻度线。 此样式仅对 水平方向 有效。
下方刻度TBS_BOTTOM0跟踪条控件在控件下方显示刻度线。 此样式仅对 水平方向 有效。
左边刻度TBS_LEFT0x4跟踪条控件在控件左侧显示刻度线。 此样式仅对 垂直方向 有效。
右边刻度TBS_RIGHT0跟踪条控件在控件右侧显示刻度线。 此样式仅对 垂直方向 有效。
两边刻度TBS_BOTH0x8跟踪条控件在控件的两侧显示刻度线。 与 水平方向 一起使用时,这既是顶部,也是底部,如果与 垂直方向 一起使用,则为左和右。
不显刻度TBS_NOTICKS0x10跟踪条控件不显示任何刻度线。
范围显示TBS_ENABLESELRANGE0x20跟踪条控件仅显示选择范围。 选择范围起始和结束位置处的刻度线显示为三角形 (而不是) 垂直虚线,并突出显示选择范围。
滑块调整TBS_FIXEDLENGTH0x40跟踪条控件允许随 滑块修改长度 消息更改滑块的大小。
不显滑块TBS_NOTHUMB0x8跟踪条控件不显示滑块。
支持提示TBS_TOOLTIPS0x100版本 4.70。 跟踪条控件支持工具提示。 使用此样式创建跟踪条控件时,它会自动创建显示滑块当前位置的默认工具提示控件。 可以使用 滑块提示方位 消息更改工具提示的显示位置。
反向跟踪TBS_REVERSED0x200版本 5.80。此样式位用于“反向”跟踪条,其中较小的数字表示“较高”,较大的数字表示“较低”。它对控件没有影响;它只是一个标签,可以检查以确定跟踪条是正常还是反向。
反转方向TBS_DOWNISLEFT0x400默认情况下,跟踪条控件使用向下等于右,向上等于左。 使用此样式来反转默认值,使向下等于左,向上等于右。
贴靠通知TBS_NOTIFYBEFOREMOVE0x800版本 6.00 和 Windows Vista。 由于用户操作,跟踪条在重新定位滑块之前应通知父级, (启用贴靠) 。
自绘背景TBS_TRANSPARENTBKGND0x1000版本 6.00 和 Windows Vista。 背景由父级通过 绘客户区 消息绘制。
跟踪通知类——结构定义:
中文名字英文名称长度作用解释
跟踪通知类NMTRBTHUMBPOSCHANGING8包含有关跟踪条更改通知的信息。 此消息随 滑块位置更改 通知一起发送。
跟踪通知类——成员表
中文英文类型作用解释
通知hdr通知类描述通知的 通知类
定位dwPos整数定位在跟踪条上。
原因nReason整数作为以下值之一的移动类型

影音动画——使用简介:

动画控件是显示交错Audio-Video (AVI) 剪辑的窗口。 AVI 剪辑是一系列位图帧,如电影。 动画控件只能显示不包含音频的 AVI 剪辑。
动画控件的一个常见用途是在长时间操作期间指示系统活动。 这是可能的,因为操作线程在显示 AVI 剪辑时继续执行。 例如,Windows 资源管理器的“查找”对话框在系统搜索文件时显示一个移动的放大镜。
动画控件可以显示源自未压缩 AVI 文件或使用运行长度 (BI_RLE8) 编码压缩的 AVI 文件的 AVI 剪辑。 可以将 AVI 剪辑作为 AVI 资源添加到应用程序,也可以将剪辑作为单独的 AVI 文件随应用程序一起。

关于动画控件消息

应用程序将消息发送到动画控件,以打开、播放、停止和关闭相应的 AVI 剪辑。 每条消息都有一个或多个宏,你可以使用这些宏,而不是显式发送消息。
创建动画控件后,应用程序发送 动画打开文件 消息以打开 AVI 剪辑并将其加载到内存中。 该消息指定 AVI 文件的路径或 AVI 资源的名称。 系统从创建动画控件的模块加载 AVI 资源。
如果动画控件具有 动画开始播放 样式,则控件在打开 AVI 文件或 AVI 资源后立即开始播放 AVI 剪辑。 否则,应用程序可以使用 动画开始播放 消息启动 AVI 剪辑。
应用程序可以通过发送 动画停止播放 消息随时停止剪辑。 当控件完成播放 AVI 剪辑或发送 ACM_STOP 时,播放的最后一帧将保持显示状态。
动画控件可以向其父窗口发送两个通知代码: 动画开始事件 和 动画停止事件。 大多数应用程序不处理任一通知。 若要关闭 AVI 文件或 AVI 资源并将其从内存中删除,应用程序可以发送 动画打开文件 消息,并将文件名或资源名称设置为 NULL。
发送消息(影音,动画打开文件,0,"D:\sec.avi")打开视频文件
发送消息(影音,动画开始播放,1,$FFFF0000)播放视频文件
发送消息(影音,动画停止播放,0,0)停止播放视频文件

默认消息处理

本部分介绍动画窗口类在窗体消息 的窗口过程 处理的窗口消息。
中文名字英文名称长度作用解释
窗口关闭WM_CLOSE0x10释放与动画控件关联的 AVI 文件或 AVI 资源。
程序关闭WM_DESTROY0x2释放 AVI 文件或 AVI 资源,释放内部数据结构,然后调用 处理窗口 函数。
擦除背景WM_ERASEBKGND0x14使用静态控件的当前背景色擦除窗口背景。
首创窗口WM_NCCREATE0x81分配并初始化内部数据结构,然后调用 处理窗口。
区外鼠标WM_NCHITTEST0x84返回 HTTRANSPARENT 命中测试值。
窗口重绘WM_PAINT0xF在动画控件中绘制 AVI 帧。
窗口缩放WM_SIZE0x5检查控件是否具有 ACS_CENTER 样式。 如果控件没有,它将调用 处理窗口。 否则,它会使动画在控件中居中,使控件失效,然后调用 处理窗口。
单击按钮事件的高位值为事件代码
中文名字常量数值英文名称释义
通知消息——常数表
动画开始事件1ACN_START通知动画控件的父窗口关联的AVI剪辑已开始播放。③参数:标识/代码;④数据:控件
动画停止事件2ACN_STOP通知动画控件的父窗口关联的 AVI 剪辑已停止播放。 ③参数:标识/代码;④数据:控件
发送消息——常数表
动画打开文件$464ACM_OPENA打开 AVI 剪辑并在动画控件中显示其第一帧。③参数:0/实例;④数据:路径/资源标识
动画开始播放$465ACM_PLAY在动画控件中播放 AVI 剪辑。 ③参数:次数,-1无限;④数据:开头/结尾
动画停止播放$466ACM_STOP停止在动画控件中播放 AVI 剪辑。 ③参数:0;④数据:0
动画视频文件$467ACM_OPENW打开 AVI 剪辑并在动画控件中显示其第一帧。③参数:0/实例;④数据:路径/资源标识
动画是否播放$468ACM_ISPLAYING检查是否正在播放AVI剪辑。 ③参数:0;④数据:0

影音动画——控件样式:

中文名字英文名称数值释义
居中显示ACS_CENTER1动画在动画控件的窗口中居中。
控件透明ACS_TRANSPARENT2允许将动画的背景色与基础窗口的背景色匹配,从而创建“透明”背景。
自动播放ACS_AUTOPLAY4打开 AVI 剪辑后立即开始播放动画。
内部控制ACS_TIMER8默认控件创建一个线程来播放AVI剪辑。设置此标志,控件在内部使用 Win32 计时器来同步播放。

图像列表——通知消息:

使用图像列表可以为其它控件提供显示图标
图像列表(数量,大小,格式)格式:0=位图1图标2光标。
添加指定数量和大小的图像到列表,默认从图像目录下名称为0的文件开始加载
在程序目录下新建一个图像的文件夹,把图片文件从0开始递增排序,如0.bmp,1.bmp
位图扩展名是bmp,图标扩展名是ico,光标扩展名是cur
中文名字英文名称常量数值释义
图像掩码ILC_MASK0x00001使用掩码。 图像列表包含两个位图,其中一个是用作蒙板的单色位图。 如果未包含此值,则图像列表仅包含一个位图。
图像颜色ILC_COLOR0x00000如果未指定其他ILC_COLORx标志,请使用默认行为。 通常,默认值为ILC_COLOR4,但对于较旧的显示驱动程序,默认值为ILC_COLORDDB。
图像位色ILC_COLORDDB0x000FE使用与设备相关的位图。
图像四位ILC_COLOR40x00004使用 4 位 (16 色) 与设备无关的位图 (DIB) 部分作为图像列表的位图。
图像八位ILC_COLOR80x00008使用 8 位 DIB 节。 用于颜色表的颜色与半色调调色板的颜色相同。
图像16位ILC_COLOR160x00010使用 16 位 (32/64k 彩色) DIB 部分。
图像24位ILC_COLOR240x00018使用 24 位 DIB 节。
图像32位ILC_COLOR320x00020使用 32 位 DIB 节。
图像粘贴ILC_PALETTE0x00800未实现。
图像镜图ILC_MIRROR0x02000镜像包含的图标(如果进程已镜像)
图像插入ILC_PERITEMMIRROR0x08000导致镜像代码在插入一组图像时镜像每个项,而不是整个条带。
图像小于ILC_ORIGINALSIZE0x10000Windows Vista 及更高版本。 Imagelist 应接受小于设置的图像,并根据添加的图像应用原始大小。
图像预留ILC_HIGHQUALITYSCALE0x20000Windows Vista 及更高版本。 保留。

用户控件

创建静态图片框,选择自绘控件风格,可以用来绘制图片和文字。目前,以下控件支持自定义绘制功能:
标头控件NMCUSTOMDRAW 结构
表格框 NMLVCUSTOMDRAW 结构
伸缩条NMCUSTOMDRAW 结构
工具栏NMTBCUSTOMDRAW 结构
工具提示NMTTCUSTOMDRAW 结构
滑动条NMCUSTOMDRAW 结构
树表框NMTVCUSTOMDRAW 结构
用户控件——通知消息:
中文名字常量数值英文名称释义
控件自行绘制-12NM_CUSTOMDRAW通知控件的父窗口有关自定义绘制操作的信息。
自绘控件13SS_OWNERDRAW静态控件的所有者负责绘制控件。每当需要绘制控件时,所有者窗口都会收到 外观改变 消息。
外观改变$002BWM_DRAWITEM 按钮、组合框、列表框、菜单的外观改变时会发送本消息给这些控件的所有者。④数据:绘制项目类

调色板——通知消息:

中文名字常量数值英文名称释义
色板请求$30FWM_QUERYNEWPALETTE本消息发送给将要收到焦点的窗口,本消息能使窗口在收到焦点时同时有机会实现逻辑调色板。③参数:0;④数据:0
色板启用$310WM_PALETTEISCHANGING当一个应用程序正要实现它的逻辑调色板时,发本消息通知所有的应用程序。③参数:窗口;④数据:0
色板变更$311WM_PALETTECHANGED发送本消息给所有顶级并重叠的窗口,以此来改变系统调色板。③参数:窗口;④数据:0
系统变色$0015WM_SYSCOLORCHANGE当系统颜色改变时,发送本消息给所有顶级窗口。③参数:0;④数据:0
公用控件库——comctl32函数:
中文名字英文名称参数作用解释
工具位图CreateMappedBitmap工具位图(实例,资源,标志,变色类,变色数)创建用于工具栏的位图。标志:2位图掩码;
状态窗口CreateStatusWindowA状态窗口(样式,文字,窗口,标识)创建状态栏窗口,用于显示应用程序的状态。
拖动插图DrawInsert拖动插图(窗口,列表框,图标项)在指定拖动列表框的父窗口中绘制插入图标。
状态栏字DrawStatusTextA销属性页(设备,矩形,文字,标志)带有边框的状态栏绘制文本。标志:0x100无边框,0x200突出边框,0x400反向显示
控制平条FlatSB_EnableScrollBar控制平条(窗口,方向,箭头)启用或禁用平面滚动条方向按钮。方向:0水平箭头,1垂直箭头,2滑块,3双箭头;激活=0都有效,1左或上箭头无效,2右或下箭头无效,3都无效
读平滚区FlatSB_GetScrollInfo读平滚区(窗口,方式,信息)获取滚动条的信息,滚动信息类。方式=1垂直 0水平
改平滚区FlatSB_SetScrollInfo改平滚区(窗口,方式,信息)设置滚动条的信息,滚动信息类。方式=1垂直 0水平
读平滚位FlatSB_GetScrollPos位置=读平滚位(窗口,方式)检索有关指定滚动条的滑块位置。方式=1垂直 0水平
改平滚位FlatSB_SetScrollPos改平滚位(窗口,方式,位置,重绘)设置滚动框(滑块)在指定滚动条中的位置。方式=1垂直 0水平;重绘是真或假
读平滚框FlatSB_GetScrollRange读平滚框(窗口,方式,最小,最大)检索有关指定滚动条的当前最小和最大滚动框位置。方式=1垂直 0水平
改平滚框FlatSB_SetScrollRange改平滚框(窗口,方式,最小,最大,重绘)设置有关指定滚动条的当前最小和最大滚动框位置。方式=1垂直 0水平
读平滚式FlatSB_GetScrollProp读平滚式(窗口,属性,@数值)获取平面滚动条的属性
改平滚式FlatSB_SetScrollProp改平滚式(窗口,属性,数值,重绘)设置平面滚动条的属性
显平滚条FlatSB_ShowScrollBar显平滚条(窗口,方式,隐藏)显示或隐藏平面滚动条。方式=3双向,1垂直,0水平
窗区尺寸GetEffectiveClientRect窗区尺寸(窗口,矩形,控件组)计算工作区中包含所有指定控件的矩形的尺寸。
图表添加ImageList_Add图表添加(图表,图像,掩码图)向图像列表添加图像。
图标添加ImageList_AddIcon图标添加(图表,图标)将图标或光标添加到图像列表。
图表掩码ImageList_AddMasked图表掩码(图表,图像,掩码色)将一个或多个图像添加到图像列表,从指定的位图生成掩码。
图表拖起ImageList_BeginDrag图表拖起(图表,序号,左,顶)开始拖动图像。
图表复制ImageList_Copy图表复制(目标图表,目标序号,源图表,源序号,标志)复制给定图像列表中的图像。标志:0复制,1交换
图表创建ImageList_Create图表创建(宽,高,标志,初数,新数)创建新的映像列表。标志:图像列表创建标志
图表销毁ImageList_Destroy图表销毁(图表)销毁图像列表。
图表拖图ImageList_DragEnter图表拖图(窗口,左,顶)在窗口中的指定位置显示拖动图像。
图表拖离ImageList_DragLeave图表拖离(窗口)解锁指定窗口并隐藏拖动图像,从而允许更新窗口。
图表拖动ImageList_DragMove图表拖动(图表,序号,左,顶)移动在拖放操作期间拖动的图像。
图表拖显ImageList_DragShowNolock图表拖显(是否)显示或隐藏正在拖动的图像。
图表绘制ImageList_Draw图表绘制(图表,序号,设备,左,顶,样式)在指定的设备上下文中绘制图像列表项。绘制样式
图表绘图ImageList_DrawEx图表绘图(图表,序号,设备,左,顶,宽,高,背景,前景,样式)在指定的设备上下文中绘制图像列表项。宽高为0原大小;背景,前景:0xffffffff无色,0xff000000默认色
图表绘区ImageList_DrawIndirect图表绘区(图表绘制类)绘制图像列表图像。
图表副本ImageList_Duplicate图表副本(图表)创建现有映像列表的副本。
图表拖完ImageList_EndDrag图表拖完结束拖动操作。
图表取色ImageList_GetBkColor图表取色(图表)检索图像列表的当前背景色。
图表取拖ImageList_GetDragImage图表取拖(当前坐标,偏移坐标)检索用于拖动图像的临时图像列表。
图表取图ImageList_GetIcon图表取图(图表,序号,样式)从图像创建图标,并在图像列表中创建掩码。绘制样式
图表取块ImageList_GetIconSize图表取块(图表,@宽,@高)检索图像列表中图像的尺寸。
图表取数ImageList_GetImageCount图表取数(图表)检索图像列表中的图像数。
图表信息ImageList_GetImageInfo图表信息(图表,序号,信息)检索有关图像的信息。图表信息类
图表边框ImageList_GetImageRect图表边框(图表,序号,矩形类)获取图像的边框。
图表载入ImageList_LoadImageA图表载入(实例,图片,宽度,数量,掩码,0,标志)从指定的位图创建图像列表。加载图像标志
图表合并ImageList_Merge图表合并(图表1,序号1,图表2,序号2,x偏移,y偏移)通过组合两个现有映像创建新映像。两个现有映像的掩码执行逻辑 OR 操作
图表读取ImageList_Read图表读取(流)从流中读取图像列表。
图表读流ImageList_ReadEx图表拖动(标志,流,@IID,@接口)从流中读取图像列表,并将 IImageList接口返回到图像列表。标志:0正常,1降级
图表移除ImageList_Remove图表移除(图表,序号)从图像列表中移除图像。序号-1清除所有
图表替换ImageList_Replace图表替换(图表,序号,图像,掩码)将图像列表中的图像替换为新图像。
图表换标ImageList_ReplaceIcon图表换标(图表,序号,图标)将图像替换为图标或光标。
图表改色ImageList_SetBkColor图表改色(图表,颜色)设置图像列表的背景色。
图表结合ImageList_SetDragCursorImage图表结合(图表,序号,左,顶)将指定的图像与当前拖动图像相结合,创建新的拖动图像。
图表改块ImageList_SetIconSize图表改块(图表,宽,高)设置图像列表中图像的尺寸,并从列表中删除所有图像。
图表改数ImageList_SetImageCount图表改数(图表,数量)调整现有图像列表的大小。
图表覆盖ImageList_SetOverlayImage图表覆盖(图表,覆盖序号,掩码序号)将指定的图像添加到要用作覆盖掩码的图像列表中。
图表写入ImageList_Write图表写入(图表,流)将图像列表写入流。
图表写流ImageList_WriteEx图表写流(图表,标志,流)将图像列表写入流。标志:0正常,1降级
初始化类InitCommonControls初始化类注册并初始化某些常见的控件窗口类。此函数已过时。
初始控件InitCommonControlsEx初始控件(控件类)注册特定的公共控件类
初始平条InitializeFlatSB初始平条(窗口)初始化特定窗口的平面滚动条。
列表点项LBItemFromPt列表点项(列表框,坐标类,是否滚动)检索列表框中指定点处项的索引。点在列表项上返回项标识,滚动为真返回-1
列表拖动MakeDragList列表拖动(列表框)将指定的单选列表框更改为拖动列表框。
显隐菜单ShowHideMenuCtl显隐菜单(窗口,标识,控件组)设置或删除指定菜单项的检查 mark 属性,并显示或隐藏相应的控件。
注销平条UninitializeFlatSB注销平条(窗口)取消初始化特定窗口的平面滚动条。
建属性页CreatePropertySheetPageA建属性表(属性页类)为属性表创建新属性页
销属性页DestroyPropertySheetPage销属性页(页面)销毁属性表页。
建属性表PropertySheetA销属性页(属性表类)创建属性表并添加在指定的属性表标题结构中定义的页面。
属性页类——结构定义:
中文名字英文名称长度作用解释
属性页类PROPSHEETPAGEA_V28定义属性表中的页面。
属性页类——成员表
中文英文类型作用解释
标题pszHeaderTitle整数标题区域的标题。
副标题pszHeaderSubTitle整数标题区域的副标题。
属性表类——结构定义:
中文名字英文名称参数作用解释
属性表类PROPSHEETHEADERA_V212定义属性表中的页面。
属性表类——成员表
中文英文类型作用解释
水印hbmWatermark整数水印位图的句柄。
资源pszbmWatermark整数要用作水印的位图资源标识符或字符串。
标头hplWatermark整数用于绘制水印位图和/或标头位图。
图表信息类——结构定义:
中文名字英文名称参数作用解释
图表信息类IMAGEINFO32包含有关图像列表中的图像的信息。
图表信息类——成员表
中文英文类型作用解释
图像hbmImage整数包含图像的位图的句柄。
掩码hbmMask整数包含图像掩码的单色位图的句柄。
Unused1整数未使用。
Unused2整数未使用。
x整数指定图像绘制位置的x坐标。
y整数指定图像绘制位置的y坐标。
cx整数绘制图像的宽度,宽高是0为原大小
cy整数绘制图像的宽度,宽高是0为原大小。
图表绘制类——结构定义:
中文名字英文名称参数作用解释
图表绘制类IMAGELISTDRAWPARAMS68包含有关图像列表绘制操作的信息。
图表绘制类——成员表
中文英文类型作用解释
大小cbSize整数此结构的大小(以字节为单位)。
图表himl整数包含要绘制的图像的图像列表的句柄。
序号i整数要绘制的图像的从零开始的索引。
设备hdcDst整数目标设备上下文的句柄。
x整数指定图像绘制位置的x坐标。
y整数指定图像绘制位置的y坐标。
cx整数绘制图像的宽度,宽高是0为原大小
cy整数绘制图像的宽度,宽高是0为原大小。
xBitmap整数指定引用图像本身的绘制操作左上角的 x 坐标。
yBitmap整数指定引用图像本身的绘制操作左上角的y坐标。
背景rgbBk整数图像前景色。0xffffffff无色,0xff000000默认色。仅当样式包含ILD_BLEND25或ILD_BLEND50标志时可用
前景rgbFg整数图像前景色。0xffffffff无色,0xff000000默认色。仅当样式包含ILD_BLEND25或ILD_BLEND50标志时可用
样式fStyle整数指定绘图样式和覆盖图像。绘制样式
光栅dwRop整数一个指定光栅操作代码的值。光栅操作常量
状态fState整数一个指定绘图状态的标志。图表绘图状态常量
混合Frame整数与alpha混合效果一起使用。0表示完全透明,255表示完全不透明。
光影crEffect整数用于发光和阴影效果的颜色。
图表绘制样式——常量:
英文名称数值作用解释
ILD_NORMAL0使用图像列表的背景色绘制图像。
ILD_TRANSPARENT1使用蒙板以透明方式绘制图像,而不考虑背景色。
ILD_BLEND252绘制图像,将25% 与 rgbFg 指定的混合颜色混合
ILD_BLEND504绘制图像,将50% 与 rgbFg 指定的混合颜色混合
ILD_MASK0x10绘制蒙板。
ILD_IMAGE0x20如果覆盖不需要绘制掩码,请设置此标志。
ILD_ROP0x40使用光栅成员指定的光栅操作代码绘制图像。
ILD_OVERLAYMASK0xF00若要从样式中提取覆盖图像,请使用逻辑 AND 将此值组合在一起。
ILD_PRESERVEALPHA0x1000保留目标中的 alpha 通道。
ILD_SCALE0x2000使映像缩放到指定宽度,而不是被剪裁。
ILD_DPISCALE0x4000将图像缩放到显示器的当前 dpi。
ILD_ASYNC0x8000如果缓存中可用。不要自动提取它。
图像列表状态标志——常量:
英文名称数值作用解释
ILS_NORMAL0未修改映像状态。
ILS_GLOW1不支持。
ILS_SHADOW2不支持。
ILS_SATURATE4将图标的颜色饱和度降低到灰度。
ILS_ALPHA8根据其 alpha 通道的值控制图标的透明度级别。
加载图像类型标志——常量:
英文名称数值作用解释
LR_DEFAULTCOLOR0x0000使用显示器的颜色格式。
LR_MONOCHROME0x0001加载黑白图像。
LR_COLOR0x0002作用解释
LR_COPYRETURNORG0x0004如果原图满足复制条件(即正确的尺寸和颜色深度)则返回原图,否则始终会创建一个新对象。
LR_COPYDELETEORG0x0008创建副本后删除原始映像。
LR_LOADFROMFILE0x0010从指定的文件中加载图像。
LR_LOADTRANSPARENT0x0020检索图像中第一个像素的颜色值,并将颜色表中的相应条目替换为默认窗口颜色
LR_DEFAULTSIZE0x0040如果宽度设置为零,则使用由游标和图标的系统指标值指定的宽度或高度。
LR_VGACOLOR0x0080真VGA颜色
LR_LOADMAP3DCOLORS0x1000在颜色表中搜索图像,并将以下灰色底纹替换为相应的三维颜色:
Dk灰色:0:128.128.128(COLOR_3DSHADOW)灰色:0:192.192.192(COLOR_3DFACE)Lt灰色:0:223.223.223(COLOR_3DLIGHT)
LR_CREATEDIBSECTION0x2000DIB节位图。可用于加载位图而不将其映射到显示设备的颜色。
LR_COPYFROMRESOURCE0x4000尝试从原始资源文件重新加载图标或游标资源。使用LR_SHARED标志加载后适用
LR_SHARED0x8000如果多次加载映像,则共享映像句柄。
滚动属性——常量:
英文名称数值作用解释
WSB_PROP_CYVSCROLL0x1数值接收垂直滚动条中方向按钮的高度(以像素为单位)。
WSB_PROP_CXHSCROLL0x2数值接收水平滚动条中方向按钮的宽度(以像素为单位)。
WSB_PROP_CYHSCROLL0x4数值接收水平滚动条的高度(以像素为单位)。
WSB_PROP_CXVSCROLL0x8数值接收垂直滚动条的宽度(以像素为单位)。
WSB_PROP_CXHTHUMB0x10该值接收水平滚动条中滑块的宽度(以像素为单位)。
WSB_PROP_CYVTHUMB0x20该值接收垂直滚动条中滑块的高度(以像素为单位)。
WSB_PROP_VBKGCOLOR0x40该值接收垂直滚动条中的背景色。
WSB_PROP_HBKGCOLOR0x80该值接收水平滚动条中的背景色。
WSB_PROP_VSTYLE0x100该值接收垂直滚动条的以下视觉效果之一。0普通,1三维滑块,2反色滑块
WSB_PROP_HSTYLE0x200该值接收水平滚动条的以下视觉效果之一。0普通,1三维滑块,2反色滑块
WSB_PROP_WINSTYLE0x400该值接收当前窗口包含垂直和水平滚动条的样式位。
WSB_PROP_PALETTE0x800该值接收滚动条在绘图时使用的调色板。
控件类——结构定义:
中文名字英文名称长度作用解释
控件类INITCOMMONCONTROLSEX8从动态链接库加载常见控件类的信息
控件类——成员表
中文英文类型作用解释
大小dwSize整数结构大小(以字节为单位)。
标志dwICC整数公共控件类的位标志集。
控件类标志集——常量:
英文名称数值作用解释
ICC_LISTVIEW_CLASSES0x1加载列表视图和标头控件类。
ICC_TREEVIEW_CLASSES0x2加载树视图和工具提示控件类。
ICC_BAR_CLASSES0x4加载工具栏、状态栏、跟踪栏和工具提示控件类。
ICC_TAB_CLASSES0x8加载选项卡和工具提示控件类。
ICC_UPDOWN_CLASS0x10加载调节器控件类。
ICC_PROGRESS_CLASS0x20加载进度栏控件类。
ICC_HOTKEY_CLASS0x40加载热键控件类。
ICC_ANIMATE_CLASS0x80加载动画控件类。
ICC_WIN95_CLASSES0xff加载动画控件、标头、热键、列表视图、进度栏、状态栏、选项卡、工具提示、工具栏、跟踪条、树视图和调节器控件类。
ICC_DATE_CLASSES0x100加载日期和时间选取器控件类。
ICC_USEREX_CLASSES0x200加载超组合框控件类。
ICC_COOL_CLASSES0x400加载伸缩条控件类。
ICC_INTERNET_CLASSES0x800加载IP地址类。
ICC_PAGESCROLLER_CLASS0x1000加载分页器控件类。
ICC_NATIVEFNTCTL_CLASS0x2000加载本机字体控件类。
ICC_STANDARD_CLASSES0x4000用户控件包括按钮、编辑、静态、列表框、组合框和滚动条。
ICC_LINK_CLASS0x8000加载超链接控件类。

1.通用对话框-功能简介

颜色对话框显示可用颜色,并选择性地允许用户创建自定义颜色。用户可以选择基本或自定义颜色。
查找对话框显示查找字符串的对话框,用户还可以指定搜索选项,例如搜索方向以及搜索是否区分大小写。
字体对话框显示一个对话框,用户可在其中选择字体系列和关联的字体样式、磅号和其他字体属性,如字体颜色、下划线或删除线。
打开对话框显示一个对话框,用户可在其中键入或选择要打开的文件或 shell 名称空间对象的名称。
页面设置框显示当前页配置。 用户可以选择页面配置选项,例如纸张方向、大小、源和页边距。
打印对话框显示有关已安装打印机及其配置的信息。可以选择打印作业选项,例如要打印的页面范围和份数,然后开始打印过程。
替换对话框显示查找和替换字符串的对话框,用户可以指定搜索选项(例如搜索是否区分大小写)和替换选项(例如替换范围)。
保存对话框显示一个对话框,用户可在其中键入或选择要保存文件或 shell 名称空间对象的名称。

通用对话框-comdlg32库函数

中文名称英文名称示例作用
颜色选框ChooseColorA颜色选框(颜色框类)创建一个“常用颜色”对话框,使用户可以选择颜色
字体选框ChooseFontA字体选框(字体框类)创建一个字体公共对话框,使对话框能够为用户选择逻辑字体的属性。
对话错误CommDlgExtendedError错误=对话错误返回在执行对话框函数时最后出现的错误代码
搜索选框FindTextA搜索选框(查找替换类)创建一个系统定义的无模式对话框,允许用户指定要搜索的字符串以及在文档中搜索文本时使用的选项
文件选框GetOpenFileNameA文件选框(文件框类)创建一个文件框,允许用户指定要打开的文件或文件集的驱动器,目录和名称。
保存选框GetSaveFileNameA保存选框(文件框类)创建一个文件框,允许用户指定要保存的文件的驱动器,目录和名称。
页面设置PageSetupDlgA页面设置(页面框类)创建一个页面设置对话框,允许用户可以编辑设置打印页面的属性。
打印选项PrintDlgA打印选项(打印框类)创建显示“打印”对话框或“打印设置”对话框。使用户能够指定特定打印作业的属性。
打印选框PrintDlgExA打印选框(打印框类)创建显示“打印”对话框或“打印设置”对话框。使用户能够指定特定打印作业的属性。
替换选框ReplaceTextA替换选框(查找替换类)创建一个系统定义的无模式对话框,允许用户指定要搜索的字符串以及在文档中搜索文本时使用的选项

通用对话框——通知消息
中文名字常量英文名称释义
对话完成排列-601CDN_INITDONE系统已完成在打开另存为通用对话框中排列控件
对话选择改变-602CDN_SELCHANGE用户在对话框文件列表里选择了一个新文件或文件夹
对话新文件夹-603CDN_FOLDERCHANGE向钩子函数发送一个新文件夹被打开的消息
对话共享冲突-604CDN_SHAREVIOLATION用户选择的文件名发生网络共享冲突
对话点击帮助-605CDN_HELP通用对话框中的帮助按钮被按下
对话点击确定-606CDN_FILEOK向钩子函数发送确定按钮被按下的消息
对话类型改变-607CDN_TYPECHANGE从文件类型列表中选择一个新文件类型
对话包含项目-608CDN_INCLUDEITEM对话框会针对文件夹中的每一项发送包含项通知。
对话颜色返回"commdlg_ColorOK"COLOROKSTRING用户选择颜色并单击“确定”按钮时,“颜色”对话框会将注册的消息发送到挂钩过程 。③参数:0;④数据:颜色框类
对话文件返回"commdlg_FileNameOK"FILEOKSTRING当用户指定文件名并单击“确定”按钮时,对话框会将注册的消息发送到挂钩过程 。③参数:0;④数据:文件框类
对话查找返回"commdlg_FindReplace"FINDMSGSTRING当用户点击查找替换对话框按钮时,对话框会将注册的消息发送到挂钩过程 。③参数:0;④数据:查找替换类
对话文件返回"commdlg_help"HELPMSGSTRING当用户点击“帮助”按钮时,对话框会将注册的消息发送到挂钩过程 。③参数:对话框;④数据:对话结构
对话选项返回"commdlg_LBSelChangedNotify"FINDMSGSTRING当对话框的任何列表框或组合框中的选择发生更改时,对话框会将注册的消息发送到挂钩过程 。
③参数:标识;④数据:项号/高位:0单选项,1非多选框选项,2多选框选项,-1多选框无项目
对话共享冲突"commdlg_ShareViolation"SHAREVISTRING如果用户单击“确定”按钮时所选文件发生共享冲突,对话框会将注册的消息发送到挂钩过程 。③参数:0;④数据:文件框类
页面绘图回调消息——常数表
对话绘制页面0x400WM_PSD_PAGESETUPDLG对话框将绘制示例页面的内容。③参数:纸张大小/方向;④数据:页面框类
对话页面坐标0x401WM_PSD_FULLPAGERECT页面矩形在对话框中的坐标。③参数:设备;④数据:矩形
对话边距坐标0x402WM_PSD_MINMARGINRECT边距矩形在对话框中的坐标。③参数:设备;④数据:矩形
对话边距矩形0x403WM_PSD_MARGINRECT对话框将绘制示例页的边距矩形。③参数:设备;④数据:矩形
对话绘希腊文0x404WM_PSD_GREEKTEXTRECT边距矩形在对话框中的坐标。③参数:设备;④数据:矩形
对话绘制信封0x405WM_PSD_ENVSTAMPRECT对话框将绘制示例页的信封戳矩形。③参数:设备;④数据:矩形
对话绘制地址0x406WM_PSD_YAFULLPAGERECT对话框将绘制信封示例页的寄信人地址部分。③参数:设备;④数据:矩形
发送消息——文件对话框常数表
对话文件名称0x464CDM_GETSPEC资源管理器样式的文件对话框中检索文件名。③参数:大小;④数据:缓冲区
对话文件路径0x465CDM_GETFILEPATH在资源管理器样式的文件对话框中检索所选文件的路径和文件名。③参数:大小;④数据:缓冲区
对话目录路径0x466CDM_GETFOLDERPATH检索资源管理器样式的文件对话框当前已打开的文件夹或目录的路径。③参数:大小;④数据:缓冲区
对话目录列表0x467CDM_GETFOLDERIDLIST检索资源管理器样式的文件对话框当前已打开的文件夹对应的项目标识符列表的地址。③参数:大小;④数据:缓冲区
对话控件文本0x468CDM_SETCONTROLTEXT在资源管理器样式的文件对话框中设置指定控件的文本。③参数:标识;④数据:新内容
对话隐藏控件0x469CDM_HIDECONTROL隐藏资源管理器样式的文件对话框中的指定控件。③参数:标识;④数据:0
对话改扩展名0x46ACDM_SETDEFEXT设置“资源管理器”样式的文件对话框的默认文件扩展名不含点(.) 。③参数:0;④数据:扩展名
发送消息——字体对话框常数表
对话获取字体0x401WM_CHOOSEFONT_GETLOGFONT检索有关用户当前字体选择的信息。③参数:0;④数据:逻辑字体类
对话设置字体0x465WM_CHOOSEFONT_SETLOGFONT设置当前逻辑字体信息。③参数:0;④数据:逻辑字体类
对话字体选项0x466WM_CHOOSEFONT_SETFLAGS设置对话框的显示选项。③参数:0;④数据:字体框类
对话修改颜色"commdlg_SetRGBColor"SETRGBSTRING挂钩过程将注册的消息发送到对话框,以设置当前颜色选择。③参数:0;④数据:颜色

通用对话框-回调函数

中文名称英文名称示例作用
颜色回调Lpcchookproc颜色回调(窗口,消息,参数,数据)接收用于 “颜色 ”对话框的默认对话框过程的消息或通知。
字体回调Lpcfhookproc字体回调(窗口,消息,参数,数据)接收用于 “字体 ”对话框的默认对话框过程的消息或通知。
查找回调Lpfrhookproc查找回调(窗口,消息,参数,数据)接收用于 “查找 ”或“ 替换 ”对话框的默认对话框过程的消息或通知。
打开另存Lpofnhookproc打开另存(窗口,消息,参数,数据)接收用于 “打开 ”和“ 另存为 ”对话框的默认对话框过程的消息或通知。

通用对话框-错误代码

英文名称数值作用解释
CDERR_DIALOGFAILURE0xFFFF无法创建对话框。
CDERR_FINDRESFAILURE0x0006通用对话框函数未能找到指定的资源。
CDERR_INITIALIZATION0x0002常见对话框函数在初始化期间失败。当内存不足时,通常会发生此错误。
CDERR_LOADRESFAILURE0x0007通用对话框函数未能加载指定的资源。
CDERR_LOADSTRFAILURE0x0005通用对话框函数未能加载指定的字符串。
CDERR_LOCKRESFAILURE0x0008通用对话框函数未能锁定指定的资源。
CDERR_MEMALLOCFAILURE0x0009通用对话框函数无法为内部结构分配内存。
CDERR_MEMLOCKFAILURE0x000A通用对话框函数无法锁定与句柄关联的内存。
CDERR_NOHINSTANCE0x0004但未能提供相应的实例句柄。
CDERR_NOHOOK0x000B但未能提供指向相应挂钩过程的指针。
CDERR_NOTEMPLATE0x0003但未能提供相应的模板。
CDERR_REGISTERMSGFAIL0x000C对话错误函数在由通用对话框函数调用时返回错误代码。
CDERR_STRUCTSIZE0x0001相应公共对话框的初始化结构的大小无效。
打印选项函数返回以下错误代码。
PDERR_CREATEICFAILURE0x100APrintDlg 函数在尝试创建信息上下文时失败。
PDERR_DEFAULTDIFFERENT0x100C其他结构成员描述的打印机与当前默认打印机不匹配。
PDERR_DNDMMISMATCH0x1009DEVMODE和DEVNAMES结构中的数据描述了两个不同的打印机。
PDERR_GETDEVMODEFAIL0x1005打印机驱动程序无法初始化DEVMODE 结构。
PDERR_INITFAILURE0x1006打印选项 函数在初始化期间失败,没有更具体的扩展错误代码来描述失败。 这是函数的通用默认错误代码。
PDERR_LOADDRVFAILURE0x1004打印选项 函数无法加载指定打印机的设备驱动程序。
PDERR_NODEFAULTPRN0x1008默认打印机不存在。
PDERR_NODEVICES0x1007找不到打印机驱动程序。
PDERR_PARSEFAILURE0x1002打印选项 函数无法分析WIN.INI文件的 [devices] 节中的字符串。
PDERR_PRINTERNOTFOUND0x100BWIN.INI文件的 [devices] 部分不包含所请求打印机的条目。
PDERR_RETDEFFAILURE0x1003打印框类 结构指定了PD_RETURNDEFAULT标志,但 环境 或 名称 成员不是0。
PDERR_SETUPFAILURE0x1001打印选项 函数无法加载所需的资源。
字体选框函数返回以下错误代码。
CFERR_MAXLESSTHANMIN0x2002字体框类 结构的最小尺寸小于最大尺寸。
CFERR_NOFONTS0x2001不存在字体。
文件/保存选框函数返回以下错误代码。
FNERR_BUFFERTOOSMALL0x3003文件框类 结构的 路径 成员指向的缓冲区太小。
FNERR_INVALIDFILENAME0x3002文件名无效。
FNERR_SUBCLASSFAILURE0x3001尝试将列表框子类化失败,因为没有足够的内存可用。
查找/替换选框函数返回以下错误代码。
FRERR_BUFFERLENGTHZERO0x4001查找替换类 结构的成员指向无效的缓冲区。

通用对话框-使用示例

2.颜色对话框——选择颜色
显示允许用户选择特定颜色值的模式对话框。 用户可以从一组基本或自定义调色板中选择一种颜色。
可以通过修改对话框用户界面的 RGB 或色调、饱和度、亮度 (HSL) 颜色值来生成颜色值。返回用户选择的颜色的 RGB 值。

首先初始化 颜色框类 结构,然后调用 颜色选框 函数以显示对话框。
颜色框类 选色(长度=36,标志=3)//定义颜色框类变量为选色,结构数据的长度=36,标志=1初始化颜色+2定义颜色
整数 颜色表[16];//自定义颜色阵列
程序段 窗体启动;//以上代码为全局变量,在窗体启动程序段进行赋值
选色.窗口=窗体;//指定颜色对话框的窗口为程序主窗体
选色.数组=@颜色表;//指定对话框的颜色数组为颜色表的指针地址
结束//换到其它地方书写代码
程序段 按钮1_点击;//在按钮1的点击事件里弹出颜色对话框
如果(颜色选框(选色))//如果函数返回真,表示用户选择了一种颜色
{整数 背景=创建画刷(选色.颜色)//用选择的颜色创建一个背景画刷(用来填充窗体背景)
修改类值(窗体,类背景色,背景)//修改窗体的背景颜色为创建的颜色画刷
重绘矩形(窗体,0,1)}//重绘窗体擦除背景,从而显示新的背景色
结束//本例演示创建背景画刷,也可以用来创建画笔
RGB 颜色模型
RGB 模型用于指定显示器和其他发光设备的颜色。有效的红色、绿色和蓝色值范围为 0 到 255,其中 0 表示最小强度,255 表示最大强度。
下图显示了如何将红色、绿色和蓝色的原色组合在一起以生成四种其他颜色。 (对于显示设备,当红色、绿色和蓝色值设置为 0 时,将生成黑色。在显示技术中,黑色是所有颜色的缺失。)

下表列出了 RGB 模型的八种颜色及其关联的 RGB 值。
颜色16进制RGB 值
红色0xFF0:255.0.0
绿色0xFF000:0.255.0
蓝色0xFF00000:0.0.255
青色0xFFFF000:0.255.255
洋红0xFF00FF0:255.0.255
黄色0xFFFF0:255.255.0
白色0xFFFFFF0:255.255.255
黑色0x00:0.0.0
颜色框类
中文名字英文名称长度作用解释
颜色框类CHOOSECOLOR36弹出一个选取颜色的对话框,并得到颜色相关信息。
颜色框类 成员表
中文英文类型作用解释
长度dwSize整数指定这个结构的大小,以字节为单位。
窗口hwndOwner整数拥有对话框的窗口的句柄。可不指定
实例hInstance整数对话框的模块或内存对象的句柄
颜色rgbResult整数返回用户选择的颜色。
数组lpCustColors整数指向一个包含16个值的数组,该数组包含了对话框中自定义颜色的红、绿、蓝(RGB)值。
标志Flags整数$100所有颜色;$10回调;$20实例模板;$40忽略模板;2定义颜色;4禁用定义;1初始颜色;8显示帮助;$80只显纯色
数据lCustData整数指定程序自定义的数据,该数据会被系统发送给钩子程序。
回调lpfnHook整数指向CCHookProc钩子程序的指针,该钩子可以处理发送给对话框的消息。
模板lpTemplateName整数指向对话框模板资源名称的字符串
3.字体对话框——选择字体
字体对话框允许用户选择逻辑字体的属性,例如字体系列和关联的字体样式、点大小、效果 (下划线、删除线和文本颜色) ,以及脚本 (或字符集) 。

首先初始化 字体框类 结构,然后调用 字体选框 函数以显示对话框。
字体框类 字框(长度=60,标志=0x101);//结构数据的长度=60,标志=1系统字体+0x100允许选颜色
逻辑字体类 字号;;//申请一个逻辑字体类,用来获取字体名称和字号大小等信息
程序段 窗体启动;//以上代码为全局变量,在窗体启动程序段进行赋值
字框.窗口=窗体;//指定字体对话框的窗口为程序主窗体
字框.字体=字号;//指定字体对话框的字体为字号变量
结束//换到其它地方书写代码
程序段 按钮2_点击;//在按钮2的点击事件里弹出字体对话框
如果(字体选框(字框))//如果函数返回真,表示用户选择了一种字体或颜色
{写设置("字体",字号.名称);//把字体名称保存到配置文件
写数值("字号",字号.高度);//把字体大小保存到配置文件
写数值("颜色",字框.颜色);//把字体颜色保存到配置文件
发送消息(文档,$443,0,字框.颜色);//修改编辑框的背景颜色
字体=新建字体(字号);//从选择的逻辑字体新建一个字体
发送消息(文档,指定字体,字体,0)};//指定编辑框的字体为新建的字体
结束//本例演示修改编辑框的字体和背景色
字体框类
中文名字英文名称长度作用解释
字体框类CHOOSEFONT60弹出一个选取颜色的对话框,并得到颜色相关信息。函数:ChooseFont
字体框类——成员表
中文英文类型作用解释
长度lStructSize整数指定这个结构的大小,以字节为单位。
窗口hwndOwner整数拥有对话框的窗口的句柄。可不指定
设备hDC整数显示的设备环境句柄,不指定
字体lpLogFont整数选中的字体返回值,字体是逻辑字体
大小iPointSize整数字体的大小
标志Flags整数用来初始化对话框。1仅列出系统字体;2仅打印字体;4显示帮助;8启用回调函数;$10启用模板;$20启用模板数据;$40启用逻辑字体;$80自定义字体风格;$100允许选颜色;$200显示应用按钮;
$400仅英文和定制字体;$800不许矢量字体;$1000不允许模拟字体;$2000限指定范围字号;$4000限固定字体;$8000仅可显字体;$10000检查错误字体;$20000仅可缩放字体;$40000仅真实字体;
$80000阻止选择指定字体;$100000阻止默选字体样式;$200000阻止默选字体大小;$400000只显示字体结构中的字符集;$800000禁止脚本组合框;$1000000仅横向字体;$2000000显示隐藏字体;
颜色rgbColors整数返回字体的颜色
数据lCustData整数自定义数据,传到的钩子程序
回调lpfnHook整数指向钩子程序的指针,该钩子可以处理回调消息。
模板lpTemplateName整数指向对话框模板资源名称的字符串
实例hInstance整数实例句柄
风格lpszStyle整数字体风格
分类nFontType整数字体的类型
最小nSizeMin整数字体允许的最小尺寸
最大nSizeMax整数字体允许的最大尺寸
4.打开保存文件对话框——选择文件
打开对话框允许用户指定要打开的文件或文件集的驱动器、目录和名称。 可以通过初始化 文件框类 结构并将结构传递给 文件选框 函数来创建并显示“打开”对话框。

另存为对话框允许用户指定要保存的文件的驱动器、目录和名称。 可以通过初始化 文件框类 结构并将结构传递给 保存选框 函数来创建并显示“另存为”对话框。

资源管理器样式 的“打开 ”和“ 另存为 ”对话框提供类似于 Windows 资源管理器的用户界面功能。 但是,对于必须与旧式用户界面一致的应用程序,系统仍支持旧式 的“打开 ”和“ 另存为 ”对话框。
首先初始化 文件框类 结构,然后调用 文件选框 函数以显示对话框。
文件框类 文件框(长度=76,路长=64);//结构数据的长度=76,文件路径名称的长度=64
文本 路径[64];//申请一个文本变量的内存缓冲区,用来存储文件的路径信息
程序段 窗体启动;//以上代码为全局变量,在窗体启动程序段进行赋值
文件框.窗口=窗体;//指定文件对话框的窗口为程序主窗体
文件框.路径=路径;//指定文件对话框的路径为文本缓冲区
文件框.分类 = "文本文件'\0'*.txt;*.inc'\0'所有文件'\0'*.*'\0'";;//文件分类过滤器格式:名称+0+扩展名+0,多个扩展名用分号隔开
结束//换到其它地方书写代码
程序段 按钮2_点击;//在按钮2的点击事件里弹出打开文件对话框
如果(文件选框(文件框))//如果函数返回真,表示用户选择了文件路径
信息框(0,路径,"选择的文件是",信息图标);//弹出消息框,显示选择的文件完整路径
结束//本例演示了在文件选择对话框中选择路径到指定的文本缓冲区
程序段 按钮3_点击;//在按钮3的点击事件里弹出另存为对话框
如果(保存选框(文件框))//如果函数返回真,表示用户选择或输入了文件路径
信息框(0,路径,"选择的文件是",信息图标);//弹出消息框,显示选择的文件完整路径
结束//本例演示了在文件选择对话框中选择路径到指定的文本缓冲区
文件框类
中文名字英文名称长度作用解释
文件框类OPENFILENAME76用来初始化打开或另存为对话框的信息
文件框类 成员表
中文英文类型作用解释
长度lStructSize整数指定这个结构的大小,以字节为单位。
窗口hwndOwner整数指向对话框所在窗口的句柄。
实例hInstance整数指向对话框模板的对象。
分类lpstrFilter整数过滤显示指定类型文件(过滤器)如 .分类="所有文件'\0'*.*'\0'文本文件'\0'*.txt'\0'"
指定lpstrCustomFilter整数用来保留用户选择的哪种过滤器,为空不保留
定长nMaxCustFilter整数指定lpstrCustomFilter的缓冲区长度
定位nFilterIndex整数指定选择哪种过滤器,从1开始
路径lpstrFile整数指向选择文件完整路径的缓冲区,可以是一个文本变量或内存
路长nMaxFile整数“路径”缓冲区的长度
文件lpstrFileTitle整数指向接收选择的文件的文件名和扩展名的缓冲(不带路径信息)。
名长nMaxFileTitle整数指定文件名缓冲区的长度
目录lpstrInitialDir整数指定初始目录
标题lpstrTitle整数指向对话框标题栏的字符串,不指定时显示系统默认的打开或另存为
标记Flags整数可以设置对话框的风格样式等。1只读;2允许覆盖;4隐藏只读;8更改默认目录;$10显示帮助;$20启用回调;$40允许模板;$80允许模板数据指针;$100允许无效字符;$200允许多选;
$400输入非指定扩展名指定为空;$800限制有效路径;$1000只能输入现有文件;$2000允许创建;$4000忽略共享错误;$8000不要只读检查;$10000关闭后创建文件;$20000隐藏网络按钮;
$40000短文件名;$80000资源模板对话框;$100000返回快捷方式;$200000长文件名;$400000启用回调通知;$800000允许调整大小;$10000000显示系统和隐藏文件
偏移nFileOffset整数表示完整路径开头到文件名的偏移量,也就是文件名前面有多少个字
扩展lpstrDefExt整数指向包含默认扩展名的缓冲。通常三个字符,如“txt”、“exe”,不带“.”
定义lCustData整数指定应用程序定义的数据,这数据是能被lpfnHook成员识别的系统传到的钩子程序。
回调lpfnHook整数指向一个钩子程序。标记:$20。
模板lpTemplateName整数指向一个对话框模板资源名字的字符串。标记:$40
5.查找替换对话框——编辑文本
显示一个无模式对话框,该对话框允许用户指定要搜索的字符串,以及在搜索文档中的文本时要使用的选项。“ 替换 ”对话框允许用户指定要搜索的字符串和替换字符串,以及用于控制操作的选项。
通过初始化 查找替换类 结构并将该结构传递给查找选框函数,可以创建并显示“查找”对话框。下图显示了一个典型的“ 查找 ”对话框。

通过初始化 查找替换类 结构并将结构传递给 替换选框函数,可以创建并显示“替换”对话框。下图显示了一个典型的“ 替换 ”对话框。

与其他常见对话框不同,“查找 ”和“ 替换 ”对话框是无模式的。无模式对话框允许用户在对话框和创建对话框的窗口之间切换。
这对于让用户搜索字符串、切换到应用程序窗口以处理字符串,以及切换回对话框以搜索另一个字符串很有用,而无需重复打开对话框所需的命令。
如果 搜索选框 或 替换选框 函数成功创建对话框,它将返回对话框的句柄。 可以使用此句柄移动对话框并与之通信。 如果函数无法创建对话框,则返回 NULL。可以通过调用 对话错误 函数来检索扩展的错误值来确定错误的原因。
在创建 “查找 ”或“ 替换 ”对话框之前,必须调用 注册消息 函数以获取 "commdlg_FindReplace" 已注册消息的消息标识符。
然后可以使用标识符来检测和处理从对话框发送的消息。 当用户单击对话框中的 “查找下一个”、“ 替换”或“ 全部替换 ”按钮时,
对话框过程会将消息发送到所有者窗口的窗口过程。 创建对话框时,查找替换类 结构的 窗口 成员标识所有者窗口。
查找替换消息的 ④数据 参数是指向在创建对话框时指定的 查找替换类 结构的指针。
在发送消息之前,对话框使用最新的用户输入设置此结构的成员,包括要搜索替换的字符串以及查找和替换操作的选项。
查找替换消息中,查找替换类结构的 标志 成员包含以下标志之一,用于指示导致消息的事件。
中文名字英文名称数值作用解释
向下查找FR_DOWN1如果设置,则选择方向单选按钮的 向下 按钮,指示用户想要从当前位置到文档末尾进行搜索。 如果未设置 向下 ,则选择“ 向上 ”按钮,以便用户想要搜索到文档的开头。
全字匹配FR_WHOLEWORD2如果设置,则选中“匹配整个Word仅检查”框,指示用户只想搜索与搜索字符串匹配的整个单词。 如果未设置全字匹配,则未选中检查框,因此还应搜索与搜索字符串匹配的单词片段。
分大小写FR_MATCHCASE4如果设置,则选中“匹配大小写检查框,指示用户希望搜索区分大小写。 如果未设置分大小写,则取消选中检查框,以便搜索不区分大小写。
查下一个FR_FINDNEXT8用户单击了“查找”或“替换”对话框中的“查找下一个”按钮。 查找 成员指定要搜索的字符串。
选中替换FR_REPLACE0x10用户单击了“ 替换 ”对话框中的“ 替换 ”按钮。 查找 成员指定要替换的字符串,替换 成员指定替换字符串。
全部替换FR_REPLACEALL0x20用户单击了“ 替换 ”对话框中的“全部 替换 ”按钮。 查找 成员指定要替换的字符串,替换 成员指定替换字符串。
查找关闭FR_DIALOGTERM0x40对话框正在关闭。所有者窗口处理此消息后,对话框的句柄不再有效。
代码示例:
整数 查换消息;//在窗体消息函数前面申请此整数变量
查找替换类 查换(长度=40,标志=1,查长=64,替长=64);//结构数据的长度=40,标志=1向下,查找和替换的文字长度=64
文本 查找[64],替换[64];//申请文本变量的内存缓冲区,用来存储查找和替换的文字
为 查换消息 查找替换(窗口);//在窗体消息的判断(消息)下方插入这段代码
程序段 窗体启动;//以上代码为全局变量,在窗体启动程序段进行赋值
查换消息=注册消息("commdlg_FindReplace");//获取已注册消息的消息标识符。
查换.窗口=窗体;//指定查找替换对话框的窗口为程序主窗体
查换.查找=查找;//指定查找替换对话框的查找为文本缓冲区
查换.替换=替换;//指定查找替换对话框的替换为文本缓冲区
结束//换到其它地方书写代码
程序段 按钮2_点击;//在按钮2的点击事件里弹出查找对话框
搜索选框(查换)//使用定义的查找替换类调用搜索选框弹出对话框
结束//换到其它地方书写代码
程序段 按钮3_点击;//在按钮3的点击事件里弹出替换为对话框
替换选框(查换)//使用定义的查找替换类调用替换选框弹出对话框
结束//换到其它地方书写代码

程序段 查找替换(窗口)//窗体消息收到查换消息时调用此函数
整数 功能=查换.标志 & $F8;//从标志里去掉1向下,2全字匹配,4区分大小写,这三项信息
查换.标志=查换.标志 & 7;//标志只保留1向下,2全字匹配,4区分大小写,这三项信息
判断(功能)为 8 搜索内容(0)//单击查找下一个按钮,执行继续搜索内容
为 16{替换内容;搜索内容(0)}//单击了替换按钮,替换当前选中文字,继续搜索内容
为 32{选中位置(0,0)搜索内容(1)}//单击了全部替换按钮,改光标位置为起始处,搜索内容提交参数1为循环搜索并替换
结束//搜索内容和替换内容都是程序段代码,需要使用发送消息函数实现
查找替换类
中文名字英文名称长度作用解释
查找替换类FINDREPLACE40弹出一个查找或替换文本的对话框
查找替换类——成员表
中文英文类型作用解释
长度lStructSize整数指定这个结构的大小,以字节为单位。
窗口hwndOwner整数拥有对话框的窗口的句柄。可不指定
实例hInstance整数Flags设置了FR_ENABLETEMPLATEHANDLE标志,则 hInstance 是包含对话框模板的内存对象的句柄。
设置了FR_ENABLETEMPLATE标志,是包含对话框模板的模块句柄。
标志Flags整数1选向下;2全字匹配;4大小写;8查找下个;$10替换;$20全部替换;$40关闭;$80显示帮助;$100回调;$200实例模板;$400禁用方向;
$800禁用大小写;$1000禁用全字匹配;$2000忽略模板;$4000隐藏方向;$8000隐藏大小写;$10000隐藏全字匹配;
查找lpstrFindWhat整数如果指定了FR_FINDNEXT标志,则要包含搜索的字符串。
FR_DOWN、FR_WHOLEWORD和FR_MATCHCASE标志指示搜索的方向和类型。
如果指定FR_REPLACE或FR_REPLACE标志,则要包含替换的字符串。
替换lpstrReplaceWith整数如果指定FR_REPLACE或FR_REPLACEALL标志,则要包含替换字符串 。
查长wFindWhatLen整形查找字符缓冲区长度
替长wReplaceWithLen整形替换字符缓冲区长度
数据lCustData整数自定义数据,传到的钩子程序
回调lpfnHook整数指向钩子程序的指针,该钩子可以处理回调消息。
模板lpTemplateName整数指向对话框模板资源名称的字符串
6.文件夹对话框——选择文件夹
有两种可用的对话框样式。 较旧的样式默认显示,且不可调整大小。较新的样式提供了许多附加功能,
包括对话框中的拖放功能、重新排序、删除、快捷菜单、创建新文件夹的功能以及其他快捷菜单命令。
最初,它比旧对话框大,但用户可以调整其大小。 若要使用较新的样式指定对话框,请在 目录框类 结构的 选项 成员中设置新的界面和含编辑框标志。
如果实现在 目录框类 结构的 回调 成员中指定的回调函数,则会收到对话框的句柄。 此窗口句柄的一个用途是修改对话框的布局或内容。
由于它不可调整大小,因此修改旧样式对话框相对简单。 修改较新的样式对话框要困难得多,不建议这样做。
它不仅具有与旧样式不同的大小和布局,而且每次用户调整其大小时,其控件的尺寸和位置都会发生变化。
如果在 目录框类 结构的 选项 成员中设置了根节点标志,则“确定”按钮仍对“\server”项以及“\server\share”和目录项保持启用状态。
但是,如果用户选择“\server”项,将 目录选框 返回的 PIDL 传递到 转换路径 会失败。
示例代码:
目录框类 目录(选项=$41);//选项=$40新的界面+1只含文件目录
文本 路径[64];//申请文本变量的内存缓冲区,用来存储目标文件夹的文字
程序段 窗体启动;//以上代码为全局变量,在窗体启动程序段进行赋值
目录.窗口=窗体;//指定目录对话框的窗口为程序主窗体
目录.路径=路径;//指定目录对话框的路径为文本缓冲区
结束//换到其它地方书写代码
程序段 按钮2_点击;//在按钮2的点击事件里弹出目录对话框
整数 项目=目录选框(目录)//使用目录框类调用目录选框弹出对话框
转换路径(项目,路径);//将项目标识符列表转换为文件系统路径。
任务释放(项目);//释放目录选框返回的项目标识符列表。
结束//文本变量"路径"就是选择的文件夹
目录框类
中文名字英文名称长度作用解释
目录框类BROWSEINFO32用来获取用户选择的目录
目录框类 成员表
中文英文类型作用解释
窗口hwndOwner整数指向所在窗口的句柄。
目录pidlRoot整数ITEMIDLIST结构的地址,包含浏览时的初始根目录
路径pszDisplayName整数用来保存用户选中的目录字符串的内存地址。
标题lpszTitle整数浏览文件夹对话框的标题内容。
选项ulFlags整数描述了对话框的选项。1只含文件目录,2不含域名目录,4对话框可设置状态文本,8只返回文件根节点
$10含编辑框,$20检查名称,$40新的界面,$80可显示URL,$100用法提示,$200新建文件夹,$400快捷方式,
$1000显示计算机,$2000显示打印机,$4000显示目录和文件,$8000显示可共享资源,$10000可展开压缩文件或库
回调lpfn整数程序定义的浏览对话框回调函数的地址。
参数lParam整数对话框传递给回调函数的一个参数指针
图像iImage整数与选中目录相关的图像。该图像将被指定为系统图像列表中的索引值。
7.页面设置对话框——设置打印页属性
显示允许用户设置打印页的以下属性的模式对话框:
纸张类型 (信封、法律、信件等)
纸张源 (手动进纸、拖拉机进纸、纸张送纸器等)
页面方向 (纵向或横向)
页边距的宽度
通过初始化 页面框类 结构并将该结构传递给 页面设置 函数,可以创建并显示“页面设置”对话框。
但是,对话框中显示的属性因打印机的功能而异。 下图显示了典型的 “页面设置 ”对话框。

如果用户单击“确定”按钮,在 页面框类 结构中设置各种成员以指定用户的选择后,页面设置将返回真。
纸宽、纸高、左宽、上宽、右宽、下宽 等成员得到用户指定的值。 环境 和 名称 成员包含 设备环境、名称类 结构的全局内存句柄。
这些结构包含其他页面信息以及有关打印机的信息。 可以使用此信息准备要发送到所选打印机的输出。
如果用户取消“ 页面设置 ”对话框或发生错误, 页面设置 将返回假。
若要确定错误的原因,请调用 对话错误 函数来检索扩展的错误值。
示例代码:
页面框类 页面(长度=84,标志=0x40005,左宽=1250,上宽=1000,右宽=1250,下宽=1000);//标志=4千分之一英寸+1指定边距+0x40000启用重绘回调
程序段 窗体启动;//以上代码为全局变量,在窗体启动程序段进行赋值
页面.窗口=窗体;//指定页面设置框的窗口为程序主窗体
页面.重绘回调=@设置回调;//指定页面设置框的重绘回调为设置回调,也可以指定为窗体消息
结束//换到其它地方书写代码
程序段 设置回调(窗口,消息,设备,矩形类 数据);//设置回调跟窗体消息相同
判断(消息)为 0x403//此为页面设置对话框边距矩形的消息
{边框=取元素色(13);//获取系统高亮颜色
画笔=创建画笔(3,1,边框)//使用交替的短划线和点创建笔宽为1的画笔
选择对象(设备,画笔)//回调函数的第三参数是打印的设备
画方块(设备,数据.左,数据.顶,数据.宽,数据.高)}//在打印设备上绘制矩形方块
结束//示例代码结束

打印对话框-回调函数

中文名称英文名称示例作用
打印回调Lpprinthookproc打印回调(窗口,消息,参数,数据)接收用于 “打印 ”对话框的默认对话框过程的消息或通知。
打印设置Lpsetuphookproc打印设置(窗口,消息,参数,数据)与 打印选项 函数一起使用的挂钩过程接收消息或通知。适用于 “打印设置 ”对话框
页面绘图Lppagepainthook页面绘图(窗口,消息,参数,数据)接收允许您在“ 页面设置 ”对话框中自定义示例页面绘图的消息。
页面回调Lppagesetuphook页面回调(窗口,消息,参数,数据)接收用于 “页面设置 ”对话框的默认对话框过程的消息或通知。
页面框类
中文名字英文名称长度作用解释
页面框类PAGESETUPDLG84用来显示打印对话框或打印设置对话框。
页面框类——成员表
中文英文类型作用解释
长度lStructSize整数指定这个结构的大小,以字节为单位。
窗口hwndOwner整数拥有对话框的窗口的句柄。可不指定
环境hDevMode整数包含打印机设备与环境信息的DEVMODE结构句柄
名称hDevNames整数包含驱动器名、打印机名和输出端口名的设备名结构DEVNAMES句柄
标志Flags整数用于打印公用对话框初始化的标志位
纸宽ptPaperSize.x整数指定用户选择的纸张的宽度
纸高ptPaperSize.y整数确指定用户选择的纸张的高度
左边rtMinMargin.left整数指定左边距的最小允许宽度
上边rtMinMargin.top整数指定上边距的最小允许宽度
右边rtMinMargin.right整数指定右边距的最小允许宽度
下边rtMinMargin.bottom整数指定下边距的最小允许宽度
左宽rtMargin.left整数指定左边距的宽度
上宽rtMargin.top整数指定上边距的宽度
右宽rtMargin.right整数指定右边距的宽度
下宽rtMargin.bottom整数指定下边距的宽度
实例hInstance整数程序实例,很少使用
数据lCustData整数指定系统传递给设置回调过程的应用程序定义数据
设置回调lpfnPageSetupHook整数挂接回调过程的指针,可以处理针对该对话框的消息,可忽略
重绘回调lpfnPagePaintHook整数挂钩回调过程的指针,重新绘制示例页面时,可在收到消息时自定义样本页面的外观
设置模板名lpPageSetupTemplateName整数对话框模板资源的名称,可忽略
设置模板hPageSetupTemplate整数包含对话框模板的内存对象的句柄
页面设置选项
中文名字英文名称长度作用解释
PSD_DEFAULTMINMARGINS0x00000000将用户可以为页边距指定的最小值设置为打印机允许的最小页边距。 这是默认值。 如果还指定 了PSD_MARGINS 和 PSD_MINMARGINS 标志,则忽略此标志。
PSD_DISABLEMARGINS0x00000010禁用边距控件,防止用户设置边距。
PSD_DISABLEORIENTATION0x00000100禁用方向控件,从而阻止用户设置页面方向。
PSD_DISABLEPAGEPAINTING0x00080000阻止对话框绘制示例页的内容。 如果启用 页面绘图 挂钩过程,仍可以绘制示例页面的内容。
PSD_DISABLEPAPER0x00000200禁用纸张控件,防止用户设置页面参数,例如纸张大小和来源。
PSD_DISABLEPRINTER0x00000020已过时。Windows XP/2000:禁用“ 打印机 ”按钮,防止用户调用包含其他打印机设置信息的对话框。
PSD_ENABLEPAGEPAINTHOOK0x00040000启用 重绘回调 成员中指定的挂钩过程。
PSD_ENABLEPAGESETUPHOOK0x00002000启用 设置回调 成员中指定的挂钩过程。
PSD_ENABLEPAGESETUPTEMPLATE0x00008000指示 实例 和 设置模板名 成员指定要用于替代默认模板的对话框模板。
PSD_ENABLEPAGESETUPTEMPLATEHANDLE0x00020000指示 设置模板 成员标识包含预加载对话框模板的数据块。 如果指定了此标志,系统将忽略 设置模板名 成员。
PSD_INHUNDREDTHSOFMILLIMETERS0x00000008指示百分之一毫米是边距和纸张大小的度量单位。可以在输入时设置此标志,以替代用户区域设置的默认度量单位。
PSD_INTHOUSANDTHSOFINCHES0x00000004指示千分之一英寸是边距和纸张大小的度量单位。函数返回时,对话框会设置此标志以指示使用的单位。
PSD_INWININIINTLMEASURE0x00000000保留。
PSD_MARGINS0x00000002使系统使用指定的值作为左、上、右和下边距的初始宽度。如果未设置 PSD_MARGINS ,系统将所有边距的初始宽度设置为 1 英寸。
PSD_MINMARGINS0x00000001使系统使用指定的值作为左、上、右和下边距的最小允许宽度。系统会阻止用户输入小于指定最小值的宽度。
PSD_NONETWORKBUTTON0x00200000隐藏和禁用“ 网络 ”按钮。
PSD_NOWARNING0x00000080防止系统在没有默认打印机时显示警告消息。
PSD_RETURNDEFAULT0x00000400不显示对话框。将 环境 和 名称 成员设置为为系统默认打印机初始化的 设备环境、名称类 结构的句柄。
PSD_SHOWHELP0x00000800使对话框显示 “帮助” 按钮。 窗口 成员必须指定窗口,以接收当用户单击“帮助”按钮时对话框发送的 HELPMSGSTRING 注册消息。
纸张或信封的方向——常量定义:
数值作用解释
0x0001横向模式下的纸张 (点阵)
0x0003横向模式下的纸张 (HPPCL)
0x0005纵向模式下的纸张 (点阵)
0x0007纵向模式下的纸张 (HPPCL)
0x000b横向模式下的信封 (HPPCL)
0x000d纵向模式下的信封 (点阵)
0x0019横向模式下的信封 (点阵)
0x001f纵向模式下的信封 (HPPCL)
8.打印对话框——打印作业
“ 打印 ”对话框允许用户选择特定打印作业的选项。 例如,用户可以指定要使用的打印机、要打印的页面范围和份数。
可以使用 打印选框 函数显示“打印属性表”,该页包含类似于“打印”对话框的控件的“常规”页。
属性表还可以在 “常规 ”页之后具有其他特定于应用程序的属性页和特定于驱动程序的属性页。
可以通过初始化 打印框类 结构并将结构传递给 打印选项 函数来创建并显示“打印”对话框。
下图显示了典型的“ 打印 ”对话框。

如果用户单击“ 确定” 按钮, 打印选项 将返回 TRUE ,并使用 打印框类 结构返回有关用户选择的信息。
例如, 环境 和 名称 成员通常返回 和 设备名称类 结构的全局内存句柄。 可以使用这些结构中的信息为所选打印机创建设备上下文或信息上下文。
如果用户取消“ 打印 ”对话框或发生错误, 打印选项 返回 FALSE。 可以使用 对话错误 函数检索扩展错误值来确定错误原因。
“ 打印 ”对话框包含一组单选按钮的 “打印范围 ”,这些按钮指示用户是要打印所有页面、一系列页面还是仅打印所选文本。
在调用 打印选项 之前,可以设置 0、1 或 2 标志之一,以指示最初选择哪个按钮。
打印选项 返回真时,函数将设置其中一个标志来指示用户的选择。 如果设置了2,打印框类结构的 首页 和 末页 成员包含用户指定的起始页和结束页。
若要禁用 “页面” 单选按钮及其关联的“ 发件人 ”和“ 要编辑” 控件,请设置 8 标志。 若要禁用 “选择” 单选按钮,请设置 4 标志。
该对话框包含一个编辑控件,用户可以在其中键入要打印的副本数。 如果 打印框类 结构的 环境 成员为非0,则结构的 份数 成员指定此编辑控件的初始值。
如果 环境 为0,打印框类结构的 份数 成员将指定初始值。 当 打印选项 返回时,份数 通常指示用户指定的副本数。
但是,如果在创建对话框时设置0x40000标志,份数 在返回时始终设置为 1,设备环境 的 份数 成员指示要打印的副本数。
“整理检查框指示在打印多个副本时用户是否要整理页面。 如果选择了“整理检查”框,则会设置0x10标志。
如果应用程序不支持多个副本或模拟排序规则,请在 打印框类 结构的 标志 成员中设置0x40000标志。
这将禁用“排序检查”框和“份数”编辑控件,除非打印机驱动程序支持多个副本和排序规则。
“打印到文件检查”框指示用户是否要将输出发送到文件而不是打印机。 可以设置0x20标志,以便最初选择检查框。 若要隐藏检查框,请设置0x100000标志。
若要禁用它,请设置 0x80000 标志。 如果用户选择“打印到文件”选项,打印选项 将设置0x20标志,并在 设备名称类 结构的 wOutputOffset 成员指示的偏移量处返回“FILE:”。
调用 函数以启动打印操作时,请在结构的 lpszOutput 成员中指定此“FILE:”字符串。 指定此字符串会导致打印子系统向用户查询输出文件的名称。
默认情况下,“ 打印 ”对话框最初显示有关当前默认打印机的信息。 若要显示另一台已安装打印机的信息,请初始化 和 设备名称类 结构,并将结构的全局内存句柄分配给 环境 和 名称 成员。
设备环境 结构的 名称 成员和 设备名称 结构的 wDriverOffset 成员中指定的设备名称必须标识系统配置中的打印机设备。否则打印选项将返回错误。
可以通过在 打印框类 结构的 标志 成员中设置 0x100 或 0x200 标志来指示 打印选项 为打印机创建设备上下文或信息上下文。
函数返回 hDC 成员中的设备上下文或信息上下文的句柄。如果使用 0x100 标志,则可以使用设备上下文为打印机生成输出。
若要在不显示“ 打印 ”对话框的情况下检索有关默认打印机的信息,请设置 0x400 标志。 在这种情况下, 打印选项 在将 环境 和 名称 成员设置为包含信息的结构句柄后立即返回。
默认情况下, 打印选项 在发生错误时显示消息框。 例如,如果未安装打印机,函数会显示错误消息。 若要防止函数显示这些警告消息,请设置 0x80 标志。
可以通过在调用 打印选项 函数时设置 0x40 标志来创建和显示“打印设置”对话框。 但是,“ 打印设置 ”对话框已被 “页面设置 ”对话框取代,不应在新应用程序中使用。 示例代码:
打印框类 打印(长度=66,标志=0x40100,份数=1,首页=0xFFFF,末页=0xFFFF,最小=1,最大=0xFFFF);//标志=0x40000支持多副本+0x100选择的设备
程序段 窗体启动;//以上代码为全局变量,在窗体启动程序段进行赋值
打印框.窗口=窗体;//指定打印对话框的窗口为程序主窗体
结束//换到其它地方书写代码
程序段 按钮2_点击;//在按钮2的点击事件里弹出打印对话框
如果(打印选项(打印))//使用打印框类调用打印选项弹出对话框
删除设备(打印.设备);//打印作业完成,删除设备。
结束//示例代码结束
打印框类
中文名字英文名称长度作用解释
打印框类PRINTDLG66用来显示打印对话框或打印设置对话框。
打印框类——成员表
中文英文类型作用解释
长度lStructSize整数指定这个结构的大小,以字节为单位。
窗口hwndOwner整数拥有对话框的窗口的句柄。可不指定
环境hDevMode整数包含打印机设备与环境信息的DEVMODE结构句柄
名称hDevNames整数包含驱动器名、打印机名和输出端口名的设备名结构DEVNAMES句柄
设备hDC整数设备上下文或信息上下文的句柄,由Flags是否设置PD_RETURNDC或PC_RETURNIC标志来决定。
标志Flags整数用于打印公用对话框初始化的标志位
首页nFromPage整形指定开始页码编辑控件的初始值
末页nToPage整形指定结束页码编辑控件的初始值
最小nMinPage整形指定页码编辑控件的页码范围的最小值
最大nMaxPage整形指定页码编辑控件的页码范围的最大值
份数nCopies整形指定复制编辑控件的初始副本数
实例hInstance整数设置了 PD_ENABLEPRINTTEMPLATE 或 PD_ENABLESETUPTEMPLATE 标志
数据lCustData整数系统传递给挂钩过程的应用程序定义数据。
打印回调lpfnPrintHook整数指向 打印回调 挂钩过程的指针
设置回调lpfnSetupHook整数指向 打印设置 挂钩过程的指针
打印模板名lpPrintTemplateName整数程序模块中对话框模板资源的名称。
设置模板名lpSetupTemplateName整数设置了PD_ENABLESETUPTEMPLATE标志
打印模板hPrintTemplate整数设置了PD_ENABLEPRINTTEMPLATEHANDLE标志
设置模板hSetupTemplate整数设置了PD_ENABLESETUPTEMPLATEHANDLE标志
打印属性标志
英文名称数值作用解释
PD_ALLPAGES0x00000000默认标志,指示最初选择了“ 所有” 单选按钮。
PD_SELECTION0x00000001选择 “选择” 单选按钮。
PD_PAGENUMS0x00000002选择 “页面” 单选按钮。
PD_NOSELECTION0x00000004禁用“ 选择” 单选按钮。
PD_NOPAGENUMS0x00000008禁用 “页面” 单选按钮和关联的编辑控件。还会导致“整理检查”框显示在对话框中。
PD_COLLATE0x00000010选中整理检查框。
PD_PRINTTOFILE0x00000020选中“打印到文件检查框。
PD_PRINTSETUP0x00000040使系统显示“ 打印设置 ”对话框,而不是“ 打印 ”对话框。
PD_NOWARNING0x00000080防止在发生错误时显示警告消息。
PD_RETURNDC0x00000100返回与用户在属性表中所做的选择匹配的设备上下文。
PD_RETURNIC0x00000200与 PD_RETURNDC 标志类似,但此标志返回信息上下文而不是设备上下文。
PD_RETURNDEFAULT0x00000400不显示属性表。 而是将 名称 和 环境 成员设置为系统默认打印机初始化的结构句柄。
PD_SHOWHELP0x00000800使对话框显示“ 帮助 ”按钮。
PD_ENABLEPRINTHOOK0x00001000启用 在 打印回调 成员中指定的挂钩过程。 这将启用“ 打印 ”对话框的挂钩过程。
PD_ENABLESETUPHOOK0x00002000启用 在 设置回调 成员中指定的挂钩过程。这将启用“ 打印设置 ”对话框的挂钩过程。
PD_ENABLEPRINTTEMPLATE0x00004000指示 实例 和 模板 成员指定“ 常规 ”页下半部分中默认对话框模板的替换项。
PD_ENABLESETUPTEMPLATE0x00008000指示 实例 和 设置模板名 成员指定默认 打印设置 对话框模板的替换项。
PD_ENABLEPRINTTEMPLATEHANDLE0x00010000指示 实例 成员标识包含预加载对话框模板的数据块。
PD_ENABLESETUPTEMPLATEHANDLE0x00020000指示 设置模板 成员标识包含预加载对话框模板的数据块。
PD_USEDEVMODECOPIESANDCOLLATE0x00040000此标志指示应用程序是否支持多个副本和排序规则。
PD_DISABLEPRINTTOFILE0x00080000禁用打印到文件检查框。
PD_HIDEPRINTTOFILE0x00100000隐藏“打印到文件检查框。
PD_NONETWORKBUTTON0x00200000隐藏和禁用“ 网络 ”按钮。
PD_CURRENTPAGE0x00400000选择 “当前页” 单选按钮。
PD_NOCURRENTPAGE0x00800000禁用 “当前页” 单选按钮。
PD_EXCLUSIONFLAGS0x01000000指示 排除 成员标识要从打印机驱动程序属性页中排除的项目。
PD_USELARGETEMPLATE0x10000000强制属性表对 “常规 ”页使用大型模板。
9.打印属性表——打印作业属性
打印属性表是一个标准用户界面,允许用户指定特定打印作业的属性。 属性表由一组属性页组成,这些属性页因打印机或应用程序而异。
对于标准 Windows 属性页的子集,某些打印机可能会添加特定于驱动程序的属性页,而某些应用程序可能会添加特定于应用程序的属性页。
若要创建并显示打印属性表,请初始化 打印选框类 结构并将该结构传递给 打印选框 函数。下图显示了典型的打印属性表。

打印选框类 结构的大多数成员与 打印框类 结构的成员相同。
有关如何使用通用结构成员与对话框控件交互的说明,请参阅 打印对话框。本主题的其余部分介绍与 “打印 ”对话框不同的“ 打印 ”属性表功能。
可以通过为“常规”页的下半部分指定自定义对话框模板以及指定其他属性页以跟随“常规”页来自定义打印属性表。 有关详细信息,请参阅 自定义打印属性表。
可以实现回调对象,以在显示属性表时从 打印选框 函数接收通知和消息。 提供自定义模板或其他页面的应用程序使用回调对象与属性表通信。 有关详细信息,请参阅 打印属性表的回调对象。
打印属性表支持指定要打印的多个不连续页面范围。 打印选框类 结构的 组数 成员指定 打印页类 结构的数组,其中每个结构指定页面范围。
“打印”属性表将“当前页”单选按钮显示为单选按钮的“页面范围”组的一部分。 若要控制“当前页”单选按钮,请使用 打印选框类 结构的 标志 成员中的0x400000和0x800000标志。
示例代码:
打印页类 打印页[10];//申请10个打印面,用来存储页面的首页和末页
打印选框类 打印框(长度=84,标志=$110,页数=10,份数=1,最小=1,最大=1000,始页=0xffffffff);//标志=0x10选中整理检查框+0x100匹配设备
程序段 窗体启动;//以上代码为全局变量,在窗体启动程序段进行赋值
打印框.窗口=窗体;//指定打印对话框的窗口为程序主窗体
打印框.页面=打印页;//指定打印对话框的页面为打印页
结束//换到其它地方书写代码
程序段 按钮2_点击;//在按钮2的点击事件里弹出打印对话框
如果(打印选框(打印框))返回;//打印选框正常返回0,非0就不再执行后面代码
如果(打印框.回值=1);//用户点击了打印选框上面的打印按钮。
窗体~"正在打印文档";//显示正在打印。
结束//例程代码结束
打印选框类
中文名字英文名称长度作用解释
打印选框类PRINTDLGEXA84用来显示打印对话框或打印设置对话框。函数:PrintDlg(lppd)
打印选框类——成员表
中文英文类型作用解释
长度lStructSize整数指定这个结构的大小,以字节为单位。
窗口hwndOwner整数拥有对话框的窗口的句柄。可不指定
环境hDevMode整数包含打印机设备与环境信息的DEVMODE结构句柄
名称hDevNames整数包含驱动器名、打印机名和输出端口名的设备名结构DEVNAMES句柄
设备hDC整数设备上下文或信息上下文的句柄,由Flags是否设置PD_RETURNDC或PC_RETURNIC标志来决定。
标志Flags整数用于打印公用对话框初始化的标志位
标记Flags2整数排斥标志
排除ExclusionFlags整数从打印驱动程序属性页中排除项。0x8100=属性页中排除“复制”和“整理”控件
组数nPageRanges整数数组中指定的初始页范围数。
页数nMaxPageRanges整数页面数组缓冲区的大小(以数组元素为单位)。
页面lpPageRanges整数指向包含 打印页类 结构数组的缓冲区的指针。
最小nMinPage整数指定页码编辑控件的页码范围的最小值
最大nMaxPage整数指定页码编辑控件的页码范围的最大值
份数nCopies整数指定副本编辑控件的初始副本数
实例hInstance整数标志成员中设置了PD_ENABLEPRINTTEMPLATEHANDLE标志
模板lpPrintTemplateName整数程序模块中对话框模板资源的名称。
回调lpCallback整数指向应用程序定义的回调对象的指针。
属组nPropertyPages整数 数组中的属性页句柄数。
属性lphPropertyPages整数包含要添加到打印属性表的属性页句柄数组。
始页nStartPage整数最初显示的属性页。
回值dwResultAction整数输入时,将此成员设置为零。返回:0单击了取消按钮,1打印按钮,2应用按钮
打印页类
中文名字英文名称长度作用解释
打印页类PRINTPAGERANGE8表示打印作业中的页面范围。 打印作业可以有多个页面范围。
打印页类——成员表
中文英文类型作用解释
首页nFromPage整数范围的第一页。
末页nToPage整数范围的最后一页。
文档类
中文名字英文名称长度作用解释
文档类DOCINFO20用来显示打印对话框或打印设置对话框。函数:PrintDlg(lppd)
文档类——成员表
中文英文类型作用解释
长度cbSize整数指定这个结构的大小,以字节为单位。
名称lpszDocName整数指向指定文档名称的字符串
输出lpszOutput整数指向指定输出文件名称的字符串
数据lpszDatatype整数指定用于记录打印作业的数据类型(已忽略)
其它fwType整数指定有关打印作业的其他信息。(已忽略)
设置模板hPageSetupTemplate整数包含对话框模板的内存对象的句柄
设备环境类
中文名字英文名称长度作用解释
设备环境类DEVMODEA156包含有关打印机或显示设备的初始化和环境的信息。
设备环境类——成员表
中文英文类型作用解释
名称dmDeviceName[32]文本以零结尾的字符数组,指定打印机或显示器的“友好”名称;
规范dmSpecVersion整形初始化数据规范的版本号。DM_SPECVERSION
版本dmDriverVersion整形驱动程序开发人员分配的驱动程序版本号。
大小dmSize整形结构的大小(以字节为单位)
字数dmDriverExtra整形包含遵循此结构的专用驱动程序数据的字节数。
标志dmFields整数指定结构的某些成员是否已初始化。
方向dmOrientation整形仅对于打印机设备,选择纸张的方向(1肖像,2风景)。标志:1
尺寸dmPaperSize整形仅对于打印机设备,选择要打印的纸张大小。标志:2
长度dmPaperLength整形替代 大小 成员指定的纸张长度,以十分之一毫米为单位。标志:4
纸宽dmPaperWidth整形覆盖大小成员指定的纸张宽度。标志:8
缩放dmScale整形指定缩放打印输出所依据的因子。标志:0x10
份数dmCopies整形如果设备支持多页副本,则选择打印的份数。标志:0x100
来源dmDefaultSource整形指定纸张来源。标志:0x200
分辨dmPrintQuality整形指定打印机分辨率(DPI)。标志:0x400
dmPosition坐标类显示设备在桌面区域中的位置坐标。标志:0x20
dmDisplayOrientation整数表示应呈现图像的方向:0默认,1旋转90度,2旋转180度,3旋转270度。标志:0x80
dmDisplayFixedOutput整数仅对于固定分辨率的显示设备:。标志:0x20000000
颜色dmColor整形在彩色打印机上切换彩色2和单色1。标志:0x800
双工dmDuplex整形1普通打印,2长边绑定垂直,3短边绑定长边水平。标志:0x1000
纸高dmYResolution整形指定打印机的 y 分辨率(英寸为单位)。标志:0x2000
字体dmTTOption整形打印字体:1打印为图形,2下载为软字体,3替换为TT字体,4下载为大纲软字体。标志:0x4000
排序dmCollate整形排序规则:0不排序,1排序。标志:0x8000
窗名dmFormName[32]文本指定要使用的窗体的名称。标志:0x10000
英寸dmLogPixels整形每个逻辑英寸的像素数。标志:0x20000
位色dmBitsPerPel整数指定显示设备的颜色分辨率,4位16色,8位256色,16位65536色。标志:0x40000
像宽dmPelsWidth整数指定可见设备图面的宽度(以像素为单位)。 标志:0x80000
像高dmPelsHeight整数指定可见设备图面的高度(以像素为单位)。标志:0x100000
模式dmDisplayFlags整数指定设备的显示模式:1灰色,2交错显示。标志:0x200000
频率dmDisplayFrequency整数指定特定模式下显示设备的频率。标志:0x400000
处理dmICMMethod整数指定如何处理ICM:1禁用,2系统处理,3驱动处理,4设备处理。标志:0x800000
匹配dmICMIntent整数指定颜色匹配方法或意向:1饱和度优化,2对比度优化,3确切颜色匹配,4绝对颜色匹配。标志:0x1000000
媒体dmMediaType整数指定要打印的媒体的类型:1普通纸,2透明膜,3光泽纸。标志:0x2000000
抖动dmDitherType整数指定如何执行抖动:1无,2粗笔抖,3细笔抖,4线条艺术抖,10灰色缩放。标志:0x4000000
dmReserved1整数未使用;必须为零。
dmReserved2整数未使用;必须为零。
景宽dmPanningWidth整数此成员必须为零。标志:0x8000000
景高dmPanningHeight整数此成员必须为零。标志:0x10000000
纸张大小
英文名称数值作用解释
DMPAPER_LETTER1字母,8 1/2- by 11 英寸
DMPAPER_LETTERSMALL2小写字母,8 1/2- by 11 英寸
DMPAPER_TABLOID3小报,11- 乘 17 英寸
DMPAPER_LEDGER4账本,17 by 11 英寸
DMPAPER_LEGAL5法律,8 1/2- by 14 英寸
DMPAPER_STATEMENT6语句,5 1/2- by 8 1/2 英寸
DMPAPER_EXECUTIVE7行政, 7 1/4- by 10 1/2 英寸
DMPAPER_A38A3 工作表,297- by 420 毫米
DMPAPER_A49A4 工作表,210- by 297 毫米
DMPAPER_A4SMALL10A4 小纸,210 by 297 毫米
DMPAPER_A511A5 工作表,148- by 210 毫米
DMPAPER_B412B4 工作表,250- by 354 毫米
DMPAPER_B513B5 工作表,182- by 257 毫米纸
DMPAPER_FOLIO14Folio, 8 1/2- by 13 英寸纸
DMPAPER_QUARTO15Quarto,215 by 275 毫米纸
DMPAPER_10X141610- 14 英寸工作表
DMPAPER_11X171711- by 17 英寸工作表
DMPAPER_NOTE18注意,8 1/2- by 11 英寸
DMPAPER_ENV_919#9 信封,3 7/8- by 8 7/8 英寸
DMPAPER_ENV_1020#10 信封,4 1/8- by 9 1/2 英寸
DMPAPER_ENV_1121#11 信封,4 1/2- by 10 3/8 英寸
DMPAPER_ENV_1222#12 信封,4 3/4- by 11 英寸
DMPAPER_ENV_1423#14 信封,5- by 11 1/2 英寸
DMPAPER_CSHEET24C 工作表,17- by 22 英寸
DMPAPER_DSHEET25D 工作表,22 by 34 英寸
DMPAPER_ESHEET26E 工作表,34 by 44 英寸
DMPAPER_ENV_DL27DL 信封,110- by 220 毫米
DMPAPER_ENV_C528C5 信封,162- by 229 毫米
DMPAPER_ENV_C329C3 信封,324 by 458 毫米
DMPAPER_ENV_C430C4 信封,229- by 324 毫米
DMPAPER_ENV_C631C6 信封,114- by 162 毫米
DMPAPER_ENV_C6532C65 信封,114 by 229 毫米
DMPAPER_ENV_B433B4 信封,250- by 353 毫米
DMPAPER_ENV_B534B5 信封,176- by 250 毫米
DMPAPER_ENV_B635B6 信封,176- by 125 毫米
DMPAPER_ENV_ITALY36意大利信封,110- by 230 毫米
DMPAPER_ENV_MONARCH37君主信封, 3 7/8- by 7 1/2 英寸
DMPAPER_ENV_PERSONAL386 3/4 信封,3 5/8- by 6 1/2 英寸
DMPAPER_FANFOLD_US39US Std Fanfold, 14 7/8- by 11 英寸
DMPAPER_FANFOLD_STD_GERMAN40德国 Std Fanfold, 8 1/2- by 12 英寸
DMPAPER_FANFOLD_LGL_GERMAN41德国法律范福尔德, 8 - by 13 英寸
DMPAPER_ISO_B442B4 (ISO) 250- by 353 毫米纸张
DMPAPER_JAPANESE_POSTCARD43日本明信片,100-by 148 毫米
DMPAPER_9X11449- by 11 英寸工作表
DMPAPER_10X114510- 11 英寸工作表
DMPAPER_15X114615- by 11 英寸工作表
DMPAPER_ENV_INVITE47信封邀请 220 x 220 mm
DMPAPER_RESERVED_4848预留--请勿使用
DMPAPER_RESERVED_4949预留--请勿使用
DMPAPER_LETTER_EXTRA50字母额外 9 1/2 x 12 英寸。
DMPAPER_LEGAL_EXTRA51法定额外 9 1/2 x 15 英寸。
DMPAPER_TABLOID_EXTRA52小报,11.69 x 18 英寸
DMPAPER_A4_EXTRA53A4 工作表,9.27 x 12.69 英寸
DMPAPER_LETTER_TRANSVERSE54字母横向 8 1/2 x 11 英寸
DMPAPER_A4_TRANSVERSE55A4 横向 210 x 297 毫米
DMPAPER_LETTER_EXTRA_TRANSVERSE56字母额外横向 9 1/2 x 12 英寸。
DMPAPER_A_PLUS57SuperA/A4 227 x 356 毫米
DMPAPER_B_PLUS58SuperB/A3 305 x 487 毫米
DMPAPER_LETTER_PLUS59美国字母加号 8.5 x 12.69 in
DMPAPER_A4_PLUS60A4 Plus 210 x 330 毫米
DMPAPER_A5_TRANSVERSE61A5 横向 148 x 210 毫米
DMPAPER_B5_TRANSVERSE62B5 (JIS) 横向 182 x 257 mm
DMPAPER_A3_EXTRA63A3 额外 322 x 445 毫米
DMPAPER_A5_EXTRA64A5 额外 174 x 235 毫米
DMPAPER_B5_EXTRA65B5 (ISO) 额外 201 x 276 毫米
DMPAPER_A266A2 工作表,420 x 594 毫米
DMPAPER_A3_TRANSVERSE67A3 横向 297 x 420 mm
DMPAPER_A3_EXTRA_TRANSVERSE68A3 额外横向 322 x 445 毫米
DMPAPER_DBL_JAPANESE_POSTCARD69双日明信片,200 by 148 毫米
DMPAPER_A670A6 工作表,105- 乘 148 毫米
DMPAPER_JENV_KAKU271日语信封 Kaku #2
DMPAPER_JENV_KAKU372日语信封 Kaku #3
DMPAPER_JENV_CHOU373日语信封周 #3
DMPAPER_JENV_CHOU474日语信封 Chou #4
DMPAPER_LETTER_ROTATED75字母旋转 11 by 8 1/2 英寸
DMPAPER_A3_ROTATED76A3 旋转纸,420 乘 297 毫米
DMPAPER_A4_ROTATED77A4 旋转纸,297 乘 210 毫米
DMPAPER_A5_ROTATED78A5 旋转纸,210 乘 148 毫米
DMPAPER_B4_JIS_ROTATED79B4 (JIS) 旋转工作表,364 乘 257 毫米
DMPAPER_B5_JIS_ROTATED80B5 (JIS) 旋转工作表,257 乘 182 毫米
DMPAPER_JAPANESE_POSTCARD_ROTATED81日本明信片旋转,148 乘 100 毫米
DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED82双日本明信片旋转,148 乘 200 毫米
DMPAPER_A6_ROTATED83A6 旋转纸,148 乘 105 毫米
DMPAPER_JENV_KAKU2_ROTATED84日语信封 Kaku #2 旋转
DMPAPER_JENV_KAKU3_ROTATED85日语信封 Kaku #3 旋转
DMPAPER_JENV_CHOU3_ROTATED86日本信封 Chou #3 旋转
DMPAPER_JENV_CHOU4_ROTATED87日本信封周 #4 旋转
DMPAPER_B6_JIS88B6 (JIS) 纸,128 乘 182 毫米
DMPAPER_B6_JIS_ROTATED89B6 (JIS) 旋转工作表,182 乘 128 毫米
DMPAPER_12X119012- by 11 英寸工作表
DMPAPER_JENV_YOU491日语信封 You #4
DMPAPER_JENV_YOU4_ROTATED92日语信封你 #4 旋转
DMPAPER_P16K93中国 16K,146- by 215 毫米
DMPAPER_P32K94中国 32K,97- by 151 毫米
DMPAPER_P32KBIG95中国 32K (大) 97- 乘 151 毫米
DMPAPER_PENV_196中国信封 #1, 102- by 165 毫米
DMPAPER_PENV_297中国信封 #2, 102- by 176 毫米
DMPAPER_PENV_398中国信封 #3, 125- by 176 毫米
DMPAPER_PENV_499中国信封 #4, 110- by 208 毫米
DMPAPER_PENV_5100中国信封 #5, 110- by 220 毫米
DMPAPER_PENV_6101中国信封 #6, 120- by 230 毫米
DMPAPER_PENV_7102中国信封 #7, 160- by 230 毫米
DMPAPER_PENV_8103中国信封 #8,120- x 309 毫米
DMPAPER_PENV_9104中国信封 #9,229- x 324 毫米
DMPAPER_PENV_10105中国信封 #10,324- x 458 毫米
DMPAPER_P16K_ROTATED106中国 16K 旋转,215 by 146 毫米
DMPAPER_P32K_ROTATED107中国 32K 旋转,151 乘 97 毫米
DMPAPER_P32KBIG_ROTATED108中国 32K (大) 旋转,151- by 97 毫米
DMPAPER_PENV_1_ROTATED109中国信封 #1 旋转,165- x 102 毫米
DMPAPER_PENV_2_ROTATED110中国信封 #2 旋转,176- x 102 毫米
DMPAPER_PENV_3_ROTATED111中国信封 #3 旋转,176- x 125 毫米
DMPAPER_PENV_4_ROTATED112中国信封 #4 旋转, 208- by 110 毫米
DMPAPER_PENV_5_ROTATED113中国信封 #5 旋转, 220- x 110 毫米
DMPAPER_PENV_6_ROTATED114中国信封 #6 旋转, 230- by 120 毫米
DMPAPER_PENV_7_ROTATED115中国信封 #7 旋转,230- x 160 毫米
DMPAPER_PENV_8_ROTATED116中国信封 #8 旋转,309- x 120 毫米
DMPAPER_PENV_9_ROTATED117中国信封 #9 旋转,324 x 229 毫米
DMPAPER_PENV_10_ROTATED118中国信封 #10 旋转,458- x 324 毫米
打印框回调对象
中文名字英文名称作用解释
打印框回调对象IPrintDialogCallback提供使应用程序能够在显示打印属性表时从 打印选框 函数接收通知和消息的方法。
打印框回调对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
InitDone初始化当系统完成初始化“打印属性表”的“常规”页时,由 打印选框 调用。
SelectionChange已选从“打印属性表”的“常规”页上的已安装打印机列表中选择其他打印机时。
HandleMessage处理(窗口,消息,参数,数据,结果)处理发送到“打印属性表”常规“页下半部分中子对话框的消息。结果为真处理消息,为假不处理
打印框服务对象
中文名字英文名称作用解释
打印框服务对象IPrintDialogServices供程序能够使用 打印选框 函数检索有关当前所选打印机的信息的方法。
打印框服务对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetCurrentDevMode信息(环境,@大小)使用当前所选打印机的相关信息填充 DEVMODE 结构。
GetCurrentPrinterName名称(内容,@大小)检索当前所选打印机的名称
GetCurrentPortName端口(内容,@大小)检索要与 打印选框 一起使用的当前端口的名称。
极语言模块类库
开发使用:点击设置菜单-选择"编辑模块",打开设置选项的界面
使用模块勾选模块列表里的项目即可
选中项目,点击"编辑模块"按钮可以查看源代码
开发模块点击"新建模块"按钮,输入模块名称
然后在编辑器界面就可以开发模块了,模块里可以写类
极语言更新的模块函数只有中文名称,英文仅作对照参考
中文名字英文名称用法示例作用解释
定时器Timer定时器(窗体,编号,毫秒)开启指定编号和毫秒的定时器,毫秒数为零关闭定时器。
定时器事件TimerEvents定时器事件(窗口,消息,编号,毫秒)定时器回调的事件。
音乐播放MusicPlay音乐播放("命令").添加("文件名").开始(编号).暂停(1).停止(2)
数据.连接DataConn数据.连接(语句)提交SQL连接语句建立数据库连接。
数据.执行DataExec数据.执行(语句)提交SQL执行语句读取写入数据库。
数据.读取DataRead数据.读取(语句)提交SQL查询语句返回结果数或更新的行数。
数据.读表DataTable数据.读表(表名)提交数据库表名读取全表并返回行数。
数据.写入DataWrite数据.写入(语句)提交SQL执行语句读取写入数据库。
数据.释放DataFree数据.释放释放已打开的数据库表。
数据.关闭DataClose数据.关闭关闭数据库连接。
调用对象callobject调用对象(名称,方式,参数,数据)访问新建对象的属性和方法,方式:1方法;2属性读;3属性写;4参照赋值;参数为DISPPARAMS结构,数据为Variant结构
集合Collection集合集合类,添加(键值):不重复的编号键;取值:获取一个键值并删除;取键(键值):获取编号键值的序号,判断是否存在。
容器类Dictionary容器类初始化;添加(键值,数值):添加键值对,也可修改;取值(键值):获取键对应数值;查值(数值):通过值查询键;取键(键值):获取键的序号;删除(键值):删除指定键
进程信息NtQueryInformationProcess进程信息(进程,类别,数据,长度,大小)检索有关指定进程的信息。
网络消息NetworkMessages网络消息{网络事件(参数,数据)}网络通讯模块的自定义消息事件
网络窗口NetworkWindow网络窗口(窗体)网络通讯模块的初始化网络并指定窗口
网络连接NetworkConnection网络连接(网址,端口)网址为0是监听端口,指定IP地址是连接网络
网络数据NetworkData网络数据(网口)网络数据到来或连接成功时触发,从网络接口获取数据
网络断开NetworkClose网络断开(网口)网络接口断开时触发的事件
设置网络SetTcpEntry设置网络(数据)设置 TCP 连接的状态
网卡信息GetAdaptersInfo网卡信息(数据,长度)检索本地计算机的适配器信息。
网络列表GetExtendedTcpTable网络列表(数据,长度,排序,版本,类别,0)检索包含应用程序可用的 TCP 终结点列表的表。
导入列表ImageDirectoryEntryToData导入列表(基址,映像,索引,大小)获取对特定于图像的数据的访问权限。
哈希加密CryptHash哈希加密(数据,长度,算法)常用算法:MD2=$8001;MD4=$8002;MD5=$8003;SHA1=$8004;MAC=$8005;SHA256=$800C;SHA512=$800E;
编码转换CodePage编码转换(数据,65001,936)文字编码相互转换,UTF-8=65001;GBK=936;BIG5=950;日文=932;韩文=949;泰文=874
分割文字split分割文字(内容,符号,@数组)返回分割后数组的长度,动态数组使用名称.指针,固定数组使用@
替换文字Replace替换文字(原文,查找,替换)返回替换后的文字,替换英文区分大小写
替换文本ReplaceI替换文本(原文,查找,替换)返回替换后的文字,替换英文不区分大小写
文件内容filedata文件内容(路径)返回文件数据的地址(自行释放);文件内容(路径,[长度])=数据内容
图像列表ImageList图像列表(数量,大小,格式)格式:0=位图1图标2光标。添加指定数量和大小的图像到列表,默认从ICO_0.ico开始加载,数字依次递增;
公共事件PublicEvents公共事件(数据)控件事件到来时,数据前三项为:窗口,编号,事件;-1=内存不足;-2=单击左键;-3=双击左键;-4=按下回车;-5右键单击;-6=右键双击;
-7=得到焦点;-8失去焦点;-15按下键盘;-18键入字符;-402树项改变
配置路径inipath配置路径(名称)指定配置文件的名称,为空指定与程序同名的ini文件。
配置段名inisn配置段名文本=配置段名;配置段名(段名)=内容:多条内容用0字符分割,末尾加0字符
配置结构iniStruct配置结构(段名,键名)文本=配置结构(段名,键名);配置结构(段名,键名,大小)=内容
配置区段iniSec配置区段(段名)文本=配置区段(段名);获取区段的所有键名和内容
配置文字iniString配置文字(段名,键名)文本=配置文字(段名,键名);配置文字(段名,键名)=内容
配置整数iniint配置整数(段名,键名)数值=配置整数(段名,键名);获取键值为数字(含十六进制)的数值
资源数据ResData资源数据(编号,@大小)返回指定编号资源的数据,第二参数获得资源文件的大小
剪切板Clipboard剪切板取剪切板可选参数[格式],写剪切板三个参数(数据,[长度],[格式])。格式:1文本;2位图;3图元;4符号连接;5交换数据;6标签图像;
7OEM文本;8DIB位图;9调色板;10手写笔;11复杂音频;12标准音频;13宽字符;14增强图元;15文件列表
检验开启CRCLoad检验开启crc32校验初始化数据
检验数据CRCData检验数据(数据,长度)crc32校验数据,返回检验结果
格式转换BinaryToString格式转换(数据,长度,格式)二进制转文本,返回转换文本地址。格式:0=Base64含证书标头;1=Base64不含标头;2=纯二进制副本;
3=Base64包含请求标头;4=仅十六进制;5=十六进制带ASCII字符;11=十六进制带ASCII和地址
转换格式StringToBinary转换格式(数据,标志)文本转二进制,返回二进制数据地址。格式:1=Base64不含标头;2=纯二进制副本;3=Base64包含标头;
4=仅十六进制;5=十六进制带ASCII字符;9=Base64带CRL标头;10=十六进制带地址;11=十六进制带ASCII和地址
路径存在PathFileExistsA路径存在(路径)判断目标路径(文件或目录)是否存在
复制文本StrDupA复制文本(内容)复制字符串。
转换整数StrToIntA转换整数("123")将表示十进制值的字符串转换为整数。
转整数值StrToIntExA转整数值(内容,格式,@数值)将表示十进制或十六进制数的字符串转换为整数。格式:0十进制,1十/16进制(加0x)
去首尾字StrTrimA去首尾字(内容,文字)从字符串中删除指定的前导字符和尾随字符。
内核对象——本地文件系统
文件系统使应用程序能够在存储设备上存储和检索文件。 文件放置在分层结构中。 文件系统指定文件的命名约定和用于指定树结构中文件路径的格式。
每个文件系统由一个或多个驱动程序和动态链接库组成,用于定义文件系统的数据格式和功能。
文件系统可以存在于许多不同类型的存储设备上,包括硬盘、自动存储盒、可移动光盘、磁带备份单元和内存卡。
Windows 支持的所有文件系统都具有以下存储组件:

卷。 卷是目录和文件的集合。
目录。 目录是目录和文件的分层集合。
文件存储。 文件是相关数据的逻辑分组。

目录管理

目录是目录和文件的分层集合。 单个目录中可包含的文件数的唯一限制是目录所在的磁盘的物理大小。
包含一个或多个目录的目录是包含目录的 父 目录,每个包含目录都是父目录的 子 目录。 目录的分层结构称为 目录树。
NTFS文件系统实现目录与它作为目录 条目表包含的文件之间的逻辑链接。 将文件移动到目录中时,在表中创建条目并写入文件的名称。删除目录中包含的文件时,
也会从表中删除与已删除文件对应的名称和条目。 一个目录项表中可以存在单个文件的多个条目。 如果在表中为文件创建了其他条目,该条目称为指向该文件的 硬链接 。
可以为单个文件创建的硬链接数量没有限制。目录还可以包含交汇点和重新分析点。

创建和删除目录

应用程序可以编程方式创建和删除目录。
若要创建新目录,请使用 创建目录、 仿建目录 或 事务目录 函数。 目录在创建时为其指定的名称。 命名目录的约定遵循命名文件的约定。 有关这些约定的说明,请参阅 命名文件。
若要删除现有目录,请使用 删除目录 或 移除目录 函数。 在删除目录之前,必须确保目录为空,并且你具有该目录的删除访问权限。 若要执行后者,请调用 取安全符 函数。

目录句柄

每当进程创建或打开目录对象时,它都会收到该对象的句柄。若要获取现有目录的句柄,请使用 0x02000000 标志调用 创建文件 函数。可以将目录句柄传递给以下函数。
函数说明
备份读取备份文件或目录,包括安全信息。
备份查找在最初使用 备份读取 或 备份写入 函数访问的数据流中向前查找。
备份写入还原使用 备份读取 备份的文件或目录。
开件属性检索指定文件的文件信息。
文件大小检索指定文件的大小(以字节为单位)。
文件日期检索创建文件或目录、上次访问和上次修改的日期和时间。
文件类型检索指定文件的文件类型。
目录变更检索描述指定目录中的更改的信息。
文件改时设置指定的文件或目录的创建、上次访问或上次修改的日期和时间。

重分析点

文件或目录可以包含 重新分析点,这是用户定义的数据的集合。 存储数据的应用程序和安装用于解释数据和处理文件的文件系统筛选器可以理解此数据的格式。
当应用程序设置重新分析点时,它将存储此数据,以及一个 重新分析标记,该标记唯一标识它正在存储的数据。当文件系统打开具有重分析点的文件时,它会尝试查找与重新分析
标记标识的数据格式关联的文件系统筛选器。如果找到文件系统筛选器,筛选器将按照重分析数据的指示处理文件。如果未找到文件系统筛选器,则文件打开操作将失败。
例如,重新分析点用于实现 NTFS 文件系统链接和微软远程存储服务器 (RSS) 。 RSS 使用管理员定义的一组规则将不常使用的文件移动到长期存储,例如磁带或光学介质。
它使用重新分析点在文件系统中存储有关文件的信息。 此信息存储在存根文件中,该文件包含一个重分析点,其数据指向实际文件现在所在的设备。
文件系统筛选器可以使用此信息来检索文件。重分析点还用于实现装载的文件夹。
以下限制适用于重新分析点:
可以为目录建立重分析点,但目录必须为空。 否则,NTFS 文件系统无法建立重新分析点。 此外,不能在包含重分析点的目录中创建目录或文件。
重分析点和扩展属性是互斥的。 当文件包含扩展属性时,NTFS 文件系统无法创建重新分析点,并且不能在包含重新分析点的文件上创建扩展属性。
重分析点数据(包括 标记和可选 GUID)不能超过 16 KB。 如果要放置在重分析点中的数据量超过此限制,则设置重分析点将失败。
任何给定路径上的重分析点数限制为 63 个。

注意: 根据重分析点的长度,可以降低限制。 例如,如果重分析点以完全限定的路径为目标,则限制变为 31。
Windows Server 2003 和 Windows XP: 任何给定路径上的重分析点数限制为 31 个。

重新分析点标记

每个重分析点都有一个标识符标记,以便可以有效地区分不同类型的重新分析点,而无需检查重新分析点中的用户定义的数据。系统使用一组预定义的标记和一系列为微软保留的标记。
如果在设置重新分析点时使用任何保留标记,操作将失败。 这些范围中未包含的标记不是保留标记,可供应用程序使用。
设置重新分析点时,必须标记要放置在重分析点中的数据。 建立重分析点后,如果新数据的标记与现有数据的标记不匹配,则新的设置操作将失败。 如果标记匹配,则设置操作将覆盖现有的重新分析点。
若要检索重新分析点标记,请使用 查找文件 函数。 如果 属性 成员包含 0x400 属性,则 预留1 成员指定重新分析点。
标记内容
重分析标记存储为 DWORD 值。 位定义某些属性,如下图所示。
   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  +-+-+-+-+-----------------------+-------------------------------+
  |M|R|N|R|     Reserved bits     |      Reparse tag value        |
  +-+-+-+-+-----------------------+-------------------------------+
低 16 位确定重新分析点的类型。 高 16 位保留 12 位供将来使用,4 位表示标记的特定属性以及重新分析点表示的数据。下表描述了这些位。
说明
M微软 位。 如果设置了此位,则标记归 微软 所有。 所有其他标记必须对此位使用零。
R保留;对于所有非 微软 标记,必须为零。
N名称代理位。 如果设置了此位,则文件或目录表示系统中的另一个命名实体。

重新分析点和文件操作

若要确定文件系统是否支持重新分析点,请调用 取卷信息 函数并检查 0x80 位标志。
使用 硬件控制 函数可以设置、修改、获取和删除重新分析点。 下表描述了可以使用 硬件控制 执行的重新分析点操作。
操作说明
FSCTL_SET_REPARSE_POINT允许调用程序设置新的重新分析点,或修改现有的重新分析点。
FSCTL_GET_REPARSE_POINT获取存储在现有重分析点中的信息。
FSCTL_DELETE_REPARSE_POINT删除现有的重新分析点。
如果要修改、获取或删除重新分析点,则必须在文件中包含的操作中指定相同的重新分析标记。 否则,操作将失败。
如果要修改或删除重新分析点,还必须在文件中包含的操作中指定重新分析 GUID 。 否则,操作将失败。
若要确定文件或目录是否包含重新分析点,请使用 文件属性 函数。 如果文件或目录具有关联的重新分析点,则设置 0x400 属性。
若要覆盖现有的重分析点,而没有文件或目录的句柄,请使用 0x400调用 创建文件。 无论相应的文件系统筛选器是否已安装并正常工作,此标志都允许打开文件。
重新分析点 使文件系统行为不同于大多数 Windows 开发人员可能习惯的行为,因此在编写处理文件的应用程序时注意这些行为对于旨在访问支持重分析点的文件系统的可靠可靠应用程序至关重要。
这些注意事项的范围将取决于特定重新分析点的特定实现和关联的文件系统筛选器行为,这些行为可由用户定义。
请考虑以下有关 NTFS 重新分析点实现的示例,其中包括装载的文件夹、链接文件和 微软 远程存储服务器:
使用文件流的备份应用程序在使用重分析点备份文件时,应在 WIN32_STREAM_ID结构中指定8。
如果文件是重分析点,则使用 创建文件 函数的应用程序应在打开文件时指定 0x400 标志。
对 文件进行碎片整理 的过程需要对重新分析点进行特殊处理。
病毒检测应用程序应搜索指示链接文件的重新分析点。
大多数应用程序应对已移动到长期存储的文件采取特殊操作,前提是仅通知用户检索文件可能需要一段时间。
OpenFileById 函数将打开文件或重新分析点,具体取决于0x400标志的使用。
符号链接作为重分析点,具有特定于它们的某些 编程注意事项 。
使用 USN_RECORD和READ_USN_JOURNAL_DATA 结构时,用于读取更新序列号 (USN ) 更改日志记录的卷管理活动需要对重新分析点进行特殊处理。

更改当前目录

活动路径末尾的目录称为当前目录;它是活动应用程序启动的目录,除非已显式更改。 应用程序可以通过调用 当前目录 函数来确定当前目录。
有时需要使用 全路径名 函数来确保在应用程序需要时包含驱动器号。应用程序可以通过调用 修改目录 函数来更改当前目录。
以下示例演示如何使用 当前目录 和 修改目录。
文本 内容[64];//申请一个64字节长度的文本
当前目录(64,内容);//把当前进程所在目录获取到内容变量,并指明长度为64
修改目录("D:\Sec");//修改当前进程工作目录为D:\Sec

列出目录中的文件

查找文件类 文件;;//申请一个查找文件类的变量,名为文件
程序段 遍历(目录)
	目录=查找文件(目录,文件)
	循环{
	发送消息(列表, 列表添加, 0,文件.名称)
	}(下个文件(目录,文件)=0)
	关闭查找(目录)
结束
//目录是程序段接收的目录地址参数
查找文件时提交目录地址和查找文件类,返回查找文件的句柄对象,把它保存到目录这个参数变量里
循环把文件.名称添加到列表框,直到下个文件返回结果为0时,停止循环
最后关闭查找的句柄对象:目录
程序段 按钮1_点击;//在按钮事件里调用遍历目录的函数
遍历("d:\sec\*.*");//遍历d:\sec\目录下的所有文件
结束

移动目录

若要将目录以及其中包含的文件和子目录移到另一个位置,请调用 文件复制、 传送文件 或 移动事务 函数。 传送文件 函数具有与 转移文件 相同的功能,只不过 传送文件 允许您指定一个回调例程来接收有关操作进度的通知。 移动事务 函数使你能够以事务处理操作的形式执行操作。 以下示例演示如何将 转移文件 函数与目录配合使用。 转移文件("d:\sec\code","d:\sec\源码",8);//把"d:\sec\code"里的文件移动到"d:\sec\源码"目录下
这里使用标志为8,就是等待文件转移完成之后才返回

获取目录更改通知

应用程序可以使用更改通知监视目录及其子目录的内容。 等待更改通知类似于对目录及其子目录(如有必要)挂起读取操作。 当正在监视的目录中发生更改时,读取操作将完成。
例如,每当受监视目录内的文件名更改时,应用程序都可以使用这些函数来更新目录列表。
应用程序可以使用 初改通知 函数指定触发更改通知的一组条件。 条件包括对文件名、目录名称、属性、文件大小、上次写入时间和安全性的更改。此函数还返回可以使用等待函数的句柄。
如果满足等待条件,可以使用 次改通知 提供通知句柄来等待后续更改。 但是,这些函数并不指示满足等待条件的实际更改。使用 停改通知 关闭通知句柄。
若要在通知中检索有关特定更改的信息,请使用 目录变更 函数。 此函数还可用于提供完成例程。若要跟踪卷上的更改,请参阅 更改日志
以下示例监视目录树的目录名称更改。 它还监视目录的文件名更改。 该示例使用 初改通知 函数创建两个通知句柄,并使用 等多对象 函数来等待句柄。
每当在树中创建或删除目录时,该示例都应更新整个目录树。 每当在目录中创建或删除文件时,本示例都应刷新目录。
整数 结果,监视[2];//申请一个返回结果的整数和监视的数组
监视[0]=初改通知("d:\sec\code\",假,1)//监视目录中的文件创建和删除。含子目录为假,条件=1文件名更改
监视[1]=初改通知("d:\sec\",真,2)//观察子目录创建和删除。含子目录为真,条件=2目录名或子目录名更改
循环{结果=等多对象(2,@监视,假,-1)//等待两个对象,超时=-1是无限等待
判断(结果)//文件目录有变动就会返回结果
为 0 次改通知(监视[0])//已在目录中创建、重命名或删除文件。这里可以显示变更并重新启动通知
为 1 次改通知(监视[1])//已创建、重命名或删除目录。这里可以显示变更并重新启动通知
否则 信息框(0,"超时或错误")//其它结果可能是发生错误,值为0x102是超时

文件管理

文件对象提供资源 (物理设备或位于物理设备上的资源表示形式,) 可由 I/O 系统管理。 与其他对象一样,它们支持共享资源,
它们具有名称,它们受基于对象的安全性保护,并且支持同步。 I/O 系统还支持从资源读取或写入资源。

文件和群集

文件是文件系统中用户可以访问和管理的数据单元。文件在其目录中必须具有唯一的名称。由字节流组成,包含一组相关数据,以及一组属性,用于描述文件或文件中的数据。
文件的创建时间是文件属性的一个示例。创建文件时,会创建一个未命名的默认流,以存储文件打开时写入该文件的所有数据。还可以在 文件中创建其他流。这些附加流称为备用流。
文件属性不存储在包含文件数据的数据流中,而是存储在其他位置并由操作系统管理。
所有文件系统数据(包括系统启动代码和目录)都由 NTFS 文件系统存储在文件中。 其他文件系统将此信息存储在文件系统外部的磁盘区域中。将此信息存储在文件中的一个优点是
Windows 可以轻松查找、访问和维护信息。 其他优点是,其中每个文件都可能受安全描述符的保护,在部分磁盘损坏的情况下,它们可能会快速重定位到磁盘的更安全部分。
所有受支持的文件系统的基本存储单元都是 群集,它是一组扇区。 这使文件系统可以独立于硬件磁盘控制器设置的磁盘扇区大小来优化磁盘数据的管理。
如果要管理的磁盘很大,并且在单个操作中移动和组织大量数据,管理员可以调整群集大小以适应这种情况。

文件流

流是字节序列。 在 NTFS 文件系统中,流包含写入文件的数据,它提供了比特性和属性更多的关于文件的信息。 例如,可以创建包含搜索关键字的流,或者创建文件的用户帐户的标识。
与文件关联的每个流都有自己的分配大小、实际大小和有效数据长度:

分配大小是为流保留的磁盘空间量。
实际大小是调用方正在使用的字节数。
有效数据长度 (VDL) 是根据流的分配大小初始化的字节数。
每个流还维护自己的压缩、加密和稀疏状态。没有与流关联的文件时间。 当文件中的任何流更新时,文件的文件时间也会更新。
每个流维护机会锁。 每个流还维护共享模式。 当请求对文件的删除访问权限时,操作系统会检查文件中所有打开的流的删除访问权限。
如果另一个进程在没有 4 权限的情况下打开了一个流,则你无法打开该文件进行删除访问。
如果要复制的文件具有数据流,并且使用了网络重定向程序,则仅当客户端同时具有读取权限和读取属性权限时,才能复制该文件。
流的命名约定
从 Windows shell 命令行指定时,流的全名是“文件名:流名称:流类型”,如下例所示:“myfile.dat:stream1:$DATA”。
对于文件名合法的任何字符对于流名称也是合法的,包括空格。 有关详细信息,请参阅命名文件。 流类型(也称为属性类型代码)在 NTFS 文件系统内部。
因此,用户无法创建新的流类型,但可以打开现有的 NTFS 文件系统类型。 流类型说明符值始终以美元符号 ($) 开头。 有关流类型的列表,请参阅下文。
默认情况下,默认数据流未命名。 要完全指定默认数据流,请使用“filename::$DATA”,其中 $DATA 是流类型。 这等效于“filename”。 你可以使用文件命名约定在文件中创建命名流。
请注意,“$DATA”是合法的流名称。 例如,名为“sample”的文件中名为“$DATA”的流的全名将是“sample:$DATA:$DATA”。如果在同一个文件上创建了一个名为“bar”的流,它的全名将是“sample:bar:$DATA”。
在创建和处理文件名为单字符的文件时,请在文件名前加上句点和反斜杠 (.),或者使用完全限定的路径名。这样做的原因是 Windows 会将单字符文件名视为驱动器号。
当使用相对路径指定驱动器号时,驱动器号与路径之间用冒号分隔。 如果单字符名称是驱动器号还是文件名存在歧义,则如果冒号后面的字符串是有效路径,则 Windows 会假定它是驱动器号,即使驱动器号无效。

文件对象

文件对象 充当内核和用户模式进程与驻留在物理磁盘上的文件数据之间的逻辑接口。 文件对象包含写入文件的数据以及以下内核维护的属性集。
信息类型目的
文件名命名相应的物理文件。
当前字节偏移量本部分后面介绍的同步文件 I/O () 用于标识读取和写入操作的当前起始位置。
共享模式指定当初始进程仍在访问文件时,第二个进程是否可以打开文件进行读取、写入或删除访问。
I/O 模式指定初始进程是针对 同步 I/O 还是异步 I/O、缓存或未缓存的 I/O、顺序或随机 I/O 等打开文件。
指向设备对象的指针标识文件数据所在的物理设备。
指向卷参数块或 VPB 的指针标识文件数据所在的卷或分区。
指向节对象指针的指针标识描述 映射文件的根结构。
指向专用缓存映射的指针标识当前缓存的文件数据。

文件句柄

当某个进程使用 创建文件 函数打开文件时, 文件句柄 将与之关联,直到进程终止或使用 关闭对象 函数关闭句柄为止。 文件句柄用于标识许多函数调用中的文件。
每个文件句柄和文件对象通常对于打开文件的每个进程都是唯一的,唯一的例外是复制进程持有的文件句柄,或者当子进程继承父进程的文件句柄时。
在这些情况下,这些文件句柄是唯一的,但可以看到单个共享文件对象。 有关复制进程保留的文件句柄的详细信息,请参阅 复制对象 。
请注意,虽然文件句柄通常对进程是专用的,但文件处理指向的文件数据不是。共享同一文件的进程和线程必须同步其访问。多数情况进程通过其专用句柄池来标识文件。

文件指针

打开文件时,系统会将 文件指针 与默认流相关联。 此文件指针是一个 64 位偏移量值,用于指定要读取的下一个字节或接收写入的下一个字节的位置。
每次打开文件时,系统都会将文件指针放在文件开头,即偏移量零。 每个读取和写入操作都会按读取和写入的字节数来提升文件指针。
例如,如果文件指针位于文件的开头,并且请求了 5 个字节的读取操作,则文件指针将在读取操作后紧接在偏移量 5 处。
当读取或写入每个字节时,系统会推进文件指针。 还可以通过调用 文件定位 函数来重新定位文件指针。
当文件指针到达文件末尾并且应用程序尝试从文件读取时,不会发生错误,但不会读取任何字节。
因此,在没有错误的情况下读取零个字节意味着应用程序已到达文件的末尾。 写入零个字节没有任何作用。
应用程序可以使用 结尾文件 函数截断或扩展文件。 此函数将文件末尾设置为文件指针的当前位置。

群集和盘区

可以从两个不同的角度引用群集:在文件内和卷上。 文件中的任何群集都有一个 虚拟群集编号 (VCN) ,这是它与文件开头的相对偏移量。
例如,查找到群集大小的两倍,然后是读取,将返回从第三个 VCN 开始的数据。 (LCN) 的 逻辑群集编号 描述群集与卷中某个任意点的偏移量。
LPN 应仅视为序号或相对数字。 无法保证将逻辑群集映射到物理硬盘驱动器扇区。
盘区是连续群集的运行。 例如,假设一个由 30 个群集组成的文件记录在两个区中。 第一个区可能由 5 个连续群集组成,其余 25 个群集中的另一个。
不保证磁盘上与任何其他范围的任何关系。 例如,第一个盘区可能高于后续盘区的 LCN。

访问掩码格式

所有安全对象都使用下图所示 的访问掩码 格式来排列其访问权限。
访问掩码格式
在此格式中,低阶 16 位用于对象特定的访问权限,接下来的 8 位用于 标准访问权限,这适用于大多数类型的对象,而 4 位高阶位用于指定每个对象类型可以映射到一组标准和对象特定权限的 通用访问权限 。
ACCESS_MASK数据类型是定义标准权限、特定权限和泛型权限的 DWORD 值。 这些权限用于 访问控制条目 (ACE) ,是指定请求或授予对对象的访问权限的主要方式。
含义
0 15特定权限。 包含特定于与掩码关联的对象类型的访问掩码。
16 23标准权限。 包含对象的标准访问权限。
24访问系统安全 (ACCESS_SYSTEM_SECURITY) 。 它用于指示对 SACL) (系统访问控制列表 的访问。 这种类型的访问要求调用进程具有 SE_SECURITY_NAME (管理审核和安全日志) 权限。 如果在审核访问 ACE 的访问掩码中设置了此标志, (成功或不成功的访问) ,则将审核 SACL 访问。
25允许的最大 (MAXIMUM_ALLOWED)
26 27保留。
28泛型所有 (GENERIC_ALL) 。
29泛型执行 (GENERIC_EXECUTE) 。
30泛型写入 (GENERIC_WRITE) 。
31泛型读取 (GENERIC_READ) 。

标准权限位(16 到 23)包含对象的标准访问权限,可以是以下预定义标志的组合。

标志含义
16DELETE删除访问权限。
17READ_CONTROL 读取对安全描述符的所有者、组和 任意访问控制列表 (DACL) 的访问权限。
18WRITE_DAC对 DACL 的写入访问权限。
19WRITE_OWNER对所有者的写入访问权限。
20同步同步访问。
标准访问权限
每种类型的安全对象都有一组访问权限,这些权限对应于特定于该对象类型的操作。
除了这些特定于对象的访问权限外,还有一组标准访问权限,这些权限对应于大多数安全对象类型通用的操作。
英文名称数值作用解释
DELETE0x10000删除对象的权限。
READ_CONTROL0x20000读取对象 安全描述符中的信息的权限,不包括 系统访问控制列表中 的信息 (SACL) 。
SYNCHRONIZE0x100000将对象用于同步的权限。 这使线程能够等待对象处于信号状态。 某些对象类型不支持此访问权限。
WRITE_DAC0x40000修改 自由访问控制列表 的权限 (DACL 在对象的安全描述符中) 。
WRITE_OWNER0x80000更改对象安全说明符中的所有者的权限。
以下是上面几个值的组合
STANDARD_RIGHTS_ALL0x1F0000合并 DELETE、READ_CONTROL、WRITE_DAC、WRITE_OWNER 和 SYNCHRONIZE 访问。
STANDARD_RIGHTS_EXECUTE0x20000当前定义为等于 READ_CONTROL。
STANDARD_RIGHTS_READ0x20000当前定义为等于 READ_CONTROL。
STANDARD_RIGHTS_REQUIRED0xF0000合并 DELETE、READ_CONTROL、WRITE_DAC 和 WRITE_OWNER 访问。
STANDARD_RIGHTS_WRITE0x20000当前定义为等于 READ_CONTROL。
通用访问权限
可以使用通用访问权限来指定打开对象句柄时所需的访问类型。 这通常比指定所有相应的标准和特定权限更简单。
英文名称数值作用解释
GENERIC_ALL0x10000000所有可能的访问权限
GENERIC_EXECUTE0x20000000执行访问权限
GENERIC_READ0x80000000读取权限
GENERIC_WRITE0x40000000写入权限
文件访问权限常量
文件和目录的有效访问权限包括标准访问权限。 下表列出了特定于文件和目录的访问权限。
英文名称数值作用解释
FILE_ADD_FILE2对于目录,有权在目录中创建文件。
FILE_ADD_SUBDIRECTORY4对于目录,是创建子目录的权限。
FILE_ALL_ACCESS0x1F03FF文件的所有可能的访问权限。
FILE_APPEND_DATA4对于文件对象,是将数据追加到文件的权限。 (对于本地文件,如果未指定此标志,写入操作将不会覆盖现有数据 FILE_WRITE_DATA。) 对于目录对象,创建子目录 (的权限 FILE_ADD_SUBDIRECTORY) 。
FILE_CREATE_PIPE_INSTANCE4对于命名管道,是创建管道的权限。
FILE_DELETE_CHILD64 (0x40)对于目录,有权删除目录及其包含的所有文件,包括只读文件。
FILE_EXECUTE32 (0x20)对于本机代码文件,是执行该文件的权利。 授予脚本的此访问权限可能会导致脚本可执行,具体取决于脚本解释器。
FILE_LIST_DIRECTORY1对于目录,是列出目录内容的权限。
FILE_READ_ATTRIBUTES128 (0x80)读取文件属性的权利。
FILE_READ_DATA1对于文件对象,读取相应文件数据的权限。 对于目录对象,是读取相应目录数据的权限。
FILE_READ_EA8读取扩展文件属性的权利。
FILE_TRAVERSE32 (0x20)对于目录,是遍历目录的权限。 默认情况下,会向用户分配 BYPASS_TRAVERSE_CHECKING权限,这会忽略 FILE_TRAVERSE访问权限。 有关详细信息,请参阅 文件安全和访问权限 中的备注。
FILE_WRITE_ATTRIBUTES256 (0x100)写入文件属性的权利。
FILE_WRITE_DATA2对于文件对象,是将数据写入文件的权限。 对于目录对象,在目录中创建文件的权限 (FILE_ADD_FILE) 。
FILE_WRITE_EA16 (0x10)写入扩展文件属性的权利。
STANDARD_RIGHTS_READ0x20000包括 READ_CONTROL,这是读取文件或目录对象的安全描述符中信息的权限。 这不包括 SACL 中的信息。
STANDARD_RIGHTS_WRITE0x20000与 STANDARD_RIGHTS_READ 相同。
文件安全和访问权限
英文名称数值作用解释
FILE_GENERIC_EXECUTE0x1200A0FILE_EXECUTE|FILE_READ_ATTRIBUTES|STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE
FILE_GENERIC_READ0x120089FILE_READ_ATTRIBUTES|FILE_READ_DATA|FILE_READ_EA|STANDARD_RIGHTS_READ|SYNCHRONIZE
FILE_GENERIC_WRITE0x120116FILE_APPEND_DATA|FILE_WRITE_ATTRIBUTES|FILE_WRITE_DATA|FILE_WRITE_EA|STANDARD_RIGHTS_WRITE|SYNCHRONIZE
文件属性类型
英文名称数值作用解释
FILE_ATTRIBUTE_READONLY1 (0x00000001)只读文件。 应用程序可以读取文件,但不能写入或删除该文件。 在目录上不遵循此属性。 有关详细信息,请参阅 无法在 Windows Server 2003、Windows XP、Windows Vista 或 Windows 7 中查看或更改文件夹的只读或系统属性。
FILE_ATTRIBUTE_HIDDEN2 (0x00000002)文件或目录处于隐藏状态。 它不包括在普通目录列表中。
FILE_ATTRIBUTE_SYSTEM4 (0x00000004)操作系统使用其中的一部分或独占使用的文件或目录。
FILE_ATTRIBUTE_DIRECTORY16 (0x00000010)标识目录的句柄。
FILE_ATTRIBUTE_ARCHIVE32 (0x00000020)作为存档文件或目录的文件或目录。 应用程序通常使用此属性来标记要备份或删除的文件。
FILE_ATTRIBUTE_DEVICE64 (0x00000040)此值保留供系统使用。
FILE_ATTRIBUTE_NORMAL128 (0x00000080)未设置其他属性的文件。 此属性仅在单独使用时才有效。
FILE_ATTRIBUTE_TEMPORARY256 (0x00000100)用于临时存储的文件。 如果有足够的缓存内存可用,文件系统会避免将数据写回到大容量存储,因为通常情况下,应用程序在句柄关闭后会删除临时文件。 在这种情况下,系统可以完全避免写入数据。 否则,在句柄关闭后写入数据。
FILE_ATTRIBUTE_SPARSE_FILE512 (0x00000200)是稀疏文件的文件。
FILE_ATTRIBUTE_REPARSE_POINT1024 (0x00000400)具有关联的重新分析点的文件或目录,或作为符号链接的文件。
FILE_ATTRIBUTE_COMPRESSED2048 (0x00000800)压缩的文件或目录。 对于文件,将压缩该文件中的所有数据。 对于目录,压缩是新建文件和子目录的默认设置。
FILE_ATTRIBUTE_OFFLINE4096 (0x00001000)文件的数据不会立即可用。 此属性指示文件数据以物理方式移动到脱机存储。 此属性由远程存储(分层存储管理软件)使用。 应用程序不应随意更改此属性。
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED8192 (0x00002000)内容索引服务不会为文件或目录编制索引。
FILE_ATTRIBUTE_ENCRYPTED16384 (0x00004000)加密的文件或目录。 对于文件,文件中的所有数据流都已加密。 对于目录,加密是新创建的文件和子目录的默认加密。
FILE_ATTRIBUTE_INTEGRITY_STREAM32768 (0x00008000)目录或用户数据流配置了完整性 (仅在 ReFS 卷) 上受支持。 它不包括在普通目录列表中。 如果文件已重命名,完整性设置将一直保留。 如果复制了某个文件,则如果源文件或目标目录设置了完整性,则目标文件将具有完整性设置。在Windows Server 2012之前,不支持此标志。
FILE_ATTRIBUTE_VIRTUAL65536 (0x00010000)此值保留供系统使用。
FILE_ATTRIBUTE_NO_SCRUB_DATA131072 (0x00020000)后台数据完整性扫描程序不读取的用户数据流 (AKA 清理器) 。 在目录上设置时,它仅提供继承。 此标志仅在 存储空间 和 ReFS 卷上受支持。 它不包括在普通目录列表中。在Windows 8和Windows Server 2012之前,不支持此标志。
FILE_ATTRIBUTE_EA262144 (0x00040000)具有扩展属性的文件或目录。重要: 此常量仅供内部使用。
FILE_ATTRIBUTE_PINNED524288 (0x00080000)此属性指示用户意图,即即使未主动访问文件或目录,也应在本地保持完全存在。 此属性用于分层存储管理软件。
FILE_ATTRIBUTE_UNPINNED1048576 (0x00100000)此属性指示,除非主动访问文件或目录,否则不应在本地完全存在。 此属性用于分层存储管理软件。
FILE_ATTRIBUTE_RECALL_ON_OPEN262144 (0x00040000)此属性仅出现在目录枚举类 (FILE_DIRECTORY_INFORMATION、FILE_BOTH_DIR_INFORMATION等) 中。 设置此属性时,这意味着文件或目录在本地系统上没有物理表示形式;项是虚拟的。 打开该项目的成本将比平常要高,例如,它会导致至少从远程存储中提取其中一部分。
FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS4194304 (0x00400000)如果设置了此属性,则意味着文件或目录在本地未完全存在。 对于表示并非所有数据都位于本地存储 (的文件,例如,它可能稀疏,某些数据仍位于远程存储) 中。 对于目录,这意味着某些目录内容正在从另一个位置虚拟化。 读取文件/枚举目录的成本将比平常要高,例如,这会导致至少从远程存储中提取一些文件/目录内容。 只有内核模式调用方可以设置此位。文件系统微型筛选器低于 180000 – 189999高度范围 (FSFilter HSM 加载顺序组) 不得对设置了此属性的文件发出目标缓存读取或写入。 这可能会导致缓存污染和潜在的文件损坏。 有关详细信息,请参阅 处理占位符。
文件属性标志
英文名称数值作用解释
FILE_FLAG_BACKUP_SEMANTICS0x02000000正在为备份或还原操作打开或创建文件。 当进程具有 SE_BACKUP_NAME 和 SE_RESTORE_NAME 权限时,系统将确保调用进程替代文件安全检查。 有关详细信息,请参阅 更改令牌中的特权。
FILE_FLAG_DELETE_ON_CLOSE0x04000000文件在其所有句柄都关闭后立即被删除,其中包括指定的句柄和任何其他打开或重复的句柄。如果存在文件的现有打开句柄,则调用会失败,除非它们都以 FILE_SHARE_DELETE 共享模式打开。针对文件的后续打开请求将失败,除非指定 FILE_SHARE_DELETE 共享模式。
FILE_FLAG_NO_BUFFERING0x20000000正在打开文件或设备,没有系统缓存用于数据读取和写入。 此标志不会影响硬盘缓存或内存映射文件。
FILE_FLAG_OPEN_NO_RECALL0x00100000文件数据已请求,但应继续位于远程存储中。 不应将其传输回本地存储。 此标志供远程存储系统使用。
FILE_FLAG_OPEN_REPARSE_POINT0x00200000不会进行正常的 重分析点 处理; CreateFile 将尝试打开重新分析点。 打开文件时,无论控制重分析点的筛选器是否正常运行,都返回文件句柄。此标志不能与 CREATE_ALWAYS 标志一起使用。
FILE_FLAG_OVERLAPPED0x40000000正在为异步 I/O 打开或创建文件或设备。在此句柄上完成后续 I/O 操作时, OVERLAPPED 结构中指定的事件将设置为信号状态。如果指定了此标志,则文件可用于同时读取和写入操作。
FILE_FLAG_POSIX_SEMANTICS0x01000000将根据 POSIX 规则进行访问。 这包括允许多个具有名称的文件(仅在大小写上不同)用于支持该命名的文件系统。 使用此选项时请小心,因为为 MS-DOS 或 16 位 Windows 编写的应用程序可能无法访问使用此标志创建的文件。
FILE_FLAG_RANDOM_ACCESS0x10000000访问应是随机的。 系统可将此选项用作优化文件缓存的提示。如果文件系统不支持缓存的 I/O 且 FILE_FLAG_NO_BUFFERING,则此标志无效。
FILE_FLAG_SESSION_AWARE0x00800000正在使用会话感知打开文件或设备。 如果未指定此标志,则会话 0 中运行的进程无法打开每个会话 (设备,例如使用 RemoteFX USB 重定向) 的设备。 此标志对不在会话 0 中的调用方无效。 此标志仅在服务器版本的 Windows 上受支持。
FILE_FLAG_SEQUENTIAL_SCAN0x08000000访问旨在从头到尾按顺序进行。 系统可将此选项用作优化文件缓存的提示。如果读取隐藏 (即使用反向扫描) ,则不应使用此标志。如果文件系统不支持缓存的 I/O 且 FILE_FLAG_NO_BUFFERING,则此标志无效。
FILE_FLAG_WRITE_THROUGH0x80000000写入操作不会通过任何中间缓存,它们将直接转到磁盘。有关其他信息,请参阅本主题的 缓存行为 部分。
文件安全标志
SECURITY_SQOS_PRESENT 标志指定为 属性 的一部分时,它还可以包含以下一个或多个值。
英文名称数值作用解释
SECURITY_ANONYMOUS0在匿名模拟级别模拟客户端。
SECURITY_CONTEXT_TRACKING0x40000安全跟踪模式是动态的。 如果未指定此标志,则安全跟踪模式为静态。
SECURITY_DELEGATION0x30000在委派模拟级别模拟客户端。
SECURITY_EFFECTIVE_ONLY0x80000服务器只能使用客户端安全上下文中已启用的方面。
SECURITY_IDENTIFICATION0x10000在标识模拟级别模拟客户端。
SECURITY_IMPERSONATION0x20000在模拟级别模拟客户端。 如果未将其他标志与 SECURITY_SQOS_PRESENT 标志一起指定,则这是默认行为。
SECURITY_SQOS_PRESENT0x00100000SECURITY_SQOS_PRESENT
SECURITY_VALID_SQOS_FLAGS0x001F0000SECURITY_VALID_SQOS_FLAGS
文件共享模式
英文名称数值作用解释
00x00000000阻止其他进程在请求删除、读取或写入访问权限时打开文件或设备。
FILE_SHARE_DELETE0x00000004启用文件或设备上的后续打开操作以请求删除访问权限。否则,如果其他进程请求删除访问权限,则无法打开文件或设备。
FILE_SHARE_READ0x00000001启用文件或设备上的后续打开操作以请求读取访问权限。否则,如果其他进程请求读取访问权限,则无法打开文件或设备。
FILE_SHARE_WRITE0x00000002启用文件或设备上的后续打开操作以请求写入访问权限。否则,如果其他进程请求写入访问权限,则无法打开文件或设备。
文件创建方式
英文名称数值作用解释
CREATE_ALWAYS2始终创建新文件。如果指定的文件存在且可写,则函数将截断文件,函数成功,最后错误代码设置为 ERROR_ALREADY_EXISTS (183) 。否则为0
CREATE_NEW1仅当文件尚不存在时,才创建新文件。如果指定的文件存在,则函数将失败,最后一个错误代码设置为 ERROR_FILE_EXISTS (80) 。否则会创建一个新文件。
OPEN_ALWAYS4始终打开文件。如果指定的文件存在,则函数成功,并将最后一个错误代码设置为 ERROR_ALREADY_EXISTS (183) 。否则为0
OPEN_EXISTING3仅当文件或设备存在时才打开它。如果指定的文件或设备不存在,则函数将失败,并将最后一个错误代码设置为 ERROR_FILE_NOT_FOUND (2) 。
TRUNCATE_EXISTING5打开一个文件并截断它,使其大小为零字节,仅当它存在时。如果指定的文件不存在,则函数将失败,最后一个错误代码设置为 ERROR_FILE_NOT_FOUND (2) 。
文件系统——相关函数
中文名称英文名称示例作用
目录管理
创建目录CreateDirectoryA创建目录(目录名,0)创建一个文件夹
仿建目录CreateDirectoryExA仿建目录(模板,目录名,安全)使用指定模板目录的属性创建新目录。新目录保留指定模板目录的其他属性。
事务目录CreateDirectoryTransactedA事务目录(模板,目录名,安全,事务)使用指定模板目录的属性,以事务处理操作的形式创建新目录。
停改通知FindCloseChangeNotification停改通知(通知)停止更改通知句柄监视。
初改通知FindFirstChangeNotificationA初改通知(目录名,含子目录,条件)创建更改通知句柄并设置初始更改通知筛选条件
次改通知FindNextChangeNotification次改通知(通知)请求操作系统在下次检测到相应更改时,发出更改通知句柄信号。
当前目录GetCurrentDirectoryA当前目录(长度,内容)获得当前进程的所在目录
修改目录SetCurrentDirectoryA修改目录(目录名)修改当前进程运行的目录
目录变更ReadDirectoryChangesW目录变更(监视,@数据,大小,子,条件,@已收,重叠类,回调)检索描述指定目录中更改的信息。函数不会报告对指定目录本身的更改。
目录更改ReadDirectoryChangesExW目录更改(监视,@数据,大小,子,条件,@已收,重叠类,回调,类型)检索描述指定目录中更改的信息。函数不会报告对指定目录本身的更改。
删除目录RemoveDirectoryA删除目录(目录)删除现有空目录,有文件不能删除
移除目录RemoveDirectoryTransactedA移除目录(目录,事务)删除现有的空目录作为事务处理操作。
备份读取BackupRead备份读取(文件,缓冲,长度,@已读,完成,访表,数据)将与指定文件或目录关联的数据读入缓冲区,可将数据写入备份介质。
备份查找BackupSeek备份查找(文件,低位,高位,@收低,@收高,数据)在使用备份数据时访问的数据流中查找转发。
备份写入BackupWrite备份写入(文件,缓冲,长度,@已读,完成,访表,数据)将与指定文件或目录关联的数据读入缓冲区,可将数据写入备份介质。
文件管理
文件读_hread文件读(文件,内容,长度)返回实际读取的字节数。
文件写_hwrite文件写(文件,内容,长度)返回实际写入的字节数
建文件_lcreat文件=建文件("12.txt",属性)创建或打开指定的文件,属性:0读写,1只读,2隐藏,4系统
开文件_lopen文件=开文件("34.txt",方式)打开现有文件,方式:0=读,1=写,2=读写
关文件_lclose关文件(文件)关闭指定的文件
读文件_lread已读=读文件(文件,内容,长度)返回实际读取的字节数。
写文件_lwrite已写=写文件(文件,内容,长度)返回实际写入的字节数
流定位_llseek流定位(文件,位置,方向)方向0=开头,1=当前位置,2=文件结尾;文件长度=流定位(文件,0,2)
文件码页AreFileApisANSI文件码页确定文件 I/O 函数是使用 ANSI(非零)还是 OEM (0)字符集代码页。适用于 8 位控制台输入和输出操作。
取消操作CancelIo取消操作(文件)取消由指定文件的调用线程颁发的所有挂起输入和输出 (I/O) 操作。
取消传输CancelIoEx取消传输(文件,重叠类)标记指定文件句柄的任何未完成的 I/O 操作。
取消同步CancelSynchronousIo取消同步(线程)将指定线程发出的挂起同步 I/O 操作标记为已取消。
关闭对象CloseHandle关闭对象(对象)关闭文件、文件映射、进程、线程、安全和同步对象等
文件传送CopyFile2文件传送(名称1,名称2,复制文件类)将现有文件复制到新文件,并通过回调函数向应用程序通知此操作的进度。
复制文件CopyFileA复制文件("a.txt","b.txt",假)最后参数为真不覆盖已有文件
文件复制CopyFileExA文件复制(名称,新名,回调,附加,取消,标志)将现有文件复制到新文件,并通过回调函数通知应用程序其进度。
复制事务CopyFileTransactedA复制事务(名称,新名,回调,附加,取消,标志,事务)将现有文件作为事务处理操作复制到新文件,并通过回调函数通知应用程序其进度。
创建文件CreateFileA文件=创建文件(名,读写,共享,安全,方式,属性,模板)可打开或创建文件或者I/O设备,并返回可访问的句柄:控制台,通信资源 目录(只读),磁盘驱动器,文件,邮槽,管道。
创建硬链CreateHardLinkA创建硬链(新名,原名,0)在现有文件和新文件之间建立硬链接。
删除文件DeleteFileA删除文件(文件名)删除现有文件
关闭查找FindClose关闭查找(搜索)关闭指定的搜索句柄
查找文件FindFirstFileA搜索=查找文件(文件名,文件信息)查找指定目录下的文件
下个文件FindNextFileA下个文件(搜索,文件信息)查找该目录下一个文件
查寻文件FindFirstFileExA查寻文件(目录,级别,@数据,匹配,条件,选项)在目录中搜索具有与指定属性匹配的名称和属性的文件或子目录。
刷新文件FlushFileBuffers刷新文件(文件)清除指定文件的缓冲区,并将所有缓冲的数据写入文件
执行类型GetBinaryTypeA执行类型(文件名,@类别)判断文件是否可以执行,类别收到文件的类型.返回0不可执行
压缩大小GetCompressedFileSizeA大小=压缩大小(文件名,@长度)获取压缩文件的大小,未压缩为实际大小.长度为高32位,大小为低32位
文件属性GetFileAttributesA属性=文件属性(文件名)获得指定文件或目录的属性
文件大小GetFileSize大小=文件大小(文件,@长度)获取已打开文件的大小,长度为高32位,返回大小为低32位
文件日期GetFileTime文件日期(文件,@创建,@访问,@写入)获取已打开文件的各项日期,不需要的参数可以为0
文件类型GetFileTypet=文件类型(文件)返回指定文件的类型,0未知,1磁盘文件,2控制台,3管道
全路径名GetFullPathNameA长度=全路径名(文件名,长度,@路径,@名称)检索指定文件的完整路径和文件名。
长路径名GetLongPathNameA长度=长路径名(短名,@长名,长度)获取指定文件路径的长路径形式
短路径名GetShortPathNameA短路径名(长路径,@短路径,大小)检索指定路径的短路径形式。
文目属性GetFileAttributesExA文目属性(名称,0,@信息)检索指定文件或目录的属性。
开件属性GetFileInformationByHandle开件属性(文件,@信息)检索指定文件句柄的文件信息。
文件取名GetTempFileNameA文件取名(目录,前缀,唯一,@名称)创建临时文件的名称。如果唯一为零,文件存在会增加数字直到不存在。
临时目录GetTempPathA临时目录(大小,@目录)检索为临时文件指定的目录的路径。
端口队列GetQueuedCompletionStatus端口队列(端口,@长度,@键值,@重叠类,超时)尝试从指定的 I/O 完成端口等待挂起取消对 I/O 完成数据包的排队。
端口发布PostQueuedCompletionStatus端口发布(端口,长度,键值,重叠类)将 I/O 完成数据包发布到 I/O 完成端口。
锁定文件LockFile锁定文件(文件,位置低,位置高,长度低,长度高)锁定打开文件中的区域。防止其他进程访问该区域
锁住文件LockFileEx锁住文件(文件,标志,0,长度低,长度高,重叠类)通过调用进程锁定指定的文件以供独占访问。标志:0共享锁,1不等待,2共享锁
解锁文件UnlockFile解锁文件(文件,位置低,位置高,长度低,长度高)解锁打开文件中的区域。允许其他进程访问该区域
解开文件UnlockFileEx解开文件(文件,0,长度低,长度高,重叠类)解锁打开文件中的区域。此函数可以同步或异步运行。
移动文件MoveFileA移动文件(原名,新名)原名文件不存在时,移动一个文件或目录,存在时改名.都存在或都不存在则出错
转移文件MoveFileExA转移文件(名称,新名,标志)使用各种移动选项移动现有文件或目录,包括其子级。
传送文件MoveFileWithProgressA传送文件(名称,新名,回调,附加,标志)移动文件或目录,包括其子级。可以提供接收进度通知的回调函数
移动事务MoveFileTransactedA移动事务(名称,新名,回调,附加,标志,事务)移动文件或目录包括其子级作为事务处理操作移动。可以提供接收进度通知的回调函数
打开文件OpenFile打开文件(名称,@信息,文件执行操作">操作)创建、打开、重新打开或删除文件。
读取文件ReadFile读取文件(文件,内容,长度,@已读,重叠类)从文件指针所指定的位置开始读取数据
读入文件ReadFileEx读入文件(文件,内容,长度,重叠类,回调)异步方式从文件指定的位置开始读取数据,通过指定完成例程报告可警报等待完成状态。
写入文件WriteFile写入文件(文件,内容,长度,@已读,重叠类)向文件指针所指定的位置开始写入数据
写出文件WriteFileEx写出文件(文件,内容,长度,重叠类,回调)异步方式向文件指定的位置开始写入数据,通过指定完成例程报告可警报等待完成状态。
修改属性SetFileAttributesA修改属性(路径,属性)修改指定文件或目录的属性
读文件组ReadFileScatter读文件组(文件,数组,大小,0,重叠类)从文件读取数据并将其存储在缓冲区数组中。
写文件组WriteFileGather写文件组(文件,数组,大小,0,重叠类)从缓冲区数组检索数据并将数据写入文件。
文件定位SetFilePointer文件定位(文件,位置,高位,方向)方向0开头,1当前,2结尾
文件改时SetFileTime文件改时(文件,创建时间,最后访问,上次写入)修改已打开文件的各项日期,不需要的参数可以为0
结尾文件SetEndOfFile结尾文件(文件)将指定文件的文件末尾(EOF)位置移动到文件指针的当前位置
坐标值
中文名字英文名称长度作用解释
坐标值COORD4用来存储16位坐标位置的信息
坐标值——成员表
中文英文类型作用解释
x整形水平坐标位置。
y整形垂直坐标位置。
查找文件类
中文名字英文名称长度作用解释
查找文件类FINDDATA318用来获取文件名称和时间等属性。
查找文件类——成员表
中文英文类型作用解释
属性dwFileAttributes整数表示文件的属性:$20(存档)、2(隐藏)、$80(正常)
1(只读)、$10(文件夹)、4(系统)$100(临时)
创建时间ftCreationTime.dwLowDateTime整数文件被创建的时间
创建高位ftCreationTime.dwHighDateTime整数创建时间的高位。
最后访问ftLastAccessTime.dwLowDateTime整数最后一次访问的时间
访问高位ftLastAccessTime.dwHighDateTime整数最后访问时间的高位
最后修改ftLastWriteTime.dwLowDateTime整数最后一次修改的时间
修改高位ftLastWriteTime.dwHighDateTime整数最后修改时间的高位
大小nFileSizeHigh整数文件大小的高位
长度nFileSizeLow整数文件大小的低位
预留1dwReserved0整数保留占位
预留2dwReserved1整数保留占位
名称cFileName文本260字节长度的文件名称
备用名cAlternateFileName文本14字节长度的备用文件名
文件传输回调
中文名字英文名称长度作用解释
文件传输回调LpoverlappedCompletionRoutine3当异步输入和输出 (I/O) 操作完成或取消,并且调用线程处于可警报状态
文件传输回调——参数表
状态dwErrorCode整数I/O 完成状态。
已传dwNumberOfBytesTransfered整数已传输的字节数。 如果发生错误,此参数为零。
数据lpOverlapped整数指向异步 I/O 函数指定的 重叠类 结构的指针。
复制进度
中文名字英文名称参数作用解释
复制进度CopyProgressRoutine 9 当复制或移动操作的一部分完成时,将调用它。
复制进度 参数表
中文英文类型作用解释
总大小TotalFileSize整数文件的总大小(以字节为单位)。
总传送TotalBytesTransferred整数自复制操作开始以来从源文件传输到目标文件的字节总数。
流大小StreamSize整数当前文件流的总大小(以字节为单位)。
流传送StreamBytesTransferred整数自复制操作开始以来,当前流中从源文件传输到目标文件的字节总数。
流号dwStreamNumber整数当前流的句柄。 首次调用时,流号为 1。
原因dwCallbackReason整数0=复制了数据文件的另一部分。1=另一个流已创建,即将复制。
源文件hSourceFile整数源文件的句柄。
目标hDestinationFile整数目标文件的句柄
附加hDestinationFile整数传递的附加参数
复制进度返回值
英文名称参数作用解释
PROGRESS_CANCEL1取消复制操作并删除目标文件。
PROGRESS_CONTINUE0继续复制操作。
PROGRESS_QUIET3继续复制操作,但停止调用 复制进度 来报告进度。
PROGRESS_STOP2停止复制操作。 它可以在以后重新启动。
文件属性类
中文名字英文名称长度作用解释
文件属性类WIN32_FILE_ATTRIBUTE_DATA32包含文件或目录的属性信息。
文件属性类——成员表
中文英文类型作用解释
属性dwFileAttributes整数表示文件的属性:$20(存档)、2(隐藏)、$80(正常)
1(只读)、$10(文件夹)、4(系统)$100(临时)
创建时间ftCreationTime.dwLowDateTime整数文件被创建的时间
创建高位ftCreationTime.dwHighDateTime整数创建时间的高位。
最后访问ftLastAccessTime.dwLowDateTime整数最后一次访问的时间
访问高位ftLastAccessTime.dwHighDateTime整数最后访问时间的高位
最后修改ftLastWriteTime.dwLowDateTime整数最后一次修改的时间
修改高位ftLastWriteTime.dwHighDateTime整数最后修改时间的高位
大小nFileSizeHigh整数文件大小的高位
长度nFileSizeLow整数文件大小的低位
开件属性类
中文名字英文名称长度作用解释
开件属性类BY_HANDLE_FILE_INFORMATION44包含文件或目录的属性信息。
开件属性类——成员表
中文英文类型作用解释
属性dwFileAttributes整数表示文件的属性:$20(存档)、2(隐藏)、$80(正常)
1(只读)、$10(文件夹)、4(系统)$100(临时)
创建时间ftCreationTime.dwLowDateTime整数文件被创建的时间
创建高位ftCreationTime.dwHighDateTime整数创建时间的高位。
最后访问ftLastAccessTime.dwLowDateTime整数最后一次访问的时间
访问高位ftLastAccessTime.dwHighDateTime整数最后访问时间的高位
最后修改ftLastWriteTime.dwLowDateTime整数最后一次修改的时间
修改高位ftLastWriteTime.dwHighDateTime整数最后修改时间的高位
大小nFileSizeHigh整数文件大小的高位
长度nFileSizeLow整数文件大小的低位
链接数nNumberOfLinks整数指向此文件的链接数。对于 FAT 文件系统,此成员始终为 1。对于 NTFS 文件系统,它可以超过 1。
标识高位nFileIndexHigh整数与文件关联的唯一标识符的高阶部分。
标识低位nFileIndexLow整数与文件关联的唯一标识符的低序部分。
可执行文件类型
英文名称数值作用解释
SCS_32BIT_BINARY0基于 32 位 Windows 的应用程序
SCS_64BIT_BINARY6基于 64 位 Windows 的应用程序。
SCS_DOS_BINARY1基于 MS-DOS 的应用程序
SCS_OS216_BINARY5基于 16 位 OS/2 的应用程序
SCS_PIF_BINARY3执行基于 MS-DOS 的应用程序的 PIF 文件
SCS_POSIX_BINARY4基于 POSIX 的应用程序
SCS_WOW_BINARY2基于 16 位 Windows 的应用程序
打开文件类
中文名字英文名称长度作用解释
打开文件类OFSTRUCT136包含有关 打开文件 函数打开的或尝试打开的文件的信息。
复制文件类——成员表
中文英文类型作用解释
大小cBytes字节结构的大小(以字节为单位)。
硬盘fFixedDisk字节如果此成员为非零,则该文件位于固定磁盘 (硬) 。 否则就不是架构拥有的。
错误nErrCode整形如果 打开文件 函数失败,则返回 MS-DOS 错误代码。
预留Reserved1整形保留值;请勿使用。
备用Reserved2整形保留值;请勿使用。
名称szPathName[OFS_MAXPATHNAME]文本文件的路径和文件名。
文件执行操作
英文名称数值作用解释
OF_CANCEL0x00000800已忽略。若要生成包含 “取消 ”按钮的对话框,请使用 OF_PROMPT。
OF_CREATE0x00001000创建新文件。如果文件存在,则将其截断为零, (0) 长度。
OF_DELETE0x00000200删除文件。
OF_EXIST0x00004000打开一个文件,然后将其关闭。使用它来测试文件是否存在。
OF_PARSE0x00000100填充 OFSTRUCT 结构,但不执行任何其他操作。
OF_PROMPT0x00002000如果请求的文件不存在,则显示一个对话框。对话框通知用户系统找不到文件,其中包含 “重试” 和“ 取消 ”按钮。 “ 取消 ”按钮指示 OpenFile 返回找不到文件的错误消息。
OF_READ0x00000000打开文件以供只读。
OF_READWRITE0x00000002使用读/写权限打开文件。
OF_REOPEN0x00008000使用重新打开缓冲区中的信息打开文件。
OF_SHARE_COMPAT0x00000000对于基于 MS-DOS 的文件系统,使用兼容模式打开文件,允许指定计算机上的任何进程打开文件任意次数。使用其他共享模式打开文件的其他工作失败。 此标志映射到 CreateFile 函数的|FILE_SHARE_READ FILE_SHARE_WRITE标志。
OF_SHARE_DENY_NONE0x00000040在不拒绝对其他进程的读取或写入访问权限的情况下打开文件。在基于 MS-DOS 的文件系统上,如果该文件已被任何其他进程以兼容模式打开,则函数将失败。此标志映射到 CreateFile 函数的|FILE_SHARE_READ FILE_SHARE_WRITE标志。
OF_SHARE_DENY_READ0x00000030打开文件并拒绝对其他进程的读取访问权限。在基于 MS-DOS 的文件系统上,如果文件已在兼容模式下打开,或者由任何其他进程进行读取访问,则函数将失败。此标志映射到 CreateFile 函数的 FILE_SHARE_WRITE 标志。
OF_SHARE_DENY_WRITE0x00000020打开文件并拒绝对其他进程的写入访问权限。在基于 MS-DOS 的文件系统上,如果某个文件已在兼容模式下打开,或者由任何其他进程进行写入访问,则函数将失败。此标志映射到 CreateFile 函数的 FILE_SHARE_READ 标志。
OF_SHARE_EXCLUSIVE0x00000010使用独占模式打开文件,并拒绝对其他进程的读/写访问。如果文件已以任何其他模式打开进行读/写访问,即使当前进程也是如此,则函数会失败。
OF_VERIFY0x00000400验证文件的日期和时间是否与之前打开的时间相同。这对于只读文件的额外检查非常有用。
OF_WRITE0x00000001只是为了进行写入访问而打开文件。
复制文件类
中文名字英文名称长度作用解释
复制文件类COPYFILE2_EXTENDED_PARAMETERS20包含文件或目录的属性信息。
复制文件类——成员表
中文英文类型作用解释
大小dwSize整数结构的大小(以字节为单位)。
标志dwCopyFlags整数包含零个或多个这些标志值的组合。
取消pfCancel整数如果在复制操作期间将此标志设置为 真 ,则取消复制操作。
回调pProgressRoutine整数回调函数的可选地址,每次复制文件的另一部分时调用该函数。
附加pvCallbackContext整数传递给回调函数的应用程序特定上下文信息的指针。
复制进度回调
中文名字英文名称参数作用解释
复制进度回调Pcopyfile2ProgressRoutine 2 与 CopyFile2 函数一起使用的应用程序定义回调函数。 当复制或移动操作的一部分完成时,将调用它。
复制进度回调 参数表
中文英文类型作用解释
信息pMessage整数指向 复制信息 结构的指针。
附加pvCallbackContext整数传递给回调函数的应用程序特定上下文信息的副本。
文件复制标志
英文名称数值作用解释
COPY_FILE_FAIL_IF_EXISTS0x00000001如果目标文件存在,则复制操作将立即失败。 如果存在具有目标名称的文件或目录,则 CopyFile2 函数调用将失败并出现 HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS) 或 HRESULT_FROM_WIN32(ERROR_FILE_EXISTS)。 如果还指定 了COPY_FILE_RESUME_FROM_PAUSE ,则仅当目标文件没有有效的重启标头时才会触发失败。
COPY_FILE_RESTARTABLE0x00000002如果再次使用相同的源文件名和目标文件名,则复制文件的方式可以重启。 速度较慢。
COPY_FILE_OPEN_SOURCE_FOR_WRITE0x00000004复制该文件,并打开源文件以获取写入访问权限。
COPY_FILE_ALLOW_DECRYPTED_DESTINATION0x00000008即使无法加密目标文件,也会尝试复制。
COPY_FILE_COPY_SYMLINK0x00000800如果源文件是符号链接,则目标文件也是指向与源符号链接相同的文件的符号链接。
COPY_FILE_NO_BUFFERING0x00001000复制是使用未缓冲的 I/O 执行的,绕过系统缓存资源。 对于非常大的文件副本,建议使用此标志。 不建议暂停使用此标志的副本。
COPY_FILE_REQUEST_SECURITY_PRIVILEGES0x00002000尝试复制,并指定 ACCESS_SYSTEM_SECURITY 源文件和 ACCESS_SYSTEM_SECURITY \| WRITE_DAC \| WRITE_OWNER 目标文件。 如果拒绝这些请求,则访问请求将降低到授予访问权限的最高特权级别。 有关详细信息,请参阅 SACL 访问权限。 这可用于允许 CopyFile2ProgressRoutine 回调执行需要更高特权的操作,例如复制文件的安全属性。
COPY_FILE_RESUME_FROM_PAUSE0x00004000检查目标文件以查看它是否使用 COPY_FILE_RESTARTABLE复制。 如果是这样,则恢复复制。 否则,将完全复制文件。
COPY_FILE_NO_OFFLOAD0x00040000请勿尝试使用 Windows 复制卸载机制。 通常不建议这样做。
COPY_FILE_IGNORE_EDP_BLOCK0x00400000如果目标文件系统支持,则应在目标上复制和加密文件,而不是阻止该文件。 在 Windows 10 及更高版本上受支持。
COPY_FILE_IGNORE_SOURCE_ENCRYPTION0x00800000忽略源文件的加密状态。 在 Windows 10 及更高版本上受支持。
COPY_FILE_DONT_REQUEST_DEST_WRITE_DAC0x02000000不要请求目标文件访问WRITE_DAC。 在 Windows 10 及更高版本上受支持。
COPY_FILE_OPEN_AND_COPY_REPARSE_POINT0x00200000无论类型如何,始终复制重新分析点。 调用方有责任了解重新分析点的含义。 支持Windows 10版本 19041 及更高版本。
COPY_FILE_DIRECTORY0x00000080指示源文件是目录文件。 如果提供 ,则使用 FILE_OPEN_FOR_BACKUP_INTENT打开源文件。 目录文件将具有其备用数据流、重新分析点信息和像普通文件一样复制的 CA。 在 Windows 10 版本 19041 及更高版本中受支持。
COPY_FILE_SKIP_ALTERNATE_STREAMS0x00008000请勿复制备用数据流。 在 Windows 10 版本 19041 及更高版本中受支持。
COPY_FILE_DISABLE_PRE_ALLOCATION0x04000000在执行复制之前,请勿预先分配目标文件大小。 在 Windows 10 版本 19041 及更高版本中受支持。
COPY_FILE_ENABLE_LOW_FREE_SPACE_MODE0x08000000启用 LowFreeSpace 模式。 不使用重叠的 I/O。 不会尝试 ODX 和 SMB 卸载。 在 Windows 10 版本 19041 及更高版本中受支持。
COPY_FILE_REQUEST_COMPRESSED_TRAFFIC0x10000000请求基础传输通道在复制操作期间压缩数据。 并非所有媒体都支持请求,在这种情况下,它将被忽略。 压缩属性和参数 (计算复杂性、内存使用情况) 无法通过此 API 进行配置,并且可能会在不同的 OS 版本之间发生更改。 在 Windows Server 2022 和 Windows 10 内部版本 1903 及更高版本中受支持。 (Windows 10 上,驻留在 SMB 共享上的文件支持标志,其中协商的 SMB 协议版本为 SMB v3.1.1 或更高版本。)
COPY_FILE_ENABLE_SPARSE_COPY0x20000000在复制期间启用保留文件的稀疏状态。 在 Windows 11 版本 22H2 及更高版本中受支持。
重叠类
中文名字英文名称长度作用解释
重叠类OVERLAPPED20包含用于异步 (或 重叠) 输入和输出 (I/O) 的信息。
重叠类 成员表
中文英文类型作用解释
状态Internal整数I/O 请求的状态代码。发出请求时,系统会将此成员设置为 STATUS_PENDING 以指示操作尚未启动。
长度InternalHigh整数为 I/O 请求传输的字节数。 如果请求完成且未出错,系统会设置此成员。
位置Offset整数启动 I/O 请求的文件位置的低顺序部分,由用户指定。
偏移OffsetHigh整数要启动 I/O 请求的文件位置的高序部分,由用户指定。
事件hEvent整数事件的句柄,该句柄将在操作完成后由系统设置为信号状态。
移动文件标志
英文名称数值作用解释
MOVEFILE_COPY_ALLOWED2如果要将文件移动到其他卷,该函数将使用 CopyFile 和 DeleteFile 函数模拟移动。 如果文件已成功复制到其他卷,并且无法删除原始文件,则函数会成功使源文件保持不变。 此值不能与 MOVEFILE_DELAY_UNTIL_REBOOT 一起使用。
MOVEFILE_CREATE_HARDLINK0x10保留供将来使用。
MOVEFILE_DELAY_UNTIL_REBOOT4 在重新启动操作系统之前,系统不会移动文件。 系统在执行 AUTOCHK 之后、创建任何分页文件之前立即移动文件。 因此,此参数使 函数能够从以前的启动中删除分页文件。 仅当进程位于属于管理员组或 LocalSystem 帐户的用户的上下文中时,才能使用此值。 此值不能与 MOVEFILE_COPY_ALLOWED一起使用。
MOVEFILE_FAIL_IF_NOT_TRACKABLE0x20 如果源文件是链接源,则函数失败,但在移动后无法跟踪该文件。 如果目标是使用 FAT 文件系统格式化的卷,则可能会出现这种情况。
MOVEFILE_REPLACE_EXISTING1 如果存在名为 lpNewFileName 的文件,则函数会将其内容替换为 lpExistingFileName 文件的内容,前提是满足有关访问控制列表 (ACL) 的安全要求。 有关详细信息,请参阅本主题的“备注”部分。 如果 lpNewFileName 命名现有目录,则报告错误。
MOVEFILE_WRITE_THROUGH8在磁盘上实际移动文件之前, 函数不会返回 。 设置此值可确保作为复制和删除操作执行的移动在函数返回之前刷新到磁盘。 刷新发生在复制操作结束时。 如果设置了 MOVEFILE_DELAY_UNTIL_REBOOT ,则此值无效。
复制文件标志
英文名称数值作用解释
COPY_FILE_ALLOW_DECRYPTED_DESTINATION0x00000008即使无法加密目标复制,复制加密文件也会成功。
COPY_FILE_COPY_SYMLINK0x00000800如果源文件是符号链接,则目标文件也是指向源符号链接所指向的同一文件的符号链接。
COPY_FILE_FAIL_IF_EXISTS0x00000001如果目标文件已存在,则复制操作会立即失败。
COPY_FILE_NO_BUFFERING0x00001000复制操作使用未缓冲的 I/O 执行,绕过系统 I/O 缓存资源。 建议用于非常大的文件传输。
COPY_FILE_OPEN_SOURCE_FOR_WRITE0x00000004复制该文件,并打开原始文件进行写入访问。
COPY_FILE_RESTARTABLE0x00000002复制进度在目标文件中跟踪,以防复制失败。
COPY_FILE_REQUEST_COMPRESSED_TRAFFIC0x10000000请求基础传输通道在复制操作期间压缩数据。
文件更改通知条件
英文名称数值作用解释
FILE_NOTIFY_CHANGE_FILE_NAME0x00000001对受监视的目录或子树中文件名的任意更改都会导致返回一个更改通知等待操作。 这些更改包括重命名、创建或删除文件名。
FILE_NOTIFY_CHANGE_DIR_NAME0x00000002受监视目录或子树中的任何目录名称更改都会导致更改通知等待操作返回。 更改包括创建或删除目录。
FILE_NOTIFY_CHANGE_ATTRIBUTES0x00000004对受监视的目录或子树中属性的任意更改都会导致返回一个更改通知等待操作。
FILE_NOTIFY_CHANGE_SIZE0x00000008对受监视的目录或子树中文件大小的任意更改都会导致返回一个更改通知等待操作。 仅当文件写入磁盘时,操作系统才会检测文件大小的更改。 对于使用大量缓存的操作系统,仅当缓存充分刷新时,才会进行检测。
FILE_NOTIFY_CHANGE_LAST_WRITE0x00000010对受监视的目录或子树中文件的上次写入时间的任意更改都会导致返回一个更改通知等待操作。 仅当文件写入磁盘时,操作系统才会检测上次写入时间的更改。 对于使用大量缓存的操作系统,仅当缓存充分刷新时,才会进行检测。
FILE_NOTIFY_CHANGE_SECURITY0x00000100监视目录或子树中的任何安全描述符更改都会导致更改通知等待操作返回。
文件查找级别
英文名称数值作用解释
FindExInfoStandard0检索标准属性信息集。数据返回查找文件类 结构。
FindExInfoBasic1不查询短文件名,从而提高了整体枚举速度。 数据返回查找文件类 结构和 备用名
FindExInfoMaxInfoLevel2此值用于验证。支持的值小于此值。
文件查找匹配
英文名称数值作用解释
FindExSearchNameMatch0搜索与指定文件名匹配的文件。条件参数为空
FindExSearchLimitToDirectories1如果文件系统支持目录筛选,则函数将搜索与指定名称匹配且也是目录的文件。否则会以无提示方式忽略此标志。条件参数为空
FindExSearchLimitToDevices2此筛选类型不可用。
FindExSearchMaxSearchOp3此值用于验证。不可用。
文件查找选项
英文名称数值作用解释
FIND_FIRST_EX_CASE_SENSITIVE1搜索区分大小写。
FIND_FIRST_EX_LARGE_FETCH2对目录查询使用更大的缓冲区,这可以提高查找操作的性能。
FIND_FIRST_EX_ON_DISK_ENTRIES_ONLY4将结果限制为物理位于磁盘上的文件。 仅当存在文件虚拟化筛选器时,此标志才相关。
文件映射——使用示例
文件映射 是文件内容与进程的一部分虚拟地址空间的关联。 系统创建 文件映射对象 (也称为 节对象) 来维护此关联。
文件视图是进程用来访问文件内容的虚拟地址空间部分。 文件映射允许进程使用随机输入和输出 (I/O) 和顺序 I/O。
它还允许进程高效处理大型数据文件(如数据库),而无需将整个文件映射到内存中。 多个进程还可以使用内存映射文件来共享数据。
处理使用指针从文件视图读取和写入文件视图的过程,就像使用动态分配的内存一样。 使用文件映射可提高效率,因为文件驻留在磁盘上,但文件视图驻留在内存中。
进程还可以使用 虚拟保护 函数操作文件视图。下图显示了磁盘上的文件、文件映射对象和文件视图之间的关系。
磁盘上的文件、文件映射对象和文件视图之间的关系。
磁盘上的文件可以是要映射到内存中的任何文件,也可以是系统页文件。 文件映射对象可以包含文件的全部或部分。 它由磁盘上的 文件提供支持。
这意味着,当系统交换文件映射对象的页时,对文件映射对象所做的任何更改都将写入文件。 当文件映射对象的页面交换回时,它们将从 文件还原。
文件视图可以包含文件映射对象的全部或部分内容。 一个进程通过文件视图操作文件。 进程可以为文件映射对象创建多个视图。
每个进程创建的文件视图驻留在该进程的虚拟地址空间中。 当进程需要来自当前文件视图中的某个文件部分的数据时,它可以取消映射当前文件视图,然后创建新的文件视图。
当多个进程使用相同的文件映射对象为本地文件创建视图时,数据是一致的。 也就是说,视图包含磁盘上文件的相同副本。 如果要在多个进程之间共享内存,则文件不能驻留在远程计算机上。

创建文件映射对象

映射文件的第一步是通过调用 创建文件 函数打开文件。 若要确保其他进程无法写入映射的文件部分,应以独占访问权限打开文件。
此外,文件句柄应保持打开状态,直到进程不再需要文件映射对象。 获取独占访问权限的一种简单方法是在 创建文件 的 共享 参数中指定零。
映射文件 函数返回文件映射对象的句柄。创建文件视图时将使用此句柄,以便可以访问共享内存。 调用 映射文件 时,可以指定对象名称、要从文件映射的字节数,
以及映射内存的读/写权限。调用 映射文件 的第一个进程创建文件映射对象。 为现有对象调用 映射文件 的进程会收到现有对象的句柄。
可以通过调用 最后错误 函数来判断对 映射文件 的成功调用是否创建或打开了文件映射对象。 最后错误 将 0 返回到创建进程, 并将183 返回到后续进程。
如果访问标志与 创建文件 函数打开文件时指定的标志冲突, 映射文件 函数将失败。 例如,若要读取和写入文件,请执行以下操作:
在 创建文件 的 读写 参数中指定读(0x80000000)和写(0x40000000)值。0xC0000000
在 映射文件 的 页保护 参数中指定4值。
创建文件映射对象不会提交物理内存,只保留它。
文件映射大小
文件映射对象的大小与所映射的文件的大小无关。 但是,如果文件映射对象大于文件,系统会在 映射文件 返回之前扩展该文件。 如果文件映射对象小于文件,则系统仅映射文件中的指定字节数。
映射文件 的 高数 和 低数 参数允许您指定要从文件映射的字节数:
如果不希望文件大小更改 (例如,将只读文件映射) 时,请调用 映射文件 并为 高数 和 低数 指定零。 执行此操作会创建与文件完全相同的文件映射对象。
否则,必须计算或估计完成文件的大小,因为文件映射对象的大小是静态的;创建后,无法增加或减少其大小。 尝试以这种方式映射长度为零的文件失败,错误代码 为 1006。 程序应测试长度为零的文件,并拒绝此类文件。
由命名文件支持的文件映射对象的大小受磁盘空间限制。 文件视图的大小限制为未保留虚拟内存的最大可用连续块。 这最多为 2 GB 减去进程已保留的虚拟内存。
所选文件映射对象的大小控制了使用内存映射“查看”到文件的距离。 如果创建大小为 500 Kb 的文件映射对象,则无论文件大小如何,您都只能访问该文件的前 500 Kb。
由于创建更大的文件映射对象不会花费任何系统资源,因此创建文件映射对象的大小 (将 映射文件 的 高数 和 低数 参数设置为零) 即使不希望查看整个文件。 系统资源的成本来自创建视图并访问它们。

创建文件视图

若要将数据从文件映射到进程的虚拟内存,必须创建文件的视图。 映射进程 和 映射空间 函数使用 映射文件 返回的文件映射对象句柄
在进程的虚拟地址空间中创建文件视图或文件的一部分。 如果访问标志与 映射文件 创建文件映射对象时指定的访问标志冲突,则这些函数失败。
映射进程 函数返回指向文件视图的指针。 通过取消引用 映射进程 中指定的地址范围内的指针,应用程序可以从文件读取数据并将数据写入文件。
写入文件视图会导致对文件映射对象进行更改。 对磁盘上的文件的实际写入由系统处理。 在写入文件映射对象时,实际上不会传输数据。
而是缓存大部分文件输入和输出 (I/O) 以提高一般系统性能。 应用程序可以通过调用 刷新映射 函数来替代此行为,以强制系统立即执行磁盘事务。
映射空间 函数的工作方式与 映射进程 函数完全相同,只不过它允许进程在 基址 参数的虚拟地址空间中指定文件视图的基址。
如果指定地址没有足够的空间,则调用将失败。 因此,如果必须将文件映射到多个进程中的同一地址,则进程应协商相应的地址:
基址 参数必须是系统内存分配粒度的整数倍数,否则调用将失败。 若要获取系统的内存分配粒度,请使用 系统信息 函数,该函数填充 系统信息类 结构的成员。
应用程序可以从同一文件映射对象创建多个文件视图。 文件视图的大小可以不同于派生它所基于的文件映射对象,但它必须小于文件映射对象。
映射进程 的 高数 和 低数 参数指定的偏移量必须是系统分配粒度的倍数。

共享文件和内存

文件映射可用于在两个或多个进程之间共享文件或内存。 若要共享文件或内存,所有进程都必须使用同一文件映射对象的名称或句柄。
若要共享文件,第一个进程使用 创建文件 函数创建或打开文件。 接下来,它通过使用 映射文件 函数创建文件映射对象,指定文件句柄和文件映射对象的名称。
事件、信号量、互斥体、可等待计时器、作业和文件映射对象的名称共享同一命名空间。 因此, 如果 映射文件 和 打开映射 函数指定了由另一种类型的对象使用的名称,则它们将失败。
若要共享与文件无关的内存,进程必须使用 映射文件 函数,并将 文件 参数指定为-1,而不是现有文件句柄,大小为零。 相应的文件映射对象访问系统分页文件支持的内存。
其他进程获取由第一个进程创建的文件映射对象的句柄的最简单方法是使用 打开映射 函数并指定对象的名称。 这称为 命名共享内存。
如果文件映射对象没有名称,则进程必须通过继承或重复获取它的句柄。 有关继承和重复的详细信息,请参阅 继承
共享文件或内存的进程必须使用 映射进程 或 映射空间 函数创建文件视图。 它们必须使用信号灯、互斥体、事件或其他一些互斥技术来协调其访问。 有关详细信息,请参阅 同步。
在使用该共享文件映射对象的所有进程使用 关闭对象 函数关闭其句柄之前,不会销毁共享文件映射对象。

从文件视图读取和写入

若要从文件视图读取数据,请取消引用 映射进程 函数返回的指针,如以下示例所示。
从页面文件以外的文件视图读取或写入文件可能会导致 0xC0000006 异常。 例如,如果与服务器的连接断开,则访问驻留在远程服务器上的映射文件可能会生成异常。
由于磁盘已满、基础设备故障或内存分配失败,也可能发生异常。 为了防止输入和输出 (I/O) 错误导致的异常,所有访问内存映射文件的尝试都应包装在结构化异常处理程序中。
在收到 0xC0000006 时,请确保地址位于当前正在访问的映射中。 如果是,请正常恢复或失败;否则,不处理异常。

关闭文件映射对象

当进程完成文件映射对象后,它应通过使用每个文件视图的 取消映射 函数来销毁其地址空间中的所有文件视图。
取消映射文件的映射视图会使视图在进程的地址空间中占用的范围失效,并使该范围可用于其他分配。 它删除属于进程工作集的每个未映射虚拟页面的工作集条目,并减小进程的工作集大小。
未映射视图中修改的页面在共享计数达到零之前不会写入磁盘,或者换而言之,直到从共享页面的所有进程的工作集中取消映射或剪裁这些页面。即便如此,修改后的页面也会“懒洋洋地”写入磁盘:
也就是说,修改可以在内存中缓存,并在以后写入磁盘。 为了在电源故障或系统崩溃时最大程度地降低数据丢失的风险,应用程序应使用 刷新映射 函数显式刷新修改后的页面。
当每个进程使用完文件映射对象并取消映射所有视图时,它必须通过调用 关闭对象 关闭文件映射对象的句柄和磁盘上的文件。
即使有文件视图仍处于打开状态,这些对 关闭对象 的调用也会成功。 但是,将文件视图保留为映射会导致内存泄漏。
文件映射 ——相关函数
中文名称英文名称示例作用
关闭映射CloseProfileUserMapping关闭映射关闭所有与初始化文件映射有关的登记键的句柄
映射文件CreateFileMappingA映射文件(文件,安全,页保护,高数,低数,名称)为指定文件创建或打开命名或未命名的文件映射对象。
刷新映射FlushViewOfFile刷新映射(基址,长度)将文件映射视图中的字节范围写入磁盘。
映射进程MapViewOfFile映射进程(映射,访问,高数,低数,大小)将文件映射的视图映射到调用进程的地址空间。
映射空间MapViewOfFileEx映射空间(映射,访问,高数,低数,大小,基址)将文件映射的视图映射到调用进程的地址空间。
映射节点MapViewOfFileExNuma映射节点(映射,访问,高数,低数,大小,基址,节点)将映射的文件视图映射到调用进程的地址空间中,并指定物理内存的 NUMA 节点。
取消映射UnmapViewOfFile取消映射(基址)从调用进程的地址空间中取消映射文件的映射视图。
打开映射OpenFileMappingA打开映射(访问,继承,映射名)打开命名文件映射对象。
映射访问类型
对文件映射对象的访问类型,该对象确定页面的页面保护。
英文名称数值作用解释
此参数可以是以下值之一,也可以是多个值的按位 OR 组合。
FILE_MAP_ALL_ACCESS0xF001F映射文件的读/写视图。 文件映射对象必须已创建 PAGE_READWRITE 或 PAGE_EXECUTE_READWRITE 保护。
FILE_MAP_READ0x0004映射文件的只读视图。 尝试写入文件视图会导致访问冲突。创建文件映射对象时必须具有 PAGE_READONLY、 PAGE_READWRITE、 PAGE_EXECUTE_READ或 PAGE_EXECUTE_READWRITE 保护。
FILE_MAP_WRITE0x0002映射文件的读/写视图。 文件映射对象必须已创建 PAGE_READWRITE 或 PAGE_EXECUTE_READWRITE 保护。
使用按位 OR,可以将上述值与这些值组合在一起。
FILE_MAP_COPY1映射文件的写入时复制视图。 文件映射对象必须已使用 PAGE_READONLY、 PAGE_READ_EXECUTE、 PAGE_WRITECOPY、 PAGE_EXECUTE_WRITECOPY、 PAGE_READWRITE或 PAGE_EXECUTE_READWRITE 保护创建。 当进程写入写入时复制页时,系统会将原始页面复制到进程专用的新页。 新页面由分页文件提供支持。 对新页面的保护从写入时复制更改为读/写。 指定写入时复制访问权限时,系统将和进程提交费用用于整个视图,因为调用进程可能会写入视图中的每一页,从而使所有页面都成为私有页面。 新页面的内容永远不会写回到原始文件,并在取消映射视图时丢失。
FILE_MAP_LARGE_PAGES0x20000000从 Windows 10 版本 1703 开始,此标志指定应使用大页面支持映射视图。 视图的大小必须是 GetLargePageMinimum 函数报告的大型页面大小的倍数,并且文件映射对象必须已使用 SEC_LARGE_PAGES 选项创建。 如果为 lpBaseAddress 提供非 null 值,则该值必须是 GetLargePageMinimum 的倍数。
FILE_MAP_EXECUTE0x0020映射文件的可执行视图 (映射的内存可以作为代码) 运行。 创建文件映射对象时必须具有 PAGE_EXECUTE_READ、 PAGE_EXECUTE_WRITECOPY或 PAGE_EXECUTE_READWRITE 保护。 Windows Server 2003 和 Windows XP: 此值从 Windows XP SP2 和 Windows Server 2003 SP1 开始可用。
FILE_MAP_TARGETS_INVALID0x40000000将映射文件中的所有位置设置为控制流防护 (CFG) 的无效目标。 此标志类似于 PAGE_TARGETS_INVALID。 将此标志与执行访问权限 FILE_MAP_EXECUTE结合使用。 对这些页面中的位置的任何间接调用都将失败 CFG 检查,并且进程将终止。 分配的可执行页面的默认行为是标记为 CFG 的有效调用目标。
页面保护类型
英文名称数值作用解释
PAGE_EXECUTE_READ0x20允许映射视图,以便进行只读、写入时复制或执行访问。必须使用GENERIC_READ创建 hFile 参数指定的文件句柄,并GENERIC_EXECUTE访问权限。
PAGE_EXECUTE_READWRITE0x40允许映射视图,以便进行只读、写入时复制、读/写或执行访问。必须使用GENERIC_READ、GENERIC_WRITE和GENERIC_EXECUTE访问权限创建 hFile 参数指定的文件句柄。
PAGE_EXECUTE_WRITECOPY0x80允许映射视图,以便进行只读、写入时复制或执行访问。必须使用 GENERIC_READ 创建 hFile 参数指定的文件句柄,并GENERIC_EXECUTE访问权限。
PAGE_READONLY0x02允许映射视图,以便进行只读或写入时复制访问。 尝试写入特定区域会导致访问冲突。必须使用GENERIC_READ访问权限创建 hFile 参数指定的文件句柄。
PAGE_READWRITE0x04允许映射视图,以便进行只读、写入时复制或读/写访问。必须使用 GENERIC_READ 创建 hFile 参数指定的文件句柄,GENERIC_WRITE访问权限。
PAGE_WRITECOPY0x08允许映射视图,以便进行只读或写入时复制访问。 此值等效于 PAGE_READONLY。必须使用GENERIC_READ访问权限创建 hFile 参数指定的文件句柄。
应用程序可以通过将以下属性与前面的页面保护值之一组合,为文件映射对象指定以下一个或多个属性。
英文名称数值作用解释
SEC_COMMIT0x8000000如果文件映射对象由操作系统分页文件提供支持, (hfile 参数 INVALID_HANDLE_VALUE) ,则指定当文件的视图映射到进程地址空间时,将提交而不是保留整个页面范围。 系统必须有足够的可提交页来保存整个映射。 否则, 映射文件 将失败。此属性对由可执行映像文件或数据文件支持的文件映射对象无效, (hfile 参数是文件) 的句柄。SEC_COMMIT 不能与 SEC_RESERVE 结合使用。
SEC_IMAGE0x1000000指定 hFile 参数指定的文件是可执行映像文件。SEC_IMAGE 属性必须与页面保护值(如 PAGE_READONLY)结合使用。 但是,此页面保护值对可执行文件的视图没有影响。 可执行文件的视图的页面保护由可执行文件本身决定。
SEC_IMAGE_NO_EXECUTE0x11000000指定 hFile 参数指定的文件是不会执行的可执行映像文件,并且加载的映像文件不会运行强制完整性检查。 此外,映射使用 SEC_IMAGE_NO_EXECUTE 属性创建的文件映射对象的视图不会调用使用 PsSetLoadImageNotifyRoutine 内核 API 注册的驱动程序回调。SEC_IMAGE_NO_EXECUTE 属性必须与PAGE_READONLY页保护值结合使用。 SEC_IMAGE_NO_EXECUTE中没有其他属性有效。在 Windows Server 2012 和 Windows 8 之前不支持此值。
SEC_LARGE_PAGES0x80000000允许将大型页面用于操作系统分页文件支持的文件映射对象, (hfile 参数 INVALID_HANDLE_VALUE) 。 由可执行映像文件或数据文件支持的文件映射对象不支持此属性, (hFile 参数是可执行映像或数据文件的句柄) 。文件映射对象的最大大小必须是 GetLargePageMinimum 函数返回的大页面最小大小的倍数。 否则, 映射文件 将失败。 映射使用 SEC_LARGE_PAGES 创建的文件映射对象的视图时,基址和视图大小也必须是最小大页面大小的倍数。
SEC_NOCACHE0x10000000将所有页面设置为不可缓存。除非设备明确需要,否则应用程序不应使用此属性。 将互锁函数 与SEC_NOCACHE映射 的内存结合使用可能会导致 EXCEPTION_ILLEGAL_INSTRUCTION 异常。SEC_NOCACHE 要求设置 SEC_RESERVE 或 SEC_COMMIT 属性。
SEC_RESERVE0x4000000如果文件映射对象由操作系统分页文件提供支持, (hfile 参数 INVALID_HANDLE_VALUE) ,则指定当文件的视图映射到进程地址空间时,将保留整个页面范围供进程以后使用,而不是提交。可以在后续调用 VirtualAlloc 函数时提交保留页。 提交页面后,无法使用 VirtualFree 函数释放或取消提交页面。此属性对由可执行映像文件或数据文件支持的文件映射对象无效, (hfile 参数是文件) 的句柄。SEC_RESERVE 不能与 SEC_COMMIT 结合使用。
SEC_WRITECOMBINE0x40000000将所有页面设置为写合并。除非设备明确需要,否则应用程序不应使用此属性。 将互锁函数 与SEC_WRITECOMBINE映射 的内存结合使用可能会导致 EXCEPTION_ILLEGAL_INSTRUCTION 异常。SEC_WRITECOMBINE 要求设置 SEC_RESERVE 或 SEC_COMMIT 属性。
原子名单——使用示例
原子表是系统定义的表,用于存储字符串和相应的标识符。Atom 表中放置一个字符串(称为 原子名称),并接收一个 16 位整数(称为 atom),该整数可用于访问该字符串。
系统提供许多原子表。 每个原子表都有不同的用途。 例如,Dynamic Data Exchange (DDE) 应用程序使用 全局 atom 表 与其他应用程序共享 item-name 和 topic-name 字符串。
DDE 应用程序将全局原子传递给其合作伙伴应用程序,而不是传递实际字符串。 伙伴使用原子从 atom 表中获取字符串。应用程序可以使用本地 Atom 表来存储其自己的项名称关联。
系统使用应用程序无法直接访问的 Atom 表。 但是,应用程序在调用各种函数时使用这些原子。 例如,注册的剪贴板格式存储在系统使用的内部 Atom 表中。
应用程序使用 注册剪板 函数将 atom 添加到此 Atom 表。 此外,已注册的类存储在系统使用的内部原子表中。 应用程序使用 注册窗类 或 注册窗体 函数将 atom 添加到此 Atom 表。

全局 Atom 表

全局 Atom 表可供所有应用程序使用。 当应用程序在全局 Atom 表中放置字符串时,系统会生成一个在整个系统中唯一的原子。 具有 atom 的任何应用程序都可以通过查询全局 atom 表来获取它标识的字符串。
定义用于与其他应用程序共享数据的专用 DDE 数据格式的应用程序应将格式名称放在全局 Atom 表中。 此技术可防止与系统或其他应用程序定义的格式的名称发生冲突,并使标识符 (原子) 其他应用程序可用的消息或格式。

用户 Atom 表

除了全局 Atom 表,用户 Atom 表是另一个系统 Atom 表,也是在所有进程之间共享的。 用户原子表用于 win32k 内部的少量方案;例如,Windows 模块名称、win32k 中的已知字符串、OLE 格式等。
尽管应用程序不直接与用户 Atom 表交互,但它们会调用多个 API(如 注册窗类 注册消息 和 注册剪板),这些 API 可将条目添加到用户 Atom 表。 添加的 注册窗类 条目可由 注销窗类 删除。
但是,在会话结束之前,不会删除 由 注册消息 和 注册剪板 添加的条目。 如果用户 Atom 表没有更多的空间,并且传入的字符串不在表中,则调用将失败。

Atom 表大小

许多关键 API(包括 创建窗口)依赖于用户原子。 因此,用户 Atom 表中的空间耗尽将导致严重问题:例如,所有应用程序都可能无法启动。
下面是一些建议,可确保应用程序有效地利用 Atom 表,并保留应用程序和系统的可靠性和性能:
1。应限制应用对用户 Atom 表的使用。 使用 API(如 注册窗类、注册消息 或 注册剪板 )存储唯一字符串会占用用户 Atom 表中的空间,其他应用全局使用该空间来使用字符串注册窗口类。
如果可能,应使用 添加名单/删除名单 将字符串存储在本地 Atom 表中,或者使用 添全名单/删全名单 (如果需要原子跨进程)。
2。如果担心应用程序会导致用户 Atom 表问题,可以通过连接内核调试器并在调用 UserAddAtomEx (bae1 win32kbase!UserAddAtomEx /p "kc10;g") 时进入进程来调查根本原因。
在调用堆栈上查找 user32! ,以查看正在调用哪个 API。 该方法类似于识别全局原子表泄漏中介绍 的全局原子表问题检测。 转储用户 Atom 表内容的另一种方法是
在从 0xC000 到 0xFFFF 的可能原子范围内调用 剪切板名 。 如果在应用程序运行时,总原子计数稳步上升,或者在关闭应用时未返回到基线,则存在问题。

本地 Atom 表

应用程序可以使用本地 Atom 表有效地管理仅在应用程序中使用的大量字符串。 这些字符串和关联的原子仅适用于创建表的应用程序。
许多结构中需要相同字符串的应用程序可以通过使用本地 Atom 表来减少内存使用量。 应用程序可以将字符串放置在 atom 表中,并将生成的原子包含在结构中,
而不是将字符串复制到每个结构中。 这样,字符串在内存中只出现一次,但可以在应用程序中多次使用。
在搜索特定字符串时,应用程序还可以使用本地 Atom 表来节省时间。 若要执行搜索,应用程序只需将搜索字符串放在 atom 表中,并将生成的原子与相关结构中的原子进行比较。
比较原子通常比比较字符串快。Atom 表作为哈希表实现。 默认情况下,本地 Atom 表对其哈希表使用 37 个存储桶。 但是,可以通过调用 初始名单 函数更改使用的存储桶数。
但是,如果应用程序调用 初始名单,则必须在调用任何其他 Atom 管理功能之前执行此操作。

Atom 类型

应用程序可以创建两种类型的原子:字符串原子和整数原子。 整数原子和字符串原子的值不重叠,因此这两种类型的原子都可以在同一代码块中使用。
多个函数接受字符串或原子作为参数。 将原子传递给这些函数时,应用程序可以使用 MAKEINTATOM 宏将原子转换为函数可以使用的形式。
以下部分介绍原子类型。

字符串 Atoms

当应用程序将以 null 结尾的字符串传递给 添全名单、添加名单、查全名单 和 查找名单 函数时,它们接收 字符串原子 (16 位整数) 返回。 字符串原子具有以下属性:
字符串原子的值在 0xC000 到0xFFFF 范围内。
在 Atom 表中搜索原子名称时,大小写并不重要。 此外,整个字符串必须在搜索操作中匹配;不执行子字符串匹配。
与字符串 Atom 关联的字符串的大小不能超过 255 个字节。 此限制适用于所有原子函数。
引用计数与每个原子名称相关联。 每次将原子名称添加到表中时,计数都会递增,并在每次从表中删除原子名称时递减。
这可以防止同一字符串 Atom 的不同用户销毁彼此的原子名称。 当原子名称的引用计数等于零时,系统会从表中删除原子和原子名称。

整数原子

整数原子与字符串原子的不同之处在于:
整数原子的值在0x0001 到 0xBFFF 的范围内。
整数原子的字符串表示形式为 #dddd,其中 dddd 表示的值是十进制数字。 忽略前导零。
没有与整数原子关联的引用计数或存储开销。

Atom 创建和使用情况计数

应用程序通过调用 添加名单 函数创建本地原子;它通过调用 添全名单 函数创建全局原子。 这两个函数都需要指向字符串的指针。 系统会在相应的 atom 表中搜索字符串,
并将相应的原子返回到应用程序。 对于字符串原子,如果字符串已驻留在 atom 表中,系统会在此过程中递增字符串的引用计数。
重复调用以添加相同的原子名称将返回相同的原子。 如果在调用 添加名单 时表中不存在原子名称,则将原子名称添加到表中,并返回新的原子。 如果它是字符串原子,则其引用计数也设置为 1。
当应用程序不再需要使用本地原子时,应调用 删除名单 函数;当它不再需要全局原子时,它应调用 删全名单 函数。
对于字符串原子,其中任一函数会将相应原子的引用计数减少 1。 当引用计数达到零时,系统会从表中删除原子名称。
只要字符串原子的引用计数大于零,字符串原子的原子名称就保留在全局原子表中,即使在将它放入表中的应用程序终止之后也是如此。
当关联的应用程序终止时,将销毁本地原子表,而不考虑表中原子的引用计数。

Atom-Table查询

应用程序可以使用 查找名单 或 查全名单 函数来确定特定字符串是否已在原子表中。 这些函数在原子表中搜索指定的字符串,如果字符串存在,则返回相应的原子。
应用程序可以使用 获取名单 或 取全名单 函数从原子表检索原子名称字符串,前提是应用程序具有与所搜索的字符串对应的原子。
这两个函数将指定原子的 atom-name 字符串复制到缓冲区,并返回复制的字符串的长度。 获取名单 从本地原子表检索原子名称字符串, 取全名单 从全局原子表检索原子名称字符串。

Atom 字符串格式

添加名单、添全名单、查找名单 和 查全名单 函数采用指向以 0 结尾的字符串的指针。 应用程序可以通过以下方式之一指定此指针。
字符串格式说明
#dddd指定为十进制字符串的整数。 用于创建或查找整数原子。
字符串 atom 名称字符串原子名称。 用于向原子表添加字符串原子名称,并接收原子作为返回。
原子名单 ——相关函数
中文名称英文名称示例作用
添加名单AddAtomA编号=添加名单("张三先生")将一个字符串[255]添加到本地原子表(程序内)中,并返回一个唯一标识
删除名单DeleteAtom删除名单(编号)从本地原子表中删除关联的字符串
查找名单FindAtomA编号=查找名单("李四")从本地原子表中查找字符串,得到标识
获取名单GetAtomNameA获取名单(编号,名称,长度)获取本地原子表中编号相对应的字符串
初始名单InitAtomTable初始名单(数量)初始化本地原子表并将其设置为指定的大小
添全名单GlobalAddAtomA编号=添全名单("张三先生")将一个字符串[255]添加到全局原子表(系统内)中,并返回一个唯一标识
删全名单GlobalDeleteAtom删全名单(编号)从全局原子表中删除关联的字符串
查全名单GlobalFindAtomA编号=查全名单("李四")从全局原子表中查找字符串,得到标识
取全名单GlobalGetAtomNameA取全名单(编号,名称,长度)获取全局原子表中编号相对应的字符串
程序资源——资源类型
英文名称数值作用类型
RT_CURSOR1依赖于硬件的游标资源。
RT_BITMAP2位图资源。
RT_ICON3依赖于硬件的图标资源。
RT_MENU4菜单资源。
RT_DIALOG5对话框。
RT_STRING6字符串表条目。
RT_FONTDIR7字体目录资源。
RT_FONT8字体资源。
RT_ACCELERATOR9快捷键表。
RT_RCDATA10应用程序定义的资源 (原始数据)。
RT_MESSAGETABLE11消息表条目。
RT_GROUP_CURSOR12与硬件无关的游标资源。
RT_GROUP_ICON13与硬件无关的图标资源。
RT_VERSION16版本资源。
RT_DLGINCLUDE17允许资源编辑工具将字符串与 .rc 文件相关联。
RT_PLUGPLAY19即插即用资源。
RT_VXD20Vxd。
RT_ANICURSOR21动画光标。
RT_ANIICON22动画图标。
RT_HTML23HTML 资源。
RT_MANIFEST24并行程序集清单。
资源语言通常写0,使用默认语言
当前用户的语言:1024
操作系统默认语言:2048
资源的名称可以是宽字符文本或者数字标识符,数值不超过65535
1.读取本程序自定义资源
资源数据是模块函数,提交资源编号和大小,可以得到资源的数据
整数 大小,数据=资源数据(1,@大小);//获取1号资源,用大小这个变量接收数据长度
下面是资源数据模块里面的代码解析
程序段 资源数据(编号,大小)
整数 资源=查找资源(0,编号,10);//模块写0是获取EXE本身的资源,类型10=自定义资源
整数 长度=资源大小(0,资源);//获取资源大小,用来告知调用者
整数 数据=加载资源(0,资源);//加载资源到数据变量
整数 内容=锁定资源(数据);//锁定数据这段内存才可以进行读写
如果(大小)长度>大小;;//需要获取大小提交变量指针非零,向这个地址写入资源大小
返回(内容)结束;//把数据的内容地址返回给调用者
2.更新文件资源
整数 大小,数据=文件内容("d:\123.jpg",@大小);//使用文件内容模块读取图片并得到文件大小
整数 模块=开更资源("d:\123.exe",假);//打开一个可执行程序,得到模块句柄
更新资源(模块,10,1,0,数据,大小);//资源类型10=自定义资源,名称标识为1,语言写0
停更资源(模块,假);//指定放弃为假,保存数据到文件资源中
3.枚举文件里的资源
整数 模块=加载库("测试.dll");//获取DLL里的资源,先要得到模块的句柄
枚举资源(模块, 2, @资源回调,0);//资源类型为2=位图,指定资源回调的指针地址
自定义参数是定义一个值,回调函数可以知道是执行哪里的代码
程序段 资源回调(模块,类型,名称,定义);//这里可以得到资源的类型和名称
整数 图片=载入位图(模块, 名称);//加载的位图可以加入图像列表或数组
图像(编号)=图片;编号++;//加入数组,并让编号递增
删除对象(图片);//加入之后删除图片对象
结束;//枚举资源通常是多个资源数据,这段代码是会循环多次调用
程序资源 ——相关函数
中文名称英文名称示例作用
语言回调EnumResLangProc语言回调(模块,类型,名称,语言,定义)语言资源 函数一起使用的应用程序定义的回调函数。它接收资源项的类型、名称和语言
资源回调EnumResNameProc资源回调(模块,类型,名称,定义)枚举资源 函数一起使用的应用程序定义的回调函数。它接收资源项的类型和名称
类型回调EnumResTypeProc类型回调(模块,类型,定义)资源类型 函数一起使用的应用程序定义的回调函数。它接收资源项的类型
语言资源EnumResourceLanguagesExA语言资源(模块,类型,名称,回调,定义,标志)枚举与指定类型和名称的特定于语言的资源。标志:1=指定文件,2=关联.mui文件,4=MUI语言的.mui文件,8验证PE头
枚举资源EnumResourceNamesA枚举资源(模块,类型,回调,定义)枚举与指定类型的可执行文件或.mui文件的资源。
资源类型EnumResourceTypesExA资源类型(模块,回调,定义,标志)枚举与指定类型的可执行文件或.mui文件的资源类型。标志:1=指定文件,2=关联.mui文件,8验证PE头
查找资源FindResourceA查找资源(模块,资源,类型)确定指定模块中具有指定类型和名称的资源的位置。
查寻资源FindResourceExA查寻资源(模块,类型,名称,语言)确定指定模块中具有指定类型、名称和语言的资源的位置。
释放资源FreeResource释放资源(资源)递减已加载资源的引用计数。达到零时释放资源占用的内存。
加载资源LoadResource资源=加载资源(模块,资源ID)将指定的资源ID加载到全局内存中
锁定资源LockResource内存=锁定资源(资源)从指定的资源获取到数据的内存地址,此锁定是找到目标的意思,无需解锁
资源大小SizeofResource长度=资源大小(模块,资源)检索指定资源的大小(以字节为单位)。
开更资源BeginUpdateResourceA开更资源(文件名,删除资源)获取用于添加、删除或替换二进制模块中的资源的句柄。删除资源为真=删除已有资源
停更资源SizeofResource停更资源(模块,放弃)提交或放弃之前更新资源所做的更改。放弃为假=更新写入文件
更新资源UpdateResourceA更新资源(模块,类型,名称,语言,数据,大小)添加、删除或替换可移植可执行文件 (PE) 文件中的资源。
串口通信——使用示例
通信资源是提供单一双向异步数据流的物理或逻辑设备。 串行端口、并行端口、传真机和调制解调器是通信资源的示例。对于每个通信资源,都有一个由库或驱动程序组成的服务提供程序,使应用程序能够访问资源。
文件输入和输出 (I/O) 函数 (创建文件、关闭对象、读取文件、读入文件、 写入文件 和 写出文件) 提供用于打开和关闭通信资源句柄以及执行读写操作的基本接口。 通信函数提供对通信资源的访问权限。

通信资源句柄

进程使用 创建文件 函数打开通信资源的句柄。 例如,指定 COM1 会打开串行端口的句柄,而 LPT1 将打开并行端口的句柄。
如果指定的资源当前正由另一个进程使用则会失败。 进程的任何线程都可以使用 创建文件 返回的句柄来标识访问资源的任何函数中的资源。

当进程调用 创建文件 打开通信资源时,它会指定以下属性:

指定资源存在哪种类型的读/写访问。
句柄是否可以由子进程继承。
句柄是否可以在重叠 (异步) I/O 操作中使用。
当进程使用 创建文件 打开通信资源时,它必须为以下参数指定某些值:

共享 参数必须为零,以便打开资源进行独占访问。
方式 参数必须指定 3(已存在) 标志。
模板 参数必须为 0。
使用 创建文件 直接打开设备的句柄时,应用程序必须使用特殊字符“\\.\”来标识设备。 例如,若要打开用于驱动 A 的句柄,请为 创建文件 的 名称指定 \\ .\a: 。
调用进程可以使用 硬件控制 函数中的 句柄将控制代码发送到设备。

修改通信资源设置

当 创建文件 函数打开串行通信资源的句柄时,系统会根据上次打开资源时设置的值初始化和配置资源。 保留以前的设置使用户能够在重新打开设备时保留设置。
从上一个打开操作继承的值包括设备控制块的配置设置 (DCB 结构) 以及 I/O 操作中使用的超时值。 如果设备从未打开,则会使用系统默认值对其进行配置。
若要确定串行通信资源的初始配置,进程调用 串口状态 函数,该函数使用当前配置设置填充串行端口 串口通讯类 结构。
若要修改此配置,进程在对 状态串口 函数的调用中指定 串口通讯类 结构。
DCB 结构的成员指定配置设置,例如包速率、每个字节的数据位数和每个字节的停止位数。
 其他成员指定特殊字符,并启用奇偶校验和流控制。当进程只需要修改其中几个配置设置时,应首先调用 串口状态 ,以使用当前配置填充 DCB 结构。
 然后,该过程可以调整 通讯类 结构中的重要值,并通过调用 状态串口 并指定修改后的 DCB 结构来重新配置设备。
 此过程可确保 DCB 结构的未修改成员包含适当的值。 例如,常见错误是使用 DCB 结构配置设备,在该结构中的 开字符 成员等于 关字符 成员。
串口命令 函数提供了另一种修改 通讯类 结构的方法。 串口命令 使用与 模式 命令的命令行参数相同的格式的字符串来指定波特率、奇偶校验方案、停止位数和数据位数。
此函数不会更改 DCB 的剩余成员,但相应的成员设置为禁用 XON/XOFF 和硬件流控制。 串口命令 仅修改 串口通讯类 结构;它不会重新配置设备。
进程可以使用 串口属性 函数重新配置通信资源,以便从设备驱动程序获取有关其支持的配置设置的信息。 此过程可以使用此信息来避免指定不支持的配置。
状态串口 函数重新配置通信资源,但它不会影响指定驱动程序的内部输出和输入缓冲区。 缓冲区不会刷新,挂起的读取和写入操作不会过早终止。
进程使用 串口大小 函数重新初始化通信资源,该函数执行以下任务:
终止挂起的读取和写入操作,即使它们尚未完成。
放弃未读字符,释放与指定资源关联的驱动程序的内部输出和输入缓冲区。
重新分配内部输出和输入缓冲区。

调用 串口大小 不需要进程。 如果没有,则资源的驱动程序在第一次使用通信资源句柄时使用默认设置初始化设备。
串口通讯类
中文名字英文名称长度作用解释
串口通讯类DCB28包含了串口通讯相关设置的结构
串口通讯类——成员表
总长度DCBlength整数结构的大小
波特率BaudRate整数设置串口通信的波特率
比特位fBitFields整数设置串口通信的比特位
资源号wReserved整形当前未用
开阈值XonLim整形XON阈值
关阈值XoffLim整形XOFF阈值
数据位ByteSize字节字符位数,4-8
校验位Parity字节奇偶校验位
停止位StopBits字节0,1,2分别为1,1.5,2
开字符XonChar字节XON字符
关字符XoffChar字节XOFF字符
错误符ErrorChar字节奇偶错误替代字符
结束符EofChar字节结束字符
事件符EvtChar字节事件字符
预留wReserved1字节当前未用
备用wReserved2字节当前未用

通信资源配置

串口配置类 结构定义通信资源的配置(串行或其他方式)。 结构的格式因通信资源类型 (提供程序子类型) 而异。
前几个结构成员对所有通信资源通用:为特定提供程序子类型定义其他成员。 特定服务提供商也可以扩展 串口配置类 结构。

应用程序可以使用 查询串口 和 设置串口 函数获取和设置通信资源的 配置 。 打开后,将使用提供程序子类型的默认配置初始化通信资源。
若要获取和设置提供程序子类型的默认配置,请使用 串口默认 和 默认串口 函数。
若要提示用户输入配置信息,请使用 串口设置 函数。 此函数显示由服务提供商定义的对话框,并根据用户输入填充 串口配置类 结构。
串口配置类
中文名字英文名称长度作用解释
串口配置类COMMCONFIG52包含了串口通讯相关配置的结构
串口配置类——成员表
大小dwSize整数结构的大小,以字节为单位
版本wVersion整数结构的版本号。可以为 1
通讯dcbDCB串口通讯类结构体
设备dwProviderSubType整数通信提供程序的设备类型
偏移dwProviderOffset整数数据相对于结构开头的偏移量
大小dwProviderSize整数特定于提供程序的数据的大小
数据wcProviderData整数特定于提供程序的数据,可省略

调制解调器配置

使用调制解调器配置功能,可以在建立连接之前配置调制解调器。 应用程序可以设置调制解调器选项并确定调制解调器的功能,
而无需使用特定于任何调制解调器设备的命令。 以下是应用程序在调用前可能设置的一般功能:

主要操作模式 (同步、异步,以及是否) 启用错误控制。
V.42 错误控制 (CCITT 建议 V.42) 定义,包括特定参数。 CCITT 代表国际电报和电话协商委员会。
V.42bis (由 CCITT 建议 V.42bis) 和 MNP5 数据压缩定义。
超时选项,包括呼叫设置、不活动以及缓冲数据传输。
在设置调制解调器的配置之前,应用程序应使用 串口属性 函数确定调制解调器设备的功能。 此函数填充串口程序类结构。 
此结构既包含适用于所有通信设备的常规部分,又包含特定于每个提供程序子类型的部分。
对于调制解调器设备, 串口程序类 结构的提供程序特定部分是 猫功能类 结构。

应用程序可以使用 查询串口 和 设置串口 函数获取和设置调制解调器的当前配置,这两个函数都使用 串口配置类 结构。 
此结构既包含适用于所有通信设备的常规部分,又包含特定于每个提供程序子类型的部分。 对于调制解调器设备, 串口配置类 结构的提供程序特定部分是 猫功能类 结构。

配置调制解调器后,应用程序可以使用电话应用程序编程接口 (TAPI) 来实际建立连接。

调制解调器配置功能不提供调制解调器的长期管理和维护。 调制解调器服务提供商应为此提供调制解调器配置对话框。
串口程序类
中文名字英文名称长度作用解释
串口程序类COMMPROP64+包含有关通信驱动程序的信息。
串口程序类——成员表
大小wPacketLength_wPacketVersion整数数据包大小,高16位是版本
服务dwServiceMask整数一个位掩码,指示此提供程序实现哪些服务。写1
预留dwReserved1整数保留值;请勿使用。
输出dwMaxTxQueue整数驱动程序的内部输出缓冲区的最大大小(以字节为单位)。 值为零表示串行提供程序未施加任何最大值。
输入dwMaxRxQueue整数驱动程序的内部输入缓冲区的最大大小(以字节为单位)。 值为零表示串行提供程序未施加任何最大值。
速率dwMaxBaud整数允许的最大波特率(以位/秒为单位) (bps) 。 此成员可以是以下波特率之一。
设备dwProvSubType整数通信提供程序类型。 此成员可以是以下程序类型之一。
功能dwProvCapabilities整数指示提供程序提供的功能的位掩码。此成员可以是以下功能位的组合。
参数dwSettableParams整数一个位掩码,指示可以更改的通信参数。此成员可以是以下通信参数的组合。
可用dwSettableBaud整数可以使用的波特率。此成员可以是以下波特率之一。
数位wSettableData_wSettableStopParity整数低16位是数据位的组合;高16位是停止位和奇偶校验的组合
出口dwCurrentTxQueue整数驱动程序的内部输出缓冲区的大小(以字节为单位)。 如果值为零,则表示该值不可用。
入口dwCurrentRxQueue整数驱动程序的内部输入缓冲区的大小(以字节为单位)。 如果值为零,则表示该值不可用。
特定dwProvSpec1整数任何特定于提供程序的数据。应用程序应忽略此成员,除非它们具有有关提供程序所需数据格式的详细信息。
特殊dwProvSpec2整数任何特定于提供程序的数据。应用程序应忽略此成员,除非它们具有有关提供程序所需数据格式的详细信息。
数据wcProvChar[1]字节任何特定于提供程序的数据。应用程序应忽略此成员,除非它们具有有关提供程序所需数据格式的详细信息。
串口波特率
英文名称数值作用解释
BAUD_0750x0000000175 bps
BAUD_1100x00000002110 bps
BAUD_134_50x00000004134.5 bps
BAUD_1500x00000008150 bps
BAUD_3000x00000010300 bps
BAUD_6000x00000020600 bps
BAUD_12000x000000401200 bps
BAUD_18000x000000801800 bps
BAUD_24000x000001002400 bps
BAUD_48000x000002004800 bps
BAUD_72000x000004007200 bps
BAUD_96000x000008009600 bps
BAUD_144000x0000100014400 bps
BAUD_192000x0000200019200 bps
BAUD_384000x0000400038400 bps
BAUD_56K0x0000800056K bps
BAUD_576000x0004000057600 bps
BAUD_1152000x00020000115200 bps
BAUD_128K0x00010000128K bps
BAUD_USER0x10000000可编程波特率。
串口程序类型
英文名称数值作用解释
PST_FAX0x00000021FAX 设备
PST_LAT0x00000101LAT 协议
PST_MODEM0x00000006调制解调器设备
PST_NETWORK_BRIDGE0x00000100未指定的网桥
PST_PARALLELPORT0x00000002并行端口
PST_RS2320x00000001RS-232 串行端口
PST_RS4220x00000003RS-422 端口
PST_RS4230x00000004RS-423 端口
PST_RS4490x00000005RS-449 端口
PST_SCANNER0x00000022扫描仪设备
PST_TCPIP_TELNET0x00000102TCP/IP Telnet 协议
PST_UNSPECIFIED0x00000000未指定
PST_X250x00000103X.25 标准
串口功能位
英文名称数值作用解释
PCF_16BITMODE0x0200支持特殊 16 位模式
PCF_DTRDSR0x0001支持 DTR (data-terminal-ready) /DSR (data-set-ready)
PCF_INTTIMEOUTS0x0080支持的间隔超时
PCF_PARITY_CHECK0x0008支持奇偶校验检查
PCF_RLSD0x0004支持 RLSD (receive-line-signal-detect)
PCF_RTSCTS0x0002RTS (请求发送) /CTS (支持明文发送)
PCF_SETXCHAR0x0020支持可设置的 XON/XOFF
PCF_SPECIALCHARS0x0100提供特殊字符支持
PCF_TOTALTIMEOUTS0x0040支持的总已用 () 超时
PCF_XONXOFF0x0010支持 XON/XOFF 流控制
串口通信参数
英文名称数值作用解释
SP_BAUD0x0002波特率
SP_DATABITS0x0004数据位
SP_HANDSHAKING0x0010握手 (流控制)
SP_PARITY0x0001奇偶校验
SP_PARITY_CHECK0x0020奇偶校验检查
SP_RLSD0x0040RLSD (receive-line-signal-detect)
SP_STOPBITS0x0008停止位
串口数据位
英文名称数值作用解释
DATABITS_50x00015 个数据位
DATABITS_60x00026 个数据位
DATABITS_70x00047 个数据位
DATABITS_80x00088 数据位
DATABITS_160x001016 个数据位
DATABITS_16X0x0020通过串行硬件线的特殊宽路径
串口奇偶校验
英文名称数值作用解释
STOPBITS_100x00011 停止位
STOPBITS_150x00021.5 个停止位
STOPBITS_200x00042 个停止位
PARITY_NONE0x0100无奇偶校验位
PARITY_ODD0x0200奇数奇偶校验
PARITY_EVEN0x0400偶等奇偶校验
PARITY_MARK0x0800标记奇偶校验
PARITY_SPACE0x1000空间奇偶校验
猫功能类
中文名字英文名称长度作用解释
猫功能类MODEMDEVCAPS64+包含有关调制解调器功能的信息。
猫功能类——成员表
实长dwActualSize整数实际返回给应用程序的数据的大小(以字节为单位)。如果没有分配足够的空间,则此成员可能小于 全长 成员。
全长dwRequiredSize整数整个结构所需的字节数,包括可变长度部分。
定偏dwDevSpecificOffset整数结构的提供程序定义部分的偏移量,以字节为单位,相对于结构的开头。
定长dwDevSpecificSize整数结构的提供程序定义部分的大小(以字节为单位)。
版本dwModemProviderVersion整数服务提供程序的版本。 此成员的格式和用法取决于服务提供商。
名偏dwModemManufacturerOffset整数包含调制解调器制造商名称的文本字符串的偏移量,以字节为单位,相对于结构开头。
名长dwModemManufacturerSize整数调制解调器制造商名称的长度(以字节为单位)。 字符串不是以 null 结尾的。
模偏dwModemModelOffset整数包含调制解调器模型的文本字符串的偏移量,以字节为单位,相对于结构开头。
模长dwModemModelSize整数模型名称的长度(以字节为单位)。 字符串不是以 null 结尾的。
版偏dwModemVersionOffset整数提供附加调制解调器的版本和修订版本的文本字符串的偏移量(如果提供程序可以确定信息)。 相对于结构的开头,偏移量以字节为单位指定。
版长dwModemVersionSize整数调制解调器版本字符串的长度(以字节为单位)。 字符串不是以 null 结尾的。
拨号dwDialOptions整数调制解调器设备支持的拨号选项。0x40等计费音,0x80等待静音,0x100等拨号音。
呼叫dwCallSetupFailTimer整数调制解调器支持的最大呼叫设置超时时间(以秒为单位)。
挂断dwInactivityTimeout整数调制解调器支持的最大非活动超时,以十分之一秒为单位。
音量dwSpeakerVolume整数调制解调器支持的扬声器音量设置。1低,2中等,4高。
模式dwSpeakerMode整数调制解调器支持的扬声器模式设置。1关声音,2拨号音,4开声音,8呼叫音。
选项dwModemOptions整数调制解调器选项。此成员可以是以下值的零个或多个。
终端dwMaxDTERate整数最大 DTE 速率(以位/秒为单位)。
通信dwMaxDCERate整数最大 DCE 速率(以位/秒为单位)。
数据abVariablePortion[1]文本可变长度信息,包括字符串和任何提供程序定义的信息。
猫功能选项
英文名称数值作用解释
MDM_BLIND_DIAL0x200MDM_BLIND_DIAL
MDM_CCITT_OVERRIDE0x040设置后,将针对 V.21 和 V.22 或 V.23 启用 CCITT 调制。清除时,为 103 和 212A 启用钟式调制。
MDM_CELLULAR0x008MDM_CELLULAR
MDM_COMPRESSION0x001MDM_COMPRESSION
MDM_DIAGNOSTICS0x0800MDM_DIAGNOSTICS
MDM_ERROR_CONTROL0x002MDM_ERROR_CONTROL
MDM_FLOWCONTROL_HARD0x010MDM_FLOWCONTROL_HARD
MDM_FLOWCONTROL_SOFT0x020MDM_FLOWCONTROL_SOFT
MDM_FORCED_EC0x004MDM_FORCED_EC
MDM_SPEED_ADJUST0x080MDM_SPEED_ADJUST
MDM_TONE_DIAL0x100MDM_TONE_DIAL
MDM_V23_OVERRIDE0x400设置后,为 V.23 启用 CCITT 调制。清除后,会为 V.21 和 V.22 启用 CCITT 调制。

读取和写入操作

Windows 支持同步和异步 (串行通信资源上的重叠) 文件 I/O 操作。 重叠操作使调用线程能够在后台执行操作时执行其他任务。
线程使用 读取文件 或 读入文件 函数从通信资源读取数据,并使用 写出文件 或 写入文件 函数写入通信资源。
读取文件 和 写出文件 可以同步或异步执行。 读入文件 和 写入文件 只能异步执行。
这些读取和写入函数的行为受是否作为重叠操作执行、超时参数是否与句柄关联以及流控制参数是否与句柄关联的影响。
线程还可以使用 串口寄送 函数写入通信资源,该函数在输出缓冲区中任何挂起的数据之前传输指定的字符。
此函数可用于将高优先级信号字符传输到接收系统。 高优先级字符的传输仍受流控制和写入超时的限制,并且操作是同步执行的。
线程可以使用 串口缓冲 函数放弃设备输出或输入缓冲区中的所有字符。 串口缓冲 还可以终止挂起的读取或写入操作,即使操作尚未完成。
如果线程使用 串口缓冲 刷新输出缓冲区,则不会传输已删除的字符。 若要在确保传输内容的同时清空输出缓冲区,线程可以调用 刷新文件 函数 (同步操作) 。
但请注意, 刷新文件 受流控制,但不受写入超时,在传输所有挂起的写入操作之前,它不会返回。
重叠操作
重叠操作使线程能够在后台执行耗时的I/O操作,使线程可以自由执行其他任务。若要在通信资源上启用重叠 I/O 操作,线程必须在创建文件中指定0x40000000标志。
若要将 读取文件 或 写出文件 函数作为重叠操作运行,调用线程必须指定指向重叠类结构的指针。重叠类结构必须包含手动重置 (非自动) 事件对象的句柄。
当对 I/O 函数的调用在操作完成之前返回时,系统会将事件对象的状态设置为未发出信号。系统将事件对象的状态设置为在操作完成时发出信号。
线程使用等待函数来检查事件对象的当前状态或等待其状态发出信号。读入文件 和 写入文件 函数只能作为重叠操作执行。
 调用线程指定指向 文件传输回调 函数的指针,该函数在重叠操作完成时执行。 仅当调用线程执行可警报操作时,才会执行完成例程。
有关事件对象、等待函数、可警报等待和完成例程的详细信息,请参阅 关于同步超时
通信资源的句柄具有一组关联的超时参数,这些参数会影响读取和写入操作的行为。 超时可能会导致 读取文件、读入文件、写出文件或写入文件 操作在超时间隔过后结束,
即使指定数量的字符尚未读取或写入。 在读取或写入操作期间发生超时 (,即读取或写入函数的返回值指示) 成功时,不会将其视为错误。 实际读取或写入的字节计数由
读取文件或写出文件 (或 操作结果 或 文件传输回调 函数报告(如果 I/O 作为重叠操作执行) )。

当应用程序打开通信资源时,系统会将资源的超时值设置为上次使用该资源时生效的值。 如果从未打开过通信资源,系统会将超时值设置为某个默认值。
在任一情况下,应用程序都应始终在打开资源后确定当前超时值,然后显式设置这些值以满足其要求。若要获取或更改通信资源的当前超时值,请使用 串口超时和超时串口 函数。

超时参数支持两种类型的超时。 当收到任意两个字符之间的时间间隔超过指定的毫秒数时,将发生间隔超时。 计时在收到第一个字符时开始,在收到每个新字符时重启。
当读取操作花费的总时间超过计算的毫秒数时,将发生总超时。当I/O操作开始时,计时会立即开始。写入操作仅支持总超时。读取操作支持间隔和总超时可以单独使用或组合使用。

读取或写入操作的总超时时间是使用 串口超时 或 超时串口 函数中指定的 串口超时类 结构的乘数和常量值计算的,以毫秒为单位。
使用乘数和常量可使总超时期限发生变化,具体取决于请求的数据量。应用程序只能通过将乘数或者常量设置为零来单独使用常量或乘数。如果常量和乘数均为零,则不使用总超时。
如果所有读取超时参数均为零,则不会使用读取超时,并且读取操作在读取请求的字节数或发生错误之前不会完成。同样所有写入超时参数均为零,则在写入之前,写入操作不会完成。
如果读取间隔超时参数是0xffffffff,并且两个读取超时总参数均为零,则读取输入缓冲区中可用的任何字符后,读取操作将立即完成,即使为空也是如此。

当接收中出现平静时,间隔计时会强制读取操作返回。 使用间隔超时的进程可以设置相当短的间隔参数,因此它可以快速响应一个或多个字符的小型隔离突发,
但当在稳定流中接收数据时,它仍可以通过单个调用收集大型字符缓冲区。当某种流控制阻止传输或调用 串口暂停 函数以暂停字符传输时,写入操作的超时非常有用。

下表根据为总超时和间隔超时指定的值汇总了读取操作的行为。
总计间隔行为
00完全填充缓冲区时返回 。 不使用超时。
T0当缓冲区已完全填充或自操作开始以来经过 T 毫秒时返回 。
0Y当缓冲区已完全填充或 Y 毫秒在收到任意两个字符之间时返回 。 在收到第一个字符之前,计时不会开始。
TY当缓冲区完全填充或发生任一类型的超时时返回 。
串口超时类
中文名字英文名称长度作用解释
串口超时类COMMTIMEOUTS20包含通信设备的超时参数。确定设备上 读取文件、读入文件、写出文件或写入文件 操作的行为。
串口超时类——成员表
间隔ReadIntervalTimeout整数通信线路上下一个字节到达之前允许经过的最长时间(以毫秒为单位)。 值为零表示不使用间隔超时。
读乘ReadTotalTimeoutMultiplier整数用于计算读取操作的总超时周期的乘数(以毫秒为单位)。 对于每个读取操作,此值乘以要读取的请求字节数。
读超ReadTotalTimeoutConstant整数一个常量,用于计算读取操作的总超时时间(以毫秒为单位)。对于每个读取操作,此值将添加到 读乘 成员的乘积和请求的字节数中。
写乘WriteTotalTimeoutMultiplier整数用于计算写入操作的总超时周期的乘数(以毫秒为单位)。 对于每个写入操作,此值乘以要写入的字节数。
写超WriteTotalTimeoutConstant整数一个常量,用于计算写入操作的总超时时间(以毫秒为单位)。 对于每个写入操作,此值将添加到 写乘 成员的乘积和要写入的字节数。
通信错误
在其他情况下,读取或写入操作可以用少于请求的字符数完成,即使尚未发生超时。 以下是一些示例:

某些驱动程序支持使用特殊字符,这些字符可立即完成读取操作,只使用已读到时已读到的字符。
可以调用 串口缓冲 函数以提前终止挂起的读取或写入操作。 此函数还可以删除输出缓冲区或输入缓冲区的内容,或者删除这两者。
如果在读取或写入操作期间发生通信错误,则会终止通信资源上的所有 I/O 操作。 中断条件、奇偶校验错误或帧错误就是此类错误的示例。
发生错误时,进程必须调用 串口刷新 函数以清除错误标志,然后才能开始其他 I/O 操作。 串口刷新 报告发生的特定错误和设备当前状态。
 

通信事件

进程可以监视通信资源中发生的一组事件。 例如,应用程序可以使用事件监视来确定 CTS 何时 (明确发送) 和 DSR (数据集就绪) 信号更改状态。 进程可以使用 掩码串口 函数创建事件掩码来监视给定通信资源上的事件。要确定通信资源的当前事件掩码,可以使用 串口掩码 函数。 以下值指定可监视的事件。
英文名称数值作用解释
EV_RXCHAR1接收到了一个字符并将其放入了输入缓冲区。
EV_RXFLAG2事件字符已收到并放置在输入缓冲区中。 事件字符在设备的 DCB 结构中指定,该结构使用 状态串口 函数应用于串行端口。
EV_TXEMPTY4输出缓冲区中的最后一个字符已发送。
EV_CTS8CTS (清除发送) 信号更改状态。
EV_DSR0x0010DSR (数据准备好) 信号更改状态。
EV_RLSD0x0020RLSD (接收线路信号检测) 信号更改状态。
EV_BREAK0x0040在输入上检测到一个中断。
EV_ERR0x0080发生行状态错误。 行状态错误CE_FRAME、CE_OVERRUN和CE_RXPARITY。
EV_RING0x0100检测到振铃指示。
EV_PERR0x0200发生打印机错误
EV_RX80FULL0x0400接收缓冲区已满80%
EV_EVENT10x0800提供程序特定事件1。
EV_EVENT20x1000提供程序特定事件2。
指定一组事件后,进程使用 串口等待 函数等待其中一个事件发生。 串口等待 可以同步使用,也可以作为重叠操作使用。 有关以重叠操作的形式执行函数的其他信息,请参阅同步。
发生事件掩码中指定的事件之一时,进程将完成等待操作,并设置事件掩码变量以指示检测到的事件类型。如果在等待该资源等待时为通信资源调用掩码串口。

串口等待 函数检测自上次调用 掩码串口 或 串口等待 以来发生的事件。 例如将 EV_RXCHAR 事件指定为满足等待的事件,则如果驱动程序的输入缓冲区中自上次调用
串口等待 或 掩码串口 以来存在字符,则将满足对 串口等待 的调用。 因此,给定以下伪代码,在 T1 和 T2 之间接收的任何字符都将满足对 串口等待 的下一次调用。
循环(完成)
{串口等待(参数)
T1:
//读取数据过程
T2:}
监视当信号 (CTS、DSR 等) 更改状态时发生的事件时, 串口等待 报告更改,但不会报告当前状态。 若要查询 CTS (明确发送) 、DSR (数据集就绪) 、RLSD (接收线路信号检测) 和环形指示器信号的当前状态,进程可以使用 串口调制 函数。

扩展函数

可以使用 串口信号 函数为设备调用某些通信函数。 此函数发送代码以指示设备执行扩展功能。
例如,应用程序可以使用 SETBREAK 代码暂停字符传输,并使用 CLRBREAK 代码恢复传输。
还可以通过调用 串口暂停 和 串口还原 函数来启动这些特定操作。 串口信号 还可用于实现手动调制解调器控制。
例如,CLRDTR 和 SETDTR 代码可用于实现手动 DTR (数据终端就绪) 流控制。 但请注意,如果进程在设备配置为启用
 DTR 握手时使用 串口信号 操作 DTR 行,或者 RTS (请求发送) 行(如果启用了 RTS 握手),则会发生错误。
串口扩展
英文名称数值作用解释
SETXOFF1模拟接收到XOFF
SETXON2模拟接收到XON
SETRTS3设置RTS高
CLRRTS4设置RTS低
SETDTR5设置DTR高
CLRDTR6设置DTR低
RESETDEV7如果可能,重置设备
SETBREAK8设置设备断线。
CLRBREAK9清除设备断线。
硬件控制 函数使进程能够将扩展函数代码直接发送到指定的设备驱动程序,从而使设备执行给定的操作。 硬件控制 为设备提供与标准串行通信函数不支持的通信资源功能关联的设备。
它使应用程序能够使用该设备特有的参数配置设备,以及调用任何特定于设备的函数。

配置通信资源

整数 串口;串口通讯类 通讯(总长度=28,数据位=8)重叠类 异步
//申请全局变量通讯类时候,指定数据位=8,校验位默认是0,这些通常不用修改
程序段 开关串口
如果(串口=0){
串口 = 创建文件("COM1",$C0000000,0,0,3,$40000000,0)
//$C0000000 读写,0以独占访问权限打开,0默认安全属性
//3仅当文件或设备存在时才打开它。$40000000已启用重叠模式。
如果(串口<=0){信息框(0,"串口打开失败","提示",错误图标)串口=0}
否则{
串口状态(串口, 通讯)
//首先检索所有当前配置来构建当前配置设置。
通讯.波特率=9600
//波特率需要自行设定,可以用 取控件数(窗体,4,0,0) 读取文本框里数字
如果(状态串口(串口, 通讯)=0){信息框(0,"串口设置错误","提示",惊叹图标)返回}
改窗口字(窗体,"串口已打开")改窗口字(启动,"关闭")开启线程(@监视)}
//串口正常打开,开户线程:监视
}否则{关闭对象(串口)串口=0
改窗口字(窗体,"串口已关闭")
改窗口字(启动,"打开")}
结束
程序段 监视
循环{读取}(串口=0)
结束
//监视这段程序是循环执行读取函数
程序段 读取
整数 剩余,收数,事件,错误;文本 内容[16]
//这里用三个整数变量的数据用来获取接收字节数和剩余字节数
掩码串口(串口,0x19)//掩码=1(收到数据)+8(清除发送)+0x10(数据准备好)
事件=创建事件(0,1,0,0)
//0默认安全属性,1手动重置事件,0无信号,0无名称
如果(串口等待(串口,@事件,异步))
{//等待异步事件返回结果不等于0
	如果(事件 & 1)//收到数据EV_RXCHAR
	{串口刷新(串口,@错误,@事件)
	如果(收数=0)返回;接收字节数小于0不处理
	读取文件(串口,内容,收数,@剩余,异步)
	如果(最后错误=997)操作结果(串口,异步,@剩余, 真)
	//如果IO结束获取重叠操作的结果
	}
	如果(事件 & 8)清除发送//EV_CTS
	如果(事件 & 16)数据就绪//EV_DSR
}
否则{//提示错误
	}
结束
串口通信 ——相关函数

中文名称英文名称示例作用
串口命令BuildCommDCBA串口命令(内容,通讯类)使用设备控制字符串中指定的值填充指定的 串口通讯类 结构。
设备定义BuildCommDCBAndTimeoutsA设备定义(内容,通讯类,超时类)将设备定义字符串转换为适当的设备控制块代码,并将其置于设备控制块中。
串口还原ClearCommBreak串口还原(串口)还原指定通信设备的字符传输,并将传输线置于非中断状态。
串口刷新ClearCommError串口刷新(串口,@错误,@状态)检索有关通信错误的信息,并报告通信设备的当前状态。
串口设置CommConfigDialogA串口设置(串口名,窗口,配置类)显示驱动程序提供的配置对话框。
串口信号EscapeCommFunction串口信号(串口,扩展)向指定串口执行扩展功能,如DTR RTS信号
查询串口GetCommConfig查询串口(串口,配置,长度)获取通信设备的当前配置串口配置类
串口掩码GetCommMask串口掩码(串口,@掩码)检索指定通信设备的事件掩码值
串口调制GetCommModemStatus串口调制(串口,@状态)检索调制解调器控制寄存器值
串口属性GetCommProperties串口属性(串口,属性)获取指定通信设备的通信属性信息串口程序类
串口状态GetCommState串口状态(串口,设置)获取指定通信设备的当前控制设置(DCB结构)
串口超时GetCommTimeouts串口超时(串口,超时)检索指定通信设备的读写操作的超时参数串口超时类
串口默认GetDefaultCommConfigA串口默认(设备名,配置,长度)获取通信设备的默认配置
串口缓冲PurgeComm串口缓冲(串口,动作)清空串口的输出或输入缓冲区,动作组合1终止写,2终止读,4清输出,8清输入
串口暂停SetCommBreak串口暂停(串口)暂停指定通信设备的字符传输,并将传输线路置于中断状态,直到取消暂停
设置串口SetCommConfig设置串口(串口,配置,长度)修改通信设备的当前配置串口配置类
掩码串口SetCommMask掩码串口(串口,掩码)修改指定通信设备的事件掩码值
状态串口SetCommState状态串口(串口,设置)修改指定通信设备的当前控制设置(DCB结构)
超时串口SetCommTimeouts超时串口(串口,超时)修改指定通信设备的读写操作的超时参数串口超时类
默认串口SetDefaultCommConfigA默认串口(串口,超时)检索指定通信设备的读写操作的超时参数串口超时类
串口大小SetupComm串口大小(串口,输入,输出)修改指定通信设备的读写缓冲区大小
串口寄送TransmitCommChar串口寄送(串口,字符)在指定通信设备的输出缓冲区中的待处理数据发送之前先传送指定的字符
串口等待WaitCommEvent串口等待(串口,@事件,重叠类)等待指定通信设备发生事件。事件发生时,传递到事件整数变量中
操作结果GetOverlappedResult操作结果(文件,重叠类,@长度,等待)检索指定文件、命名管道或通信设备上的重叠操作的结果。
串口状态类
中文名字英文名称长度作用解释
串口状态类COMSTAT12包含了串口通讯时间设置的结构
串口状态类——成员表
信号fCtsHold整数如果此成员为 TRUE,则传输正在等待 CTS (明确发送) 信号发送。
fDsrHold整数如果此成员为 TRUE,则传输正在等待 DSR (数据集就绪) 信号发送。
fRlsdHold整数如果此成员为 TRUE,则传输正在等待 RLSD (接收线路信号检测) 信号发送。
fXoffHold整数如果此成员为 TRUE,则传输正在等待,因为已收到 XOFF 字符。
fXoffSent整数如果此成员为 TRUE,则传输正在等待,因为 XOFF 字符已传输。 (传输 XOFF 字符到采用下一个字符作为 XON 的系统时,传输将停止,而不考虑实际字符。)
fEof整数如果此成员为 TRUE,则已收到文件末尾 (EOF) 字符。
fTxim整数如果此成员为 TRUE,则会有一个字符排队等待传输,该字符已通过 串口寄送 函数来到通信设备。 通信设备先于设备输出缓冲区中的其他字符传输此类字符。
fReserved整数保留值;请勿使用。以上英文名代表不同功能位,都对应中文名信号这一个成员
收数cbInQue整数串行提供程序接收但尚未由 ReadFile 操作读取的字节数。
剩余cbOutQue整数所有写入操作要传输的用户数据的剩余字节数。 对于未重叠的写入,此值将为零。
串口错误状态
英文名称数值作用解释
CE_BREAK0x0010硬件检测到中断条件。
CE_FRAME0x0008硬件检测到一个组帧错误。
CE_OVERRUN0x0002发生字符缓冲区溢出。 下一个字符将丢失。
CE_RXOVER0x0001发生输入缓冲区溢出。 输入缓冲区空间不足,或在文件尾 (EOF) 字符之后接收到字符。
CE_RXPARITY0x0004硬件检测到奇偶校验错误。

进程线程——使用示例
应用程序由一个或多个进程组成。 用最简单的术语来说, 进程是一个执行程序。 一个或多个线程在进程的上下文中运行。
线程是操作系统分配处理器时间的基本单元。 线程可以执行进程代码的任何部分,包括当前由另一个线程执行的部件。
作业对象允许将进程组作为一个单元进行管理。 作业对象是可活动、安全、可共享的对象,用于控制与其关联的进程的属性。 对作业对象执行的操作会影响与作业对象关联的所有进程。
线程池是代表应用程序高效执行异步回调的工作线程集合。 线程池主要用于减少应用程序线程数并提供工作线程的管理。
纤程是必须由应用程序手动安排的执行单元。 光纤在计划它们的线程的上下文中运行。
用户模式计划 (UMS) 是一种轻型机制,应用程序可以使用该机制来计划自己的线程。 UMS 线程与 光纤 的不同之处在于,每个 UMS 线程都有自己的线程上下文,而不是共享单个线程的线程上下文。
每个 进程 都提供执行程序所需的资源。 进程具有虚拟地址空间、可执行代码、系统对象的开放句柄、安全上下文、唯一进程标识符、环境变量、优先级类、最小和最大工作集大小以及至少一个执行线程。
每个进程都使用单个线程(通常称为 主线程)启动,但可以从其任何线程创建其他线程。
线程是进程内可计划执行的实体。 进程的所有线程共享其虚拟地址空间和系统资源。 此外,每个线程都维护异常处理程序、计划优先级、线程本地存储、唯一线程标识符以及系统将用于保存线程上下文的一组结构,
直到计划线程上下文为止。线程上下文包括线程的计算机寄存器集、内核堆栈、线程环境块以及线程进程的地址空间中的用户堆栈。 线程还可以有自己的安全上下文,可用于模拟客户端。
Microsoft Windows 支持 抢占式多任务处理,这会产生同时执行多个进程中多个线程的效果。 在多处理器计算机上,系统可以同时执行与计算机上存在处理器一样多的线程。
作业对象允许将进程组作为一个单元进行管理。 作业对象是可访问的、安全的、可共享的对象,用于控制与其关联的进程的属性。 对作业对象执行的操作会影响与作业对象关联的所有进程。
应用程序可以使用 线程池 来减少应用程序线程数并提供工作线程的管理。 应用程序可以对工作项进行排队、将工作与可等待句柄相关联、基于计时器自动排队,并使用 I/O 绑定。
用户模式计划 (UMS) 是一种轻型机制,应用程序可以使用该机制来计划自己的线程。 应用程序可以在用户模式下的 UMS 线程之间切换,而无需涉及 系统计划程序 ,
并在内核中阻止 UMS 线程时重新获得对处理器的控制。 每个 UMS 线程都有自己的线程上下文,而不是共享单个线程的线程上下文。
在用户模式下在线程之间切换的功能使 UMS 比线程池更高效,适合需要少量系统调用的短持续时间工作项。
光纤是必须由应用程序手动安排的执行单元。 光纤在计划它们的线程的上下文中运行。 每个线程可以计划多个光纤。 通常,与设计良好的多线程应用程序不一样,光纤没有优势。
但是,使用光纤可以更轻松地移植设计为计划其自己的线程的应用程序。
线程纤程 ——相关函数
中文名称英文名称示例作用
远程线程CreateRemoteThread远程线程(进程,属性,堆栈,@函数,参数,标志,标识)创建一个在指定进程的地址空间内运行的线程
创建线程CreateThread创建线程(属性,堆栈,@函数,参数,标志,标识)创建一个在调用进程的地址空间内执行的线程
创建纤程CreateFiber创建纤程(堆栈,@函数,地址)分配一个光纤对象,为其分配一个堆栈,并设置执行以从指定的起始地址开始,通常是光纤函数。
线程转纤ConvertThreadToFiber线程转纤(指针地址)将当前线程转换为光纤。 必须先将线程转换为光纤,然后才能计划其他光纤。
端口关联CreateIoCompletionPort端口关联(文件,端口,键,线程数)创建完成端口并将其与指定的文件句柄关联
删除纤程DeleteFiber删除纤程(指针)删除现有纤程
退出线程ExitThread退出线程(0)强制结束一个线程
当前线程GetCurrentThreadtid=当前线程获得当前线程的句柄
线程标识GetCurrentThreadIdtid=线程标识获得当前线程的标识符
切换线程SwitchToThread切换线程使系统进程切换到其它线程执行
重置线程ResumeThread重置线程(线程)减少线程的挂起计数。当暂停计数递减到零时,线程的执行被恢复
查找线程Thread32First查找线程(快照,线程类)检索进程快照第一个线程的信息
下个线程Thread32Next下个线程(快照,线程类)检索进程快照下一个线程的信息
分配线程TlsAlloc索引=分配线程分配线程本地存储 (TLS) 索引。 进程的任何线程随后都可以使用此索引来存储和检索线程本地的值
释放线程TlsFree释放线程(索引)(TLS) 索引发布线程本地存储,使其可供重复使用。并不释放线程已分配的内存空间
取线程值TlsGetValue取线程值(索引)检索调用线程的线程本地存储中的值
改线程值TlsSetValue改线程值(索引)将值存储在调用线程的线程本地存储 (指定 TLS 索引的 TLS) 槽中。
终止线程TerminateThread终止线程(线程,退出码)终止指定的线程
优先开关SetProcessPriorityBoost优先开关(进程,禁用)禁用或启用系统暂时提升指定进程的线程优先级的功能。
线程状态GetExitCodeThread线程状态(线程,@状态)获得指定线程的终止状态
创建进程CreateProcessA创建进程(名称,命令,进继,线继,全继,标志,
环境,目录,启动,进程)
创建新进程及其主线程的继承属性。全继为真都由新进程继承。
线程禁示DisableThreadLibraryCalls线程禁示(模块)禁用指定动态链接库的线程创建和线程结束通知。这可以减少某些应用程序的工作集的大小。
消息调试FatalAppExitA消息调试(0,内容)显示一个消息框,并在消息框关闭时终止应用程序。调试版可能返回应用程序
转移调试FatalExit转移调试(退出码)将执行控制权转移到调试程序。 此后调试器的行为特定于所使用的调试器类型。
进程掩码GetProcessAffinityMask进程掩码(进程,@进程掩码,@系统掩码)检索指定进程的进程关联掩码和系统的系统关联掩码。
取优先态GetProcessPriorityBoost取优先态(进程,@状态)检索指定进程的优先级提升控制状态。状态为真禁用动态提升,为假正常
进程关参GetProcessShutdownParameters进程关参(进程,@进程掩码,@系统掩码)检索当前调用进程的关闭参数。
进程计时GetProcessTimes进程计时(进程,@创建,@退出,@内核,@用户)检索指定进程的计时信息
进程版本GetProcessVersion进程版本(进程)检索预期运行指定进程的系统的高字主版本号和低字次版本号。
进程工作GetProcessWorkingSetSize进程工作(进程,@最小,@最大)检索指定进程的最小和最大工作集大小(以字节为单位)。
工作进程SetProcessWorkingSetSize工作进程(进程,最小,最大)设置指定进程的最小和最大工作集大小(以字节为单位)。
线程取文GetThreadContext线程取文(线程,@上下文)检索指定线程的上下文。
线程改文SetThreadContext线程改文(线程,@上下文)设置指定线程的上下文。
线程地区GetThreadLocale线程地区返回调用线程的当前区域设置的区域设置 标识符 。
地区线程SetThreadLocale地区线程(地区)设置调用线程的当前区域设置。
线程优先GetThreadPriority线程优先(线程)检索指定线程的优先级值。
优先线程SetThreadPriority优先线程(线程,优先级)设置指定线程的优先级值。
线程提升GetThreadPriorityBoost线程提升(线程,@状态)检索指定线程的优先级提升控制状态。状态为真表示已禁用动态提升。为假表示正常行为。
提升线程SetThreadPriorityBoost提升线程(线程,禁用)禁用或启用系统临时提升线程优先级的功能。
首选线程SetThreadIdealProcessor首选线程(线程,首选处理器)设置线程的首选处理器。系统尽可能在其首选处理器上计划线程。
线程选择GetThreadSelectorEntry线程选择(线程,选择器,@条目)检索指定的选择器和线程的描述符表条目。
线程计时GetThreadTimes线程计时(线程,@创建,@退出,@内核,@用户)检索指定线程的计时信息
加载库LoadLibraryA地址=加载库("jh.dll")获取或者加载某个链接库dll的地址空间
加载程序LoadModule加载程序(程序名,运行参数)载入一个windows应用程序,并在指定的环境中运行
加载模块LoadLibraryExA加载模块(文件名,0,操作)将指定的模块加载到调用进程的地址空间中。指定的模块可能会导致加载其他模块。
用户异步QueueUserAPC用户异步(回调,线程,附加)将用户模式 异步过程调用 (APC) 对象添加到指定线程的 APC 队列。
线程异步QueueUserAPC2线程异步(回调,线程,附加,标志)将用户模式 异步过程调用 对象添加到指定线程的 APC 队列。标志:0无,1特模式,2定向到中断
进程全名QueryFullProcessImageNameA进程全名(进程,标志,@映像名,@大小)检索指定进程的可执行映像的全名。标志:0=Win32路径,1=本机系统路径
引发异常RaiseException引发异常(异常代码,标志,组数,参数组)在调用线程中引发异常。标志:0连续异常,1不连续
请求唤醒RequestWakeupLatency请求唤醒(延迟)请求唤醒计算机。所需的时间的延迟要求:0正常,1低延迟。
取错模式GetErrorMode取错模式检索当前进程的错误模式
改错模式SetErrorMode改错模式(模式)控制系统是处理指定类型的严重错误,还是进程将处理这些错误。
限制作业SetInformationJobObject限制作业(作业,分类,信息,大小)设置作业对象的限制。
线程正用SetThreadExecutionState线程正用(状态)使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入睡眠状态或关闭显示器。
异常处理SetUnhandledExceptionFilter异常处理(筛选器)使应用程序能够取代进程每个线程的顶级异常处理程序。筛选器:0正常执行,1执行异常处理,0xffffffff从异常点继续执行
异常传递UnhandledExceptionFilter异常传递(异常记录)异常处理程序定义的函数,它将未经处理的异常传递给调试器。返回0正在调试,1已经执行
进程内存Toolhelp32ReadProcessMemory进程内存(进程ID,基址,内容,长度,@已读)读取指定进程PID和地址的内存数据
已被调试IsDebuggerPresent值=已被调试判断本进程是否处于调试模式
调试断点DebugBreak调试断点功能暂停程序执行,打开调试器,进入调试模式。
调试进程DebugActiveProcess调试进程(进程ID)调试某一个运行的进程
继续调试ContinueDebugEvent继续调试(进程ID,线程ID,选项)继续报告调试事件。选项$10002停止异常,$80010001继续异常
调试输出OutputDebugStringA调试输出(内容)向当前应用程序的调试器发送一个字符串
调试事件WaitForDebugEvent调试事件(结构,毫秒)等待调试事件发生在被调试的进程中,DEBUG_EVENT结构包含调试信息
调用展开RtlUnwind调用展开(调用帧,延续,结构,回值)启动过程调用帧的展开。
停止ExitProcess停止(0)指定进程的退出代码以及由于此调用而终止的所有线程
刷新指令FlushInstructionCache刷新指令(进程,基址,大小)刷新指定进程的指令高速缓存,让CPU加载新的指令
释放引用FreeLibrary释放引用(模块句柄)减少加载的动态链接库(DLL)模块的引用计数,为零时取消Dll的映射
释放模块FreeLibraryAndExitThread释放模块(模块,退出码)将加载的动态链接库(DLL) 的引用计数递减一,然后调用 退出线程 以终止调用线程。
查找模块Module32First查找模块(快照,模块类)检索与进程相关联的快照第一个模块的信息
下个模块Module32Next下个模块(快照,模块类)检索与进程相关联的快照下一个模块的信息
查找进程Process32First查找进程(快照,进程类)检索进程快照第一个进程的信息
下个进程Process32Next下个进程(快照,进程类)检索进程快照下一个进程的信息
打开进程OpenProcess打开进程(访问,继承,pid)返回现有进程对象pid的句柄
当前进程GetCurrentProcesspro=当前进程获得当前进程的句柄
进程标识GetCurrentProcessIdpid=进程标识获得当前进程的标识符PID
终止进程TerminateProcess终止进程(进程,退出码)终止指定的进程及其所有线程
模块名称GetModuleFileNameA长度=模块名称(模块,路径,长度)获取指定模块的可执行文件的完整路径和文件名,模块为0获取本进程
模块地址GetModuleHandleA模块=模块地址(模块名)获取指定模块(dll)的模块句柄,模块名为0获取本进程句柄
函数地址GetProcAddress函数1=函数地址(模块,函数名)获取指定的动态链接库(DLL)函数的地址,可使用 调用 函数1(参数..)来执行
进程状态GetExitCodeProcess进程状态(进程,@状态)获得指定进程的终止状态
取优先级GetPriorityClasslv=取优先级(进程)获取指定进程的优先级
改优先级SetPriorityClass改优先级(进程,lv)设置指定进程的优先级
最后错误GetLastError错误=最后错误返回调用线程的最后一个错误代码值
设置错误SetLastError设置错误(错误号)设置本程序的最后一个错误代码
运行WinExec运行(命令,显示)命令是程序路径,若有参数加空格.显示参见窗口显示方式
运行类
中文名字英文名称长度作用解释
运行类LOADPARMS3216用来运行一个外部程序。相关函数LoadModule
运行类 成员表
中文英文类型作用解释
环境lpEnvAddress整数指向运行环境的字符串。为空则与调用进程相同的环境启动
参数lpCmdLine整数指向运行程序的命令行参数字符串
显示lpCmdShow整数运行程序显示的模式
备用dwReserved整数必须是0
进程类
中文名字英文名称长度作用解释
进程类PROCESSENTRY32296用来获取系统进程的相关信息。
进程类——成员表
中文英文类型作用解释
长度dwSize整数指定这个结构的大小,以字节为单位。
引用cntUsage整数此进程的引用计数(已不再使用,总是零。)
编号th32ProcessID整数进程ID(任务管理器里进程的PID)
默认th32DefaultHeapID整数进程默认堆ID(已不再使用,总是零。)
模块th32ModuleID整数进程模块ID(已不再使用,总是零。)
线程cntThreads整数此进程开启的线程计数
父进程th32ParentProcessID整数父进程的ID
优先级pcPriClassBase整数线程优先权
标识dwFlags整数已不再使用,总是零。
名称szexeFile文本260字节长度的进程名称(不含路径)
模块类
中文名字英文名称长度作用解释
模块类MODULEENTRY321316用来获取指定进程加载模块(dll)的相关信息。
模块类——成员表
中文英文类型作用解释
长度dwSize整数指定这个结构的大小,以字节为单位。
模组th32ModuleID整数(已不再使用,总是1。)
进程th32ProcessID整数进程ID(任务管理器里进程的PID)
载入GlblcntUsage整数全局模块的载入次数(已不再使用,总是-1。)
引用ProccntUsage整数当前模块的引用次数(已不再使用,总是-1。)
基址modBaseAddr整数模块的基址,在其所属的进程范围内。
大小modBaseSize整数模块的大小,单位字节。
模块hModule整数所属进程的范围内,模块句柄。
名称szModule文本256字节长度的模块名称
路径szExePath文本1024字节长度的模块完整路径
进程基址类
中文名字英文名称长度作用解释
进程基址类PROCESS_BASIC_INFORMATION24包含了某个进程的相关信息。函数NtQueryInformationProcess
进程基址类——成员表
状态ExitStatus整数进程终止状态
基址PebBaseAddress整数进程环境块地址
掩码AffinityMask整数进程关联掩码
优先级BasePriority整数进程的优先级
进程UniqueProcessId整数进程ID
父进程InheritedFromUniqueProcessId整数父进程ID
加载模块操作标志
英文名称数值作用解释
DONT_RESOLVE_DLL_REFERENCES0x00000001如果使用此值,并且可执行模块是 DLL,则系统不会调用 DllMain 进行进程和线程初始化和终止。 此外,系统不会加载指定模块引用的其他可执行模块。
LOAD_IGNORE_CODE_AUTHZ_LEVEL0x00000010如果使用此值,则系统不会检查 AppLocker 规则或对 DLL 应用软件限制策略。 此操作仅适用于正在加载的 DLL,不适用于其依赖项。 建议在安装程序中使用此值,这些安装程序必须在安装过程中运行提取的 DLL。
LOAD_LIBRARY_AS_DATAFILE0x00000002如果使用此值,系统会将文件映射到调用进程的虚拟地址空间,就像它是数据文件一样。 执行或准备执行映射文件没有任何操作。 因此,不能使用此 DLL 调用 GetModuleFileName、 GetModuleHandle 或 GetProcAddress 等函数。 使用此值会导致写入只读内存引发访问冲突。 如果只想加载 DLL 以从中提取消息或资源,请使用此标志。
LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE0x00000040与 LOAD_LIBRARY_AS_DATAFILE类似,只不过 DLL 文件是使用调用进程的独占写入访问权限打开的。 其他进程在使用 DLL 文件时无法打开该文件进行写入访问。 但是,DLL 仍可由其他进程打开。
LOAD_LIBRARY_AS_IMAGE_RESOURCE0x00000020如果使用此值,系统会将文件作为图像文件映射到进程的虚拟地址空间中。 但是,加载程序不会加载静态导入或执行其他常规初始化步骤。 如果只想加载 DLL 以从中提取消息或资源,请使用此标志。
LOAD_LIBRARY_SEARCH_APPLICATION_DIR0x00000200如果使用此值,则会在应用程序的安装目录中搜索 DLL 及其依赖项。 不搜索标准搜索路径中的目录。 此值不能与 LOAD_WITH_ALTERED_SEARCH_PATH组合使用。
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS0x00001000此值是 LOAD_LIBRARY_SEARCH_APPLICATION_DIR、 LOAD_LIBRARY_SEARCH_SYSTEM32和 LOAD_LIBRARY_SEARCH_USER_DIRS的组合。 不搜索标准搜索路径中的目录。 此值不能与 LOAD_WITH_ALTERED_SEARCH_PATH组合使用。
LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR0x00000100如果使用此值,则包含 DLL 的目录将暂时添加到要搜索 DLL 依赖项的目录列表的开头。 不搜索标准搜索路径中的目录。
LOAD_LIBRARY_SEARCH_SYSTEM320x00000800如果使用此值,则会搜索 %windows%\system32 来查找 DLL 及其依赖项。 不搜索标准搜索路径中的目录。 此值不能与 LOAD_WITH_ALTERED_SEARCH_PATH组合使用。
LOAD_LIBRARY_SEARCH_USER_DIRS0x00000400如果使用此值,则使用 AddDllDirectory 或 SetDllDirectory 函数添加的目录将搜索 DLL 及其依赖项。 如果已添加多个目录,则未指定搜索目录的顺序。 不搜索标准搜索路径中的目录。 此值不能与 LOAD_WITH_ALTERED_SEARCH_PATH组合使用。
LOAD_WITH_ALTERED_SEARCH_PATH0x00000008如果使用此值并且 lpFileName 指定绝对路径,则系统会使用“备注”部分中讨论的备用文件搜索策略来查找指定模块导致加载的关联可执行模块。 如果使用此值,并且 lpFileName 指定相对路径,则行为未定义。
LOAD_LIBRARY_REQUIRE_SIGNED_TARGET0x00000080指定必须在加载时检查二进制映像的数字签名。
LOAD_LIBRARY_SAFE_CURRENT_DIRS0x00002000如果使用此值,则仅当 DLL 位于“安全加载”列表中的某个目录下时,才允许从当前目录加载要执行
进程信息类
中文名字英文名称长度作用解释
进程信息类PROCESS_INFORMATION16包含有关新创建的进程及其主线程的信息。
进程信息类 成员表
中文英文类型作用解释
进程hProcess整数新创建进程的句柄。句柄用于指定对进程对象执行操作的所有函数中的进程。
线程hThread整数新创建的进程的主线程的句柄。句柄用于指定对线程对象执行操作的所有函数中的线程。
进程号dwProcessId整数一个值,可用于标识进程。 值从创建进程时起有效,直到关闭进程的所有句柄并释放进程对象;此时,可以重复使用标识符。
线程号dwThreadId整数可用于标识线程的值。值从创建线程时起有效,直到关闭线程的所有句柄并释放线程对象;此时,可以重复使用标识符。
启动进程类
中文名字英文名称长度作用解释
启动进程类STARTUPINFOEXA72指定新进程的窗口工作站、桌面、标准句柄和属性。
启动进程类 成员表
中文英文类型作用解释
信息StartupInfo启动信息类STARTUPINFO 结构。
属性lpAttributeList整数属性列表。此列表由 InitializeProcThreadAttributeList 函数创建。
启动信息类
中文名字英文名称长度作用解释
启动信息类STARTUPINFOA68指定创建时进程的窗口工作站、桌面、标准句柄和main窗口的外观。
启动信息类 成员表
中文英文类型作用解释
大小cb整数结构的大小(以字节为单位)。
预留lpReserved整数保留;必须为 0。
桌面lpDesktop整数桌面的名称,或此过程的桌面和窗口工作站的名称。字符串中的反斜杠指示字符串同时包含桌面和窗口工作站名称。
标题lpTitle整数对于控制台进程,这是在创建新的控制台窗口时显示在标题栏中的标题。
dwX整数如果 标志 指定4,则此成员是创建新窗口时窗口左上角的 x 偏移量(以像素为单位)。
dwY整数如果 标志 指定4,则此成员是创建新窗口时窗口左上角的 y 偏移量(以像素为单位)。
dwXSize整数如果 标志 指定2,则此成员是创建新窗口时窗口的宽度(以像素为单位)。
dwYSize整数如果 标志 指定2,则此成员是创建新窗口时窗口的高度(以像素为单位)。
dwXCountChars整数如果 标志 指定8,如果在控制台进程中创建新的控制台窗口,则此成员以字符列为单位指定屏幕缓冲区宽度。
dwYCountChars整数如果 标志 指定8,如果在控制台进程中创建新的控制台窗口,则此成员以字符行为单位指定屏幕缓冲区高度。
属性dwFillAttribute整数如果 标志 指定0x10,则如果在控制台应用程序中创建新的控制台窗口,则此成员为初始文本和背景色。
标志标志整数确定进程创建窗口时是否使用某些成员的信息标志位域。
显示wShowWindow整数如果 标志 指定1,则此成员可以是SW_SHOWDEFAULT除外的任何窗口显示模式。否则,将忽略此成员。
备用lpReserved2整数保留供 C 运行时使用;必须为零。
输入hStdInput整数如果 标志 指定0x100,则此成员是进程的标准输入句柄。如果 标志 指定0x200,则此成员将指定一个热键值
输出hStdOutput整数如果 标志 指定0x100,则此成员是进程的标准输出句柄。 否则,将忽略此成员,标准输出的默认值为控制台窗口的缓冲区。
错误hStdError整数如果 标志 指定0x100,则此成员是进程的标准错误句柄。 否则,将忽略此成员,标准错误的默认值为控制台窗口的缓冲区。
启动信息标志
英文名称数值作用解释
STARTF_FORCEONFEEDBACK0x00000040指示在调用 创建进程 后光标处于反馈模式两秒钟。 显示“在后台工作”光标 (查看鼠标控制面板实用工具) 中的“指针”选项卡。如果在这两秒内进程进行第一次 GUI 调用,则系统会再给进程 5 秒。 如果在这五秒内进程显示一个窗口,则系统再给进程 5 秒以完成绘制窗口。系统在第一次调用 获取消息 后关闭反馈光标,无论进程是否正在绘制。
STARTF_FORCEOFFFEEDBACK0x00000080指示在进程启动时强制关闭反馈光标。 将显示“普通选择”光标。
STARTF_PREVENTPINNING0x00002000指示进程创建的任何窗口都不能固定在任务栏上。此标志必须与 STARTF_TITLEISAPPID 组合使用。
STARTF_RUNFULLSCREEN0x00000020指示进程应在全屏模式下运行,而不是在窗口模式下运行。此标志仅对 x86 计算机上运行的控制台应用程序有效。
STARTF_TITLEISAPPID0x00001000lpTitle 成员包含 AppUserModelID。 此标识符控制任务栏和 “开始” 菜单呈现应用程序的方式,并使它能够与正确的快捷方式和跳转列表相关联。 通常,应用程序将使用 SetCurrentProcessExplicitAppUserModelID 和 GetCurrentProcessExplicitAppUserModelID 函数,而不是设置此标志。 有关详细信息,请参阅 应用程序用户模型 ID。如果使用STARTF_PREVENTPINNING,则应用程序窗口不能固定在任务栏上。 应用程序使用与 AppUserModelID 相关的任何窗口属性仅覆盖该窗口的此设置。此标志不能与STARTF_TITLEISLINKNAME一起使用。
STARTF_TITLEISLINKNAME0x00000800lpTitle 成员包含用户为启动此过程而调用的快捷方式文件 (.lnk) 的路径。 这通常是在调用指向已启动应用程序的 .lnk 文件时由 shell 设置的。 大多数应用程序不需要设置此值。此标志不能与STARTF_TITLEISAPPID一起使用。
STARTF_UNTRUSTEDSOURCE0x00008000命令行来自不受信任的源。 有关详细信息,请参阅“备注”。
STARTF_USECOUNTCHARS0x00000008dwXCountChars 和 dwYCountChars 成员包含其他信息。
STARTF_USEFILLATTRIBUTE0x00000010dwFillAttribute 成员包含其他信息。
STARTF_USEHOTKEY0x00000200hStdInput 成员包含其他信息。此标志不能与 STARTF_USESTDHANDLES一起使用。
STARTF_USEPOSITION0x00000004dwX 和 dwY 成员包含其他信息。
STARTF_USESHOWWINDOW0x00000001wShowWindow 成员包含其他信息。
STARTF_USESIZE0x00000002dwXSize 和 dwYSize 成员包含其他信息。
STARTF_USESTDHANDLES0x00000100hStdInput、hStdOutput 和 hStdError 成员包含其他信息。如果在调用其中一个进程创建函数时指定此标志,则句柄必须是可继承的,并且函数的 bInheritHandles 参数必须设置为 TRUE。 有关详细信息,请参阅 处理继承。如果在调用 GetStartupInfo 函数时指定此标志,则这些成员要么是在进程创建期间指定的句柄值,要么INVALID_HANDLE_VALUE。当不再需要句柄时,必须使用 CloseHandle 关闭这些句柄。此标志不能与 STARTF_USEHOTKEY一起使用。
线程执行状态。可使用以下一个或多个值。
英文名称数值作用解释
ES_AWAYMODE_REQUIRED0x00000040启用离开模式。 必须使用 ES_CONTINUOUS 指定此值。离开模式只能由媒体录制和媒体分发应用程序使用,这些应用程序必须在计算机似乎处于睡眠状态时在台式计算机上执行关键后台处理。
ES_CONTINUOUS0x80000000通知系统正在设置的状态应保持有效,直到使用 ES_CONTINUOUS 的下一次调用和清除其他状态标志之一。
ES_DISPLAY_REQUIRED0x00000002通过重置显示空闲计时器强制显示处于打开状态。
ES_SYSTEM_REQUIRED0x00000001通过重置系统空闲计时器强制系统处于工作状态。
ES_USER_PRESENT0x00000004不支持此值。 如果 ES_USER_PRESENT 与其他值组合使用,则调用将失败,并且不会设置任何指定的状态。
进程错误模式。可使用以下一个或多个值。
英文名称数值作用
所有错误0使用系统默认值,即显示所有错误对话框。
SEM_FAILCRITICALERRORS0x0001系统不显示严重错误处理程序消息框。 相反,系统会将错误发送到调用进程。最佳做法是,所有应用程序在启动时调用参数为 SEM_FAILCRITICALERRORS 的进程范围的 SetErrorMode 函数。 这是为了防止错误模式对话框挂起应用程序。
SEM_NOALIGNMENTFAULTEXCEPT0x0004系统自动修复内存对齐错误,并使它们对应用程序不可见。 它为调用进程和任何后代进程执行此操作。 此功能仅受某些处理器体系结构支持。为进程设置此值后,将忽略后续尝试清除该值。
SEM_NOGPFAULTERRORBOX0x0002系统不显示Windows 错误报告对话框。
SEM_NOOPENFILEERRORBOX0x8000OpenFile 函数在找不到文件时不显示消息框。 相反,错误将返回到调用方。 此错误模式将替代 OF_PROMPT 标志。
命名管道、邮槽、作业
管道是进程用于通信的共享内存的一部分。 创建管道的过程是 管道服务器。 连接到管道的进程是 管道客户端。 一个进程将信息写入管道,另一个进程从管道读取信息。
有两种类型的管道: 匿名管道 和 命名管道。 与命名管道相比,匿名管道所需的开销更少,但服务有限。 此处使用的术语管道意味着管道用作信息管道。 从概念上讲,管道有两端。 单向管道允许一端的进程写入管道,并允许另一端的进程从管道中读取数据。 双向 (或双工) 管道允许进程从管道端读取和写入。

匿名管道

匿名管道是一种未命名的单向管道,通常在父进程和子进程之间传输数据。 匿名管道始终是本地管道;它们不能用于通过网络进行通信。
匿名管道操作
创建管道 函数创建匿名管道并返回两个句柄:管道的读取句柄和管道的写入句柄。 读取句柄对管道具有只读访问权限,写入句柄对管道具有只读访问权限。
若要使用管道进行通信,管道服务器必须将管道句柄传递给另一个进程。 通常,这是通过继承完成的;也就是说,进程允许子进程继承句柄。 
进程还可以使用 复制对象 函数复制管道句柄,并使用某种形式的进程间通信(例如 DDE 或共享内存)将其发送到不相关的进程。

管道服务器可以将读取句柄或写入句柄发送到管道客户端,具体取决于客户端是应使用匿名管道发送信息还是接收信息。
若要从管道读取数据,请在调用 读取文件 函数时使用管道的读取句柄。 当另一个进程写入管道时, 读取文件 调用将返回。
如果管道的所有写入句柄都已关闭,或者在读取操作完成之前发生错误, 读取文件 调用也可以返回 。

若要写入管道,请在调用 写入文件 函数时使用管道的写入句柄。 写入文件 调用在将指定字节数写入管道或发生错误之前不会返回。
如果管道缓冲区已满,并且有更多字节要写入, 则 写入文件 不会返回,直到另一个进程从管道读取,从而提供更多的缓冲区空间。
管道服务器在调用 创建管道 时指定管道的缓冲区大小。

匿名管道不支持异步 (重叠) 读取和写入操作。 这意味着不能将 读入文件 和 写出文件 函数用于匿名管道。
此外,当这些函数与匿名管道一起使用时,将忽略 读取文件 和 写入文件 的 重叠类 参数。

匿名管道存在,直到所有管道句柄(读取和写入)都已关闭。 进程可以使用 关闭对象 函数关闭其管道句柄。 当进程终止时,所有管道句柄也会关闭。

匿名管道是使用具有唯一名称的命名管道实现的。 因此,通常可以将匿名管道的句柄传递给需要命名管道句柄的函数。

管道句柄继承
管道服务器控制是否可以通过以下方式继承其句柄:

创建管道 函数接收安全属性类结构。 如果管道服务器将此结构的 继承 成员设置为 真,则可以继承 创建管道 创建的句柄。
管道服务器可以使用 复制对象 函数更改管道句柄的继承。 管道服务器可以创建可继承管道句柄的不可继承副本或不可继承管道句柄的可继承副本。
创建进程 函数使管道服务器能够指定子进程是继承其可继承的所有句柄还是不继承任何句柄。
当子进程继承管道句柄时,系统将允许该进程访问管道。 但是,父进程必须将句柄值传达给子进程。 
父进程通常通过将标准输出句柄重定向到子进程来执行此操作,如以下步骤所示:

调用 取控制台 函数以获取当前标准输出句柄;保存此句柄,以便在创建子进程后还原原始标准输出句柄。
调用 改控制台 函数,将标准输出句柄设置为管道的写入句柄。 现在,父进程可以创建子进程。
调用 关闭对象 函数以关闭管道的写入句柄。 子进程继承写入句柄后,父进程不再需要其副本。
调用 改控制台 以还原原始标准输出句柄。
子进程使用 取控制台 函数获取其标准输出句柄,该句柄现在是管道写入端的句柄。 然后,子进程使用 写入文件 函数将其输出发送到管道。
当子项完成管道处理后,它应通过调用 关闭对象 或通过终止(自动关闭句柄)来关闭管道句柄。

父进程使用 读取文件 函数从管道接收输入。 数据作为字节流写入匿名管道。 这意味着,从管道读取的父进程无法区分在单独的写入操作中写入的字节,
除非父进程和子进程都使用协议来指示写入操作的结束位置。 关闭管道的所有写入句柄时, 读取文件 函数将返回零。 在调用 读取文件 之前,
父进程必须将其句柄关闭到管道的写入端。 如果未完成此操作, 读取文件 操作将无法返回零,因为父进程具有指向管道写入端的打开句柄。

重定向标准输入句柄的过程与重定向标准输出句柄的过程类似,只不过管道的读取句柄用作子级的标准输入句柄。 在这种情况下,父进程必须确保子进程
不会继承管道的写入句柄。 如果未完成此操作,则子进程执行的 读取文件 操作无法返回零,因为子进程具有指向管道写入端的打开句柄。

匿名管道安全性和访问权限
Windows 安全性使你能够控制对匿名管道的访问。 有关安全性的详细信息,请参阅 访问控制模型。

调用 创建管道 函数时,可以为管道指定安全描述符。 安全描述符控制对管道读取和写入端的访问。
如果指定 NULL,管道将获取默认安全描述符。 管道的默认安全描述符中的 ACL 来自创建者的主要令牌或模拟令牌。

若要检索管道的安全描述符,请调用 取安全符 函数。 若要更改管道的安全描述符,请调用 改安全符 函数。

创建管道 函数向匿名管道返回两个句柄:具有0x80100000 访问权限的读取句柄;以及具有0x40100000 访问权限的写入句柄。
GENERIC_READ和GENERIC_WRITE访问使用与命名管道相同的访问权限映射。

匿名管道GENERIC_READ访问权限结合了从管道读取数据、读取管道属性、读取扩展属性和读取管道的 DACL 的权限。

匿名管道的GENERIC_WRITE访问权限结合了将数据写入管道、向其追加数据、写入管道属性、写入扩展属性和读取管道 DACL 的权限。

命名管道

命名管道是用于管道服务器与一个或多个管道客户端之间通信的命名、单向或双工管道。 命名管道的所有实例共享相同的管道名称,
但每个实例都有自己的缓冲区和句柄,并为客户端/服务器通信提供单独的管道。 通过使用实例,多个管道客户端可以同时使用同一个命名管道。

任何进程都可以访问命名管道,受到安全检查,使命名管道成为相关或不相关进程之间通信的简单形式。

任何进程都可以充当服务器和客户端,使对等通信成为可能。 在此处使用,术语管道服务器是指创建命名管道的进程,术语管道客户端是指连接到命名管道实例的进程。
用于实例化命名管道的服务器端函数是 创建名管。 用于接受连接的服务器端函数是 连接管道。 客户端进程使用 创建文件 或 调用管道 函数连接到命名管道。

命名管道可用于在同一台计算机上的进程之间或网络上不同计算机上的进程之间提供通信。 如果服务器服务正在运行,则所有命名管道都可以远程访问。
如果打算仅在本地使用命名管道,请拒绝对 NT AUTHORITY\NETWORK 的访问或切换到本地 RPC。
管道名称
每个命名管道都有一个唯一的名称,用于将其与系统命名对象列表中的其他命名管道区分开来。 管道服务器在调用 创建名管 函数以创建命名管道
的一个或多个实例时指定管道的名称。 管道客户端在调用 创建文件 或 调用管道 函数以连接到命名管道实例时指定管道名称。

在 创建文件、等待管道 或 调用管道 函数中指定管道的名称时,请使用以下形式:

\\ServerName\pipe\PipeName

其中 ,ServerName 是远程计算机的名称或句点,以指定本地计算机。 PipeName 指定的管道名称字符串可以包含反斜杠以外的任何字符,
包括数字和特殊字符。整个管道名称字符串的长度最多为 256 个字符。 管道名称不区分大小写。

管道服务器不能在另一台计算机上创建管道,因此 创建名管 必须为服务器名称使用句点,如以下示例所示。

\\.\pipe\PipeName

管道服务器可以向其管道客户端提供管道名称,以便它们可以连接到管道。 管道客户端从某些永久性源
(例如注册表项、文件或其他应用程序)中发现管道名称。 否则,客户端必须在编译时知道管道名称。
命名管道打开模式
管道服务器在 创建名管 函数的 dwOpenMode 参数中指定管道访问、重叠和写通模式。 管道客户端可以使用 创建文件 函数为其管道句柄指定这些打开模式。

访问模式
设置管道访问模式等效于指定与管道服务器的句柄关联的读取或写入访问权限。 下表显示了可使用 创建名管 指定的每个访问模式的等效泛型访问权限。
访问模式等效的泛型访问权限
PIPE_ACCESS_INBOUND GENERIC_READ
PIPE_ACCESS_OUTBOUND GENERIC_WRITE
PIPE_ACCESS_DUPLEXGENERIC_READ |GENERIC_WRITE
如果管道服务器使用 PIPE_ACCESS_INBOUND 创建管道,则管道服务器为只读管道,管道客户端为只读。 如果管道服务器使用PIPE_ACCESS_OUTBOUND创建管道,
则管道服务器为只读管道,管道客户端为只读。 使用 PIPE_ACCESS_DUPLEX 创建的管道对于管道服务器和管道客户端都是可读/写的。

使用 创建文件 连接到命名管道的管道客户端必须在 读写 参数中指定与管道服务器指定的访问模式兼容的访问权限。
例如,客户端必须指定GENERIC_READ访问权限才能打开管道服务器使用 PIPE_ACCESS_OUTBOUND 创建的管道的句柄。对于管道的所有实例,访问模式必须相同。

若要读取管道属性(如读取模式或阻止模式),管道句柄必须具有FILE_READ_ATTRIBUTES访问权限;若要写入管道属性,管道句柄必须具有FILE_WRITE_ATTRIBUTES访问权限。
这些访问权限可以与适用于管道的通用访问权限组合使用:GENERIC_READ具有只读管道的FILE_WRITE_ATTRIBUTES,或对只读管道使用FILE_READ_ATTRIBUTES GENERIC_WRITE。
以这种方式限制访问权限可为管道提供更好的安全性。

重叠模式
在重叠模式下,执行长时间读取、写入和连接操作的函数可以立即返回。 这使线程能够在后台执行耗时操作时执行其他操作。
若要指定重叠模式,请使用 FILE_FLAG_OVERLAPPED 标志。 有关详细信息,请参阅 同步和重叠输入和输出。

创建文件 函数允许管道客户端使用 属性 参数为其管道句柄设置重叠模式 (FILE_FLAG_OVERLAPPED) 。

Write-Through模式
使用 FILE_FLAG_WRITE_THROUGH 指定写通模式。 此模式仅影响对不同计算机上的管道客户端和管道服务器之间的字节类型管道的写入操作。
在写通模式下,写入命名管道的函数在数据通过网络传输并进入远程计算机上的管道缓冲区之前不会返回。 对于每个写入操作需要同步的应用程序,写通模式非常有用。

如果未启用写通模式,系统会通过缓冲数据来提高网络操作的效率,直到累积最小字节数或最长时间段已过。 缓冲使系统能够将多个写入操作合并到单个网络传输中。
这意味着,在系统将数据放入出站缓冲区之后,但在系统通过网络传输数据之前,写入操作可以成功完成。

创建文件 函数允许管道客户端使用 属性 参数为其管道句柄设置写通模式 (FILE_FLAG_WRITE_THROUGH) 。
创建管道句柄后,无法更改管道句柄的写通模式。 对于同一管道实例的服务器和客户端句柄,写通模式可能不同。
管道客户端可以使用 名管模式 函数来控制禁用写通模式的管道的字节数和传输前的超时期限。
对于只读管道,必须使用GENERIC_READ打开管道句柄,并FILE_WRITE_ATTRIBUTES访问权限。
命名管道 ——相关函数
中文名称英文名称示例作用
复制对象DuplicateHandle复制对象(源进程,源对象,目标进程,
@目标对象,权限,继承,选项)
复制对象句柄。继承为真新进程可以继承目标对象;选项:1关闭源对象,2忽略权限
对象属性GetHandleInformation对象属性(对象,@属性)检索对象句柄的某些属性。1子进程继承,2不能关闭对象
对象改性SetHandleInformation对象改性(对象,掩码,属性)检索对象句柄的某些属性。掩码和属性相同:1子进程继承,2不能关闭对象
创建作业CreateJobObjectA创建作业(属性结构,作业名)创建或打开作业对象命名空间。
终止作业TerminateJobObject终止作业(作业,退出码)终止当前与作业关联的所有进程。
创建管道CreatePipe创建管道(@读取,@写入,继承,大小)创建匿名管道,并将句柄返回到管道的读取端和写入端。
创建名管CreateNamedPipeA创建名管(\\.\pipe\名称,打开,管道,实例数,
输入量,输出量,超时,继承)
创建命名管道的实例,并返回后续管道操作的句柄。超时:毫秒数
调用管道CallNamedPipeA调用管道(名称,数据,大小,@缓冲,长度,@已读,超时)连接到消息类型管道,并在管道实例不可用时等待,对管道进行写入和读取,然后关闭管道。超时:毫秒数,0默认,1不等待,0xffffffff无限等
连接管道ConnectNamedPipe连接管道(管道,重叠类)允许命名管道服务器进程等待客户端进程连接到命名管道的实例。
创建邮槽CreateMailslotA创建邮槽(\\.\mailslot\名称,大小,超时,继承)使用指定名称创建邮件槽,并返回邮件槽服务器可用于对邮件槽执行操作的句柄。超时:毫秒数,-1永远
断开名管DisconnectNamedPipe断开名管(模块)断开命名管道实例的服务器端与客户端进程的连接。
邮槽信息GetMailslotInfo邮槽信息(邮槽,@最大,@下条消息长,
@待收,@超时)
检索有关标识符指定的区域设置的信息。
邮槽超时SetMailslotInfo邮槽超时(邮槽,超时)设置指定邮槽用于读取操作的超时值。毫秒:0立即返回,-1永远等待
名管机名GetNamedPipeClientComputerNameA名管机名(命名管道,@名称,大小)检索指定命名管道的客户端计算机名称。
名管进程GetNamedPipeClientProcessId名管进程(命名管道,@进程编号)检索指定命名管道的客户端进程标识符。
名管会话GetNamedPipeClientSessionId名管会话(命名管道,@会话编号)检索指定命名管道的客户端会话标识符。
名管状态GetNamedPipeHandleStateA名管状态(命名,@状态,@例数,@长度,
@时间,@用户,@名长)
检索有关指定命名管道的信息。状态:1非阻塞,2消息读取(否则字节读取)
名管远程GetNamedPipeServerProcessId名管远程(命名管道,@进程编号)检索指定命名管道的服务器进程标识符。
名管对话GetNamedPipeServerSessionId名管对话(命名管道,@会话编号)检索指定命名管道的服务器会话标识符。
名管信息GetNamedPipeInfo名管信息(名管,@类型,@传出,@传入,@例数)检索有关指定命名管道的信息。类型:1服务端,4消息管道(否则字节管道)
名管读取PeekNamedPipe名管读取(名管,@数据,大小,@已读,@总长,@剩余)将数据从命名管道或匿名管道复制到缓冲区中,而不将其从管道中删除。
名管模式SetNamedPipeHandleState名管模式(名管,模式,最大,超时)设置指定命名管道的读取模式和阻止模式。0字节流,2消息流,1非阻止
名管读写TransactNamedPipe名管读写(名管,输入,大小,@接收,长度,@已读,重叠类)将向指定命名管道写入消息并从中读取消息的函数合并为单个操作。
作业信息QueryInformationJobObject作业信息(作业,分类,@信息,大小,@已收)从作业对象检索限制和作业状态信息。
改句柄数SetHandleCount改句柄数(数量)更改进程可用的文件句柄数。DOS进程可用的默认最大文件句柄数为20。Windows系统不起作用。
等待管道WaitNamedPipeA等待管道(名称,毫秒)等待超时间隔过去或指定命名管道的实例可用于连接;超时为0是默认,-1是无限等待
命名管道打开模式——使用标志
英文名称数值作用
此参数必须指定以下管道访问模式之一。 必须为管道的每个实例指定相同的模式。
PIPE_ACCESS_DUPLEX0x00000003管道是双向的;服务器和客户端进程都可以从管道读取和写入管道。 此模式为服务器提供 对管道的等效GENERIC_READ 和 GENERIC_WRITE 访问权限。 当客户端使用 CreateFile 函数连接到管道时,可以指定GENERIC_READ或GENERIC_WRITE,或者同时指定这两者。
PIPE_ACCESS_INBOUND0x00000001管道中的数据流仅从客户端流向服务器。 此模式为服务器提供对管道 的等效GENERIC_READ 访问权限。 连接到管道时,客户端必须指定 GENERIC_WRITE 访问。 如果客户端必须通过调用 GetNamedPipeInfo 或 GetNamedPipeHandleState 函数来读取管道设置,则客户端必须在连接到管道时指定 GENERIC_WRITE 并 FILE_READ_ATTRIBUTES 访问。
PIPE_ACCESS_OUTBOUND0x00000002管道中的数据流仅从服务器流向客户端。 此模式为服务器提供等效于 GENERIC_WRITE 访问管道的权限。 连接到管道时,客户端必须指定 GENERIC_READ 访问。 如果客户端必须通过调用 SetNamedPipeHandleState 函数更改管道设置,则客户端必须在连接到管道时指定 GENERIC_READ 和 FILE_WRITE_ATTRIBUTES 访问。
此参数还可以包括以下一个或多个标志,这些标志启用写通模式和重叠模式。
FILE_FLAG_FIRST_PIPE_INSTANCE0x00080000如果尝试使用此标志创建管道的多个实例,则创建第一个实例会成功,但创建下一个实例会失败并 ERROR_ACCESS_DENIED。
FILE_FLAG_WRITE_THROUGH0x80000000已启用写通模式。 此模式仅影响对字节类型管道的写入操作,并且仅当客户端和服务器进程位于不同计算机上时才影响写入操作。 如果启用此模式,则写入命名管道的函数不会返回,直到写入的数据通过网络传输并且位于远程计算机上的管道缓冲区中。 如果未启用此模式,系统会通过缓冲数据,直到最小字节数累积或最长时间结束,来提高网络操作的效率。
FILE_FLAG_OVERLAPPED0x40000000已启用重叠模式。 如果启用此模式,执行读取、写入和连接操作(可能需要很长时间才能完成)的函数会立即返回。 此模式使启动操作的线程能够在后台执行耗时操作时执行其他操作。 例如,在重叠模式下,线程可以处理同时输入和输出 (多个管道实例上的 I/O) 操作,或在同一管道句柄上同时执行读取和写入操作。 如果未启用重叠模式,则在操作完成之前,对管道句柄执行读取、写入和连接操作的函数不会返回。 ReadFileEx 和 WriteFileEx 函数只能与重叠模式下的管道句柄一起使用。 ReadFile、WriteFile、ConnectNamedPipe 和 TransactNamedPipe 函数可以同步执行,也可以作为重叠操作执行。
此参数可以包括以下安全访问模式的任意组合。 对于同一管道的不同实例,这些模式可能不同。
WRITE_DAC0x00040000调用方将具有对命名管道的任意访问控制列表 (ACL) 的写入访问权限。
WRITE_OWNER0x00080000调用方将具有对命名管道所有者的写入访问权限。
ACCESS_SYSTEM_SECURITY0x01000000调用方将具有对命名管道的 SACL 的写入访问权限。 有关详细信息,请参阅 访问控制列表 (ACL) 和 SACL 访问权限。
管道模式——使用标志
英文名称数值作用
可以指定以下类型模式之一。 必须为管道的每个实例指定相同的类型模式。
PIPE_TYPE_BYTE0x00000000数据作为字节流写入管道。 此模式不能与PIPE_READMODE_MESSAGE一起使用。 管道不区分在不同写入操作期间写入的字节。
PIPE_TYPE_MESSAGE0x00000004数据作为消息流写入管道。 管道将每次写入操作期间写入的字节视为消息单元。 GetLastError 函数在未完全读取消息时返回ERROR_MORE_DATA。 此模式可与 PIPE_READMODE_MESSAGE 或 PIPE_READMODE_BYTE 一起使用。
可以指定以下读取模式之一。同一管道的不同实例可以指定不同的读取模式。
PIPE_READMODE_BYTE0x00000000数据作为字节流从管道中读取。 此模式可用于 PIPE_TYPE_MESSAGE 或 PIPE_TYPE_BYTE。
PIPE_READMODE_MESSAGE0x00000002数据作为消息流从管道中读取。 仅当还指定 了PIPE_TYPE_MESSAGE 时,才能使用此模式。
可以指定以下等待模式之一。 同一管道的不同实例可以指定不同的等待模式。
PIPE_WAIT0x00000000启用阻止模式。 在 ReadFile、 WriteFile 或 ConnectNamedPipe 函数中指定管道句柄时,在有要读取的数据、写入所有数据或连接客户端之前,这些操作不会完成。 在某些情况下,使用此模式意味着无限期等待客户端进程执行操作。
PIPE_NOWAIT0x00000001启用非阻止模式。 在此模式下, ReadFile、 WriteFile 和 ConnectNamedPipe 始终立即返回。
可以指定以下远程客户端模式之一。 同一管道的不同实例可以指定不同的远程客户端模式。
PIPE_ACCEPT_REMOTE_CLIENTS0x00000000可以接受来自远程客户端的连接,并对照管道的安全描述符进行检查。
PIPE_REJECT_REMOTE_CLIENTS0x00000008来自远程客户端的连接将自动被拒绝。
作业要查询的限制的信息类
英文名称数值作用解释
JobObjectBasicAccountingInformation1信息 参数是指向JOBOBJECT_BASIC_ACCOUNTING_INFORMATION结构的指针。
JobObjectBasicAndIoAccountingInformation8信息 参数是指向JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION结构的指针。
JobObjectBasicLimitInformation2信息 参数是指向JOBOBJECT_BASIC_LIMIT_INFORMATION结构的指针。
JobObjectBasicProcessIdList3信息 参数是指向JOBOBJECT_BASIC_PROCESS_ID_LIST结构的指针。
JobObjectBasicUIRestrictions4信息 参数是指向JOBOBJECT_BASIC_UI_RESTRICTIONS结构的指针。
JobObjectCpuRateControlInformation15信息 参数是指向JOBOBJECT_CPU_RATE_CONTROL_INFORMATION结构的指针。
JobObjectEndOfJobTimeInformation6信息 参数是指向JOBOBJECT_END_OF_JOB_TIME_INFORMATION结构的指针。
JobObjectExtendedLimitInformation9信息 参数是指向JOBOBJECT_EXTENDED_LIMIT_INFORMATION结构的指针。
JobObjectGroupInformation11信息 参数是指向接收作业当前分配到的处理器组列表的缓冲区的指针。 lpReturnLength 参数指向的变量设置为组数据的大小。 将此值除以 sizeof(USHORT) 可确定组数。
JobObjectGroupInformationEx14信息 参数是指向缓冲区的指针,该缓冲区接收GROUP_AFFINITY结构数组,这些结构指示作业当前分配到的处理器组中作业的相关性。 lpReturnLength 参数指向的变量设置为组相关性数据的大小。 将此值除以结构长度可确定组数。
JobObjectLimitViolationInformation13信息 参数是指向JOBOBJECT_LIMIT_VIOLATION_INFORMATION结构的指针。
JobObjectLimitViolationInformation234信息 参数是指向JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2结构的指针。
JobObjectNetRateControlInformation32信息 参数是指向JOBOBJECT_NET_RATE_CONTROL_INFORMATION结构的指针。
JobObjectNotificationLimitInformation12信息 参数是指向JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION结构的指针。
JobObjectNotificationLimitInformation233信息 参数是指向JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2结构的指针。
JobObjectSecurityLimitInformation5不支持此标志。 应用程序必须为每个进程单独设置安全限制。 Windows Server 2003 和 Windows XP: 信息 参数是指向JOBOBJECT_SECURITY_LIMIT_INFORMATION结构的指针。
同步异步——使用简介
若要同步对资源的访问,请在其中一个等待函数中使用其中一个同步对象。 同步对象的状态为 已发出信号 或 未签名。
等待函数允许线程阻止自身的执行,直到指定的未签名对象设置为信号状态。 有关详细信息,请参阅 进程间同步。

等待函数

等待函数允许线程阻止其自己的执行。在满足指定条件之前不会返回。等待函数的类型确定所使用的条件集。调用时会检查是否已满足等待条件。 如果未满足条件,则调用线程将进入等待状态,直到满足等待条件的条件或指定的超时间隔已过。 单对象等待函数 对象等单、等单对象 和 等待对象 函数需要一个同步对象的句柄。 发生以下任一情况时,这些函数将返回: 指定的对象处于已发出信号的状态。 超时间隔已过。 超时间隔可以设置为0xFFFFFFFF,以指定等待不会超时。 对象等单 函数使调用线程能够以原子方式将对象的状态设置为信号,并等待另一个对象的状态设置为信号。 多对象等待函数 等多对象、等列对象、等多消息 和 等列消息 函数使调用线程能够指定包含一个或多个同步对象句柄的数组。 发生以下任一情况时,这些函数将返回: 任何一个指定对象的状态都设置为“已发出信号”,或者所有对象的状态都已设置为“已发出信号”。 你可以控制在函数调用中使用一种还是所有状态。 超时间隔已过。 超时间隔可以设置为 0xFFFFFFFF ,以指定等待不会超时。 使用 等多消息 和 等列消息 函数,可以在对象句柄数组中指定输入事件对象。 这是在线程的输入队列中指定要等待的输入类型时完成的。例如,线程可以使用 等多消息 阻止其执行,直到指定对象的状态设置为已发出信号,并且线程的输入队列中有可用的鼠标输入。可以使用 获取消息 或 查探消息 函数来检索输入。 当等待所有对象的状态设置为信号时,这些多对象函数不会修改指定对象的状态,直到所有对象的状态都已设置信号。 例如,可以向互斥对象的状态发出信号, 但在数组中指定的其他对象的状态也设置为信号之前,调用线程不会获得所有权。 同时,其他一些线程可能会获得互斥对象的所有权,从而将其状态设置为非签名。 在等待单个对象的状态设置为信号时,这些多对象函数检查数组中的句柄,从索引 0 开始,直到向其中一个对象发出信号。 如果多个对象被发出信号,函数将返回数组中第一个句柄的索引,该句柄已发出对象信号。 可警报等待函数 等列消息、对象等单、等列对象 和 等待对象 函数与其他等待函数不同,因为它们可以选择执行可警报的等待操作。 在可发出警报的等待操作中, 函数可以在满足指定条件时返回,但如果系统将 I/O 完成例程或 APC 排队等待线程执行,函数也可以返回。 已注册的等待函数 列线程池 函数与其他等待函数的不同之处在于,等待操作由线程池中的线程执行。 满足指定条件时,回调函数由线程池中的工作线程执行。 默认情况下,已注册的等待操作是多等待操作。 每次向事件发出信号时,系统都会重置计时器 (或超时间隔) ,直到调用 注销等待 函数来取消操作。 若要指定等待操作应只执行一次,请将 列线程池 的 标志 参数设置为 8。如果线程调用使用 APC 的函数,请将 列线程池 的 标志 参数设置为 0x80。 正在等待地址 线程可以使用 WaitOnAddress 函数来等待目标地址的值从某些不需要的值更改为任何其他值。 这使线程能够等待值更改, 而无需旋转或处理线程捕获不需要的值但值更改后线程可以等待时可能出现的同步问题。 当修改目标值的代码通过调用 WakeByAddressSingle 来唤醒单个等待线程或调用 WakeByAddressAll 来唤醒所有等待线程来发出更改信号时,WaitOnAddress 将返回。 如果使用 WaitOnAddress 指定了超时间隔,并且没有线程调用唤醒函数,则当超时间隔过后,该函数将返回。 如果未指定超时间隔,则线程将无限期等待。 等待函数和超时间隔 指定超时间隔的准确性取决于系统时钟的分辨率。系统时钟以恒定速率“滴答”。如果超时间隔小于系统时钟的分辨率,则等待可能会少于指定的时间长度。 如果超时间隔大于一个刻度,但小于两个刻度周期,则等待时间可以是介于 1 和 2 个刻度之间的任意位置,依此类比。 若要提高等待函数超时间隔的准确性,请调用 timeGetDevCaps 函数来确定支持的最小计时器分辨率,并调用 timeBeginPeriod 函数将计时器分辨率设置为其最小值。 调用 timeBeginPeriod 时请谨慎,因为频繁调用可能会显著影响系统时钟、系统电源使用情况和计划程序。 如果调用 timeBeginPeriod,请在应用程序早期调用一次,并确保在应用程序最末尾调用 timeEndPeriod 函数。 等待函数和同步对象 等待函数可以修改某些类型的 同步对象的状态。 仅针对其信号状态导致函数返回的对象或对象进行修改。等待函数可以修改同步对象的状态,如下所示: 信号灯对象的计数将减少一个,如果信号量计数为零,则信号灯的状态将设置为无信号。 互斥、自动重置事件和更改通知对象的状态设置为不对齐。 同步计时器的状态设置为“未签名”。 手动重置事件、手动重置计时器、进程、线程和控制台输入对象的状态不受等待函数的影响。 等待函数和创建窗口 使用直接或间接创建窗口的等待函数和代码时必须小心。 如果线程创建任何窗口,它必须处理消息。 消息广播将发送到系统中的所有窗口。 如果有一个线程使用没有超时间隔的等待函数,系统会死锁。 间接创建窗口的两个代码示例是 DDE 和 初始化库 函数。 因此,如果你有创建窗口的线程,请使用 等多消息 和 等列消息,而不是其他等待函数。

同步对象

同步对象是一个对象,可以在其中一个等待函数中指定其句柄,以协调多个线程的执行。多个进程可以具有同一同步对象的句柄,使进程间同步成为可能。
以下对象类型专用于同步。
类型说明
事件 通知一个或多个正在等待的线程已发生事件。 有关详细信息,请参阅 事件对象
Mutex 一次只能由一个线程拥有,使线程能够协调对共享资源的互斥访问。 有关详细信息,请参阅 互斥对象
Semaphore 维护零和某个最大值之间的计数,从而限制同时访问共享资源的线程数。 有关详细信息,请参阅 Semaphore 对象
可等待计时器 通知一个或多个等待线程已到达指定时间。 有关详细信息,请参阅 可等待计时器对象

以下对象虽然可用于其他用途,但也可用于同步。

对象说明
更改通知 由 初改通知 函数创建,其状态设置为在指定目录或目录树中发生指定类型的更改时发出信号。 有关详细信息,请参阅 获取目录更改通知
控制台输入 在创建控制台时创建。 指定 CONIN$ 时,创建文件 函数或 取控制台 函数返回控制台输入的句柄。 当主机的输入缓冲区中存在未读输入时,
其状态设置为信号;当输入缓冲区为空时,其状态设置为“未对齐”。 有关控制台的详细信息,请参阅 字符模式应用程序
作业 通过调用 创建作业 函数创建。 作业对象的状态设置为在终止其所有进程时发出信号,因为已超出指定的作业结束时间限制。 有关作业对象的详细信息,请参阅 作业对象
内存资源通知 由 内存通知 函数创建。 其状态设置为在物理内存中发生指定类型的更改时发出信号。 有关内存的详细信息,请参阅 内存管理
进程 通过调用 创建进程 函数创建。 进程运行时,其状态设置为“未对齐”,并在进程终止时设置为“已发出信号”。 有关进程的详细信息,请参阅 进程和线程
线程 通过调用 创建进程、 创建线程 或 远程线程 函数创建新线程时创建。 当线程运行时,其状态设置为“非对齐”,并在线程终止时设置为“已发出信号”。 有关线程的详细信息,请参阅 进程和线程
在某些情况下,还可以使用文件、命名管道或通信设备作为同步对象;但是,不建议将其用于此目的。 请改用异步 I/O 并等待 在 OVERLAPPED 结构中设置的事件对象。
使用事件对象更安全,因为在同一文件、命名管道或通信设备上执行多个同时重叠操作时,可能会出现混淆。 在这种情况下,无法知道哪个操作导致对象状态被发出信号。

事件对象

事件对象是一个同步对象,其状态可以通过使用 修改事件 函数显式设置为发出信号。 下面是两种类型的事件对象。
手动重置事件对象,其状态在 重置事件 函数显式重置为非信号之前保持信号。 发出信号时,可以释放任意数量的等待线程或随后在其中一个 等待函数中指定相同事件对象的线程。
自动重置事件对象,其状态一直保持信号,直到释放单个等待线程,此时系统会自动将状态设置为未签名。 如果没有线程在等待,则事件对象的状态将保持已发信号状态。
如果有多个线程正在等待,则选择一个等待线程。 不要假设先入先出 (FIFO) 顺序。 外部事件(如内核模式 APC)可以更改等待顺序。
事件对象在向线程发送指示已发生特定事件的信号时很有用。 例如,在重叠的输入和输出中,当重叠操作完成时,系统会将指定的事件对象设置为信号状态。
单个线程可以在多个同时重叠的操作中指定不同的事件对象,然后使用其中一个多对象 等待函数 来等待任何一个事件对象的状态被发出信号。

线程使用 创建事件 或 新建事件 函数创建事件对象。 创建线程指定对象的初始状态,以及它是手动重置事件对象还是自动重置事件对象。创建线程还可以指定事件对象的名称。
 其他进程中的线程可以通过在对 打开事件 函数的调用中指定其名称来打开现有事件对象的句柄。 有关互斥体、事件、信号灯和计时器对象的名称的其他信息,请参阅 进程间同步。
 

互斥对象

互斥对象是一个同步对象,当它不受任何线程拥有时,其状态设置为信号;当它拥有时,状态设置为信号。 一次只有一个线程可以拥有互斥对象,
该对象的名称来自这样一个事实,即它有助于协调对共享资源的互斥访问。 例如,为了防止两个线程同时写入共享内存,
每个线程先等待互斥对象的所有权,然后再执行访问内存的代码。 写入共享内存后,线程释放互斥对象。

线程使用 创建互斥 或 新建互斥 函数创建互斥对象。 创建线程可以请求互斥对象的即时所有权,还可以指定互斥对象的名称。
它还可以创建未命名的互斥体。 有关互斥体、事件、信号量和计时器对象的名称的其他信息,请参阅 进程间同步。

其他进程中的线程可以通过在调用 打开互斥 函数时指定其名称来打开现有命名互斥对象句柄。
若要将句柄传递给未命名的互斥体到另一个进程,请使用 复制对象 函数或父子句柄继承。

具有互斥对象句柄的任何线程都可以使用 等待函数 之一来请求互斥对象的所有权。 如果互斥对象由另一个线程拥有,则等待函数会阻止请求线程,
直到拥有的线程使用 释放互斥 函数释放互斥对象。等待函数的返回值指示函数是否返回的原因,而不是设置为信号的互斥状态。

如果多个线程正在等待互斥体,则会选择一个正在等待的线程。 不要假定先入先出 (FIFO) 顺序。 外部事件(如内核模式 APC)可以更改等待顺序。

线程获得互斥体的所有权后,它可以在对等待函数的重复调用中指定相同的互斥,而不会阻止其执行。 这可以防止线程在等待它已拥有的互斥体时自行死锁。
若要在此类情况下释放其所有权,每次互斥体满足等待函数的条件时,线程都必须调用 释放互斥 一次。

如果线程终止而不释放其互斥对象的所有权,则互斥对象被视为已放弃。 等待线程可以获取已放弃互斥对象的所有权,但等待函数将返回 0x80 指示互斥对象已放弃。
放弃的互斥对象表示发生了错误,并且受互斥对象保护的任何共享资源都处于未定义状态。如果线程未放弃互斥对象,在线程释放其所有权后,不再将其视为已放弃。
如果随后在等待函数中指定互斥对象的句柄将还原正常行为。请注意关键节对象 提供的同步类似于互斥对象提供的同步,只是关键节对象只能由单个进程的线程使用。

信号灯对象


信号灯对象是保持零和指定最大值之间的计数的同步对象。 每次线程完成等待信号灯对象时,计数都会递减,每次线程释放信号灯时计数都会递增。当计数达到零时,
没有更多的线程可以成功等待信号灯对象状态变为信号。当计数大于零时,会将信号量的状态设置为已发出信号;当计数为零时,会将信号量的状态设置为未发出信号。

信号灯对象可用于控制可支持有限数量的用户的共享资源。 它充当一个入口,将共享资源的线程数限制为指定的最大数目。 例如,应用程序可能会限制其创建的窗口数。
它使用最大计数等于窗口限制的信号灯,每次创建窗口时递减计数,并在窗口关闭时递增。 应用程序在创建每个窗口之前,在调用其中一个等待函数 时指定信号灯对象。
当计数为零(指示已达到窗口限制)时,等待函数将阻止执行窗口创建代码。

线程使用 创建信号 或 新建信号 函数创建信号灯对象。 创建线程指定对象的初始计数和最大值。 初始计数不能小于零,也不能大于最大值。
创建线程还可以指定信号灯对象的名称。 其他进程中的线程可以通过在调用 打开信号 函数时指定其名称来打开现有信号灯对象的句柄。 

如果多个线程正在一个信号灯上等待,则会选择一个等待的线程。 不要假设先入先出 (FIFO) 顺序。 外部事件(如内核模式 APC)可以更改等待顺序。

每当一个 等待函数 返回时,由于信号灯的状态设置为信号,信号灯的计数将减少 1。 信号增量 函数将信号灯的计数增加指定的量。 计数不能小于零或大于最大值。

信号灯的初始计数通常设置为最大值。随着受保护资源的消耗,计数将从该级别递减。可以创建初始计数为零的信号灯,以在初始化应用程序时阻止对受保护资源的访问。
初始化后,可以使用 信号增量 将计数递增到最大值。

拥有互斥对象的线程可以重复等待同一互斥对象成为信号,而不会阻止其执行。 但是,如果线程重复等待同一信号灯对象,则每次完成等待操作时都会递减信号灯的计数;
当计数为零时,线程被阻止。 同样,只有拥有互斥体的线程才能成功调用 释放互斥 函数,但任何线程都可以使用 信号增量 来增加信号灯对象的计数。

线程可以在调用任何 等待函数时重复指定同一信号灯对象,从而多次递减信号灯的计数。但使用包含同一信号灯的多个句柄的数组调用其中一个多对象等待函数不会导致多次递减。

使用完信号灯对象后,调用 关闭对象 函数以关闭句柄。 信号灯对象在其最后一个句柄已关闭时被销毁。 关闭句柄不会影响信号灯计数;
因此,请确保在关闭句柄之前或进程终止之前调用 信号增量 。 否则,挂起的等待操作将超时或无限期地继续,具体取决于是否已指定超时值。

可等待计时器对象

可等待计时器对象是同步对象,其状态设置为在指定的到期时间到达时发出信号。 可以创建两种类型的可等待计时器:手动重置和同步。计时器也可以是定期计时器。
手动重置计时器,其状态在调用 设置延时 以建立新的到期时间之前保持信号。
同步计时器	在线程完成对计时器对象的等待操作之前,其状态保持信号的计时器。
定期计时器,该计时器在每次指定的时间段过期时重新激活,直到计时器重置或取消。是定期手动重置计时器或定期同步计时器。
备注
当计时器发出信号时,处理器必须运行 来处理关联的指令。 高频率定期计时器使处理器持续繁忙,从而防止系统在任何有意义的时间内保持低功耗 状态 。
这可能对便携式计算机的电池使用时间和依赖于有效电源管理的方案(如大型数据中心)产生负面影响。为了提高能效,请考虑在应用程序中使用基于事件的通知,
而不是基于时间的通知。如果需要计时器,请使用发出一次信号的计时器而不是定期计时器,或将间隔设置为大于 1 秒的值。

线程使用 创建延时 或 新建延时 函数创建计时器对象。 创建线程指定计时器是手动重置计时器还是同步计时器。 创建线程可以指定计时器对象的名称。
其他进程中的线程可以通过在对打开延时函数的调用中指定其名称来打开现有计时器的句柄。具有计时器对象句柄的任何线程都可以使用等待计时器状态设置为信号。

线程调用 设置延时 函数来激活计时器。 请注意, 设置延时 使用以下参数:
使用 时间 参数指定计时器设置为信号状态的时间。 当手动重置计时器设置为信号状态时,它将保持此状态,直到 设置延时 建立新的到期时间。
当同步计时器设置为信号状态时,它将保持此状态,直到线程完成对计时器对象的等待操作。
使用 设置延时 函数的 周期 参数指定计时器周期。如果句点不为零,则计时器为定期计时器;每次期限到期时,都会重新激活该计时器,直到计时器重置或取消。
如果周期为零,则计时器不是定期计时器;它发出一次信号,然后停用。线程可以使用 取消延时 函数将计时器设置为非活动状态。
 若要重置计时器,请调用 设置延时。 完成计时器对象后,调用 关闭对象 以关闭计时器对象的句柄。

可等待计时器的行为可以汇总如下:

设置计时器时,如果计时器已处于活动状态,计时器状态为未签名,并且计时器放置在内核计时器队列中,则会取消该计时器。
当计时器过期时,计时器将设置为信号状态。如果计时器具有完成例程,则会将其排队到设置计时器的线程。完成例程保留在线程的异步过程调用 (APC) 队列中,
直到线程进入可发出警报的等待状态。 此时,将调度 APC 并调用完成例程。 如果计时器是定期的,则将其放回内核计时器队列中。
取消计时器后,如果某个计时器处于挂起状态,则会将其从内核计时器队列中删除。如果计时器已过期,
并且仍有 APC 排队到设置计时器的线程,则 APC 将从该线程的 APC 队列中删除。 计时器的信号状态不受影响。

同步对象安全性和访问权限

使用 Windows 安全模型可以控制对事件、互斥体、信号灯和可等待计时器对象的访问。 计时器队列、互锁变量和关键节对象是不安全的。
调用 创建事件、创建互斥、创建信号 或 创建延时 函数时,可以为进程间同步对象指定安全描述符。 如果指定0,则对象将获取默认的安全描述符。
同步对象的默认安全描述符中 ) 访问控制列表 (ACL 来自创建者的主令牌或模拟令牌。

若要获取或设置事件、互斥体、信号灯或可等待计时器对象的安全描述符,请调用 取名安全、改名安全、取安全符 或 改安全符 函数。
创建事件、创建互斥、创建信号 或 创建延时 返回的句柄对新对象具有完全访问权限。 调用 打开事件、打开互斥、打开信号 或 打开延时 函数时,
系统会根据对象的安全描述符检查请求的访问权限。进程间同步对象的有效访问权限包括 标准访问权限 和某些特定于对象的访问权限。
下表列出了所有对象使用的标准访问权限。
英文名称数值作用
DELETE0x00010000删除对象所必需的。
READ_CONTROL0x00020000需要读取对象的安全描述符中的信息,不包括 SACL 中的信息。 若要读取或写入 SACL,必须请求 0x01000000 访问权限。
WRITE_DAC0x00040000需要修改对象的安全描述符中的 DACL。
WRITE_OWNER0x00080000需要更改对象的安全描述符中的所有者。
SYNCHRONIZE0x00100000将对象用于同步的权限。 这使线程能够等待对象处于信号状态。
下表列出了事件对象的特定对象访问权限。 除了标准访问权限外,还支持这些权限。
英文名称数值作用
EVENT_ALL_ACCESS0x1F0003事件对象的所有可能访问权限。 仅当应用程序需要超出标准访问权限和2 EVENT_MODIFY_STATE授予的访问权限时,才使用此权限。 使用此访问权限会增加必须由管理员运行应用程序的可能性。
EVENT_MODIFY_STATE0x0002修改 SetEvent、ResetEvent 和 PulseEvent 函数所需的状态访问。
下表列出了互斥对象的特定对象访问权限。 除了标准访问权限外,还支持这些权限。
英文名称数值作用
MUTEX_ALL_ACCESS0x1F0001互斥对象的所有可能访问权限。 仅当应用程序需要超出标准访问权限授予的访问权限时,才使用此权限。 使用此访问权限会增加必须由管理员运行应用程序的可能性。
MUTEX_MODIFY_STATE0x0001保留供将来使用。
下表列出了信号灯对象的特定于对象的访问权限。 除了标准访问权限外,还支持这些权限。
英文名称数值作用
SEMAPHORE_ALL_ACCESS0x1F0003信号灯对象的所有可能访问权限。 仅当应用程序需要超出标准访问权限和 SEMAPHORE_MODIFY_STATE授予的访问权限时,才使用此权限。 使用此访问权限会增加必须由管理员运行应用程序的可能性。
SEMAPHORE_MODIFY_STATE0x0002修改 信号增量 函数所需的状态访问。
下表列出了可等待计时器对象的特定于对象的访问权限。 除了标准访问权限外,还支持这些权限。
英文名称数值作用
TIMER_ALL_ACCESS0x1F0003可等待计时器对象的所有可能访问权限。 仅当应用程序需要超出标准访问权限和 TIMER_MODIFY_STATE授予的访问权限时,才使用此权限。 使用此访问权限会增加必须由管理员运行应用程序的可能性。
TIMER_MODIFY_STATE0x0002修改 设置延时 和 取消延时 函数所需的状态访问。
TIMER_QUERY_STATE0x0001保留供将来使用。

进程间同步

多个进程可以具有同一事件、互斥体、信号量或计时器对象的句柄,因此这些对象可用于完成进程间同步。 创建对象的过程可以使用 
创建事件、创建互斥、创建信号 或 创建延时 函数返回的句柄。 其他进程可以使用对象名称或通过继承或复制来打开对象的句柄。
对象名称
命名对象为进程提供了一种简单的方法来共享对象句柄。 进程创建命名事件、互斥体、信号灯或计时器对象后,其他进程可以使用名称调用相应的函数,
(打开事件、打开互斥、打开信号 或 打开延时) 打开对象的句柄。 名称比较区分大小写。

事件、信号灯、互斥体、可等待计时器、文件映射和作业对象的名称共享相同的命名空间。 如果尝试使用由另一种类型的对象使用的名称创建对象,该函数将失败,
并且 最后错误 将返回 6。 因此,创建命名对象时,请使用唯一名称,并确保检查重复名称错误的函数返回值。

如果尝试使用同类型对象正在使用的名称创建对象,则函数会成功,返回现有对象的句柄, 最后错误 将返回 183。 例如,如果在对 创建互斥 函数的调用中指定的名称
与现有互斥对象的名称匹配,则函数将返回现有对象的句柄。 在这种情况下,对 创建互斥 的调用等效于对 打开互斥 函数的调用。 因此,让多个进程对同一互斥使用 
创建互斥 等效于让一个进程调用 创建互斥 ,而另一个进程调用 打开互斥,只不过它不需要确保先启动创建过程。 但是,当将此技术用于互斥对象时,
任何调用进程都不应立即请求互斥体的所有权。 如果多个进程确实请求即时所有权,则很难预测哪个进程实际获得初始所有权。

终端服务环境具有事件、信号灯、互斥体、可等待计时器、文件映射对象和作业对象的全局命名空间。对于这些对象,每个终端服务客户端会话都有其自己的单独命名空间。
终端服务客户端进程可以使用带有“Global\”或“Local\”前缀的对象名称在全局命名空间或会话命名空间中显式创建对象。 有关详细信息,请参阅 内核对象命名空间。
使用终端服务会话实现快速用户切换, (每个用户登录到不同的会话) 。 内核对象名称必须遵循终端服务概述的准则,以便应用程序可以支持多个用户。
可以在专用命名空间中创建同步对象。 有关详细信息,请参阅 对象命名空间。
对象命名空间
对象命名空间保护命名对象免受未经授权的访问。 创建专用命名空间使应用程序和服务能够构建更安全的环境。
进程可以使用 创建私名 函数创建专用命名空间。 此函数要求指定一个边界,该 边界 定义如何隔离命名空间中的对象。
调用方必须在指定的边界内才能成功执行创建操作。 若要指定边界,请使用 创建边字 和 安号边字 函数。
创建私名 的 前缀 参数用作命名空间的名称。 每个命名空间都由其名称和边界唯一标识。 只要指定不同的边界,系统就支持多个同名的专用命名空间。

假设某个进程请求创建命名空间 NS1,该命名空间定义包含两个元素的边界:管理员 SID 和当前会话编号。 如果进程在指定会话中的管理员帐户下运行,
则会创建命名空间。另一个进程可以使用 打开私名 函数访问此命名空间。 如果此进程要打开由第一个进程创建的命名空间,则指定的名称和边界必须匹配。
请注意,进程可以打开现有命名空间,即使它不在边界内,除非创建者使用 安属 参数限制对命名空间的访问。

在此命名空间中创建的对象的名称采用 前缀\对象名 的形式。 前缀是由 创建私名 的 前缀 参数指定的命名空间名称。
例如,若要在 NS1 命名空间中创建名为 MyEvent 的事件对象,请调用 创建事件 函数,并将 名称 参数设置为 NS1\MyEvent。

创建命名空间的进程可以使用 关闭私名 函数关闭命名空间的句柄。 创建命名空间的进程终止时,句柄也会关闭。
关闭命名空间句柄后,对 打开私名 的后续调用将失败,但对命名空间中的对象执行的所有操作都会成功。
对象继承
使用 创建进程 函数创建进程时,可以使用 安全属性类 结构指定进程继承互斥、事件、信号灯或计时器对象的句柄。
进程继承的句柄对 对象具有与原始句柄相同的访问权限。 继承的句柄显示在已创建进程的句柄表中,但您必须将句柄值传达给创建的进程。
可以通过在调用 创建进程 时将值指定为命令行参数来执行此操作。 然后,创建的进程使用 启动参数 函数检索命令行字符串,
并将 句柄 参数转换为可用句柄。 有关详细信息,请参阅继承对象重复
复制对象 函数创建可由另一个指定进程使用的重复句柄。这种共享对象句柄的方法比使用命名对象或继承更为复杂。它需要创建过程和在其中复制句柄的进程之间的通信。 
(句柄值和进程标识符) 的必要信息可以通过任何进程间通信方法(如命名管道或命名共享内存)进行通信。

同步和多处理器问题

应用程序在多处理器系统上运行时可能会遇到问题,因为他们所做的假设仅在单处理器系统上有效。

线程优先级
想象一下具有两个线程的程序,一个线程优先级高于另一个线程。 在单处理器系统上,高优先级线程不会将控制权让与低优先级线程,
因为计划程序会将优先权赋予优先级较高的线程。 在多处理器系统上,两个线程都可以同时运行,每个线程在其自己的处理器上运行。
应用程序应同步对数据结构的访问,以避免争用情况。 假定高优先级线程不受较优先级线程干扰的代码将在多处理器系统上失败。

内存排序
当处理器写入内存位置时,将缓存该值以提高性能。 同样,处理器会尝试满足缓存中的读取请求以提高性能。 
此外,处理器开始从内存中提取值,然后再由应用程序请求这些值。 这可能在推理执行过程中发生,也可能是由于缓存行问题造成的。

CPU 缓存可以进行分区以分为多个可以并行访问的库。 这意味着内存操作可能会无序完成。 为了确保内存操作有序完成,大多数处理器都提供内存屏障指令。
完整内存屏障可确保内存屏障指令之前出现的内存读取和写入操作在内存屏障指令之后出现的任何内存读取和写入操作之前提交到内存。读取内存屏障只对内存
读取操作进行排序,而写入内存屏障只对内存写入操作进行排序。 这些指令还可确保编译器禁用可能会跨屏障进行内存操作重新排序的任何优化。

处理器可以支持具有获取、释放和围栏语义的内存屏障指令。 这些语义描述了操作结果变得可用的顺序。使用获取语义,该操作的结果会在代码中后出现的
任何操作的结果之前可用。使用释放语义,该操作的结果会在代码中先出现的任何操作的结果之后可用。 围栏语义结合了获取和释放语义。
具有围栏语义的操作的结果在代码中后出现的任何操作的结果之前以及先出现的任何操作的结果之后可用。

在支持 SSE2 的 x86 和 x64 处理器上,指令是 mfence(内存围栏)、lfence(负载围栏)和 sfence(存储围栏)。 在 ARM 处理器上,指令是 dmb 和 dsb。 
以下同步函数使用适当的屏障来确保内存排序:
进入或离开关键部分的函数
获取或释放 SRW 锁的函数
一次性初始化开始和完成
等待屏障 函数
向同步对象发出信号的函数
等待函数
互锁函数(具有 NoFence 后缀的函数或具有 _nf 后缀的内部函数除外)

修复争用条件
以下代码在多处理器系统上存在争用条件,因为首次执行 缓存计算值 的处理器可能会在将 值 写入主内存之前将 已计算值 写入主内存。
因此,同时执行 获取计算值 的第二个处理器会将 已计算值 读取为 真,但 值 的新值仍位于第一个处理器的缓存中,并且尚未写入内存。

整数 值,已计算值,算值;

程序段 缓存计算值
  如果(已计算值=0) 
  {
    值 = 算值
    计算 = 真
  }
结束
 
程序段 获取计算值(反馈)
  如果(已计算值) 
  {
    反馈& = 值
    返回(真)
  } 
  否则 返回(假)
结束
可以使用 原子更改 函数修复上述争用条件,以确保所有处理器在 计算 的值设置为 真 之前已更新 值 的值。

整数 值,已计算值,算值;

程序段 缓存计算值
  如果(原子比较(@已计算值,假,假)=0) 
  {
    原子更改(@值,算值)
    原子更改(@已计算值,真)
  }
结束
 
程序段 获取计算值(反馈)
  如果(原子比较(@计算,真,真)) 
  {
    原子更改(反馈&,值)
    返回(真)
  } 
  否则 返回(假)
结束

同步和重叠输入和输出

可以在文件、命名管道和串行通信设备上执行同步或异步 (也称为重叠) I/O 操作。 写出文件、读取文件、硬件控制、串口等待、连接管道
和 名管读写 函数可以同步或异步执行。 读入文件 和 写入文件 函数只能异步执行。

当函数同步执行时,该函数在操作完成之前不会返回。 这意味着,在等待耗时的操作完成时,调用线程的执行可能会无限期地被阻止。
为重叠操作调用的函数可以立即返回,即使操作尚未完成。 这样,当调用线程可以自由执行其他任务时,就可以在后台执行耗时的 I/O 操作。
例如,单个线程可以在不同的句柄上同时执行 I/O 操作,甚至可以在同一句柄上同时执行读取和写入操作。若要将其执行与重叠操作的完成同步,
调用线程使用 操作结果 函数、 重叠结果 函数或 等待函数 之一来确定重叠操作何时完成。 还可以使用 重叠类.状态!=0x103 轮询完成。

若要取消所有挂起的异步 I/O 操作,请使用 取消传输 函数并提供用于指定要取消的请求的 重叠类 结构。
使用 取消操作 函数可取消由指定文件句柄的调用线程发出的挂起异步 I/O 操作。

重叠操作需要使用 0x40000000 标志创建的文件、命名管道或通信设备。 当线程调用函数 ((如 读取文件 函数) )来执行重叠操作时,
调用线程必须指定指向 重叠类 结构的指针。 (如果此指针为 NULL,则函数返回值可能会错误地指示操作已完成。) 
除非使用事件来指示 I/O 操作完成,否则 必须将 重叠类 结构的所有成员初始化为零。 如果使用事件,则 重叠类
 结构的 事件 成员将指定已分配事件对象的句柄。 当对 I/O 函数的调用在操作完成之前返回时,系统会将事件对象的状态设置为非签名。
 系统将事件对象的状态设置为在操作完成时发出信号。 仅当同时有多个未完成的 I/O 操作时,才需要事件。
 如果未使用事件,则每个已完成的 I/O 操作都将向文件、命名管道或通信设备发出信号。

调用函数以执行重叠操作时,该操作可能在函数返回之前完成。 发生这种情况时,将像同步执行操作一样处理结果。
但是,如果操作未完成,则函数的返回值为 0, 最后错误 函数返回 997。线程可以通过以下两种方法之一管理重叠操作:

1.使用 操作结果 或 重叠结果 函数等待重叠操作完成。 如果使用 重叠结果 ,则调用线程可以为重叠操作指定超时,或执行可发出警报的等待。
2.在其中一个等待函数中指定 重叠类 结构的手动重置事件对象的句柄,然后在等待函数返回后调用 操作结果 或 重叠结果。
函数返回已完成的重叠操作的结果,对于适合此类信息的函数,它将报告已传输的实际字节数。

在单个线程上同时执行多个重叠操作时,调用线程必须为每个操作指定 重叠类 结构。 每个 重叠类 结构必须指定
不同手动重置事件对象的句柄。为了等待任何一个重叠的操作完成,线程会将所有手动重置事件句柄指定为其中一个多对象 等待函数中的等待条件。
多对象等待函数的返回值指示向哪个手动重置事件对象发出信号,以便线程可以确定哪个重叠操作导致等待操作完成。

对每个重叠操作使用单独的事件对象更安全,而不是不指定任何事件对象或将同一事件对象用于多个操作。 如果未在 重叠类 结构中
指定任何事件对象,则当重叠操作完成时,系统会向文件、命名管道或通信设备的状态发出信号。 因此,可以在等待函数中将这些句柄指定为同步对象,
尽管它们用于此目的可能难以管理,因为在同一文件、命名管道或通信设备上同时执行重叠操作时,无法知道哪个操作导致对象状态被发出信号。

线程不应重复使用某个事件,前提是该事件仅由该线程的重叠操作发出信号。 事件在与正在完成的重叠操作相同的线程上发出信号。
在多个线程上使用相同的事件可能会导致争用条件,在该条件下,对于操作首先完成的线程,对于使用该事件的其他线程,该事件会正确发出事件信号。
然后,在下一个重叠操作完成时,将针对使用该事件的所有线程再次向事件发出信号,依此进行,直到所有重叠操作完成。

有关说明如何使用重叠操作、完成例程和 操作结果 函数的示例,请参阅 命名管道。

Windows Vista、Windows Server 2003 和 Windows XP:
重用 重叠类 结构时要小心。 如果在多个线程上重复使用 重叠类 结构,并在 等待 参数设置为 真 的情况下调用 操作结果,
则调用线程必须确保在重用结构之前发出关联的事件信号。 这可以通过在调用 操作结果 后使用 等单对象 函数来强制线程等待操作完成。
请注意,事件对象必须是手动重置事件对象。 如果使用 自动重置事件对象,则调用将 等待 参数设置为 真 的 操作结果 会导致无限期阻止该函数。
对于在应用程序清单中将 Windows 7 指定为支持的操作系统的应用程序,从 Windows 7 和 Windows Server 2008 R2 开始,此行为发生了变化。

异步过程调用

异步 过程调用 (APC) 是在特定线程的上下文中异步执行的函数。 当 APC 排队到线程时,系统会发出软件中断。 下次计划线程时,它将运行 APC 函数。
系统生成的 APC 称为 内核模式 APC。 应用程序生成的 APC 称为 用户模式 APC。 线程必须处于可警报状态才能运行用户模式 APC。

每个线程都有自己的APC队列。应用程序通过调用 用户异步 函数将APC排队到线程。调用线程在对 用户异步 的调用中指定APC函数的地址。APC的队列是线程调用APC函数的请求。

当用户模式 APC 排队时,它排队的线程不会定向到调用 APC 函数,除非它处于可警报状态。 线程在调用 异步延时、对象等单、等列消息、等列对象 或 等待对象 函数时进入可警报状态。
如果在 APC 排队之前满足等待,则线程不再处于可警报等待状态,因此不会执行 APC 函数。 但是,APC 仍处于排队状态,因此当线程调用另一个可警报等待函数时,将执行 APC 函数。

读入文件、设置延时、指定延时 和 写入文件 函数使用 APC 作为完成通知回调机制来实现。

如果使用 线程池,请注意,APC 不与其他信号机制一样工作,因为系统控制线程池线程的生存期,因此线程有可能在传递通知之前终止。
不要使用基于 APC 的信号机制(如 设置延时 或 指定延时 的 回调 参数),而是使用可等待的对象,
例如使用 新建计时 创建的计时器。 对于 I/O,请使用使用 新建进出 创建的 I/O 完成对象或基于事件的 重叠类 结构,其中事件可以传递给 设置等待 函数。

同步内部
发出 I/O 请求时,将分配一个结构来表示请求。 此结构称为 I/O 请求数据包 (IRP) 。 使用同步 I/O 时,线程生成 IRP,将其发送到设备堆栈,
并在内核中等待 IRP 完成。 使用异步 I/O,线程生成 IRP 并将其发送到设备堆栈。 堆栈可能会立即完成 IRP,也可能返回挂起状态,指示请求正在进行。
发生这种情况时,IRP 仍与线程关联,因此,如果线程终止或调用 取消操作 等函数,IRP 将被取消。 在此期间,线程可以继续执行其他任务,同时设备堆栈继续处理 IRP。

系统可通过多种方式指示 IRP 已完成:
使用操作的结果更新重叠结构,以便线程可以轮询以确定操作是否已完成。
向重叠结构中的事件发出信号,以便线程可以在事件上同步并在操作完成时被唤醒。
将 IRP 排队到线程的挂起的 APC,以便线程在进入可警报等待状态时执行 APC 例程,并从等待操作返回,状态指示它执行了一个或多个 APC 例程。
将 IRP 排队到 I/O 完成端口,在该端口上等待的下一个线程将执行该端口。

在 I/O 完成端口上等待的线程不会处于可警报状态。 因此,如果这些线程向线程发出设置为作为 APC 完成的 IRP,
则这些 IPC 完成不会及时发生;仅当线程从 I/O 完成端口获取请求,然后碰巧进入可警报等待时,才会发生这些请求。
同步异步 ——相关函数
中文名称英文名称示例作用
Beep嘀(声音频率,持续时间)在扬声器上产生简单的音调,频率在37到32767之间,时间为毫秒数
重叠结果GetOverlappedResultEx重叠结果(文件,重叠类,@实传,超时,等待)检索指定文件、命名管道或通信设备上的重叠操作的结果。
创建信号CreateSemaphoreA创建信号(继承,初数,最大数,名称)创建或打开命名或未命名的信号灯对象。
创建事件CreateEventA事件=创建事件(属性,复位,状态,名称)创建一个事件,返回事件对象的句柄。
新建事件CreateEventExA事件=新建事件(安属,名称,标志,访问)创建一个事件,返回事件对象的句柄。标志:1手动重置,2已发信号
新建互斥CreateMutexExA新建互斥(安属,名称,标志,访问)创建或打开一个命名或未命名的互斥体对象。标志:1创建者所有
新建信号CreateSemaphoreExA新建信号(安属,初数,最大,名称,0,访问)创建或打开命名或未命名的信号灯对象。
内存通知CreateMemoryResourceNotification内存通知(条件)创建内存资源通知对象。条件:0内存不足,1内存较高
新建延时CreateWaitableTimerExA新建延时(安属,名称,标志,访问)创建或打开可等待的计时器对象。标志:1手动重置,2高分辨率
创建互斥CreateMutexA创建互斥(访问,继承,对象名)创建一个互斥体,可判断程序是否重复运行
关闭进出CloseThreadpoolIo关闭进出(进出)释放指定的I/O完成对象。
新建进出CreateThreadpoolIo新建进出(文件,回调,附加,回调环境)创建新的I/O完成对象。
开始进出StartThreadpoolIo开始进出(进出)通知线程池,I/O 操作可能会针对指定的 I/O 完成对象开始。
关闭等待CloseThreadpoolWait关闭等待(等待)释放指定的等待对象。
新建等待CreateThreadpoolWait新建等待(回调,附加,回调环境)创建新的等待器对象。
设置等待SetThreadpoolWait设置等待(等待,对象,超时)设置等待对象。超时为正值代表UTC绝对时间,负值表示相对时间(单位100 纳秒)
指定等待SetThreadpoolWaitEx指定等待(等待,对象,超时)设置等待对象。超时为正值代表UTC绝对时间,负值表示相对时间(单位100 纳秒)
关闭计时CloseThreadpoolTimer关闭计时(计时器)释放指定的计时器对象。
新建计时CreateThreadpoolTimer新建计时(回调,附加,回调环境)创建新的计时器对象。
是计时器IsThreadpoolTimerSet是计时器(计时器)确定当前是否设置了指定的计时器对象。
设置计时SetThreadpoolTimer设置计时(计时器,时间,周期,延时)设置计时器对象。时间为正值代表UTC绝对时间,负值表示相对时间(单位100 纳秒)
指定计时SetThreadpoolTimerEx指定计时(计时器,时间,周期,延时)设置计时器对象。时间为正值代表UTC绝对时间,负值表示相对时间(单位100 纳秒)
关闭工作CloseThreadpoolWork关闭工作(工作)释放指定的工作对象。
新建工作CreateThreadpoolWork新建工作(回调,附加,回调环境)创建新的工作器对象。
发布工作SubmitThreadpoolWork发布工作(工作)将工作对象发布到线程池。 工作线程调用工作对象的回调函数。
安号边符AddSIDToBoundaryDescriptor安号边符(边符,SID)将安全标识符 (SID) 添加到指定的边界描述符。
创建边符CreateBoundaryDescriptorA创建边符(名称,标志)创建边界描述符。标志:1无论生成者或使用者都要创建。
删除边符DeleteBoundaryDescriptor删除边符(边符)删除指定的边界描述符。
创建私名CreatePrivateNamespaceA创建私名(安属,隔离边字,前缀)创建专用命名空间。
打开私名OpenPrivateNamespaceA打开私名(隔离边字,前缀)打开专用命名空间。
关闭私名ClosePrivateNamespace关闭私名(命名空间,标志)关闭打开的命名空间句柄。标志:1销毁
取消延时CancelWaitableTimer取消延时(计时器)取消由指定文件的调用线程颁发的所有挂起输入和输出 (I/O) 操作。
创建延时CreateWaitableTimerA创建延时(计时结构,手动,名称)创建或打开可等待的计时器对象。
删除资源DeleteCriticalSection删除资源(对象)删除关键节对象释放由该对象使用的所有系统资源。
等关键节EnterCriticalSection等关键节(节对象)等待指定关键部分对象的所有权。此函数将在授予调用线程所有权时返回。
删除屏障DeleteSynchronizationBarrier删除屏障(屏障)删除同步屏障。
等待屏障EnterSynchronizationBarrier等待屏障(屏障,标志)导致调用线程在同步屏障处等待,直到最大线程数进入该屏障。
初始屏障InitializeSynchronizationBarrier初始屏障(@屏障,线程数,旋转数)初始化新的同步屏障。旋转数为-1,则线程旋转2000次。
初始条件InitializeConditionVariable初始条件(@条件变量)初始化条件变量。
初始化节InitializeCriticalSection初始化节(@关键节)初始化关键节对象。
初始节数InitializeCriticalSectionAndSpinCount初始节数(@关键节,计数)初始化关键节对象并设置关键节的旋转计数。
释放节权LeaveCriticalSection释放节权(@关键节)释放指定关键节对象的所有权。
进关键节TryEnterCriticalSection进关键节(关键节)尝试进入关键部分而不发生阻塞。如果调用成功,调用线程将获取关键部分的所有权。
原子比较InterlockedCompareExchange原子比较(@输入,更新,值)执行原子操作,将两个输入值进行比较。更新非零输入参数输出结果
原子递减InterlockedDecrement原子递减(@变量)将调用方提供的整数类型变量递减为原子操作。
原子更改InterlockedExchange原子更改(@变量,数值)将整数变量设置为作为原子操作的给定值。
原子添加InterlockedExchangeAdd原子添加(@变量,数值)将值作为原子操作添加到给定整数中,并返回给定整数的原始值。
原子递增InterlockedIncrement原子递增(@变量)递增调用方提供的变量作为原子操作。
内存可用IsBadCodePtr内存可用(内存)确定调用进程是否具有对指定地址的内存的读取访问权限。
内存字串IsBadStringPtrA内存字串(内存)验证调用进程是否对指定的内存范围具有读取访问权限。
一次初始InitOnceComplete一次初始(@一次)初始化一次性初始化结构。
一次开始InitOnceBeginInitialize一次开始(一次,标志,@状态,@数据)开始一次性初始化。标志:0初始化,1只查状态,2允许多次初始化
一次完成InitOnceComplete一次完成(一次,标志,数据)完成一次性初始化。标志:2异步模式,4尝试失败
一次执行InitOnceExecuteOnce一次执行(一次,回调,附加,@数据)当多个线程调用同一个此函数时,只有一个线程将执行回调函数。其余线程将阻塞,直到回调函数完成。
打开互斥OpenMutexA打开互斥(访问,继承,对象名)打开一个互斥体,可判断程序是否重复运行
打开信号OpenSemaphoreA打开信号(访问,继承,信号名)打开现有的命名信号灯对象。
精确计数QueryPerformanceCounter精确计数(文件时间类)检索性能计数器的当前值,这是一个高分辨率 (小于1us) 时间戳,可用于时间间隔度量。
计数频率QueryPerformanceFrequency计数频率(文件时间类)检索性能计数器的频率。性能计数器的频率在系统启动时固定,并且在所有处理器中保持一致。
释放互斥ReleaseMutex释放互斥(对象)释放指定的互斥对象的所有权
信号增量ReleaseSemaphore信号增量(对象)按指定量增加指定的信号灯对象的计数。
打开延时OpenWaitableTimerA打开延时(访表,继承,名称)打开现有的命名可等待计时器对象。
打开事件OpenEventA打开事件(访问,继承,事件名)$1F0003全权访问,2允许修改和重置事件,$100000允许事件同步
脉冲事件PulseEvent脉冲事件(事件)发出脉冲信号释放等待线程,无信号后将其重置
重置事件ResetEvent重置事件(事件)将指定的事件对象设置为非信号状态
修改事件SetEvent修改事件(事件)将指定的事件对象的状态设置为发信号
列线程池RegisterWaitForSingleObject列线程池(等待,对象,回调,附加,超时,标志)指示线程池中的等待线程等待对象。发出信号或超时等待线程会将指定的回调函数排队到线程池
取消等待UnregisterWait取消等待(等待)取消 列线程池 函数发出的已注册等待操作。
注销等待UnregisterWaitEx注销等待(等待,事件)取消 列线程池 函数发出的已注册等待操作。
延时Sleep延时(毫秒)暂停执行当前线程指定的毫秒数
异步延时SleepEx异步延时(毫秒,异步)挂起当前线程,直到满足指定条件。
对象等单SignalObjectAndWait对象等单(对象,等对象,毫秒,排队)向一个对象发出信号,并等待另一个对象作为单个操作。排队为假不返回无回调
等多对象WaitForMultipleObjects等多对象(对象数,对象组,等所有,超时)等待一个或所有指定的对象处于信号状态或超时间隔已过。
等列对象WaitForMultipleObjectsEx等列对象(对象数,对象组,等所有,超时,排队)等待一个或所有指定的对象处于信号状态、I/O 完成例程或异步过程调用 (APC) 排队到线程,或超时间隔已过。
等单对象WaitForSingleObject等单对象(对象,毫秒)等待指定的对象处于信号状态或超时间隔已过。
等待对象WaitForSingleObjectEx等待对象(对象,毫秒,排队)等待指定的对象处于信号状态、I/O 完成例程或异步过程调用 (APC) 排队到线程,或超时间隔已过。
设置延时SetWaitableTimer设置延时(计时,时间,周期,回调,附加,还原)激活指定的可等待计时器。时间为正值代表UTC绝对时间,负值表示相对时间(单位100 纳秒)。周期为毫秒。还原为真可唤醒节能模式。
指定延时SetWaitableTimerEx指定延时(计时,时间,周期,回调,附加,请求,延时)激活指定的可等待计时器。时间为正值代表UTC绝对时间,负值表示相对时间(单位100 纳秒)。周期和延时为毫秒。
进出回调
中文名字英文名称参数作用解释
进出回调IoCompletionCallback6如果应用程序启动 I/O 完成对象的工作线程,则实现此回调。
进出回调 参数表
中文英文类型作用解释
实例Instance整数定义回调实例的TP_CALLBACK_INSTANCE结构。应用程序不会修改此结构的成员。
附加Context整数应用程序定义的数据。
重叠Overlapped整数重叠类
结果IoResult整数I/O 操作的结果。如果 I/O 成功,则此参数为0。否则,此参数是系统错误代码之一。
字数NumberOfBytesTransferred整数在已完成的 I/O 操作期间传输的字节数。
进出Io整数一个TP_IO结构,用于定义生成回调的 I/O 完成对象。
计时回调
中文名字英文名称参数作用解释
计时回调Ptimerapcroutine3应用程序定义的计时器完成例程。
计时回调 参数表
中文英文类型作用解释
附加lpArgToCompletionRoutine整数传递给回调函数的附加参数。
低时dwTimerLowValue整数发出计时器信号的基于 UTC 的时间的低序部分。
高时dwTimerHighValue整数计时器发出信号的基于 UTC 的时间的高阶部分。
工作回调
中文名字英文名称参数作用解释
工作回调WorkCallback3应用程序启动工作对象的工作线程,则实现此回调。
工作回调 参数表
中文英文类型作用解释
实例Instance整数定义回调实例的TP_CALLBACK_INSTANCE结构。应用程序不会修改此结构的成员。
附加Context整数应用程序定义的数据。
工作Work整数一个TP_WORK结构,用于定义生成回调的工作对象。
等待回调
中文名字英文名称参数作用解释
等待回调WorkCallback4应用程序启动工作对象的工作线程,则实现此回调。
等待回调 参数表
中文英文类型作用解释
实例Instance整数定义回调实例的TP_CALLBACK_INSTANCE结构。应用程序不会修改此结构的成员。
附加Context整数应用程序定义的数据。
等待Wait整数一个TP_WAIT结构,用于定义生成回调的等待对象。
结果WaitResult整数等待操作的结果。0结果对象,0x102超时
超时回调
中文名字英文名称参数作用解释
超时回调WaitOrTimerCallback3应用程序定义的函数,用作计时器回调或已注册等待回调的起始地址。
超时回调 参数表
中文英文类型作用解释
附加lpParameter整数传递给回调函数的线程数据。
超时TimerOrWaitFired整数如果此参数为 TRUE,则等待超时。如果此参数为 FALSE,则表示已发出等待事件信号。(对于计时器回调,此参数始终为 TRUE。
异步回调
中文名字英文名称参数作用解释
异步回调APCProc1应用程序定义的完成例程。
异步回调 参数表
中文英文类型作用解释
附加Parameter整数传递给回调函数的可选参数。
一次回调
中文名字英文名称参数作用解释
一次回调InitOnceCallback3返回真,则块标记为已初始化。
一次回调 参数表
中文英文类型作用解释
一次InitOnce整数指向一次性初始化结构的指针。
附加Parameter整数传递给回调函数的可选参数。
数据Context整数要使用一次性初始化结构存储的数据。
电源请求类
中文名字英文名称长度作用解释
电源请求类REASON_CONTEXT16包含有关电源请求的信息。
电源请求类 成员表
中文英文类型作用解释
版本Version整数结构的版本号。此参数必须设置为 0。
格式Flags整数电源请求原因的格式。1=包含一个简单的不可本地化字符串,2标识可本地化的字符串资源
本地Reason.Detailed整数用于标识可本地化的字符串资源,用于描述电源请求的原因。
Reason.Detailed.LocalizedReasonModule包含字符串资源的模块。
Reason.Detailed.LocalizedReasonId字符串资源的 ID。
Reason.Detailed.ReasonStringCount ReasonStrings 参数中的字符串数。
Reason.Detailed.ReasonStrings运行时字符串资源中要替换的字符串数组。
非本Reason.SimpleReasonString整数描述电源请求原因的非本地化字符串。
线程池回调标志
英文名称参数作用解释
WT_EXECUTEDEFAULT0x00000000默认情况下,回调函数将排队到非 I/O 工作线程。
WT_EXECUTEINIOTHREAD0x00000001未使用此标志。
WT_EXECUTEINPERSISTENTTHREAD0x00000080回调函数将排队到永不终止的线程。 它不保证每次都使用相同的线程。 此标志应仅用于短任务,否则可能会影响其他等待操作。
WT_EXECUTEINWAITTHREAD0x00000004回调函数由等待线程本身调用。 此标志应仅用于短任务,否则可能会影响其他等待操作。
WT_EXECUTELONGFUNCTION0x00000010回调函数可以执行长时间的等待。 此标志可帮助系统确定是否应创建新线程。
WT_EXECUTEONLYONCE0x00000008调用回调函数一次后,线程将不再等待句柄。 否则,每次等待操作完成时,计时器都会重置,直到取消等待操作。
WT_TRANSFER_IMPERSONATION0x00000100回调函数将使用当前访问令牌,无论是进程令牌还是模拟令牌。 如果未指定此标志,则回调函数仅使用进程令牌执行。
同步屏障阻塞
英文名称参数作用解释
SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY1指定进入屏障的线程应立即阻塞,直到最后一个线程进入屏障。。
SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY2指定进入屏障的线程应旋转,直到最后一个线程进入屏障,即使旋转线程超过屏障的最大旋转计数。
SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE4指定函数可以跳过所需的工作,以确保安全删除屏障,从而提高性能。仅当永远不会删除屏障时,才应使用此标志。
磁盘分区——使用示例
磁盘分区 ——相关函数
定义盘符DefineDosDeviceA定义盘符(标志,盘符,路径)定义、重新定义或删除 MS-DOS 设备名称。
硬件控制DeviceIoControl硬件控制(文件流,代码,输入,大小,
@输出,长度,已收,重叠类)
将控制代码直接发送到指定的设备驱动程序,导致相应的设备执行相应的操作。
擦除磁盘EraseTape擦除磁盘(硬件,技术,立即)可擦除磁盘(创建文件句柄)的全部或部分内容。技术:0在当前位置写入擦除间隙或数据结束标记,1清除从当前位置到当前分区末尾
设备列表QueryDosDeviceA设备列表(名称,@内容,大小)检索有关 MS-DOS 设备名称的当前映射或名称列表。名称为0获取名称列表
磁盘参数GetTapeParameters磁盘参数(文件,类型,@大小,@信息)检索描述磁盘或磁盘驱动器的信息。类型:0分区,1驱动器
磁盘定位GetTapePosition磁盘定位(文件,类型,@区号,@低位,@高位)以逻辑块或绝对块形式检索磁带的当前地址。类型:0设备块,1逻辑块
磁盘状态GetTapeStatus磁盘状态(文件)确定磁带设备是否已准备好处理磁带命令。返回值0=无错误
磁盘准备PrepareTape磁盘准备(文件,准备,立即)准备要访问或删除的磁带。准备0=开头,1起始,2末尾,3锁定,4解锁,5低格
启动参数GetCommandLineA参数=启动参数返回一个指向当前进程的命令行字符串的指针
取本机名GetComputerNameA长度=取本机名(名称,长度)获取当前系统的计算机名称,返回计算机名的长度
改本机名SetComputerNameA长度=改本机名(名称)修改当前系统的计算机名称,失败返回0
创建分区CreateTapePartition创建分区(设备,分类,区数,大小)重新格式化磁盘分区。分类0默认1指定区数,2指定区数和大小(MB)
分区空间GetDiskFreeSpaceA分区空间(目录,扇区数,扇区大小,可用群集,用户配额)检索有关指定磁盘的信息,包括磁盘上的可用空间量。
分区容量GetDiskFreeSpaceExA分区容量(目录,你可用,你可用总数,可用总数检索有关磁盘卷上可用空间量的信息
磁盘类型GetLogicalDrives类型=磁盘类型(盘符)判断磁盘类型。类型=2可移动盘 3硬盘 4网络盘 5光驱 6 RAM磁盘
可用磁盘GetLogicalDrives磁盘=可用磁盘返回表示当前可用磁盘驱动器的位掩码
可用盘符GetLogicalDriveStringsA长度=可用盘符(长度,内容)返回指定系统中有效驱动器的字符串长度
取卷信息GetVolumeInformationA取卷信息(卷,@卷名,大小,@序列号,@名长,
关联,@文系名,长度)
检索与指定根目录关联的文件系统和卷的相关信息。
改卷标签SetVolumeLabelA改卷标签(卷名,标签)设置文件系统卷的标签。
磁盘参数类
中文名字英文名称长度作用解释
磁盘参数类TAPE_GET_MEDIA_PARAMETERS28描述磁带驱动器中的磁带。
磁盘参数类 成员表
中文英文类型作用解释
分区低数Capacity.LowPart整数当前磁带分区上的字节总数。
分区高数Capacity.HighPart整数当前磁带分区上的字节总数。
剩余低数Remaining.LowPart整数当前位置与当前磁带分区结束之间的字节数。
剩余高数Remaining.HighPart整数当前位置与当前磁带分区结束之间的字节数。
分块BlockSize整数每个块的字节数。
区数PartitionCount整数磁带上的分区数。
写保护WriteProtected整数如果此成员为 TRUE,则磁带受写保护。 否则,就不是架构拥有的。
磁盘准备
英文名称数值作用解释
TAPE_FORMAT5执行磁带的低级别格式。 目前,只有 QIC117 设备支持此功能。
TAPE_LOAD0加载磁带并将磁带移到开头。
TAPE_LOCK3锁定磁带弹出机制,以便不会意外弹出磁带。
TAPE_TENSION2通过将磁带移到磁带的末尾并移回开头来调整紧张度。 并非所有设备都支持此选项。 如果不支持此值,则忽略此值。
TAPE_UNLOAD1将磁带移到开始处,以便从设备中删除。 成功卸载操作后,设备会将错误返回给尝试访问磁带的应用程序,直到再次加载磁带。
TAPE_UNLOCK4解锁磁带弹出机制。
定义盘符——使用标志
中文名称英文名称数值作用
DDD_EXACT_MATCH_ON_REMOVE0x00000004如果此值与 DDD_REMOVE_DEFINITION一起指定,则函数将使用完全匹配来确定要删除的映射。 使用此值可确保不会删除未定义的内容。
DDD_NO_BROADCAST_SYSTEM0x00000008不要广播 WM_SETTINGCHANGE 消息。 默认情况下,将广播此消息以通知 shell 和应用程序更改。
DDD_RAW_TARGET_PATH0x00000001按原样使用 lpTargetPath 字符串。 否则,它将从 MS-DOS 路径转换为路径。
DDD_REMOVE_DEFINITION0x00000002删除指定设备的指定定义。 为了确定要删除的定义,函数将遍查设备的映射列表,查找 lpTargetPath 与与此设备关联的每个映射的前缀的匹配项。 匹配的第一个映射是删除的映射,然后函数返回。
文件系统关联标志
英文名称数值作用解释
FILE_CASE_SENSITIVE_SEARCH0x00000001指定的卷支持区分大小写的文件名。
FILE_CASE_PRESERVED_NAMES0x00000002指定卷在磁盘上放置名称时支持保留文件名大小写。
FILE_UNICODE_ON_DISK0x00000004指定的卷支持在磁盘上显示的文件名中的 Unicode。
FILE_PERSISTENT_ACLS0x00000008指定的卷保留并强制实施 ACL) (访问控制列表。 例如,NTFS 文件系统保留并强制实施 ACL,而 FAT 文件系统则不保留。
FILE_FILE_COMPRESSION0x00000010指定的卷支持基于文件的压缩。
FILE_VOLUME_QUOTAS0x00000020指定的卷支持磁盘配额。
FILE_SUPPORTS_SPARSE_FILES0x00000040指定的卷支持稀疏文件。
FILE_SUPPORTS_REPARSE_POINTS0x00000080指定的卷支持重新分析点。
FILE_SUPPORTS_REMOTE_STORAGE0x00000100文件系统支持远程存储。
FILE_RETURNS_CLEANUP_RESULT_INFO0x00000200在成功的清理操作后,文件系统将返回描述清理期间执行的其他操作的信息,例如删除文件。 文件系统筛选器可以在其清理后回调中检查此信息。
FILE_SUPPORTS_POSIX_UNLINK_RENAME0x00000400文件系统支持 POSIX 样式的删除和重命名操作。
FILE_VOLUME_IS_COMPRESSED0x00008000指定的卷是压缩卷,例如 DoubleSpace 卷。
FILE_SUPPORTS_OBJECT_IDS0x00010000指定的卷支持对象标识符。
FILE_SUPPORTS_ENCRYPTION0x00020000指定的卷支持加密文件系统 (EFS) 。 有关详细信息,请参阅 文件加密。
FILE_NAMED_STREAMS0x00040000指定的卷支持命名流。
FILE_READ_ONLY_VOLUME0x00080000指定的卷是只读的。
FILE_SEQUENTIAL_WRITE_ONCE0x00100000指定的卷支持单个顺序写入。
FILE_SUPPORTS_TRANSACTIONS0x00200000指定的卷支持事务。 有关详细信息,请参阅 关于 KTM。
FILE_SUPPORTS_HARD_LINKS0x00400000指定的卷支持硬链接。 有关详细信息,请参阅 硬链接和交汇点。
FILE_SUPPORTS_EXTENDED_ATTRIBUTES0x00800000指定的卷支持扩展属性。 扩展属性是应用程序特定的元数据片段,应用程序可与文件关联,并且不属于文件数据。
FILE_SUPPORTS_OPEN_BY_FILE_ID0x01000000文件系统支持通过 FileID 打开。 有关详细信息,请参阅 FILE_ID_BOTH_DIR_INFO。
FILE_SUPPORTS_USN_JOURNAL0x02000000指定的卷支持更新序列号 (USN) 日志。 有关详细信息,请参阅 更改日记记录。
FILE_SUPPORTS_INTEGRITY_STREAMS0x04000000文件系统支持 完整性流。
FILE_SUPPORTS_BLOCK_REFCOUNTING0x08000000指定的卷支持在同一卷上的文件之间共享逻辑群集。 文件系统在写入共享群集时重新分配。 指示 FSCTL_DUPLICATE_EXTENTS_TO_FILE 是受支持的操作。
FILE_SUPPORTS_SPARSE_VDL0x10000000文件系统跟踪文件的每个群集是否包含来自显式文件写入或自动零的有效数据 () 或无效数据 (尚未写入或归零) 。 使用稀疏的有效数据长度 (VDL) 的文件系统不会存储有效的数据长度,也不需要有效数据在文件中连续。
FILE_DAX_VOLUME0x20000000指定的卷是 DAX) 卷 (直接访问。
FILE_SUPPORTS_GHOSTING0x40000000文件系统支持重影。
系统时间——使用示例
系统时间 ——相关函数
中文名称英文名称示例作用
枚举日历EnumCalendarInfoA枚举日历(@回调,区域,日历,类型)枚举指定区域设置的日历信息。
列举日历EnumCalendarInfoExA列举日历(@回调,区域,日历,类型)枚举由标识符指定的区域设置的日历信息。
枚举日期EnumDateFormatsA枚举日期(@回调,区域,标志)枚举可用于指定区域设置的长日期、短日期或年/月格式。标志:1长日期,2短日期,8年/月,0x80月/日
列举日期EnumDateFormatsExA列举日期(@回调,区域,标志)枚举可用于指定区域设置的长日期、短日期或年/月格式。标志:1长日期,2短日期,8年/月,0x80月/日
枚举时间EnumTimeFormatsA枚举时间(@回调,区域,标志)枚举可用于由标识符指定的区域设置的时间格式。标志:0当前长时间,2当前短时间
枚举码页EnumSystemCodePagesA枚举码页(@回调,标志)枚举安装在操作系统上或受操作系统支持的代码页。标志:1已安装的代码页,2所有代码页
枚举地区EnumSystemLocalesA枚举地区(@回调,标志)枚举安装在操作系统上或受操作系统支持的区域设置。标志:1已安装,2所有区域,4仅备用排序区域
当前时间GetLocalTime当前时间(时间类)获取当前系统日期和时间,系统时间结构体得到的是当前时间
设置时间SetLocalTime设置时间(时间体)设置当前的本地时间和日期
修改时间SetSystemTime修改时间(时间体)修改当前系统日期和时间,系统时间结构体是世界时(UTC)
国标时间GetSystemTime国标时间(时间类)获取当前系统日期和时间,系统时间结构体得到的是世界时(UTC)
开机毫秒GetTickCount计数=开机毫秒获取当前系统启动以来经过的毫秒数
格式时间GetDateFormatA格式时间(区域,选项,日期,格式,内容,长度)把系统时间结构体转换为指定格式的字符串
电源状态GetDevicePowerState电源状态(设备,@状态)获得设备是处于工作状态还是低功耗状态
关闭系统SetSystemPowerState关闭系统(挂机,0)通过关闭电源挂起系统。挂起为真则关机,为假则休眠.
退出系统ExitWindowsEx退出系统(方式,0)方式:1安全关机,2重启,4注销,8关系统和电源
平台目录GetWindowsDirectoryA长度=平台目录(路径,大小)获取操作系统平台所在的目录C:\WINDOWS
系统目录GetSystemDirectoryA长度=系统目录(路径,大小)获取系统所在的目录C:\WINDOWS\SYSTEM
转文时间DosDateTimeToFileTime转文时间(日期,时间,文件时间)将 MS-DOS 日期时间值转换为文件时间
文转旧时FileTimeToDosDateTime文转旧时(文件时间,@日期,@时间)文件时间转换为 MS-DOS 日期时间值。
文转本地FileTimeToLocalFileTime文转本地(文件时间,本地时间)文件时间转换为本地文件时间
本地转文LocalFileTimeToFileTime本地转文(本地时间,文件时间)根据协调世界时 (UTC)将本地文件时间转换为文件时间
文转时间FileTimeToSystemTime文转时间(文件时间,时间类)根据协调世界时 (UTC)将文件时间转换为系统时间格式。
时间转文SystemTimeToFileTime时间转文(文件时间,时间类)根据协调世界时 (UTC)将系统时间转换为文件时间格式。
时间转区SystemTimeToTzSpecificLocalTime时间转区(时区类,时间类,@时间类)将协调世界时 (UTC) 的时间转换为指定时区的相应本地时间格式。
比较时间CompareFileTime比较时间(文件时间1,文件时间2)比较两个文件时间
系统信息GetSystemInfo系统信息(系统信息类)检索有关当前系统的 系统信息类 结构的信息。
系统电源GetSystemPowerStatus系统电源(电源状态类)检索系统的电源状态
时钟调整GetSystemTimeAdjustment时钟调整(@调值,@周期,@是否)确定系统是否对其时间时钟应用定期时间调整,并获取任何此类调整的值和周期(单位100纳秒)。
调整时钟SetSystemTimeAdjustment调整时钟(定时,启用)启用或禁用对系统时间时钟的定期时间(单位100纳秒)调整。
世界时间GetSystemTimeAsFileTime世界时间(文件时间类)检索当前系统日期和时间。信息采用协调世界时 (UTC) 格式。
当前时区GetTimeZoneInformation当前时区(时区类)检索当前时区设置。这些设置控制协调世界时 (UTC) 和本地时间之间的转换。
设置时区SetTimeZoneInformation设置时区(时区类)设置当前时区设置。这些设置控制协调世界时 (UTC) 和本地时间之间的转换。
启动信息GetStartupInfoA启动信息(启动信息类)检索创建调用进程时指定的 启动信息类 结构的内容。
系统版本GetVersion系统版本返回低序字中操作系统的主版本号和次版本号,以及高序字中有关操作系统平台的信息。
获取版本GetVersionExA获取版本(版本信息类)获取操作系统信息的版本信息类结构数据。
文件时间类
中文名字英文名称长度作用解释
文件时间类FILETIME8包含一个 64 位值,表示自 1601 年 1 月 1 日 (UTC) 以来的 100 纳秒间隔数。
文件时间类——成员表
低值dwLowDateTime整数文件时间的低序部分。
高值dwHighDateTime整数文件时间的高序部分。
货币类
中文名字英文名称长度作用解释
货币类CURRENCYFMTA32包含定义货币字符串格式的信息。
货币类 成员表
中文英文类型作用解释
点数NumDigits整数小数位数。最大字符数为2
前零LeadingZero整数指示是否应在十进制字段中使用前导零的值。0无前导零;1前导零
分组Grouping整数指定的小数分隔符左侧每组数字中(紧邻和后续)的位数。 0将数字分组为 123456789.00; 3分组为123,456,789.00; 32将数字分组为 12,34,56,789.00。
十分lpDecimalSep整数指向以0结尾的十进制分隔符字符串的指针。
千分lpThousandSep整数指向以0结尾的千位分隔符字符串的指针。
负序NegativeOrder整数负货币模式。
正序PositiveOrder整数正货币模式。
符号lpCurrencySymbol整数指向以0结尾的货币符号字符串的指针。
DOS日期
数值说明
0-41-31月中的某一天
5-81-12月份
9-150-127从1980年算起的年数
DOS时间
数值说明
0-40-30秒除以 2
5-100-59分钟
11-150-2324小时制
时区类
中文名字英文名称长度作用解释
时区类TIME_ZONE_INFORMATION108指定时区的设置。
时区类 成员表
中文英文类型作用解释
时差Bias整数此计算机上本地时间转换的当前偏差(以分钟计)。UTC = 本地时间 + 偏差
标名StandardName[32]文本标准时间的说明。 例如,“EST”可能表示东部标准时间。
标时StandardDate时间类一个 时间类 结构,包含从夏令时到标准时间在此操作系统上发生转换的日期和本地时间。
标差StandardBias整数在标准时间发生的本地时间转换期间使用的偏差值。在大多数时区中,此成员的值为零。
夏名DaylightName[32]文本夏令时的说明。 例如,“PDT”可能表示太平洋夏令时。
夏时DaylightDate时间类一个 SYSTEMTIME 结构,包含从标准时间到夏令时在此操作系统上发生转换的日期和本地时间。
夏差DaylightBias整数在夏令时发生的本地时间转换期间使用的偏差值。在大多数时区中,此成员的值为 –60。
时间类
中文名字英文名称长度作用解释
时间类SYSTEMTIME16用来存储日期时间的一种结构数据,对应函数:GetLocalTime、SetLocalTime
时间类——成员表
wYear整形公元年份
wMonth整形每年的月份,取值[1-12]
星期wDayOfWeek整形每周的第几天,取值[0-6]
wDay整形每月的第几天,取值[1-31]
wHour整形每天的第几小时,取值[0-23]
wMinute整形每小时的第几分,取值[0-59]
wSecond整形每分钟的第几秒,取值[0-59]
毫秒wMilliseconds整形每秒的毫秒数,取值[0-999]
电源状态类
中文名字英文名称长度作用解释
电源状态类SYSTEM_POWER_STATUS12包含有关系统电源状态的信息。
电源状态类 成员表
中文英文类型作用解释
电源ACLineStatus字节交流电源状态。0脱机1联机255未知
充电BatteryFlag字节电池充电状态。1超过66%;2小于33%;4小于5%;8充电中;128无电池;255无法读取电池标志信息
电量BatteryLifePercent字节剩余电池电量的百分比。此成员可以是 0 到 100 范围内的值;如果状态未知,则为 255。
节电SystemStatusFlag字节节电模式的状态。0关闭1打开
可用BatteryLifeTime整数剩余电池使用时间的秒数;如果剩余秒未知或设备连接到交流电源,则为 –1。
充满BatteryFullLifeTime整数充满电时的电池使用时间的秒数;如果电池完整使用时间未知或设备连接到交流电源,则为 –1。
系统信息类
中文名字英文名称长度作用解释
系统信息类SYSTEMINFO36包含了当前计算机的信息。函数GetSystemInfo
系统信息类——成员表
处理器wProcessorArchitecture整数指定系统中的中央处理器的体系结构
页面大小dwPageSize整数指定页面的大小和页面保护和委托的颗粒。
最低内存lpMinimumApplicationAddress整数指向应用程序和动态链接库(DLL)可以访问的最低内存地址。
最高内存lpMaximumApplicationAddress整数指向应用程序和动态链接库(DLL)可以访问的最高内存地址。
掩码dwActiveProcessorMask整数指定一个用来代表这个系统中装配了的中央处理器的掩码。
数目dwNumberOfProcessors整数指定系统中的处理器的数目。
种类dwProcessorType整数指定系统中中央处理器的类型。
分配dwAllocationGranularity整数指定已经被分配的虚拟内存空间的粒度。分配内存时最小值
级别wProcessorLevel整形指定系统体系结构依赖的处理器级别。例如:3=Intel 80386,4=Intel 80486,5=Pentium
修订wProcessorRevision整形指定系统体系结构依赖的处理器修订版本号。
版本信息类
中文名字英文名称长度作用解释
版本信息类OSVERSIONINFO148载入与平台和操作系统有关的版本信息。函数GetVersionExA
版本信息类——成员表
长度dwOSVersionInfoSize整数初始化为结构的大小
主版本dwMajorVersion整数系统主版本号
次版本dwMinorVersion整数系统次版本号
构建号dwBuildNumber整数系统构建号
平台号dwPlatformId整数系统支持的平台号。2=WinNT
系统平台szCSDVersion文本128字节的系统支持的平台名称
处理器功能
英文名称数值作用解释
PF_ARM_64BIT_LOADSTORE_ATOMIC25可以使用 64 位加载/存储原子指令。
PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE24可以使用除法指令。
PF_ARM_EXTERNAL_CACHE_AVAILABLE26外部缓存可用。
PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE27浮点乘积指令可用。
PF_ARM_VFP_32_REGISTERS_AVAILABLE18VFP/Neon:存在 32 x 64 位寄存器库。
PF_3DNOW_INSTRUCTIONS_AVAILABLE73D-Now 指令集可用。
PF_CHANNELS_ENABLED16处理器通道已启用。
PF_COMPARE_EXCHANGE_DOUBLE2可以使用 (cmpxchg) 的原子比较和交换操作。
PF_COMPARE_EXCHANGE12814可以使用 128 位原子比较和交换操作 (cmpxchg16b) 。
PF_COMPARE64_EXCHANGE12815可以使用原子比较 64 和交换 128 位操作 (cmp8xchg16) 。
PF_FASTFAIL_AVAILABLE23_fastfail () 可用。
PF_FLOATING_POINT_EMULATED1浮点运算是使用软件模拟器模拟的。
PF_FLOATING_POINT_PRECISION_ERRATA0在Pentium上,在极少数情况下可能会出现浮点精度误差。
PF_MMX_INSTRUCTIONS_AVAILABLE3MMX 指令集可用。
PF_NX_ENABLED12已启用数据执行防护 。
PF_PAE_ENABLED9处理器已启用 PAE。对于此功能,所有 x64 处理器始终返回非零值。
PF_RDTSC_INSTRUCTION_AVAILABLE8RDTSC 指令可用。
PF_RDWRFSGSBASE_AVAILABLE22提供 RDFSBASE、RDGSBASE、WRFSBASE 和 WRGSBASE 指令。
PF_SECOND_LEVEL_ADDRESS_TRANSLATION20硬件支持二级地址转换。
PF_SSE3_INSTRUCTIONS_AVAILABLE13SSE3 指令集可用。
PF_SSSE3_INSTRUCTIONS_AVAILABLE36SSSE3 指令集可用。
PF_SSE4_1_INSTRUCTIONS_AVAILABLE37SSE4_1指令集可用。
PF_SSE4_2_INSTRUCTIONS_AVAILABLE38SSE4_2指令集可用。
PF_AVX_INSTRUCTIONS_AVAILABLE39AVX 指令集可用。
PF_AVX2_INSTRUCTIONS_AVAILABLE40AVX2 指令集可用。
PF_AVX512F_INSTRUCTIONS_AVAILABLE41AVX512F 指令集可用。
PF_VIRT_FIRMWARE_ENABLED21虚拟化在固件中启用,并由操作系统提供。
PF_XMMI_INSTRUCTIONS_AVAILABLE6SSE 指令集可用。
PF_XMMI64_INSTRUCTIONS_AVAILABLE10SSE2 指令集可用。
PF_XSAVE_ENABLED17处理器实现 XSAVE 和 XRSTOR 指令。
PF_ARM_V8_INSTRUCTIONS_AVAILABLE29此 Arm 处理器实现 Arm v8 指令集。
PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE30此 Arm 处理器实现 Arm v8 的额外加密指令 (例如 AES、SHA1 和 SHA2) 。
PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE31此 Arm 处理器实现 Arm v8 额外的 CRC32 指令。
PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE34此 Arm 处理器实现 Arm v8.1 原子指令 (例如 CAS、SWP) 。
PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE43此 Arm 处理器实现 Arm v8.2 DP 指令 (例如 SDOT、UDOT) 。 此功能在 Arm v8.2 实现中是可选的,在 Arm v8.4 实现中是必需的。
PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE44此 Arm 处理器实现 Arm v8.3 JSCVT 指令 (例如 FJCVTZS) 。
PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE45此 Arm 处理器实现 Arm v8.3 LRCPC 指令 (例如 LDAPR) 。 请注意,某些 Arm v8.2 CPU 可以选择性地支持 LRCPC 指令。
ERROR_BEGINNING_OF_MEDIA1102尝试在中开始标记之前访问数据失败。
ERROR_BUS_RESET1111在总线上检测到重置条件。
ERROR_DEVICE_NOT_PARTITIONED1107加载磁带时找不到分区信息。
ERROR_DEVICE_REQUIRES_CLEANING1165磁带机能够报告它需要清洁,并报告它确实需要清洁。
ERROR_END_OF_MEDIA1100操作期间到达了磁带结束标记。
ERROR_FILEMARK_DETECTED1101操作期间已达到文件标记。
ERROR_INVALID_BLOCK_LENGTH1106在多卷分区中的新磁带上,块大小不正确。
ERROR_MEDIA_CHANGED1110已更换或删除驱动器中的磁带。
ERROR_NO_DATA_DETECTED1104操作期间到达了数据结束标记。
ERROR_NO_MEDIA_IN_DRIVE1112驱动器中没有媒体。
ERROR_NOT_SUPPORTED50磁带驱动程序不支持请求的函数。
ERROR_PARTITION_FAILURE1105无法对磁带进行分区。
ERROR_SETMARK_DETECTED1103操作期间已达到设置标记。
ERROR_UNABLE_TO_LOCK_MEDIA1108尝试锁定弹出机制失败。
ERROR_UNABLE_TO_UNLOAD_MEDIA1109尝试卸载磁带失败。
ERROR_WRITE_PROTECT19介质受写入保护。
语言版本类
中文名字英文名称长度作用解释
语言版本类NLSVERSIONINFOEX32包含有关 NLS 功能的版本信息。
语言版本类 成员表
中文英文类型作用解释
大小dwNLSVersionInfoSize整数结构的大小(以字节为单位)。
版本dwNLSVersion整数版本。 此值用于跟踪对具有特定区域设置的指定功能的代码点集的更改和添加。 该值特定于区域设置,并在功能更改时递增。
定义dwDefinedVersion整数定义的版本。 此值用于跟踪 Unicode 码位的更改。
顺序dwEffectiveId整数用于表示版本的输入区域设置的排序顺序的标识符。
行为guidCustomVersion[16]文本表示所表示版本的区域设置使用的自定义排序行为的唯一 GUID。
区域文字比较——使用标志
英文名称数值作用
LINGUISTIC_IGNORECASE0x10在语言上适当时忽略大小写。
LINGUISTIC_IGNOREDIACRITIC0x10在语言上适当时忽略非节奏字符。
NORM_IGNORECASE1忽略大小写。 对于许多脚本 (尤其是拉丁语脚本) 。
NORM_IGNOREKANATYPE0x10000不要区分平假名和片假名字符。 对应的平假名和片假名字符比较相等。
NORM_IGNORENONSPACE2忽略非节奏字符。 对于许多脚本 (尤其是拉丁语脚本) 。
NORM_IGNORESYMBOLS4忽略符号和标点。
NORM_IGNOREWIDTH0x20000忽略半角字符和全角字符之间的差异。 全角窗体是中文和日文脚本中使用的格式差异。
NORM_LINGUISTIC_CASING0x08000000使用默认语言规则进行大小写,而不是文件系统规则。
SORT_DIGITSASNUMBERS8Windows 7:在排序过程中,将数字视为数字,例如,在“10”前排序“2”。
SORT_STRINGSORT0x1000将标点视为符号。
配置文件——使用示例
配置文件 ——相关函数
中文名称英文名称示例作用
读取整数GetPrivateProfileIntA数值=读取整数(段名,键名,默认值,文件名)获取配置文件的指定键相关的整数,未找到时返回默认值
读取区段GetPrivateProfileSectionA长度=读取区段(段名,内容,大小,文件名)获取配置文件的指定区段(中括号里的名字)所有键名和值
读取段名GetPrivateProfileSectionNamesA长度=读取段名(内容,大小,文件名)获取配置文件的所有区段名称
读取文字GetPrivateProfileStringA长度=读取文字(段,键,默认,内容,大小,文件名)获取配置文件的指定键对应的内容(等号右边)
读取结构GetPrivateProfileStructA长度=读取结构(段,键,内容,大小,文件名)获取配置文件的指定键对应的结构数据
写入段名WritePrivateProfileSectionA长度=写入段名(段名,内容,文件名)创建配置文件的区段名称
写入文字WritePrivateProfileStringA长度=写入文字(段,键,内容,文件名)写入配置文件的指定键对应的内容(等号右边)
写入结构WritePrivateProfileStructA长度=写入结构(段,键,内容,大小,文件名)写入配置文件的指定键对应的结构数据
系统整数GetProfileIntA系统整数(节名,键名,默认值)从 Win.ini 文件的指定节中的键中检索整数。检索不到返回默认值。
系统全节GetProfileSectionA系统全节(节名,@内容,大小)检索 Win.ini 文件的指定节的所有键和值。最大32767
系统键值GetProfileStringA系统键值(节名,键名,默认,@内容,大小)检索 Win.ini 文件的指定节的所有键和值。
系统改节WriteProfileSectionA系统改节(节名,键值内容)将 Win.ini 文件中指定节的内容替换为指定的键和值。
系统改键WriteProfileStringA系统改键(节名,键名,内容)将字符串复制到 Win.ini 文件的指定节的键中。
内存读写——使用示例
内存读写 ——相关函数
中文名称英文名称示例作用
全局计数GlobalFlags全局计数(内存)检索有关指定全局内存对象的分配值和锁定计数。
全局指针GlobalHandle全局指针(内存)检索与指向全局内存块的指定指针关联的句柄。
堆块首个Heap32First堆块首个(堆块类,进程号,堆号)检索有关进程分配的堆的第一个块的信息。
堆存首个Heap32ListFirst堆存首个(快照,堆表类)检索有关指定进程分配的第一个堆的信息。
堆存下个Heap32ListNext堆存下个(快照,堆表类)检索有关指定进程分配的第一个堆的信息。
堆块下个Heap32First堆块下个(堆块类)检索有关进程已分配的堆的下一个块的信息。
局部分配LocalAlloc局部分配(方式,大小)从堆中分配指定的字节数。方式:0固定,2可移动,0x40初始化为零
局部计数LocalFlags局部计数(内存)检索有关指定局部内存对象的分配值和锁定计数。
局部指针LocalHandle局部指针(内存)检索与指向局部内存块的指定指针关联的句柄。
局部释放LocalFree局部释放(内存)释放指定的局部内存对象并使其空间无效
局部锁定LocalLockbuf=局部锁定(内存)返回指定的局部内存对象第一个字节的指针
局部更改LocalReAlloc局部更改(内存,大小,方式)更改指定的局部内存对象的大小或方式:0固定,2可移动,0x40初始化为零
局部大小LocalSizeln=局部大小(内存)获取指定的局部内存对象的当前大小
局部解锁LocalUnlock局部解锁(内存)取消指定的局部内存对象关联的内存分配空间
全局内存GlobalMemoryStatus全局内存(内存信息类)获取当前可用的物理和虚拟内存信息
全局分配GlobalAlloc内存=全局分配(方式,大小)从堆中分配指定的字节数内存。0固定,2可移动,$40初始化零
全局释放GlobalFree全局释放(内存)释放指定的全局内存对象并使其空间无效
全局锁定GlobalLockbuf=全局锁定(内存)返回指定的全局内存对象第一个字节的指针
全局更改GlobalReAlloc全局更改(内存,大小,方式)更改指定的全局内存对象的大小或属性
全局大小GlobalSize长度=全局大小(内存)获取指定的全局内存对象的当前大小
全局解锁GlobalUnlock全局解锁(内存)取消指定的全局内存对象关联的内存分配空间
进程堆址GetProcessHeap堆=进程内存获取本进程使用的堆对象
进程全堆GetProcessHeaps进程全堆(堆数,数组)获取本进程有效的所有堆的句柄
内存创建HeapCreate堆=内存创建(方式,大小,最大)创建本进程使用的堆对象,用来分配物理内存,方式1不互斥,4报告异常
内存分配HeapAlloc内存=内存分配(堆,方式,大小)从堆中分配一个不可移动的内存块。方式1不互斥,8初始化零,4报告异常
内存压缩HeapCompact内存压缩(堆,方式)尝试压缩指定的堆。合并相邻空闲内存,并消除大的可用内存块,方式1不互斥
内存销毁HeapDestroy内存销毁(堆)销毁指定的堆对象及其内存页面
内存释放HeapFree内存释放(堆,方式,内存)释放指定堆的内存页面
内存锁定HeapLock内存锁定(堆)锁定堆只有调用线程才能从堆中分配或释放内存
内存重建HeapReAlloc内存重建(堆,方式,内存,大小)从堆中重新分配一块内存,方式1不互斥,8初始化零,4报告异常,$10保留原数据
内存大小HeapSize大小=内存大小(堆,方式,内存)获取堆分配的内存块的大小
内存解锁HeapUnlock内存解锁(堆)解除指定堆相关联的关键部分对象的锁定
内存验证HeapValidate内存验证(堆,方式,内存)用来验证堆的完整性(内存为0)或堆中某块内存的完整性,方式1不互斥
内存枚举HeapWalk内存枚举(堆,信息)枚举指定堆中的内存块
内存摘要HeapDestroy内存销毁(堆,方式,摘要)汇总指定的堆
内存可读IsBadReadPtr内存可读(内存,大小)判断指定范围内存地址是否可读
内存可写IsBadWritePtr内存可写(内存,大小)判断指定范围内存地址是否可写
内存填充RtlFillMemory内存填充(地址,长度,值)使用指定的数值填充内存块。
传送内存RtlMoveMemory传送内存(目的,原址,n)在原址复制 n 个字节到目的地址中,两者可以有重叠
内存清零RtlZeroMemory内存清零(地址,长度)用0来填充一块内存区域
虚拟内存VirtualAlloc地址=虚拟内存(地址,大小,分类,保护)
申请内存,内存申请,堆申请,全局/局部分配
这些申请内存的方法,并没有本质上的不同
在虚拟地址空间中保留或提交一个页面区域。分配的内存将自动初始化为零
虚拟空间VirtualAllocEx地址=虚拟空间(进程,地址,大小,分类,保护)在指定进程虚拟地址空间中保留或提交一个页面区域。分配的内存将自动初始化为零
新申请地址写0,扩充时可保留原数据.分类=分配类型$1000新分配,$2000保留
保护1禁用2只读4读写$10可执行$20执行读$40执行读写
虚拟释放VirtualFree虚拟释放(地址,大小,操作)虚拟地址空间中释放或分解内存,操作$4000分解$8000释放(大小为0)
空间释放VirtualFreeEx空间释放(进程,地址,大小,操作)在指定进程的虚拟地址空间中释放或分解内存,操作$4000分解$8000释放(大小为0)
虚拟锁定VirtualLock虚拟锁定(地址,大小)虚拟地址空间的指定区域锁定到内存中
虚拟保护VirtualProtect虚拟保护(地址,大小,保护,@旧)更改调用进程虚拟地址空间中已提交页面的访问保护(读写权限)
空间保护VirtualProtectEx空间保护(进程,地址,大小,保护,@旧)更改指定进程虚拟地址空间中已提交页面的访问保护(读写权限)
虚拟查询VirtualQuery虚拟查询(地址,结构,大小)查询虚拟地址空间中的一系列页面的信息
空间查询VirtualQueryEx空间查询(地址,结构,大小)查询虚拟地址空间中的一系列页面的信息
虚拟解锁VirtualUnlock虚拟解锁(地址,大小)解锁进程的虚拟地址空间中的指定范围的页面
读取内存ReadProcessMemory读取内存(进程,地址,内容,长度,@已读)读取指定进程地址的内存数据
写入内存WriteProcessMemory写入内存(进程,地址,内容,长度,@已写)把数据写入指定进程的指定地址
内存信息类
中文名字英文名称长度作用解释
内存信息类MEMORYSTATUS32包含了当前计算机的信息。函数GlobalMemoryStatus
内存信息类——成员表
长度dwiLength整数结构的大小,初始设置为32长度
使用率dwMemoryLoad整数返回一个介于0~100之间的值,用来指示当前系统内存的使用率。
物理内存dwTotalPhys整数返回总的物理内存大小,以字节(byte)为单位。
可用内存dwAvailPhys整数返回可用的物理内存大小,以字节(byte)为单位。
交换文件dwTotalPageFile整数显示可以存在页面文件中的字节数。
空闲文件dwAvailPageFile整数返回可用的页面文件大小,以字节(byte)为单位。
可用地址dwTotalVirtual整数返回调用进程的用户模式部分的全部可用虚拟地址空间
空闲地址dwAvailVirtual整数返回调用进程的用户模式部分的实际自由可用的虚拟地址空间
堆表类
中文名字英文名称长度作用解释
堆表类HEAPLIST3216描述列表中枚举指定进程使用的堆的条目。
堆表类 成员表
中文英文类型作用解释
大小dwSize整数结构大小(以字节为单位)。
程号th32ProcessID整数使用堆的进程标识符。
堆号th32HeapID整数堆标识符。这不是句柄,仅对工具帮助函数有意义。
标志dwFlags整数1默认堆。
堆块类
1固定 (不可移动)。2不使用内存块。4可以移动。
中文名字英文名称长度作用解释
堆块类HEAPENTRY3236描述堆(块)正在检查的堆的一个条目。
堆块类 成员表
中文英文类型作用解释
大小dwSize整数结构大小(以字节为单位)。
指针hHandle整数堆块的句柄。
地址dwAddress整数块开头的线性地址。
块长dwBlockSize整数堆块的大小(以字节为单位)。
标志dwFlags整数
锁数dwLockCount整数此成员不再使用,并且始终设置为零。
预留dwResvd整数保留;请勿使用或更改。
语言文字——使用示例
字符文本 ——相关函数
中文名称英文名称示例作用
展开环境ExpandEnvironmentStringsA展开环境(环境名,@数据,大小)展开环境变量字符串,并将其替换为为当前用户定义的值。
释放环境FreeEnvironmentStringsA释放环境(字块)释放环境字符串块。
取环境字GetEnvironmentStringsA取环境字检索当前进程的环境变量。返回值是指向当前进程的环境块的指针。
取环境量GetEnvironmentVariableA取环境量(环境名,@数据,大小)从调用进程的环境块检索指定变量的内容。
改环境字SetEnvironmentStringsA改环境字(环境变量)设置调用进程的环境字符串 (当前进程的系统和用户环境变量) 。
改环境量SetEnvironmentVariableA改环境量(环境名,内容)设置当前进程的指定环境变量的内容。
转换文字FoldStringA转换文字(转换,源字,源长,@内容,大小)将一个 Unicode 字符串映射到另一个,执行指定的转换
格式消息FormatMessageA格式消息(选项,来源,消息号
,语言,@数据,大小,格式组)
按照消息定义设置消息字符串的格式。
代码标识GetACP代码标识检索操作系统的当前 Windows ANSI 代码页标识符。
厂商代码GetOEMCP厂商代码返回操作系统的当前原始设备制造商 (OEM) 代码页标识符。
代码信息GetCPInfo代码信息(代码页,代码类)检索有关任何有效的已安装或可用代码页的信息。0=ANSI,1=OEM,2=MAC,3当前线程
码页信息GetCPInfoExA码页信息(代码页,0,代码页类)检索有关任何有效的已安装或可用代码页的信息。0=ANSI,1=OEM,2=MAC,3当前线程
货币格式GetCurrencyFormatA货币格式(区域,选项,数字串,格式,@内容,大小)将数字字符串格式化为标识符指定的区域设置的货币字符串。格式为0时选项=0x80000000,否则选项=0
货币形式GetCurrencyFormatExA货币形式(区域,选项,数字串,格式,@内容,大小)将数字字符串格式化为标识符指定的区域设置的货币字符串。格式为0时选项=0x80000000,否则选项=0
数字格式GetNumberFormatA数字格式(区域,选项,数字串,格式,@内容,大小)将数字字符串的格式设置为指定的区域设置自定义的数字字符串。格式为0时选项=0x80000000,否则选项=0
比较区字CompareStringA比较区字(区域,标志,字1,长1,字2,长2)比较标识符指定的 区域设置 的两个字符串。
比较宽字CompareStringExA比较宽字(区域,标志,字1,长1,字2,长2,版本,0,0)比较两个Unicode (宽字符) 字符串,以用于名称指定的 区域设置 。
转换语言ConvertDefaultLocale转换语言(区域)将默认区域设置值转换为实际的 区域设置标识符。
地区信息GetLocaleInfoA地区信息(区域,类型,@内容,大小)检索有关标识符指定的区域设置的信息。
地区改项SetLocaleInfoA地区改项(区域,类型,内容)设置当前区域设置的用户替代部分中的信息项。此函数不设置系统默认值。
系统地区GetSystemDefaultLCID系统地区返回系统区域设置的区域设置标识符 。
系统区名GetSystemDefaultLocaleName系统区名(@名称,大小)检索系统默认区域设置名称。
时间转字GetTimeFormatA时间转字(地区,选项,时间类,格式,@内容,大小)将时间格式化为由标识符指定的区域设置的时间字符串。选项:1不用分和秒,2不用秒,4不用标记,8不用24小时;"hh':'mm':'ss tt"
用户地区GetUserDefaultLCID用户地区返回用户默认区域设置的区域设置标识符。
用户语言GetUserDefaultLangID用户语言返回当前用户的“区域格式”设置的语言标识符 。
用户区名GetUserDefaultLocaleName用户区名(@名称,大小)检索用户默认区域设置名称。
是前导字IsDBCSLeadByte是前导字(值)确定指定的字符是否是系统默认ANSI代码页的前导字节。
前导字符IsDBCSLeadByteEx前导字符(代码页,值)确定指定的字符是否可能是前导字节。代码:0=ANSI,1=OEM,2=MAC,3当前线程
处理功能IsProcessorFeaturePresent处理功能(功能)确定当前计算机是否支持指定的处理器功能
有效码页IsValidCodePage有效码页(代码页)确定指定的代码页是否有效。
验语言组IsValidLanguageGroup验语言组(语言组,标志)确定操作系统上是安装还是支持语言组。标志:1支持安装,2支持语言组
支持地区IsValidLocale支持地区(区域,标志)确定操作系统上是安装还是支持指定的区域设置。标志:1支持安装,2支持区域设置
支持区名IsValidLocaleName支持区名(区名)确定指定的 区域设置名称 对于操作系统上安装或支持的区域设置是否有效。
地区转名LCIDToLocaleName地区转名(区域,@名称,大小,标志)将 区域设置标识符转换为区域设置名称。标志:0x08000000非特定名称
映射文字LCMapStringA映射文字(区域,标志,源字,大小,@目标,长度)使用指定的转换将输入字符串映射到另一个字符串,或者生成排序键。
映射转换LCMapStringEx映射转换(区域,标志,源字,大小,@目标,长度,版本,0,0)使用指定的转换将输入字符串映射到另一个字符串,或者生成排序键。
转系统页SetFileApisToANSI转系统页使文件 I/O 函数对当前进程使用 ANSI 字符集代码页。此函数适用于 8 位控制台输入和输出操作。
转厂商页SetFileApisToOEM转厂商页使文件 I/O 函数对当前进程使用 OEM 字符集代码页。此函数适用于 8 位控制台输入和输出操作。
语言说明VerLanguageNameA语言说明(语言,@说明,大小)检索与指定的二进制微软语言标识符关联的语言的说明字符串。
附加文字lstrcatA附加文字(文字1,"好")给文字1的字符串末尾增加文字
比较文字lstrcmpA比较文字(文字1,文字2)文字1和文字2进行比较,区分大小写
比较字母lstrcmpiA比较字母(文字1,文字2)文字1和文字2进行比较,不区分大小写
复制文字lstrcpyA复制文字(文字1,文字2)把文字2复制到文字1的内存位置
复制前字lstrcpynA复制前字(文字1,文字2,n)把文字2的前n个字符复制到文字1的内存中
字串长度lstrlenA字串长度(文字)获取文字的长度,英文1字节,汉字2字节
乘除MulDiv乘除(被乘数,乘数,除数)返回(被乘数 * 乘数 / 除数)的结果,四舍五入取整
到宽字符MultiByteToWideChar到宽字符(编码,选项,原文,长度,缓冲,大小)将字符串映射到UTF-16宽字符串。
到多字符WideCharToMultiByte到多字符(编码,选项,原文,长度,缓冲,大小,默认,是否)将UTF-16宽字符串映射到新字符串。
数字类
中文名字英文名称长度作用解释
数字类CURRENCYFMTA24包含定义数字字符串格式的信息。
数字类 成员表
中文英文类型作用解释
点数NumDigits整数小数位数。最大字符数为2
前零LeadingZero整数指示是否应在十进制字段中使用前导零的值。0无前导零;1前导零
分组Grouping整数指定的小数分隔符左侧每组数字中(紧邻和后续)的位数。 0将数字分组为 123456789.00; 3分组为123,456,789.00; 32将数字分组为 12,34,56,789.00。
十分lpDecimalSep整数指向以0结尾的十进制分隔符字符串的指针。
千分lpThousandSep整数指向以0结尾的千位分隔符字符串的指针。
负序NegativeOrder整数负数模式。
代码类
中文名字英文名称长度作用解释
代码类CPINFO18包含有关代码页的信息。
代码类 成员表
中文英文类型作用解释
字长MaxCharSize整数代码页中字符的最大长度(以字节为单位)。SBCS=1 DBCS=2
默认DefaultChar[2]文本将字符串转换为特定代码页时使用的默认字符。
前导LeadByte[12]文本前导字节范围的固定长度数组,前导字节范围的数量是可变的。
代码页类
中文名字英文名称长度作用解释
代码页类CPINFOEXA284包含有关代码页的信息。
代码页类 成员表
中文英文类型作用解释
字长MaxCharSize整数代码页中字符的最大长度(以字节为单位)。SBCS=1 DBCS=2
默认DefaultChar[2]文本将字符串转换为特定代码页时使用的默认字符。
前导LeadByte[12]文本前导字节范围的固定长度数组,前导字节范围的数量是可变的。
默字UnicodeDefaultChar整形特定代码页的翻译中使用的 Unicode 默认字符。 默认值通常是“?”字符或片假名中间点字符。=
码页CodePage整数代码页值。
名称CodePageName[260]文本代码页的全名。
映射转换类型标志
指定在字符串映射期间使用的转换类型或要生成的排序键类型的标志。此参数可以具有以下值。
英文名称数值作用解释
LCMAP_BYTEREV0x00000800使用字节反转。 例如,如果应用程序传入0x3450 0x4822,则结果为0x5034 0x2248。
LCMAP_FULLWIDTH0x00800000如果适用,请使用 Unicode (宽) 字符。 此标志和LCMAP_HALFWIDTH是互斥的。 使用此标志时,即使输入字符已经是全角字符,映射也可以使用规范化形式。
LCMAP_HALFWIDTH0x00400000在适用的情况下使用窄字符。 此标志和LCMAP_FULLWIDTH互斥。
LCMAP_HIRAGANA0x00100000将所有片假名字符映射到平假名。 此标志和LCMAP_KATAKANA是互斥的。
LCMAP_KATAKANA0x00200000将所有平假名字符映射到片假名。 此标志和LCMAP_HIRAGANA是互斥的。
LCMAP_LINGUISTIC_CASING0x01000000使用语言规则进行大小写,而不是文件系统规则 (默认) 。 此标志仅对 LCMAP_LOWERCASE 或 LCMAP_UPPERCASE 有效。
LCMAP_LOWERCASE0x00000100对于能够处理大写和小写的区域设置和脚本,请将所有字符映射到小写。
LCMAP_HASH0x00040000返回字符串的原始排序权重的哈希。要求输出缓冲区的大小为 (int)
LCMAP_SIMPLIFIED_CHINESE0x02000000将繁体中文映射到简体中文字符。 此标志和LCMAP_TRADITIONAL_CHINESE是互斥的。
LCMAP_TRADITIONAL_CHINESE0x04000000将简体中文字符映射到繁体中文。 此标志和LCMAP_SIMPLIFIED_CHINESE是互斥的。
LCMAP_SORTHANDLE0x20000000返回表示区域设置的标记,以便将来的调用可以传递 NULL 排序名称,并将以前查询的排序句柄作为最后一个参数传递。要求输出缓冲区的大小为 (lparam)
LCMAP_SORTKEY0x00000400生成规范化排序键。 如果未指定LCMAP_SORTKEY标志,函数将执行字符串映射。 有关排序键生成和字符串映射的详细信息,请参阅备注部分。
LCMAP_TITLECASE0x00000300Windows 7: 将所有字符映射到标题大写,其中每个主要单词的第一个字母都大写。
LCMAP_UPPERCASE0x00000200对于能够处理大写和小写的区域设置和脚本,将所有字符映射到大写。
以下标志可以单独或相互使用,也可以与LCMAP_SORTKEY和/或LCMAP_BYTEREV标志一起使用。
NORM_IGNORENONSPACE0x00000002忽略非节奏字符。对于许多脚本 (尤其是拉丁语脚本) ,与LINGUISTIC_IGNOREDIACRITIC一致。
NORM_IGNORESYMBOLS0x00000004忽略符号和标点。
下面列出的标志仅与 LCMAP_SORTKEY 标志一起使用。
LINGUISTIC_IGNORECASE0x00000010在语言上适当时忽略大小写。
LINGUISTIC_IGNOREDIACRITIC0x00000020在语言上适当时忽略非节奏字符。
NORM_IGNORECASE0x00000001忽略大小写。 对于许多脚本 (尤其是拉丁语脚本) ,NORM_IGNORECASE与LINGUISTIC_IGNORECASE一致。
NORM_IGNOREKANATYPE0x00010000不要区分平假名和片假名字符。 对应的平假名和片假名字符比较相等。
NORM_IGNOREWIDTH0x00020000忽略半角字符和全角字符之间的差异,例如 C a t == cat。 全角窗体是中文和日文脚本中使用的格式差异。
NORM_LINGUISTIC_CASING0x08000000使用语言规则进行大小写,而不是文件系统规则 (默认) 。
SORT_DIGITSASNUMBERS0x00000008Windows 7:在排序过程中,将数字视为数字,例如,在“10”前排序“2”。
SORT_STRINGSORT0x00001000将标点视为符号。
映射转换类型
英文名称数值作用解释
MAP_COMPOSITE0x00000040将重音字符映射到分解字符,即基字符和一个或多个非节奏字符各自具有不同的码位值的字符。 例如,Ä 由 A + ̈:拉丁文大写字母 A (U+0041) + 组合分音 (U+0308) 。 此标志等效于 Windows Vista 中的规范化形式 D。 请注意,此标志不能与MB_PRECOMPOSED一起使用。
MAP_EXPAND_LIGATURES0x00002000展开所有连字字符,使其由两个字符等效表示。 例如,连字“æ” (U+00e6) 扩展为两个字符“a” (U+0061) + “e” (U+0065) 。 此值不能与MAP_PRECOMPOSED或MAP_COMPOSITE结合使用。
MAP_FOLDCZONE0x00000010将兼容区域字符折叠到标准 Unicode 等效项中。 如果还设置了MAP_COMPOSITE标志,则此标志等效于 Windows Vista 中的规范化形式 KD。 如果未 (默认) 设置组合标志,则此标志等效于 Windows Vista 中的规范化形式 KC。
MAP_FOLDDIGITS0x00000080将所有数字映射到 Unicode 字符 0 到 9。
MAP_PRECOMPOSED0x00000020将重音字符映射到预组合字符,其中重音符和基字符合并为单个字符值。 此标志等效于 Windows Vista 中的规范化形式 C。 此值不能与 MAP_COMPOSITE 组合使用。
格式消息设置选项
格式设置选项以及如何解释 来源 参数。 选项 的低序字节指定函数如何处理输出缓冲区中的换行符。
低序字节可以指定格式化输出行的最大宽度。 下面是低序字节的可能值。
0 没有输出行宽度限制。 函数将消息定义文本中的换行符存储在输出缓冲区中。
0xFF 函数忽略消息定义文本中的常规换行符。 函数将消息定义文本中的硬编码换行符存储在输出缓冲区中。 该函数不生成新的换行符。
此参数可使用以下一个或多个值。
英文名称数值作用解释
FORMAT_MESSAGE_ALLOCATE_BUFFER0x00000100函数分配一个足够大的缓冲区(最大128K) 来保存格式化的消息,并将指向分配的缓冲区的指针放在 lpBuffer 指定的地址处。 lpBuffer 参数是指向 LPTSTR 的指针;必须将指针强制转换为 LPTSTR (例如, (LPTSTR)&lpBuffer) 。 nSize 参数指定要为输出消息缓冲区分配的最小 TCHAR 数。 调用方应使用 LocalFree 函数在不再需要缓冲区时释放缓冲区。
FORMAT_MESSAGE_ARGUMENT_ARRAY0x00002000Arguments 参数不是va_list结构,而是指向表示参数的值数组的指针。此标志不能与 64 位整数值一起使用。 如果使用 64 位整数,则必须使用 va_list 结构。
FORMAT_MESSAGE_FROM_HMODULE0x00000800lpSource 参数是一个模块句柄,其中包含要搜索的消息表资源 () 。 如果此 lpSource 句柄为 NULL,则将搜索当前进程的应用程序映像文件。 此标志不能与 FORMAT_MESSAGE_FROM_STRING 一起使用。
FORMAT_MESSAGE_FROM_STRING0x00000400lpSource 参数是指向包含消息定义的以 null 结尾的字符串的指针。 消息定义可能包含插入序列,就像消息表资源中的消息文本一样。 此标志不能与 FORMAT_MESSAGE_FROM_HMODULE 或 FORMAT_MESSAGE_FROM_SYSTEM一起使用。
FORMAT_MESSAGE_FROM_SYSTEM0x00001000函数应搜索系统消息表资源 () 请求的消息。 如果使用 FORMAT_MESSAGE_FROM_HMODULE 指定此标志,则函数在 lpSource 指定的模块中找不到该消息时搜索系统消息表。 此标志不能与 FORMAT_MESSAGE_FROM_STRING 一起使用。
FORMAT_MESSAGE_IGNORE_INSERTS0x00000200消息定义中的插入序列(如 %1)将被忽略,并传递到未更改的输出缓冲区。 此标志可用于提取消息以供以后进行格式设置。 如果设置了此标志,则忽略 Arguments 参数。
格式消息定义的位置
英文名称数值作用解释
FORMAT_MESSAGE_FROM_HMODULE0x00000800包含要搜索的消息表的模块的句柄。
FORMAT_MESSAGE_FROM_STRING0x00000400指向由未格式化消息文本组成的字符串的指针。 将扫描它以进行插入并相应地设置格式。

格式组,这些值在格式化的消息中用作插入值。 格式字符串中的 %1 指示 格式组 数组中的第一个值;%2 指示第二个参数;等等。

每个值的解释取决于与消息定义中的插入关联的格式信息。 默认值是将每个值视为指向以 null 结尾的字符串的指针。

默认情况下, 格式组 参数的类型为 va_list*,这是一种特定于语言和实现的数据类型,用于描述可变数量的参数。返回时va_list 参数的状态未定义。
若要再次使用 va_list ,请使用 va_end 销毁变量参数列表指针,并使用 va_start重新初始化它。

如果没有 va_list*类型的指针,请指定 0x2000 标志并将指针传递到 DWORD_PTR 值的数组;这些值被输入到格式为插入值的消息中。每个插入都在数组中具有相应元素。
在消息文本中,支持多个用于动态设置消息格式的转义序列。 下表显示了这些转义序列及其含义。 所有转义序列以百分比字符 (%) 开头。
%0	终止消息文本行,不带尾随新行字符。 此转义序列可用于生成长行或终止消息本身,而无需尾随新行字符。 这对于提示消息很有用。
%n!字符串!	标识插入序列。 n 的值可以介于 1 到 99 的范围内。 格式字符串 (,必须用感叹号括起来,) 是可选的,默认为 !s! 如果未指定,则为 。
格式字符串可以包含字符串的宽度和精度说明符,以及整数的宽度说明符。 使用星号 () 指定宽度和精度。例如,%1!。*s! 或 %1!*u!。

如果不使用宽度和精度说明符,则插入数字直接对应于输入参数。例如源字符串为"%1 %2 %1",输入参数为"Bill"和"Bob",则输出字符串为"Bill Bob Bill"。

但是,如果使用宽度和精度说明符,则插入数字不直接对应于输入参数。 例如,上一示例中的插入编号可能会更改为"%1!*.*s! %4 %5!*s!"。

但是,如果使用宽度和精度说明符,则插入数字不直接对应于输入参数。 例如,上一示例中的插入编号可能会更改为"%1! *.*s! %4 %5! *s!"。
插入数字取决于是使用参数数组 (0x2000) 还是 va_list。对于参数数组,如果上一个格式字符串包含一个星号则下一个插入编号为n+2 ;如两个星号则为n+3 。
对于 va_list,如果上一个格式字符串包含一个星号,则下一个插入号为 n+1 ;如果指定了两个星号,则为 n+2 。

如果要重复Bill,参数必须包含Bill两次。例如"%1! *.*s!  %4 %5! *s!",参数可以是 4、2、Bill、Bob、6、Bill 。 然后,格式化的字符串将为"Bi Bob Bill"

当源字符串包含宽度和精度说明符时重复插入数字可能不会生成预期结果。 如果将 %5 替换为 %1,则函数将尝试在地址 6 打印字符串, (可能导致访问冲突) 。

不支持浮点格式说明符(e、E、f 和 g)。 解决方法是使用 StringCchPrintf 函数将浮点数格式化为临时缓冲区,然后使用该缓冲区作为插入字符串。

使用 I64 前缀的插入被视为两个 32 位参数。 在使用后续参数之前,必须使用它们。 请注意,使用 StringCchPrintf 而不是此前缀可能更容易。

 
百分比字符后的任何其他非数字字符在输出消息中设置格式,不带百分比字符。 下面是一些示例。

格式字符串	生成的输出
%%	单个百分号。
%space	单个空间。 此格式字符串可用于确保消息文本行中尾随空格的相应数目。
%.	单个句点。 此格式字符串可用于在行开头包含单个句点,而不会终止消息文本定义。
%!	单个感叹号。 此格式字符串可用于在插入后立即包含感叹号,而不会将其误认为是格式字符串的开头。
%n	格式字符串出现在行尾时的硬换行符。 当 FormatMessage 提供常规换行符以便邮件适合特定宽度时,此格式字符串非常有用。
%r	不带尾随换行符的硬回车符。
%t	单个选项卡。

Win32常用函数-user32库
键盘鼠标——使用示例
应用程序应接受来自键盘和鼠标的用户输入。系统会把输入事件以消息的形式发布到其窗口过程。初级程序默认在“窗体消息”这个程序段接收键盘和鼠标输入。
键盘输入模型
系统通过使用用户或应用程序当前选择的特定于语言的键盘布局,提供与语言无关的键盘支持。 键盘设备驱动程序从键盘接收扫描代码,这些代码将发送到键盘布局,在键盘布局中,扫描代码将转换为消息并发布到应用程序中的相应窗口。
分配给键盘上每个键的唯一值称为扫描代码,是键盘上键的设备相关标识符。 当用户键入某个键时,键盘会生成两个扫描代码,一个在用户按下该键时生成,另一个在用户松开该键时生成。
键盘设备驱动程序解释扫描代码并将其转换(映射)为虚拟键代码,这是一个由系统定义的独立于设备的值,用于标识键的用途。 转换扫描代码后,键盘布局会创建一条消息,其中包含扫描代码、虚拟键代码和有关击键的其他信息,
然后将该消息置于系统消息队列中。 系统将该消息从系统消息队列中删除,并将其发布到相应线程的消息队列。 最终,线程的消息循环会删除该消息,并将其传递给相应的窗口过程进行处理。
键盘焦点和激活
系统将键盘消息发布到创建具有键盘焦点的窗口的前台线程的消息队列。 键盘焦点是窗口的临时属性。 系统将键盘焦点从一个窗口移动到另一个窗口,从而在显示器上的所有窗口之间共享键盘。
具有键盘焦点的窗口(从创建它的线程的消息队列)接收所有键盘消息,直到焦点更改为其他窗口。线程可以调用 焦点窗口 函数来确定哪个窗口(如果有)当前具有键盘焦点。
线程可以通过调用 设置焦点 函数将键盘焦点赋予其中一个窗口。 将键盘焦点从一个窗口更改为另一个窗口时,系统会向失去焦点的窗口发送 失去焦点 消息,然后向获得焦点的窗口发送 获得焦点 消息。
键盘焦点的概念与活动窗口的概念相关。 活动窗口是用户当前正在使用的顶级窗口。 具有键盘焦点的窗口要么是活动窗口,要么是活动窗口的子窗口。 为了帮助用户识别活动窗口,系统会将其置于 Z 顺序的顶部并突出显示其标题栏(如果有)和边框。
用户可以通过单击顶级窗口、使用 ALT+TAB 或 Alt+ESC 组合键选择它或从“任务列表”中选择它来激活该窗口。 线程可以使用 激活窗口 函数激活顶级窗口。 它可以使用 活动窗口 函数确定所创建的顶级窗口是否处于活动状态。
当一个窗口停用而另一个窗口被激活时,系统会发送 窗口激活 消息。 如果正在停用窗口,则 ③参数 参数的低序字为零,如果正在激活窗口,则为非零。 默认窗口过程收到 窗口激活 消息后,便会将键盘焦点设置到活动窗口。
若要阻止键盘和鼠标输入事件到达应用程序,请使用 阻塞输入。 请注意,阻塞输入 函数不会干扰异步键盘输入状态表。 这意味着在输入被阻止时调用 发送输入 函数将更改异步键盘输入状态表。
系统和非系统击键消息
按下键会使 键盘按下 或 ALT键按下 消息被放入附加到具有键盘焦点的窗口的线程消息队列中。 松开键会使 键盘按下 或 ALT键松开 消息被放入队列中。
按下键和松开键消息通常是相伴发生的,但如果用户长按一个键,以致键盘的自动重复功能启动,则系统会连续生成许多 键盘按下 或 ALT键按下 消息。 然后,当用户松开键时,它会生成一条 键盘按下 或 ALT键松开 消息。
系统区分系统击键和非系统击键。 系统击键会生成系统击键消息 ALT键按下 和 ALT键松开。系统击键消息主要供系统而不是应用程序使用,过程将其传递给 处理窗口 函数进行处理。
非系统击键会生成非系统击键消息 键盘按下 和 键盘松开。非系统击键消息供应用程序窗口使用;处理窗口 函数不对其执行任何操作。 窗口过程可以丢弃它不需要的任何非系统击键消息。
描述的虚拟键代码
击键消息的 ③参数 包含按下或松开的键的虚拟键代码。 窗口过程根据虚拟键代码的值处理或忽略击键消息。
典型的窗口过程仅处理它接收到的击键消息的一小部分,而忽略其余部分。 典型的窗口过程不处理来自字符键的击键消息。
判断(消息) 为 键盘按下 获取键值(参数)
  为 键盘松开 获取键值(参数)

  为 键入字符 获取键值(参数)
在键盘按下的动作事件里,把参数提交给获取键值的程序段,也就是键值
程序段 获取键值(键码)
  判断(键码)为 37 左方向键
  为 38 上方向键 为 65 字母A键

击键消息标志
击键消息的 ④数据 参数包含有关生成该消息的击键的附加信息。 此信息包括重复计数、扫描代码、扩展键标志、上下文代码、上一个键状态标志和转换状态标志。应用程序可以从 ④数据 的高位字中获取以下击键标志。
英文名字常量数值释义
KF_EXTENDED0x0100操作扩展键标志。
KF_DLGMODE0x0800操作对话框模式标志,该标志指示对话框是否处于活动状态。
KF_MENUMODE0x1000操作菜单模式标志,该标志指示菜单是否处于活动状态。
KF_ALTDOWN
0x2000操作上下文代码标志。
KF_REPEAT0x4000操作上一个键状态标志。
KF_UP0x8000操作转换状态标志。
键盘输入通知
中文名字常量数值英文名称释义
窗口激活6WM_ACTIVATE一个窗口被激活或失去激活状态。③参数:0关闭,1非鼠标激活,2鼠标激活;④数据:参数为0是激活窗口,非0是停用的窗口
获得焦点7WM_SETFOCUS将键盘焦点转向一个窗口。③参数:失去焦点的窗口,可为0;④数据:0
失去焦点8WM_KILLFOCUS使一个窗口失去焦点。③参数:接收焦点的窗口,可为0;④数据:0
键盘按下$0100WM_KEYDOWN当一个非系统按键被按下时(键没有被按下),会发送本消息给拥有键盘焦点的窗口。③参数:键码;④数据:扫描码
键盘松开$0101WM_KEYUP当一个非系统按键被释放弹起时(键没有被按下),会发送本消息给拥有键盘焦点的窗口。③参数:键码;④数据:扫描码
键入字符$0102WM_CHAR按下某按键,并已发出按下、松开消息,本消息包含被按下的按键的字符码。③参数:字码;④数据:扫描码
敲击按键$0103WM_DEADCHAR\"死字符\"消息,当使用翻译消息函数翻译WM_KEYUP消息时,发送本消息给拥有键盘焦点的窗口。③参数:键码;④数据:扫描码
ALT键按下$0104WM_SYSKEYDOWN当用户按住键的同时又按下其它键时,发送本消息给拥有焦点的窗口。③参数:键码;④数据:扫描码
ALT键松开$0105WM_SYSKEYUP当用户释放一个按键的同时键还按着时,发送本消息给拥有焦点的窗口。③参数:键码;④数据:扫描码
ALT键字符$0106WM_SYSCHAR当WM_SYSKEYDOWN消息被翻译消息函数翻译后,发送本消息给拥有焦点的窗口,注:键被按下。③参数:键码;④数据:扫描码
ALT敲字符$0107WM_SYSDEADCHAR\"死字符\"消息,当使用翻译消息函数翻译WM_SYSKEYDOWN消息时,发送本消息给拥有键盘焦点的窗口。③参数:键码;④数据:扫描码
键入宽字$0109WM_UNICHAR此消息包含按下的键的字符代码。类似于键入字符,但它使用宽字符转换格式UTF-32,而键入字符使用 UTF-16。③参数:键码;④数据:扫描码
系统命令$0112WM_SYSCOMMAND当用户选择一条系统菜单命令、用户最大化或最小化或还原或关闭时。③参数:命令;④数据:点菜单时鼠标位置
热键消息$312WM_HOTKEY当用户按下由注册热键函数注册的热键时。③参数:-1窗口,-2桌面;④数据:低字=1Alt,2CTRL,4SHIFT,8WIN;高字=键码
程序命令$319WM_APPCOMMAND用户点击应用程序命令按钮或键盘命令键(如导航刷新搜索)③参数:窗口;④数据:命令/设备/按键
鼠标光标
当用户移动鼠标时,系统会在屏幕上移动一个称为鼠标光标的位图。 鼠标光标包含一个称为热点的单像素点,系统跟踪该点并将其识别为光标的位置。
当鼠标事件发生时,包含热点的窗口通常会接收到事件生成的鼠标消息。 窗口不需要处于活动状态或具有键盘焦点来接收鼠标消息。
整数 光标=载入光标(0,32649);//加载系统固有的光标,32649是手形光标
修改类值(按钮1,窗类光标,光标);//修改按钮1的光标为手形光标
删除对象(光标);//删除加载的光标对象,从而释放读取光标使用的内存
系统维护一个控制鼠标速度的变量,即光标在用户移动鼠标时移动的距离。 可以使用带有 SPI_GETMOUSE 或 SPI_SETMOUSE 标志的 SystemParametersInfo 函数来检索或设置鼠标速度。
消息参数
工作区鼠标消息的 ④数据 参数指示光标热点的位置。 低序字(16位)表示热点的 x 坐标,高序字(16位)表示 y 坐标。在工作区坐标系中,屏幕上的所有点都是相对于工作区左上角的坐标 (0,0) 指定的。
在窗体消息程序段里 判断(消息)
为 鼠标移动,按下左键,按下右键;//客户区的鼠标消息都可以通过④数据得到坐标值
{左=数据 & 0xFFFF;//获取数据的低16位x坐标值
上=数据 >> 16};//数据右移16位得到y坐标值
③参数 参数包含指示其他鼠标按钮以及 CTRL 和 SHIFT 键在鼠标事件发生时的状态的标志。 可以是以下值的组合。
按下了鼠标左键。按下了鼠标右键。按下了 Shift 键。按下了 Ctrl 键。按下了鼠标中键。按下了第一个 X 按钮。按下了第二个 X 按钮。
英文名字数值释义
MK_LBUTTON1
MK_RBUTTON2
MK_SHIFT4
MK_CONTROL8
MK_MBUTTON16
MK_XBUTTON132
MK_XBUTTON264
非工作区鼠标消息 当鼠标事件发生在窗口的任何部分(工作区除外)时,窗口会收到非工作区鼠标消息。 窗口的非工作区由边框、菜单栏、标题栏、滚动条、窗口菜单、最小化按钮和最大化按钮组成。
系统生成非工作区消息,主要供其自身使用。 例如,当光标热点移动到窗口的边框时,系统使用非工作区消息将光标更改为双向箭头。 窗口必须将非工作区鼠标消息传递到 处理窗口 函数,才能利用内置鼠标接口。
非工作区鼠标消息的 ④数据 参数是一个包含光标热点的 x 和 y 坐标的结构。 与工作区鼠标消息的坐标不同,坐标以屏幕坐标而不是工作区坐标指定。 在屏幕坐标系中,屏幕上的所有点都是相对于屏幕左上角坐标 (0,0) 指定。
③参数 参数包含一个命中测试值,该值指示鼠标事件在非工作区中发生的位置。每当发生鼠标事件时,系统都会向包含光标热点的窗口或捕获鼠标的窗口发送 光标离开 消息。
③参数:命中测试值可以是以下值之一。
英文名字数值释义
HTERROR在屏幕背景上或窗口之间的分割线上(处理窗口 函数会生成系统蜂鸣音以指示错误)。
HTTRANSPARENT-1在当前被同一线程中的另一窗口覆盖的窗口中。
HTNOWHERE0在屏幕背景上,或在窗口之间的分隔线上。
HTCLIENT1在工作区中。
HTCAPTION2在标题栏中。
HTSYSMENU3在子窗口的“系统”菜单或“关闭”按钮中。
HTGROWBOX4在大小框中(与 HTSIZE 相同)。
HTSIZE4在大小框中(与 HTGROWBOX 相同)。
HTMENU5在菜单中。
HTHSCROLL6在水平滚动条中。
HTVSCROLL7在垂直滚动条中。
HTMINBUTTON8在“最小化”按钮中。
HTREDUCE8在“最小化”按钮中。
HTZOOM9在“最大化”按钮中。
HTMAXBUTTON9在“最大化”按钮中。
HTLEFT10在窗口的左边框中。
HTRIGHT11在窗口的右边框中。
HTTOP12在窗口的上水平边框中。
HTTOPLEFT13在窗口边框的左上角。
HTTOPRIGHT14在窗口边框的右上角。
HTBOTTOM15在窗口的下水平边框中。
HTBOTTOMLEFT16在窗口边框的左下角。
HTBOTTOMRIGHT17在窗口边框的右下角。
HTBORDER18在没有大小调整边框的窗口边框中。
HTOBJECT19对象。
HTCLOSE20在“关闭”按钮中。
HTHELP21在“帮助”按钮中。
鼠标输入通知
中文名字常量数值英文名称释义
捕获光标$0020WM_SETCURSOR若鼠标光标在某窗口内移动且鼠标没被捕获时,就会发送本消息给某个窗口。③参数:窗口;④数据:命中消息
拖曳后窗$0021WM_MOUSEACTIVATE当鼠标光标在某个未激活窗口内,而用户正按着鼠标的某个键时,会发送本消息给当前窗口。③参数:父窗;④数据:命中消息;
返回值:1激活窗口不丢弃鼠标,2激活丢弃鼠标,3不激活不丢弃,4不激活丢弃鼠标
点击右键$007BWM_CONTEXTMENU当用户在某窗口中点击右键就发送本消息给该窗口,设置右键菜单。③参数:窗口;④数据:屏幕坐标x/y
命令事件$0111WM_COMMAND用户选择一条菜单命令项或某控件发送一条通知消息给其父窗,或某快捷键被翻译时,本消息被发送。③参数:低位=编号,高位=事件;④数据:控件;菜单高位0,快捷键高位1,两者数据都是0
系统命令$0112WM_SYSCOMMAND当用户选择一条系统菜单命令、用户最大化或最小化或还原或关闭时。③参数:命令;④数据:点菜单时鼠标位置
程序命令$319WM_APPCOMMAND用户点击应用程序命令按钮或键盘命令键(如导航刷新搜索)③参数:窗口;④数据:命令/设备/按键
鼠标移动$0200WM_MOUSEMOVE当鼠标在窗口客户区移动时。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
按下左键$0201WM_LBUTTONDOWN当鼠标左键在窗口客户区按下。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
释放左键$0202WM_LBUTTONUP当鼠标左键在窗口客户区放开。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
双击左键$0203WM_LBUTTONDBLCLK当鼠标左键在窗口客户区双击。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
按下右键$0204WM_RBUTTONDOWN当鼠标右键在窗口客户区按下。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
释放右键$0205WM_RBUTTONUP当鼠标右键在窗口客户区放开。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
双击右键$0206WM_RBUTTONDBLCLK当鼠标右键在窗口客户区双击。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
按下中键$0207WM_MBUTTONDOWN当鼠标中键在窗口客户区按下。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
释放中键$0208WM_MBUTTONUP当鼠标中键在窗口客户区放开。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
双击中键$0209WM_MBUTTONDBLCLK当鼠标中键在窗口客户区双击。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
滚轮转动$020AWM_MOUSEWHEEL当滚动鼠标滚轮时发送。③参数:高位120向后,-120向前;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
侧键按下$020BWM_XBUTTONDOWN用户按下X按钮时发布。③参数:高位1第一个X按钮,2第二个X按钮;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
侧键松开$020CWM_XBUTTONUP用户松开X按钮时发布。③参数:高位1第一个X按钮,2第二个X按钮;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
侧键双击$020DWM_XBUTTONDBLCLK用户双击X按钮时发布。③参数:高位1第一个X按钮,2第二个X按钮;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
鼠标滚轮$020EWM_MOUSEHWHEEL当鼠标的水平滚轮倾斜或旋转时发送。③参数:高位120向后,-120向前;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
失去鼠标$215WM_CAPTURECHANGED当它失去捕获的鼠标时,发送本消息给窗口。③参数:0;④数据:窗口
移动消息$216WM_MOVING当用户在移动窗口时发送本消息,通过本消息应用程序以监视窗口大小和位置,也可修改它们。③参数:0;④数据:矩形类
拖放文件$233WM_DROPFILES鼠标拖放时,放下事件产生时发送本消息,比如:文件拖放功能。③参数:文件;④数据:0
鼠标经外$2A0WM_NCMOUSEHOVER当光标悬停在窗口的非工作区上的达到指定时间发送本消息。③参数:命中值;④数据:坐标类;
鼠标经过$2A1WM_MOUSEHOVER当光标悬停在窗口的工作区上的达到指定时间发送本消息。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
鼠标离外$2A2WM_NCMOUSELEAVE当光标离开之前调用 TrackMouseEvent 中指定的窗口的非工作区时发送本消息。③参数:0;④数据:0;
鼠标离开$2A3WM_MOUSELEAVE鼠标离开控件时,触发发送本消息。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y;
键盘鼠标——结构类型
中文名字英文名称长度作用解释
鼠标点类MOUSEINPUT24用来表示鼠标点位置。
鼠标点类——成员表
dx整数鼠标的 x 坐标或移动的像素数。
dy整数鼠标的 y 坐标或移动的像素数。
方向mouseData整数取按键时1是左键,2是右键,取滚轮时正值向前滚动,负数向后滚动
标志dwFlags整数一组位标志。1鼠标移动,2按下左键,4松开左键,8按下右键,16松开右键,32按下中键,64松开是中键,
128按下X键,256松开X键,$800滚轮移动,$1000滚轮水平移动,$4000桌面坐标,$8000绝对坐标
时间time整数鼠标坐标的时间戳。(以毫秒为单位)
扩展dwExtraInfo整数与此坐标关联的其他信息。

中文名字英文名称长度作用解释
移动点类MOUSEMOVEPOINT16用来表示鼠标移动位置。
移动点类——成员表
x整数鼠标的 x 坐标。
y整数鼠标的 y 坐标。
时间time整数鼠标坐标的时间戳。(以毫秒为单位)
扩展dwExtraInfo整数与此坐标关联的其他信息。

中文名字英文名称长度作用解释
键盘类KEYBDINPUT16包含有关模拟键盘事件的信息。
键盘类——成员表
键码wVkScan整数虚拟密钥代码和密钥的硬件扫描代码。如果 标志 指定 4或8 则低位是0,高位宽字符
标志dwFlags整数指定击键的各个方面。1扫描码两字节(E0xx),2释放密钥(否则按键),4合成宽字符键,8扫描码
时间time整数鼠标坐标的时间戳。(以毫秒为单位)
扩展dwExtraInfo整数与此坐标关联的其他信息。

中文名字英文名称长度作用解释
硬件输入类HARDWAREINPUT8包含有关由键盘或鼠标以外的输入设备生成的模拟消息的信息。
硬件输入类——成员表
消息uMsg整数输入硬件生成的消息。
参数wParam整数消息的参数值。
键盘鼠标——功能函数
中文名称英文名称示例作用
激活布局ActivateKeyboardLayout激活布局(处理,标志)接受输入法区域标识,用于标识语言环境以及键盘的物理布局。处理=1下个;0上个;标志=8开头排序 $40000000重置 $10000大写锁定 $100激活窗口焦点
阻塞输入BlockInput阻塞输入(真)阻塞键盘及鼠标事件到达应用程序。参数为真将被阻塞,参数为假不被阻塞。
原始输入DefRawInputProc原始输入(0,0,大小)仅检查原始输入结构的预期大小。
拖曳检测DragDetect拖曳检测(窗口,初始坐标)捕获鼠标并跟踪其移动,直到用户释放左键、按 ESC 键或将鼠标移动到拖动矩形外的指定点。
控制窗口EnableWindow控制窗口(窗口,真)启用或禁用鼠标和键盘输入到指定的窗口或控件
活动窗口GetActiveWindow窗口=活动窗口获得与当前进程的活动窗口
激活窗口SetActiveWindow激活窗口(窗口)激活一个位于前台的窗口,并置顶.后台窗口无效.
鼠标窗口GetCapture窗口=鼠标窗口取得捕获了鼠标的窗口(如果存在)的句柄
捕获鼠标SetCapture捕获鼠标(窗口)让指定窗口捕获鼠标,所有的鼠标输入都被定向到该窗口
焦点窗口GetFocus窗口=焦点窗口获取具有键盘焦点的窗口句柄
设置焦点SetFocus设置焦点(窗口)将键盘焦点设置为指定的窗口
取代码页GetKBCodePage页码=取代码页返回当前代码页。
按键开关GetAsyncKeyState状态=按键开关(键码)确定在调用函数时键是打开还是关闭
键名密钥GetKeyNameTextA键名密钥(键值,名称,长度)检索表示键名称的字符串。
按键状态GetKeyState状态=按键状态(键码)检索指定虚拟键的状态。状态指定键是向上、向下还是切换
取输入法GetKeyboardLayout标识=取输入法(线程)检索活动输入法区域设置标识符(以前称为键盘布局)
输入法表GetKeyboardLayoutList输入法表(数量,表组)检索输入法区域设置标识符到指定的缓冲区。
输入法名GetKeyboardLayoutNameA输入法名(名称)检索系统的活动输入法区域设置标识符的名称。
键盘状态GetKeyboardState键盘状态(键表)将 256 个虚拟密钥的状态复制到指定的缓冲区。
输入键盘SetKeyboardState输入键盘(键表)将键盘键状态数组复制到调用线程的键盘输入状态表中。
输入时间GetLastInputInfo输入时间(信息)检索上次输入事件的时间。
键盘类型GetKeyboardType信息=键盘类型(种类)检索有关当前键盘的信息。种类0=键盘 1子键盘 2功能键
双击时间GetDoubleClickTime毫秒=双击时间获得鼠标当前的双击时间间隔的毫秒数
设置双击SetDoubleClickTime设置双击(毫秒)设置鼠标当前的双击时间间隔的毫秒数
鼠标轨迹GetMouseMovePoints鼠标轨迹(大小,结构,缓冲,点数,方式)用来最多 64 个鼠标或笔的先前坐标的历史记录。方式=1分辨率 2像素点
开输入法LoadKeyboardLayoutA开输入法(名称,标识)将新的输入法区域设置标识符加载到系统中。标识=1激活当前 2放到首选 8放到开头 $80激活刚才 $10替换已有
关输入法UnloadKeyboardLayout关输入法(标识)卸载输入法区域设置标识符
转换键码MapVirtualKeyA值=转换键码(代码,翻译)将虚拟键代码映射为扫描代码或字符值,或将扫描代码转换为虚拟键代码。翻译=0虚拟密钥转扫描码 1扫描码转虚拟键码 2虚拟键码转字符值加密钥 3扫描码转虚拟键码分左右键
模拟按键keybd_event模拟按键(键码,硬码,动作,附加)合成击键。系统会生成键盘按下和键盘松开的动作消息。已被淘汰请改用 发送输入
模拟鼠标mouse_event模拟鼠标(动作,左,上,数据,附加)合成鼠标运动和按钮单击。功能已被取代。请改用 发送输入
键值扫描OemKeyScan键值扫描(字符值)将 OEMASCII 代码 0 到 0x0FF 映射到 OEM 扫描代码(低序字)和偏移状态(高序字)。
发送输入SendInput发送输入(数量,数组,大小)合成击键、鼠标动作和按钮单击。
工具通知RegisterForTooltipDismissNotification工具通知(窗口,标志)注册或注销窗口以接收关闭其工具提示窗口的通知。标志:0=注册,1注销
注册热键RegisterHotKey注册热键(窗口,标识,修饰,键码)定义当前线程的热键
注销热键UnregisterHotKey注销热键(窗口,标识)释放当前线程的热键
释放鼠标ReleaseCapture释放鼠标从当前线程中的窗口释放鼠标捕获,并恢复正常的鼠标输入处理
换左右键SwapMouseButton换左右键(真)反转(真)或恢复(假)鼠标左键和右键的含义。
鼠标事件TrackMouseEvent鼠标事件(事件类)当鼠标指针离开窗口或将鼠标悬停在窗口上一段指定时间时寄送消息。
键转字符ToAscii键转字符(键码,扫描,状态,@字符,标志)将指定的虚拟键代码和键盘状态转换为相应的字符。标志:1菜单处于活动,0不活动
键转多字ToAscii键转多字(键码,扫描,状态,@字符,标志,区域)将指定的虚拟键代码和键盘状态转换为相应的字符。标志:1菜单处于活动,0不活动
键转宽字ToAscii键转宽字(键码,扫描,状态,@宽字,大小,标志)将指定的虚拟键代码和键盘状态转换为相应的宽字符。标志:1菜单处于活动,0不活动
键码宽字ToAscii键码宽字(键码,扫描,状态,@宽字,大小,标志,区域)将指定的虚拟键代码和键盘状态转换为相应的宽字符。标志:1菜单处于活动,0不活动
转虚拟键VkKeyScanA键码=转虚拟键(字符)将字符转换为当前键盘的相应虚拟键代码和 shift 状态。
字转键码VkKeyScanExA键码=转虚拟键(字符,输入法)将字符转换为当前键盘的相应虚拟键代码和 shift 状态。由输入法标识的物理键盘布局来转换字符。
等待输入WaitForInputIdle等待输入(进程,毫秒)等待指定的进程完成对其初始输入以及用户输入,直到超时间隔过去。
中文名字英文名称长度作用解释
坐标类POINT8用来存储坐标位置的信息
坐标类——成员表
中文英文类型作用解释
x整数水平坐标位置。
y整数垂直坐标位置。

中文名字英文名称长度作用解释
矩形类RECT16用来表示一个矩形框的四条边位置。
矩形类——成员表
left整数指定矩形框左上角的x坐标
top整数指定矩形框左上角的y坐标
right整数指定矩形框右下角的x坐标
bottom整数指定矩形框右下角的y坐标

中文名字英文名称长度作用解释
快捷键类ACCEL6包含有显示一个消息(对话框信息)的数据结构。
快捷键类——成员表
行为fVirt整形加速器行为。$10同时按住 ALT 键,8同时按住 CTRL 键,4同时按住 Shift 键,2不突出显示顶级菜单
键值key整形可以是虚拟键代码或字符代码。
标识cmd整形快捷键标识符。

窗口消息——功能函数
中文名称英文名称示例作用
调整窗口AdjustWindowRect调整窗口(矩形,样式,菜单)依据所需客户矩形的大小以及风格样式是否有菜单,计算需要的窗口矩形的大小。
计算窗口AdjustWindowRectEx计算窗口(矩形,样式,菜单,扩展)依据所需客户矩形的大小以及风格样式扩展是否有菜单,计算需要的窗口矩形的大小。
允许置顶AllowSetForegroundWindow允许置顶(窗口)允许指定进程使用 窗口前台 函数设置前台窗口。调用进程必须已能够设置前台窗口。
动画窗口AnimateWindow动画窗口(窗口,时间,选项)选项有十余种动画形式,时间为毫秒
有效窗口AnyPopup有无=有效窗口判断一个被属窗口,可见窗口,顶级弹出窗口,或层叠窗口是否在屏幕上存在。
处理线程AttachThreadInput处理线程(源线程,目标,方式)将一个线程的处理机制附加到另一个线程。方式为真是附加,否则是分离
多窗位置BeginDeferWindowPos结构=多窗位置(窗口数)返回指定数量窗口的位置结构信息
窗口置顶BringWindowToTop窗口置顶(窗口)将指定的窗口置于Z顺序的顶部。如果窗口是顶级窗口,它将被激活
系统消息BroadcastSystemMessageA系统消息(选项,消息,标识,参数,数据)广播系统消息。可以向应用程序,驱动程序,网络驱动,系统设备等系统组件发送消息。
消息挂钩CallMsgFilterA消息挂钩(消息类,代码)将指定的消息和挂钩代码传递给相关联的钩子过程
继续挂钩CallNextHookEx继续挂钩(钩子,代码,参数,数据)将钩子信息传递给当前钩子链中的下一个钩子过程
消息传递CallWindowProc消息传递(原址,窗口,消息,参数,数据)将程序原来处理消息的函数信息传递到指定的窗口过程
层叠子窗CascadeChildWindows层叠子窗(窗口,方式)层叠指定窗体的全部子窗口
级联窗口CascadeWindows级联窗口(窗口,方式,矩形,数量,数组)将指定的窗口或指定父窗口的子窗口级联。方式2防止级联被禁子窗4按Z序排列.后三个参数可选
坐标子窗ChildWindowFromPoint子窗=坐标子窗(父窗,坐标)返回父窗口中包含了指定点的第一个子窗口的句柄。
坐标某窗ChildWindowFromPointEx子窗=坐标某窗(父窗,坐标,跳过)返回父窗口中包含了指定点的子窗口的句柄。0不跳1跳过隐藏,2跳过禁用4跳过透明
关闭桌面CloseDesktop关闭桌面(桌面名)关闭打开的桌面对象句柄
关闭窗口CloseWindow关闭窗口(窗口)关该函数最小化指定的窗口,但并不销毁该窗口。
关窗口站CloseWindowStation关窗口站(窗口)关闭一个打开或创建的窗口站句柄。
创建子窗CreateMDIWindowA子窗=创建子窗(类名,标题,样式,左,上,宽,高,父窗,实例,数据)
创建窗口CreateWindowExA窗口=创建窗口(扩展,类名,标题,样式,左,上,宽,高,父窗,菜单/标识,实例,数据)
建窗口站CreateWindowStationA窗口=建窗口站(名称,0,权限,继承)创建一个窗口站对象,将其与调用进程相关联,并将其分配给当前会话。
处理对话DefDlgProcA处理对话(对话,消息,参数,数据)为程序定义的对话框类的窗口过程提供缺省的消息处理
处理框架DefFrameProcA处理框架(窗口,消息,参数,数据)对任何多文档接口(MDI)框架窗口的窗口过程不处理的窗口消息提供缺省处理
处理子窗DefMDIChildProcA处理子窗(窗口,消息,参数,数据)对任何多文档接口(MDI)子窗口的窗口过程不能处理的窗口消息提供缺省处理
处理窗口DefWindowProcA处理窗口(窗口,消息,参数,数据)为程序没有处理的窗口消息提供缺省的处理
创建对话CreateDialogIndirectParamA创建对话(实例,模板,窗口,@回调,数据)从对话框模板创建一个无模式对话框。
资源对话CreateDialogParamA资源对话(实例,模板,窗口,@回调,数据)从对话框模板资源创建一个无模式对话框。
模态对话DialogBoxIndirectParamA模态对话(实例,模板,窗口,@回调,数据)从对话框模板创建一个模态对话框。
资源模态DialogBoxParamA资源模态(实例,模板,窗口,@回调,数据)从对话框模板资源创建一个模态对话框。
销毁窗口DestroyWindow销毁窗口销毁指定的窗口。发送程序关闭消息到窗口并从中删除键盘焦点。
分派消息DispatchMessageA分派消息(消息类)将消息分派给窗口过程。
控制多窗EndDeferWindowPos控制多窗(多窗位置(n))在一个单一的屏幕刷新周期内同时更新一个或多个窗口的位置和大小。
枚举子窗EnumChildWindows枚举子窗(窗口,@回调函数,0)枚举指定窗口的所有子窗口,并将窗口句柄传送给应用程序定义的回调函数。
枚举全窗EnumDesktopWindows枚举全窗(桌面,@回调函数,0)枚举指定桌面的所有窗口,并将窗口句柄传送给应用程序定义的回调函数。
枚举桌面EnumDesktopsA枚举桌面(桌面,@回调函数,0)枚举指定桌面的所有窗口,并将窗口句柄传送给应用程序定义的回调函数。
枚举线程EnumThreadWindows枚举线程(线程,@回调函数,0)枚举指定线程的相关窗口,并将窗口句柄传送给应用程序定义的回调函数。
枚举窗口EnumWindows枚举窗口(@回调函数,0)枚举所有屏幕上的顶层窗口,并将窗口句柄传送给应用程序定义的回调函数。
枚举属性EnumPropsA枚举属性(窗口,@回调函数)枚举窗口的属性列表中的所有条目。
查找窗口FindWindowA窗口=查找窗口(类名,标题名)通过类名或者标题名查找程序窗口
切换信息GetAltTabInfoA切换信息(窗口,索引,切换类,项名,大小)如果指定窗口是应用程序切换 (ALT+TAB) 窗口,则检索指定窗口的状态信息。
窗口上级GetAncestor窗口=窗口上级(窗口,方式)检索指定窗口的上级句柄。方式:1取父窗口,2取根窗口,3父窗口和所有者窗口链拥有的根窗口
获取消息GetMessageA获取消息(消息,窗口,首个,最后)从调用线程的消息队列中检索消息,并将其放在指定的消息结构中。
查探消息PeekMessageA查探消息(消息,窗口,首个,最后,标志)从调用线程的消息队列中检索消息,并将其放在指定的消息结构中。标志=0保留消息 1清除消息 2不释放空闲
翻译消息TranslateMessage翻译消息(消息)将虚拟密钥消息转换为字符消息。
额外消息GetMessageExtraInfo信息=额外消息检索当前线程的额外消息信息。
附加消息SetMessageExtraInfo附加消息(信息)设置当前线程的额外消息信息。
游标位置GetMessagePos位置=游标位置检索 获取消息 函数检索的最后一条消息的游标位置。低位是x高位是y
消息时间GetMessageTime时间=消息时间检索 获取消息 函数检索的最后一条消息的时间。
桌面窗口GetDesktopWindow桌面=桌面窗口返回Windows桌面窗口的句柄
前台窗口GetForegroundWindow窗口=前台窗口获得前台窗口的句柄(用户当前正在使用的窗口)
窗口前台SetForegroundWindow窗口前台(窗口)让指定窗口的线程放入前台并激活该窗口
界面信息GetGUIThreadInfo界面信息(线程,信息)获得有关活动窗口或指定 GUI 线程的信息。
取类信息GetClassInfoA取类信息(实例,类名,信息)获取有关窗口类的信息。
取类数据GetClassInfoExA取类数据(实例,类名,信息)检索有关窗口类的信息,包括与窗口类关联的小图标的句柄。
获取类值GetClassLongA值=获取类值(窗口,位置)获取指定窗口所属类结构的指定偏移位置的数值
修改类值SetClassLongA修改类值(窗口,位置,新值)修改指定窗口所属类结构的指定偏移位置的数值
获取类名GetClassNameA值=获取类名(窗口,名称,长度)获取指定窗口所属类结构的类名
取客户区GetClientRect取客户区(窗口,坐标)获取窗口的客户区域的矩形坐标。
最后活动GetLastActivePopup窗口=最后活动(窗口)确定指定窗口拥有的哪个弹出窗口最近处于活动状态。
取透明度GetLayeredWindowAttributes取透明度(窗口,@颜色,@透明度,@方式)检索分层窗口的不透明度和透明度颜色键。方式:1透明颜色2透明度
设置透明SetLayeredWindowAttributes设置透明(窗口,颜色,透明度,方式)用于设置分层窗口透明度,方式:0颜色无效1透明无效2均有效
输入状态GetInputState状态=输入状态确定调用线程的消息队列中是否存在鼠标按钮或键盘消息。
取父窗口GetParent窗口=取父窗口(窗口)检索指定窗口的父窗口或所有者的句柄。
改父窗口SetParent改父窗口(子窗,父窗)更改指定子窗口的父窗口。
取窗口站GetProcessWindowStation站=取窗口站返回与调用进程相关联的窗口工作站的句柄。
改窗口站SetProcessWindowStation改窗口站(站)将指定的窗口站分配给调用进程。
默认布局GetProcessDefaultLayout默认布局(@布局)检索在创建没有父级或所有者的窗口时使用的默认布局。
窗口属性GetPropA属性=窗口属性(窗口,名称)从给定窗口的属性列表中检索指定原子或名称的数据句柄。
属性窗口SetPropA属性窗口(窗口,名称,数值)在指定窗口的属性列表中添加新条目或更改现有条目。已存在则替换
删除属性RemovePropA删除属性(窗口,名称)从指定窗口的属性列表中删除条目。
队列消息GetQueueStatus消息=队列消息(标志)返回指示在调用线程的消息队列中找到的消息类型的标志。高位是当前消息,低位是之前消息
系统配置GetSystemMetrics数值=系统配置(参数)检索各种系统指标和系统配置设置。
顶部窗口GetTopWindow窗口=顶部窗口(窗口)窗口参数为0时返回Z序顶部的窗口,否则返回指定窗口的顶序子窗口.
获取窗口GetWindow窗口=获取窗口(窗口,关系)返回与指定窗口有特定关系的窗口句柄,如同级首个,同级最后,同级下个等
取窗口值GetWindowLongA值=取窗口值(窗口,偏移)获得指定窗口结构指定偏移位置的数值
改窗口值SetWindowLongA改窗口值(窗口,偏移,数值)修改结构指定偏移位置的数值
取窗口字GetWindowTextA长度=取窗口字(窗口,内容,长度)获得指定窗口标题文字
改窗口字SetWindowTextA长度=改窗口字(窗口,内容)修改指定窗口的标题文字
窗口字长GetWindowTextLengthA长度=窗口字长(窗口)获得指定窗口的标题栏文本或者控件文本的长度
窗口路径GetWindowModuleFileNameA窗口路径(窗口,路径,长度)获得指定窗口的运行程序的完整路径和文件名称。
窗口边界GetWindowRect窗口边界(窗口,矩形)获得指定窗口边界矩形的尺寸
线程桌面GetThreadDesktop桌面=线程桌面(线程)返回与指定线程关联的桌面的句柄。
窗口进程GetWindowThreadProcessId线程ID=窗口进程(窗口,@进程ID)获得指定窗口的线程ID,以及进程ID(可选)
框体消息IsDialogMessageA框体消息(窗口,消息)确定消息是否针对指定的对话框,如果是,则处理消息。
正发消息InSendMessage正发消息确定当前窗口过程正在处理使用 发送消息 函数从另一个线程发送到它的消息,则返回真。否则返回值为零。
在发消息InSendMessageEx在发消息(0)确定当前窗口过程是否正在处理另一个线程发送的消息。返回:1来自 发送消息或待回消息,2来自 发出消息,4来自 发回消息,8已处理消息
是否窗口IsWindow是否窗口(窗口)判断给定的窗口句柄是否为已存在的窗口
可用窗口IsWindowEnabled可用窗口(窗口)判断指定的窗口是否允许接受键盘或鼠标输入
可见窗口IsWindowVisible可见窗口(窗口)判断给定的窗口句柄是否显示
是否最大IsZoomed是否窗口(窗口)判断窗口是否是最大化的窗口
创建计时CreateSystemTimer计时=创建计时(毫秒,@回调)创建一个指定时间的系统计时器
删除计时KillSystemTimer删除计时(计时)删除指定标识的计时器
删除定时KillTimer删除定时(窗口,标识)删除指定标识的定时器
设置定时SetTimer设置定时(窗口,标识,毫秒,@回调)创建指定时间的定时器,无窗口可忽略标识
移动窗口MoveWindow移动窗口(窗口,左,顶,宽,高,重绘)改变窗口位置和尺寸
提示音MessageBeep提示音(0)播放一个提示音,16 32 48 64有文件则是不同声音,其它数字都一样声
提交消息PostMessageA提交消息(窗口,消息,参数,数据)把消息提交到指定窗口的队列,不等待处理
线程消息PostThreadMessageA线程消息(线程,消息,参数,数据)把消息提交到指定线程的队列,不等待处理
提交退出PostQuitMessage提交退出(码)向程序提交退出的消息,程序在窗体消息的参数收到此退出码
定位子窗RealChildWindowFromPoint定位子窗(父窗,坐标)检索指定点处子窗口的句柄。搜索仅限于直接的子窗口;孙子孙女和更深的后代窗口不会被搜索。
取窗类名RealGetWindowClassA取窗类名(窗口,缓冲区,长度)检索指定窗口类型的字符串。
注册窗类RegisterClassA注册窗类(窗口类)注册一个窗口类,用于"创建窗口"
注册窗体RegisterClassExA注册窗体(窗体类)注册一个窗口类,用于"创建窗口"
注销窗类UnregisterClassA注销窗类(类名,实例)注销窗口类,释放该类所需的内存。
注册消息RegisterWindowMessageA注册消息(名称)定义一个新的窗口消息,该消息保证在整个系统中是唯一的。发送消息时可以使用消息值。
回应消息ReplyMessage回应消息(结果)回应消息可以让接收消息和发送消息的线程都能继续执行
控件消息SendDlgItemMessageA控件消息(窗口,控件,消息,参数,数据)在对话框中向指定的控件发送消息。
发送消息SendMessageA发送消息(窗口,消息,参数,数据)将指定的消息发送到窗口或多个窗口。在窗口过程处理该消息之前不返回
发回消息SendMessageCallbackA发回消息(窗口,消息,参数,数据,@回调,定义)将指定的消息发送到窗口或多个窗口。立即返回并把结果传递给回调函数
发出消息SendNotifyMessageA发出消息(窗口,消息,参数,数据)将指定的消息发送到窗口或多个窗口。本线程内在窗口过程处理该消息之前不返回,发给其它线程会立即返回
待回消息SendMessageTimeoutA待回消息(窗口,消息,参数,数据,行为,超时,结果)将指定的消息发送到窗口或多个窗口。并根据指定行为和超时时间返回结果
设置窗口SetWindowPos设置窗口(窗口,排序,左,顶,宽,高,标志)更改窗口的大小、位置和 Z 顺序。
更新分层UpdateLayeredWindow更新分层(窗口,设备,位置,大小,
表面,尺寸,颜色,透明度,方式)
更新一个分层窗口的位置,大小,形状,内容和半透明度
显隐窗口ShowWindow显隐窗口(窗口,方式)显示或者隐藏指定窗口
显示方式ShowWindowAsync显示方式(窗口,方式)设置窗口的显示状态,而无需等待操作完成。
切换桌面SwitchDesktop切换桌面(桌面)使指定的桌面可见并激活它。
窗口挂钩SetWindowsHookExA窗口挂钩(钩子,@函数,模块,线程)将应用程序定义的挂接过程安装到挂接链中。
事件挂钩SetWinEventHook事件挂钩(低,高,模块,@函数,进程ID,线程ID,标志)为一系列事件设置事件挂钩函数。
事件脱钩UnhookWinEvent事件脱钩(事件)删除由上一次调用 挂钩事件 创建的事件挂钩函数。
窗口脱钩UnhookWindowsHookEx窗口脱钩(钩链)删除通过 窗口挂钩 函数安装在钩子链中的钩子过程。
等待消息WaitMessage等待消息当一个线程的消息队列中没有其他消息时,将控制权交给其他线程。
定点窗口WindowFromPhysicalPoint窗口=定点窗口(坐标)检索包含指定点的窗口的句柄。
定位窗口WindowFromPoint窗口=定位窗口(坐标)检索包含指定点的窗口的句柄。
打开桌面OpenDesktopA打开桌面(名称,限定,继承,方式)返回一个现有桌面的句柄。限定=1允许程序在其它账户运行
恢复窗口OpenIcon恢复窗口(窗口)将最小化窗口恢复到其先前的大小和位置;然后激活窗口。
声音警告SoundSentry声音警告触发视觉信号以指示正在播放声音。
切换窗口SwitchToThisWindow切换窗口(窗口,切换)将焦点切换到指定窗口,并将其置于前台。切换为真使用 Alt/Ctl+Tab 键切换窗口到前台。
系统参数SystemParametersInfoA系统参数(范围,附加,@数据,配置)检索或设置系统范围参数之一的值。配置:1=写入配置文件,2=更新广播WM_SETTINGCHANGE消息。
调试级别SetDebugErrorLevel调试级别(级别)用于设置调试事件的最小错误级别,并将其传递给调试器。级别=0不报告 1报告普通错误 2包括小错误 3包括警告
设定错误SetLastErrorEx设定错误(错误,0)设置最后一个错误代码。第二个参数无效。
显隐弹出ShowOwnedPopups显隐弹出(窗口,方式)显示或隐藏指定窗口拥有的所有弹出窗口。
平铺窗口TileWindows平铺窗口(窗口,平铺,矩形类,子窗数,子窗组)平铺指定父窗口的指定子窗口。平铺:1水平,2垂直;子窗口组为0排列所有
系统参数-范围常量数值
英文名称数值作用解释
系统参数-辅助功能参数
SPI_GETACCESSTIMEOUT0x003C检索有关与辅助功能关联的超时期限的信息。⑶数据 参数必须指向接收信息的 ACCESSTIMEOUT 结构。 将此 结构的 cbSize 成员和⑵附加 参数设置为 sizeof(ACCESSTIMEOUT)。
SPI_GETAUDIODESCRIPTION0x0074确定是启用还是禁用音频说明。⑶数据 参数是指向 AUDIODESCRIPTION 结构的指针。 将此 结构的 cbSize 成员和⑵附加 参数设置为 sizeof(AUDIODESCRIPTION)。虽然有视觉障碍的用户可能会听到视频内容中的音频,但视频中有很多没有相应音频的操作。 视频中发生情况的特定音频说明可帮助这些用户更好地了解内容。 此标志使你能够确定是否启用了音频说明以及使用哪种语言。Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETCLIENTAREAANIMATION0x1042确定是启用还是禁用动画。⑶数据 参数必须指向一个 BOOL 变量,该变量在启用动画时接收 真,否则为 假。显示功能(如闪烁、闪烁、闪烁和移动内容)可能会导致照片敏感癫痫用户癫痫发作。 通过此标志,可以确定是否在工作区中禁用了此类动画。Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETDISABLEOVERLAPPEDCONTENT0x1040确定是启用还是禁用重叠内容。⑶数据 参数必须指向一个 BOOL 变量(如果启用)接收 真;否则,该变量必须指向 假。背景图像、纹理背景、文档上的水印、alpha 混合和透明度等显示功能会降低前景和背景之间的对比度,使视力不佳的用户更难看到屏幕上的对象。 此标志使你能够确定此类重叠内容是否已禁用。Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETFILTERKEYS0x0032检索有关 FilterKeys 辅助功能的信息。⑶数据 参数必须指向接收信息的 FILTERKEYS 结构。 将此 结构的 cbSize 成员和⑵附加 参数设置为 sizeof(FILTERKEYS)。
SPI_GETFOCUSBORDERHEIGHT0x2010检索使用 DrawFocusRect 绘制的焦点矩形的上边缘和下边缘的高度(以像素为单位)。⑶数据 参数必须指向 UINT 值。Windows 2000: 不支持此参数。
SPI_GETFOCUSBORDERWIDTH0x200E检索使用 DrawFocusRect 绘制的焦点矩形的左右边缘的宽度(以像素为单位)。⑶数据 参数必须指向 UINT。Windows 2000: 不支持此参数。
SPI_GETHIGHCONTRAST0x0042检索有关 HighContrast 辅助功能的信息。⑶数据 参数必须指向接收信息的 HIGHCONTRAST 结构。 将此 结构的 cbSize 成员和⑵附加 参数设置为 sizeof(HIGHCONTRAST)。有关一般讨论,请参阅备注。
SPI_GETLOGICALDPIOVERRIDE0x009E检索一个值,该值确定Windows 8是使用硬件的默认缩放平台显示应用,还是转到下一个较高的平台。 此值基于当前“放大屏幕上的所有内容”设置,该设置位于电脑设置的“轻松使用”部分:1 表示打开,0 表示关闭。应用可以为以下每种缩放平台提供文本和图像资源:100%、140% 和 180%。 提供针对特定规模优化的单独资源可避免因调整大小而失真。 Windows 8根据多种因素(包括屏幕大小和像素密度)确定适当的缩放平台。 当选择“放大屏幕上的所有内容” (SPI_GETLOGICALDPIOVERRIDE 返回值 1) 时,Windows 将使用下一个较高平台中的资源。 例如,在 Windows 确定应使用 SCALE_100_PERCENT刻度的硬件的情况下,此替代会导致 Windows 使用 SCALE_140_PERCENT 缩放值,前提是它不违反其他约束。注意 不应使用此值。 它在后续版本的 Windows 中可能已更改或不可用。 请改用 GetScaleFactorForDevice 函数或 DisplayProperties 类来检索首选比例系数。 桌面应用程序应使用桌面逻辑 DPI,而不是比例系数。 可以通过 GetDeviceCaps 函数检索桌面逻辑 DPI。
SPI_GETMESSAGEDURATION0x2016检索应显示通知弹出窗口的时间(以秒为单位)。⑶数据 参数必须指向接收消息持续时间的 ULONG。有视觉障碍或认知障碍(如 ADHD 和阅读障碍)的用户可能需要更长的时间才能阅读通知消息中的文本。 此标志使你能够检索消息持续时间。Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETMOUSECLICKLOCK0x101E检索鼠标 ClickLock 功能的状态。⑶数据 参数必须指向一个 BOOL 变量(如果启用)接收 真;否则,该变量必须指向 假。 有关详细信息,请参阅 鼠标输入概述。Windows 2000: 不支持此参数。
SPI_GETMOUSECLICKLOCKTIME0x2008检索锁定主鼠标按钮之前的时间延迟。⑶数据 参数必须指向接收时间延迟(以毫秒为单位)的 DWORD。 仅当 SPI_SETMOUSECLICKLOCK 设置为 真 时,才会启用此功能。 有关详细信息,请参阅 鼠标输入概述。Windows 2000: 不支持此参数。
SPI_GETMOUSEKEYS0x0036检索有关 MouseKeys 辅助功能的信息。⑶数据 参数必须指向接收信息的 MOUSEKEYS 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(MOUSEKEYS)。
SPI_GETMOUSESONAR0x101C检索鼠标声纳功能的状态。⑶数据 参数必须指向一个 BOOL 变量,如果启用,则接收 真,否则接收 假。 有关详细信息,请参阅 鼠标输入概述。Windows 2000: 不支持此参数。
SPI_GETMOUSEVANISH0x1020检索鼠标消失功能的状态。⑶数据 参数必须指向一个 BOOL 变量,如果启用,则接收 真,否则接收 假。 有关详细信息,请参阅 鼠标输入概述。Windows 2000: 不支持此参数。
SPI_GETSCREENREADER0x0046确定屏幕审阅者实用工具是否正在运行。 屏幕审阅者实用工具将文本信息定向到输出设备,例如语音合成器或盲文显示器。 设置此标志后,应用程序应在以图形方式呈现信息的情况下提供文本信息。⑶数据 参数是指向 BOOL 变量的指针,如果屏幕审阅者实用工具正在运行,则接收 真,否则接收 假。注意 Windows 附带的屏幕阅读器“讲述人”未设置 SPI_SETSCREENREADER 或 SPI_GETSCREENREADER 标志。
SPI_GETSERIALKEYS0x003E不支持此参数。Windows Server 2003 和 Windows XP/2000: 用户应通过控制面板控制此设置。
SPI_GETSHOWSOUNDS0x0038确定“显示声音”辅助功能标志是打开还是关闭。 如果它处于打开状态,则用户要求应用程序在仅以声音形式呈现信息的情况下直观显示信息。⑶数据 参数必须指向一个 BOOL 变量,如果功能处于打开状态,则接收 真;如果关闭,则为 假。使用此值等效于使用 SM_SHOWSOUNDS 调用 GetSystemMetrics。 这是建议的调用。
SPI_GETSOUNDSENTRY0x0040检索有关 SoundSentry 辅助功能的信息。⑶数据 参数必须指向接收信息的 SOUNDSENTRY 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(SOUNDSENTRY)。
SPI_GETSTICKYKEYS0x003A检索有关 StickyKeys 辅助功能的信息。⑶数据 参数必须指向接收信息的 STICKYKEYS 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(STICKYKEYS)。
SPI_GETTOGGLEKEYS0x0034检索有关 ToggleKeys 辅助功能的信息。⑶数据 参数必须指向接收信息的 TOGGLEKEYS 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(TOGGLEKEYS)。
SPI_SETACCESSTIMEOUT0x003D设置与辅助功能关联的超时期限。⑶数据 参数必须指向包含新参数的 ACCESSTIMEOUT 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(ACCESSTIMEOUT)。
SPI_SETAUDIODESCRIPTION0x0075打开或关闭音频说明功能。⑶数据 参数是指向 AUDIODESCRIPTION 结构的指针。虽然有视力障碍的用户可能会听到视频内容中的音频,但视频中有很多没有相应音频的操作。 视频中发生情况的特定音频说明可帮助这些用户更好地了解内容。 通过此标志,可以启用或禁用其提供的语言的音频说明。Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETCLIENTAREAANIMATION0x1043打开或关闭工作区动画。⑶数据 参数是 BOOL 变量。 将⑶数据 设置为 真 以在工作区中启用动画和其他暂时性效果,或 将 假 设置为禁用它们。显示功能(如闪烁、闪烁、闪烁和移动内容)可能会导致照片敏感型癫痫用户癫痫发作。 使用此标志可以启用或禁用所有此类动画。Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETDISABLEOVERLAPPEDCONTENT0x1041打开或关闭重叠的内容 (,例如背景图像和水印) 。⑶数据 参数是 BOOL 变量。 将⑶数据 设置为 真 可禁用重叠内容,将 假 设置为启用重叠内容。背景图像、纹理背景、文档上的水印、alpha 混合和透明度等显示功能会降低前景和背景之间的对比度,使视力不佳的用户更难在屏幕上看到对象。 通过此标志,可以启用或禁用所有此类重叠内容。Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETFILTERKEYS0x0033设置 FilterKeys 辅助功能的参数。⑶数据 参数必须指向包含新参数的 FILTERKEYS 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(FILTERKEYS)。
SPI_SETFOCUSBORDERHEIGHT0x2011将 使用 DrawFocusRect 绘制的焦点矩形的上边缘和下边缘的高度设置为⑶数据 参数的值。Windows 2000: 不支持此参数。
SPI_SETFOCUSBORDERWIDTH0x200F将 使用 DrawFocusRect 绘制的焦点矩形的左边缘和右边缘的高度设置为⑶数据 参数的值。Windows 2000: 不支持此参数。
SPI_SETHIGHCONTRAST0x0043设置 HighContrast 辅助功能的参数。⑶数据 参数必须指向包含新参数的 HIGHCONTRAST 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(HIGHCONTRAST)。
SPI_SETLOGICALDPIOVERRIDE0x009F请勿使用。
SPI_SETMESSAGEDURATION0x2017设置通知弹出窗口应显示的时间(以秒为单位)。⑶数据 参数指定消息持续时间。有视觉障碍或认知障碍(如 ADHD 和阅读障碍)的用户可能需要更长的时间才能阅读通知消息中的文本。 使用此标志可以设置消息持续时间。Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETMOUSECLICKLOCK0x101F打开或关闭鼠标 ClickLock 辅助功能。 当单击鼠标主按钮并按住 SPI_SETMOUSECLICKLOCKTIME指定的时间时,此功能会暂时锁定该按钮。⑶数据 参数为真开启。 默认值为 off。 有关详细信息,请参阅备注和 AboutMouse 输入。Windows 2000: 不支持此参数。
SPI_SETMOUSECLICKLOCKTIME0x2009调整锁定主鼠标按钮之前的时间延迟。⑵附加 参数应设置为 0。⑶数据 参数指向指定以毫秒为单位的时间延迟的 DWORD。 例如,为 1 秒延迟指定 1000。 默认值为 1200。 有关详细信息,请参阅 鼠标输入概述。Windows 2000: 不支持此参数。
SPI_SETMOUSEKEYS0x0037设置 MouseKeys 辅助功能的参数。⑶数据 参数必须指向包含新参数的 MOUSEKEYS 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(MOUSEKEYS)。
SPI_SETMOUSESONAR0x101D打开或关闭 Sonar 辅助功能。 当用户按下并释放 Ctrl 键时,此功能简要显示鼠标指针周围的几个同心圆。⑶数据 参数为真开启。 默认值为 off。 有关详细信息,请参阅 鼠标输入概述。Windows 2000: 不支持此参数。
SPI_SETMOUSEVANISH0x1021打开或关闭“消失”功能。 此功能在用户键入时隐藏鼠标指针;当用户移动鼠标时,指针再次出现。⑶数据 参数为真开启。 默认值为 off。 有关详细信息,请参阅 鼠标输入概述。Windows 2000: 不支持此参数。
SPI_SETSCREENREADER0x0047确定屏幕评审实用工具是否正在运行。⑵附加 参数为真开启。注意 Windows 附带的屏幕阅读器“讲述人”未设置 SPI_SETSCREENREADER 或 SPI_GETSCREENREADER 标志。
SPI_SETSERIALKEYS0x003F不支持此参数。Windows Server 2003 和 Windows XP/2000: 用户应通过控制面板控制此设置。
SPI_SETSHOWSOUNDS0x0039打开或关闭 ShowSounds 辅助功能。⑵附加 参数为真开启。
SPI_SETSOUNDSENTRY0x0041设置 SoundSentry 辅助功能的参数。⑶数据 参数必须指向包含新参数的 SOUNDSENTRY 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(SOUNDSENTRY)。
SPI_SETSTICKYKEYS0x003B设置 StickyKeys 辅助功能的参数。⑶数据 参数必须指向包含新参数的 STICKYKEYS 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(STICKYKEYS)。
SPI_SETTOGGLEKEYS0x0035设置 ToggleKeys 辅助功能的参数。⑶数据 参数必须指向包含新参数的 TOGGLEKEYS 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(TOGGLEKEYS)。
系统参数-桌面参数
SPI_GETCLEARTYPE0x1048确定是否启用 ClearType。⑶数据 参数必须指向一个 BOOL 变量,如果启用 ClearType,则接收 真;否则,该变量必须指向 假。ClearType 是一种软件技术,可提高液晶显示器 (液晶显示器) 显示器上文本的可读性。Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETDESKWALLPAPER0x0073检索桌面壁纸的位图文件的完整路径。⑶数据 参数必须指向缓冲区才能接收以 null 结尾的路径字符串。 将⑵附加 参数设置为⑶数据 缓冲区的大小(以字符为单位)。 返回的字符串不超过 MAX_PATH 个字符。 如果没有桌面壁纸,则返回的字符串为空。
SPI_GETDROPSHADOW0x1024确定是否启用投影效果。⑶数据 参数必须指向一个 BOOL 变量,如果启用,则返回 真;如果禁用,则返回 假。Windows 2000: 不支持此参数。
SPI_GETFLATMENU0x1022确定本机用户菜单是否具有平面菜单外观。⑶数据 参数必须指向一个 BOOL 变量,如果设置了平面菜单外观,则返回 真,否则返回 假。Windows 2000: 不支持此参数。
SPI_GETFONTSMOOTHING0x004A确定是否启用字体平滑功能。 此功能使用字体抗锯齿,通过绘制不同灰度级别的像素,使字体曲线看起来更平滑。⑶数据 参数必须指向一个 BOOL 变量,如果启用该功能,则接收 真;如果功能未启用,则为 假。
SPI_GETFONTSMOOTHINGCONTRAST0x200C检索 ClearType 平滑中使用的对比度值。⑶数据 参数必须指向接收信息的 UINT。 有效的对比度值为 1000 到 2200。 默认值为 1400。Windows 2000: 不支持此参数。
SPI_GETFONTSMOOTHINGORIENTATION0x2012检索字体平滑方向。⑶数据 参数必须指向接收信息的 UINT。 可能的值FE_FONTSMOOTHINGORIENTATIONBGR ( 蓝-绿-红) ,FE_FONTSMOOTHINGORIENTATIONRGB (红-绿-蓝) 。Windows XP/2000: 在具有 SP2 的 Windows XP 之前,不支持此参数。
SPI_GETFONTSMOOTHINGTYPE0x200A检索字体平滑的类型。⑶数据 参数必须指向接收信息的 UINT。 可能的值为 FE_FONTSMOOTHINGSTANDARD 和 FE_FONTSMOOTHINGCLEARTYPE。Windows 2000: 不支持此参数。
SPI_GETWORKAREA0x0030检索主显示器上工作区的大小。 工作区是屏幕的一部分,系统任务栏或应用程序桌面工具栏未遮挡。⑶数据 参数必须指向接收工作区坐标的 RECT 结构,以物理像素大小表示。 调用方的任何 DPI 虚拟化模式都不会影响此输出。若要获取主显示监视器以外的监视器的工作区域,请调用 GetMonitorInfo 函数。
SPI_SETCLEARTYPE0x1049打开或关闭 ClearType。⑶数据 参数是 BOOL 变量。 将⑶数据 设置为 真 以启用 ClearType,或 将 假 设置为禁用它。ClearType 是一种软件技术,可提高液晶显示器上文本的可读性。Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETCURSORS0x0057重新加载系统游标。 将⑵附加 参数设置为零,将⑶数据 参数设置为 NULL。
SPI_SETDESKPATTERN0x0015通过使 Windows 从 WIN.INI 文件中读取 Pattern= 设置来设置当前桌面模式。
SPI_SETDESKWALLPAPER0x0014注意 使用 SPI_SETDESKWALLPAPER 标志时, SystemParametersInfo 返回 真 ,除非 (错误,例如指定文件不存在时) 。
SPI_SETDROPSHADOW0x1025启用或禁用投影效果。 将⑶数据 设置为 真 以启用投影效果,将 假 设置为禁用它。 还必须在窗口类样式中 CS_DROPSHADOW 。Windows 2000: 不支持此参数。
SPI_SETFLATMENU0x1023启用或禁用本机用户菜单的平面菜单外观。 将⑶数据 设置为 真 以启用平面菜单外观,将 设置为 假 以禁用它。启用后,菜单栏将 COLOR_MENUBAR 用于菜单栏背景, COLOR_MENU 菜单弹出背景, COLOR_MENUHILIGHT 填充当前菜单选项, COLOR_HILIGHT 当前菜单选择的轮廓。 如果禁用,则使用与 Windows 2000 中相同的指标和颜色绘制菜单。Windows 2000: 不支持此参数。
SPI_SETFONTSMOOTHING0x004B启用或禁用字体平滑功能,该功能使用字体抗锯齿通过绘制不同灰度级别的像素使字体曲线更平滑。若要启用该功能,请将⑵附加 参数设置为 真。 若要禁用该功能,请将⑵附加 设置为 假。
SPI_SETFONTSMOOTHINGCONTRAST0x200D设置 ClearType 平滑中使用的对比度值。⑶数据 参数是对比度值。 有效的对比度值为 1000 到 2200。 默认值为 1400。 SPI_SETFONTSMOOTHINGTYPE 还必须设置为 FE_FONTSMOOTHINGCLEARTYPE。Windows 2000: 不支持此参数。
SPI_SETFONTSMOOTHINGORIENTATION0x2013设置字体平滑方向。⑶数据 参数FE_FONTSMOOTHINGORIENTATIONBGR (蓝-绿-红) 或FE_FONTSMOOTHINGORIENTATIONRGB (红-绿-蓝) 。Windows XP/2000: 在具有 SP2 的 Windows XP 之前,不支持此参数。
SPI_SETFONTSMOOTHINGTYPE0x200B设置字体平滑类型。 如果使用标准抗锯齿,则⑶数据 参数为FE_FONTSMOOTHINGSTANDARD;如果使用 ClearType,则为FE_FONTSMOOTHINGCLEARTYPE。 默认值为 FE_FONTSMOOTHINGSTANDARD。还必须设置SPI_SETFONTSMOOTHING 。Windows 2000: 不支持此参数。
SPI_SETWORKAREA0x002F设置工作区的大小。 工作区是屏幕的一部分,系统任务栏或应用程序桌面工具栏未遮挡。⑶数据 参数是指向 RECT 结构的指针,该结构指定以虚拟屏幕坐标表示的新工作区矩形。 在具有多个显示监视器的系统中,函数设置包含指定矩形的监视器的工作区域。
系统参数-图标参数
SPI_GETICONMETRICS0x002D检索与图标关联的指标。⑶数据 参数必须指向接收信息的 ICONMETRICS 结构。 将此 结构的 cbSize 成员和⑵附加 参数设置为 sizeof(ICONMETRICS)。
SPI_GETICONTITLELOGFONT0x001F检索当前图标标题字体的逻辑字体信息。⑵附加 参数指定 LOGFONT 结构的大小,⑶数据 参数必须指向要填充的 LOGFONT 结构。
SPI_GETICONTITLEWRAP0x0019确定是否启用图标标题环绕。⑶数据 参数必须指向一个 BOOL 变量(如果启用)接收 真;否则,该变量必须指向 假。
SPI_ICONHORIZONTALSPACING0x000D设置或检索图标单元格的宽度(以像素为单位)。 系统使用此矩形在大图标视图中排列图标。若要设置此值,请将⑵附加 设置为新值,并将⑶数据 设置为 NULL。 不能将此值设置为小于 SM_CXICON。若要检索此值,⑶数据 必须指向接收当前值的整数。
SPI_ICONVERTICALSPACING0x0018设置或检索图标单元格的高度(以像素为单位)。若要设置此值,请将⑵附加 设置为新值,并将⑶数据 设置为 NULL。 不能将此值设置为小于 SM_CYICON。若要检索此值,⑶数据 必须指向接收当前值的整数。
SPI_SETICONMETRICS0x002E设置与图标关联的指标。⑶数据 参数必须指向包含新参数的 ICONMETRICS 结构。 将此 结构的 cbSize 成员和⑵附加 参数设置为 sizeof(ICONMETRICS)。
SPI_SETICONS0x0058重新加载系统图标。 将⑵附加 参数设置为零,将⑶数据 参数设置为 NULL。
SPI_SETICONTITLELOGFONT0x0022设置用于图标标题的字体。⑵附加 参数指定 LOGFONT 结构的大小,⑶数据 参数必须指向 LOGFONT 结构。
SPI_SETICONTITLEWRAP0x001A打开或关闭图标标题环绕。⑵附加 参数为真开启
系统参数-输入参数。包括与键盘、鼠标、笔、输入语言和警告蜂鸣器相关的参数。
SPI_GETBEEP0x0001确定警告蜂鸣器是否已打开。⑶数据 参数必须指向一个 BOOL 变量,该变量在蜂鸣器处于打开状态时接收 真;如果关闭,则为 假。
SPI_GETBLOCKSENDINPUTRESETS0x1026检索一个 BOOL ,指示应用程序是否可以通过调用 SendInput 函数来模拟键盘或鼠标输入来重置屏幕保护程序计时器。 如果模拟输入将被阻止,⑶数据 参数必须指向接收 真 的 BOOL 变量;否则,该变量必须指向 假。
SPI_GETCONTACTVISUALIZATION0x2018检索当前联系人可视化设置。⑶数据 参数必须指向接收设置的 ULONG 变量。 有关详细信息,请参阅 联系人可视化。
SPI_GETDEFAULTINPUTLANG0x0059检索系统默认输入语言的输入区域设置标识符。⑶数据 参数必须指向接收此值的 HKL 变量。 有关详细信息,请参阅 语言、区域设置和键盘布局。
SPI_GETGESTUREVISUALIZATION0x201A检索当前手势可视化设置。⑶数据 参数必须指向接收设置的 ULONG 变量。 有关详细信息,请参阅 手势可视化。
SPI_GETKEYBOARDCUES0x100A确定菜单访问键是否始终带有下划线。⑶数据 参数必须指向一个 BOOL 变量,该变量在菜单访问键始终带有下划线时接收 真;如果仅在键盘激活菜单时才为 假,则为 假。
SPI_GETKEYBOARDDELAY0x0016检索键盘重复延迟设置,该值范围为 0 (大约 250 毫秒延迟) 到 3 (大约 1 秒延迟) 。 与每个值关联的实际延迟可能因硬件而异。⑶数据 参数必须指向接收设置的整数变量。
SPI_GETKEYBOARDPREF0x0044确定用户是否依赖于键盘而不是鼠标,并希望应用程序显示本来隐藏的键盘界面。 如果用户依赖键盘,⑶数据 参数必须指向接收 真 的 BOOL 变量;否则为 假。
SPI_GETKEYBOARDSPEED0x000A检索键盘重复速度设置,该值的范围是从 0 (大约 2.5 次每秒重复) 到 31 (大约每秒 30 次重复) 。 实际重复率取决于硬件,可能与线性比例相差多达 20%。⑶数据 参数必须指向接收设置的 DWORD 变量。
SPI_GETMOUSE0x0003检索两个鼠标阈值和鼠标加速。⑶数据 参数必须指向接收这些值的三个整数数组。 有关详细信息 ,请参阅mouse_event 。
SPI_GETMOUSEHOVERHEIGHT0x0064检索矩形的高度(以像素为单位),其中鼠标指针必须停留,以便 TrackMouseEvent 生成 WM_MOUSEHOVER 消息。⑶数据 参数必须指向接收高度的 UINT 变量。
SPI_GETMOUSEHOVERTIME0x0066检索鼠标指针必须停留在悬停矩形中的时间(以毫秒为单位),以便 TrackMouseEvent 生成 WM_MOUSEHOVER 消息。⑶数据 参数必须指向接收时间的 UINT 变量。
SPI_GETMOUSEHOVERWIDTH0x0062检索鼠标指针必须保留的矩形的宽度(以像素为单位),以便 TrackMouseEvent 生成 WM_MOUSEHOVER 消息。⑶数据 参数必须指向接收宽度的 UINT 变量。
SPI_GETMOUSESPEED0x0070检索当前鼠标速度。 鼠标速度根据鼠标移动的距离确定指针移动的距离。⑶数据 参数必须指向一个整数,该整数接收的值范围为 1 (最慢) 到 20 (最快) 。 默认值为 10。 该值可由最终用户使用鼠标控制面板应用程序设置,也可以由使用 SPI_SETMOUSESPEED的应用程序设置。
SPI_GETMOUSETRAILS0x005E确定是否启用鼠标跟踪功能。 此功能通过简要显示光标的踪迹并快速擦除它们来提高鼠标光标移动的可见性。⑶数据 参数必须指向接收值的整数变量。 如果值为零或 1,则禁用该功能。 如果值大于 1,则启用该功能,该值指示在跟踪中绘制的游标数。 不使用⑵附加 参数。Windows 2000: 不支持此参数。
SPI_GETMOUSEWHEELROUTING0x201C检索鼠标滚轮输入的路由设置。 路由设置确定是将鼠标滚轮输入发送到具有焦点 (前台) 的应用,还是将鼠标光标下的应用发送到应用。⑶数据 参数必须指向接收路由选项的 DWORD 变量。 不使用⑵附加 参数。如果值为零 (MOUSEWHEEL_ROUTING_FOCUS) ,则鼠标滚轮输入将传送到具有焦点的应用。 如果值为 1 (MOUSEWHEEL_ROUTING_HYBRID) ,鼠标滚轮输入将传送到具有焦点的应用 (桌面应用) 或鼠标指针下的应用 (Windows 应用商店应用) 。从Windows 10开始:如果值为 2 (MOUSEWHEEL_ROUTING_MOUSE_POS) ,则鼠标滚轮输入将传送到鼠标指针下的应用。 这是新的默认值,MOUSEWHEEL_ROUTING_HYBRID在“设置”中不再可用。
SPI_GETPENVISUALIZATION0x201E检索当前笔手势可视化设置。⑶数据 参数必须指向接收设置的 ULONG 变量。 有关详细信息,请参阅 触控笔可视化。
SPI_GETSNAPTODEFBUTTON0x005F确定是否启用对齐到默认按钮功能。 如果启用,鼠标光标会自动移动到对话框的默认按钮,例如 “确定” 或 “应用”。⑶数据 参数必须指向一个 BOOL 变量,如果功能处于打开状态,则接收 真;如果关闭,则为 假。
SPI_GETSYSTEMLANGUAGEBAR0x1050从Windows 8开始:确定是启用或禁用系统语言栏。 如果启用语言栏,⑶数据 参数必须指向接收 真 的 BOOL 变量;否则,该变量必须指向 假。
SPI_GETTHREADLOCALINPUTSETTINGS0x104E从Windows 8开始:确定活动输入设置是否具有每个线程的本地 (、TRUE) 还是全局 (会话、FALSE) 范围。⑶数据 参数必须指向 BOOL 变量。
SPI_GETWHEELSCROLLCHARS0x006C检索移动水平鼠标滚轮时要滚动的字符数。⑶数据 参数必须指向接收行数的 UINT 变量。 默认值为 3。
SPI_GETWHEELSCROLLLINES0x0068检索移动垂直鼠标滚轮时要滚动的行数。⑶数据 参数必须指向接收行数的 UINT 变量。 默认值为 3。
SPI_SETBEEP0x0002打开或关闭警告蜂鸣器。⑵附加 参数为真开启。
SPI_SETBLOCKSENDINPUTRESETS0x1027通过调用 SendInput 函数来模拟键盘或鼠标输入,确定应用程序是否可以重置屏幕保护程序计时器。 如果屏幕保护程序不会通过模拟输入停用, 则⑵附加 参数指定 真 ;如果屏幕保护程序将由模拟输入停用,则指定 假 。
SPI_SETCONTACTVISUALIZATION0x2019设置当前联系人可视化设置。⑶数据 参数必须指向标识设置的 ULONG 变量。 有关详细信息,请参阅 联系人可视化。注意 如果禁用联系人可视化效果,则无法启用手势可视化效果。
SPI_SETDEFAULTINPUTLANG0x005A设置系统 shell 和应用程序的默认输入语言。 指定的语言必须使用当前系统字符集显示。⑶数据 参数必须指向包含默认语言的输入区域设置标识符的 HKL 变量。 有关详细信息,请参阅 语言、区域设置和键盘布局。
SPI_SETDOUBLECLICKTIME0x0020将鼠标的双击时间设置为⑵附加 参数的值。 如果⑵附加 值大于 5000 毫秒,系统会将双击时间设置为 5000 毫秒。双击时间是双击的第一次和第二次单击之间可能发生的最大毫秒数。 还可以调用 SetDoubleClickTime 函数来设置双击时间。 若要获取当前双击时间,请调用 GetDoubleClickTime 函数。
SPI_SETDOUBLECLKHEIGHT0x001E将双击矩形的高度设置为⑵附加 参数的值。双击矩形是一个矩形,双击的第二次单击必须属于该矩形,才能将其注册为双击。若要检索双击矩形的高度,请使用 SM_CYDOUBLECLK 标志调用 GetSystemMetrics。
SPI_SETDOUBLECLKWIDTH0x001D将双击矩形的宽度设置为⑵附加 参数的值。双击矩形是一个矩形,双击的第二次单击必须属于该矩形,才能将其注册为双击。若要检索双击矩形的宽度,请使用 SM_CXDOUBLECLK 标志调用 GetSystemMetrics。
SPI_SETGESTUREVISUALIZATION0x201B设置当前手势可视化设置。⑶数据 参数必须指向标识设置的 ULONG 变量。 有关详细信息,请参阅 手势可视化。注意 如果禁用联系人可视化效果,则无法启用手势可视化效果。
SPI_SETKEYBOARDCUES0x100B设置菜单访问键字母的下划线。⑶数据 参数是 BOOL 变量。 将⑶数据 设置为 真 以始终为菜单访问键添加下划线,将 假 设置为仅在从键盘激活菜单时为菜单访问键添加下划线。
SPI_SETKEYBOARDDELAY0x0017设置键盘重复延迟设置。⑵附加 参数必须指定 0、1、2 或 3,其中 0 设置最短延迟约 250 毫秒) ,3 设置最长延迟 (大约 1 秒) 。 与每个值关联的实际延迟可能因硬件而异。
SPI_SETKEYBOARDPREF0x0045设置键盘首选项。 如果用户依赖于键盘而不是鼠标,并且希望应用程序显示本来隐藏的键盘接口, 则⑵附加 参数指定 真 ; 否则,uiParam 为 假 。
SPI_SETKEYBOARDSPEED0x000B设置键盘重复速度设置。⑵附加 参数必须指定介于 0 (大约每秒 2.5 次重复) 到 31 (大约每秒 30 次重复) 范围内的值。 实际重复率取决于硬件,并且可能从线性刻度变化多达 20%。 如果⑵附加 大于 31,则 参数设置为 31。
SPI_SETLANGTOGGLE0x005B设置用于在输入语言之间切换的热键集。 不使用⑵附加 和⑶数据 参数。 值通过再次读取注册表来设置键盘属性表中的快捷键。 必须先设置注册表,然后才能使用此标志。 注册表中的路径为 HKEY_CURRENT_USER\键盘布局\切换. 有效值为“1”= Alt+SHIFT,“2”= CTRL+SHIFT,“3”= none。
SPI_SETMOUSE0x0004设置两个鼠标阈值和鼠标加速。⑶数据 参数必须指向指定这些值的三个整数数组。 有关详细信息 ,请参阅mouse_event 。
SPI_SETMOUSEBUTTONSWAP0x0021交换或还原鼠标左键和右键的含义。⑵附加 参数指定 真 以交换按钮的含义,或指定 假 以还原其原始含义。若要检索当前设置,请使用 SM_SWAPBUTTON 标志调用 GetSystemMetrics。
SPI_SETMOUSEHOVERHEIGHT0x0065设置鼠标指针必须保留的矩形的高度(以像素为单位),以便 TrackMouseEvent 生成 WM_MOUSEHOVER 消息。 将⑵附加 参数设置为新高度。
SPI_SETMOUSEHOVERTIME0x0067设置鼠标指针必须停留在悬停矩形中的时间(以毫秒为单位),以便 TrackMouseEvent 生成 WM_MOUSEHOVER 消息。 仅当在调用 TrackMouseEvent 时在 dwHoverTime 参数中传递HOVER_DEFAULT时,才使用此选项。 将⑵附加 参数设置为新时间。指定的时间应介于 USER_TIMER_MAXIMUM 和 USER_TIMER_MINIMUM 之间。 如果⑵附加 小于 USER_TIMER_MINIMUM,函数将使用 USER_TIMER_MINIMUM。 如果⑵附加 大于 USER_TIMER_MAXIMUM,则将 USER_TIMER_MAXIMUM函数。Windows Server 2003 和 Windows XP: 在 Windows Server 2003 SP1 和 Windows XP 与 SP2 之前,操作系统不会强制使用 USER_TIMER_MAXIMUM 和 USER_TIMER_MINIMUM 。
SPI_SETMOUSEHOVERWIDTH0x0063设置鼠标指针必须保留的矩形的宽度(以像素为单位),以便 TrackMouseEvent 生成 WM_MOUSEHOVER 消息。 将⑵附加 参数设置为新的宽度。
SPI_SETMOUSESPEED0x0071设置当前鼠标速度。⑶数据 参数是介于 1 (最慢) 到 20 (最快) 之间的整数。 默认值为 10。 此值通常是使用鼠标控制面板应用程序设置的。
SPI_SETMOUSETRAILS0x005D启用或禁用鼠标跟踪功能,该功能通过简要显示光标跟踪并快速擦除它们来提高鼠标光标移动的可见性。若要禁用该功能,请将⑵附加 参数设置为零或 1。 若要启用该功能,请将⑵附加 设置为大于 1 的值,以指示在跟踪中绘制的游标数。Windows 2000: 不支持此参数。
SPI_SETMOUSEWHEELROUTING0x201D设置鼠标滚轮输入的路由设置。 路由设置确定是将鼠标滚轮输入发送到具有焦点 (前台) 的应用,还是将鼠标光标下的应用发送到应用。⑶数据 参数必须指向接收路由选项的 DWORD 变量。 将⑵附加 参数设置为零。如果值为零 (MOUSEWHEEL_ROUTING_FOCUS) ,则鼠标滚轮输入将传送到具有焦点的应用。 如果值为 1 (MOUSEWHEEL_ROUTING_HYBRID) ,鼠标滚轮输入将传送到具有焦点的应用 (桌面应用) 或鼠标指针下的应用 (Windows 应用商店应用) 。从Windows 10开始:如果值为 2 (MOUSEWHEEL_ROUTING_MOUSE_POS) ,则鼠标滚轮输入将传送到鼠标指针下的应用。 这是新的默认值,MOUSEWHEEL_ROUTING_HYBRID在“设置”中不再可用。
SPI_SETPENVISUALIZATION0x201F设置当前笔手势可视化设置。⑶数据 参数必须指向标识设置的 ULONG 变量。 有关详细信息,请参阅 触控笔可视化。
SPI_SETSNAPTODEFBUTTON0x0060启用或禁用快照到默认按钮功能。 如果启用,鼠标光标会自动移动到对话框的默认按钮,例如 “确定” 或 “应用”。 将⑵附加 参数设置为 真 以启用该功能,将 设置为 假 以禁用该功能。 应用程序在显示对话框时应使用 ShowWindow 函数,以便对话管理器可以定位鼠标光标。
SPI_SETSYSTEMLANGUAGEBAR0x1051从Windows 8开始:打开或关闭旧语言栏功能。⑶数据 参数是指向 BOOL 变量的指针。 将⑶数据 设置为 真 以启用旧语言栏,或 将 假 设置为禁用它。 Windows 8支持标志,其中旧语言栏被输入切换器替换,因此默认处于关闭状态。 打开旧语言栏是出于兼容性原因而提供的,对输入切换器没有影响。
SPI_SETTHREADLOCALINPUTSETTINGS0x104F从Windows 8开始:确定活动输入设置是否具有每个线程的本地 (、TRUE) 或全局 (会话、FALSE) 范围。⑶数据 参数必须是由 PVOID 强制转换的 BOOL 变量。
SPI_SETWHEELSCROLLCHARS0x006D设置移动水平鼠标滚轮时要滚动的字符数。 从⑵附加 参数设置字符数。
SPI_SETWHEELSCROLLLINES0x0069设置移动垂直鼠标滚轮时要滚动的行数。 行数是从⑵附加 参数设置的。行数是在不使用修改键的情况下滚动鼠标滚轮时建议滚动的行数。 如果数字为 0,则不应发生滚动。 如果要滚动的行数大于可查看的行数,特别是当它 被WHEEL_PAGESCROLL (#defined 为 UINT_MAX) 时,滚动操作应解释为在滚动条的页面向下或向上翻页区域中单击一次。 下面是菜单参数。菜单参数 含义
系统参数-菜单参数。
SPI_GETMENUDROPALIGNMENT0x001B确定弹出菜单相对于相应的菜单栏项是左对齐还是右对齐。⑶数据 参数必须指向接收 真(如果右对齐)的 BOOL 变量;否则,该变量必须指向 假。
SPI_GETMENUFADE0x1012确定是否启用菜单淡化动画。⑶数据 参数必须指向一个 BOOL 变量,该变量在启用淡出动画时接收 真,在禁用淡化动画时接收 假。 如果禁用淡化动画,菜单将使用幻灯片动画。 除非启用了菜单动画,否则将忽略此标志,可以使用 SPI_SETMENUANIMATION 标志执行此操作。 有关详细信息,请参阅 AnimateWindow。
SPI_GETMENUSHOWDELAY0x006A检索鼠标光标位于子菜单项上时系统在显示快捷菜单之前等待的时间(以毫秒为单位)。⑶数据 参数必须指向接收延迟时间的 DWORD 变量。
SPI_SETMENUDROPALIGNMENT0x001C设置弹出菜单的对齐值。⑵附加 参数指定 真 表示右对齐,为左对齐指定 假。
SPI_SETMENUFADE0x1013启用或禁用菜单淡化动画。 将⑶数据 设置为 真 以启用菜单淡化效果,将 设置为 假 以禁用它。 如果禁用淡化动画,菜单将使用幻灯片动画。 只有当系统的颜色深度超过 256 种颜色时,才能实现菜单淡出效果。 除非还设置了 SPI_MENUANIMATION ,否则将忽略此标志。 有关详细信息,请参阅 AnimateWindow。
SPI_SETMENUSHOWDELAY0x006B将⑵附加 设置为鼠标光标位于子菜单项上时系统在显示快捷菜单之前等待的时间(以毫秒为单位)。
系统参数-电源参数。
SPI_GETLOWPOWERACTIVE0x0053不支持此参数。Windows Server 2003 和 Windows XP/2000: 确定是否启用屏幕保存的低功耗阶段。⑶数据 参数必须指向一个 BOOL 变量,该变量在启用时接收 真,如果禁用,则为 假。 此标志仅支持 32 位应用程序。
SPI_GETLOWPOWERTIMEOUT0x004F不支持此参数。Windows Server 2003 和 Windows XP/2000: 检索屏幕保存的低功耗阶段的超时值。⑶数据 参数必须指向接收值的整数变量。 此标志仅支持 32 位应用程序。
SPI_GETPOWEROFFACTIVE0x0054不支持此参数。 启用屏幕保存的关机阶段时, GUID_VIDEO_POWERDOWN_TIMEOUT 电源设置大于零。Windows Server 2003 和 Windows XP/2000: 确定是否启用屏幕保存的关机阶段。⑶数据 参数必须指向一个 BOOL 变量,该变量在启用时接收 真,如果禁用,则为 假。 此标志仅支持 32 位应用程序。
SPI_GETPOWEROFFTIMEOUT0x0050不支持此参数。 请改为检查GUID_VIDEO_POWERDOWN_TIMEOUT电源设置。Windows Server 2003 和 Windows XP/2000: 检索屏幕保存的关机阶段的超时值。⑶数据 参数必须指向接收值的整数变量。 此标志仅支持 32 位应用程序。
SPI_SETLOWPOWERACTIVE0x0055不支持此参数。Windows Server 2003 和 Windows XP/2000: 激活或停用屏幕保存的低功耗阶段。 将⑵附加 设置为 1 以激活,将设置为零以停用。⑶数据 参数必须为 NULL。 此标志仅支持 32 位应用程序。
SPI_SETLOWPOWERTIMEOUT0x0051不支持此参数。Windows Server 2003 和 Windows XP/2000: 为屏幕节省的低功耗阶段设置超时值(以秒为单位)。⑵附加 参数指定新值。⑶数据 参数必须为 NULL。 此标志仅支持 32 位应用程序。
SPI_SETPOWEROFFACTIVE0x0056不支持此参数。 请改为设置 GUID_VIDEO_POWERDOWN_TIMEOUT 电源设置。Windows Server 2003 和 Windows XP/2000: 激活或停用屏幕保存的关机阶段。 将⑵附加 设置为 1 可激活,将零设置为停用。⑶数据 参数必须为 NULL。 仅 32 位应用程序支持此标志。
SPI_SETPOWEROFFTIMEOUT0x0052不支持此参数。 相反,请将 GUID_VIDEO_POWERDOWN_TIMEOUT 电源设置设置为超时值。Windows Server 2003 和 Windows XP/2000: 为屏幕保存的关机阶段设置超时值(以秒为单位)。⑵附加 参数指定新值。⑶数据 参数必须为 NULL。 仅 32 位应用程序支持此标志。
系统参数-屏幕保护程序参数。
SPI_GETSCREENSAVEACTIVE0x0010确定是否启用屏幕保存。⑶数据 参数必须指向一个 BOOL 变量,如果启用屏幕保存,则接收 真;否则,该变量必须指向 假。Windows 7、Windows Server 2008 R2 和 Windows 2000: 即使未启用屏幕保存,函数也会返回 真 。
SPI_GETSCREENSAVERRUNNING0x0072确定屏幕保护程序当前是否在调用进程的窗口工作站上运行。 如果屏幕保护程序当前正在运行,⑶数据 参数必须指向接收 真 的 BOOL 变量,否则为 假。 请注意,只有交互式窗口工作站 WinSta0 可以运行屏幕保护程序。
SPI_GETSCREENSAVESECURE0x0076确定屏幕保护程序是否需要密码才能显示 Windows 桌面。 如果屏幕保护程序需要密码,⑶数据 参数必须指向接收 真 的 BOOL 变量,否则为 假。 忽略⑵附加 参数。Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETSCREENSAVETIMEOUT0x000E检索屏幕节省程序超时值(以秒为单位)。⑶数据 参数必须指向接收值的整数变量。
SPI_SETSCREENSAVEACTIVE0x0011设置屏幕保护程序的状态。⑵附加 参数指定 真 以激活屏幕保存,或指定 假 以停用屏幕保存。如果计算机已进入省电模式或系统锁定状态,则会发生ERROR_OPERATION_IN_PROGRESS异常。
SPI_SETSCREENSAVESECURE0x0077设置屏幕保护程序是否要求用户输入密码才能显示 Windows 桌面。⑵附加 参数是 BOOL 变量。 忽略⑶数据 参数。 将⑵附加 设置为 真 以要求密码,将 假 设置为不需要密码。如果计算机已进入省电模式或系统锁定状态,则会发生ERROR_OPERATION_IN_PROGRESS异常。Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETSCREENSAVETIMEOUT0x000F将屏幕节省程序超时值设置为⑵附加 参数的值。 此值是系统在激活屏幕保护程序之前必须处于空闲状态的时间量(以秒为单位)。如果计算机已进入省电模式或系统锁定状态,则会发生ERROR_OPERATION_IN_PROGRESS异常。
系统参数-应用程序和服务的超时参数。
SPI_GETHUNGAPPTIMEOUT0x0078检索线程在系统认为消息无响应之前无需调度消息即可完成的毫秒数。⑶数据 参数必须指向接收值的整数变量。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETWAITTOKILLTIMEOUT0x007A检索系统在终止不响应关闭请求的应用程序之前等待的毫秒数。⑶数据 参数必须指向接收值的整数变量。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETWAITTOKILLSERVICETIMEOUT0x007C检索服务控制管理器在终止不响应关闭请求的服务之前等待的毫秒数。⑶数据 参数必须指向接收值的整数变量。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETHUNGAPPTIMEOUT0x0079将挂起的应用程序超时设置为⑵附加 参数的值。 此值是线程在系统认为消息无响应之前无需分派消息即可到达的毫秒数。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETWAITTOKILLTIMEOUT0x007B将应用程序关闭请求超时设置为⑵附加 参数的值。 此值是系统在终止不响应关闭请求的应用程序之前等待的毫秒数。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETWAITTOKILLSERVICETIMEOUT0x007D将服务关闭请求超时设置为⑵附加 参数的值。 此值是系统在终止不响应关闭请求的服务之前等待的毫秒数。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
系统参数-界面效果参数。SPI_SETUIEFFECTS值用于同时启用或禁用所有 UI 效果。
SPI_GETCOMBOBOXANIMATION0x1004确定是否启用组合框的滑动打开效果。⑶数据 参数必须指向一个 BOOL 变量,该变量对于 enabled 接收 真,对于 disabled 接收 假。
SPI_GETCURSORSHADOW0x101A确定光标周围是否有阴影。⑶数据 参数必须指向一个 BOOL 变量,该变量在启用阴影时接收 真;如果禁用,则为 假。 仅当系统的颜色深度超过 256 种颜色时,才会显示此效果。
SPI_GETGRADIENTCAPTIONS0x1008确定是否启用窗口标题栏的渐变效果。⑶数据 参数必须指向一个 BOOL 变量,该变量对于 enabled 接收 真,对于 disabled 接收 假。 有关渐变效果的详细信息,请参阅 GetSysColor 函数。
SPI_GETHOTTRACKING0x100E确定是否启用用户界面元素的热跟踪,例如菜单栏上的菜单名称。⑶数据 参数必须指向一个 BOOL 变量,该变量对于 enabled 接收 真,对于 disabled 接收 假。热跟踪意味着当光标移动到某个项上时,它将被突出显示,但未选中。 可以查询此值以决定是否在应用程序的用户界面中使用热跟踪。
SPI_GETLISTBOXSMOOTHSCROLLING0x1006确定是否启用列表框的平滑滚动效果。⑶数据 参数必须指向一个 BOOL 变量,该变量对于 enabled 接收 真,对于 disabled 接收 假。
SPI_GETMENUANIMATION0x1002确定是否启用菜单动画功能。 此主控开关必须处于打开状态才能启用菜单动画效果。⑶数据 参数必须指向一个 BOOL 变量,该变量在启用动画时接收 真,如果禁用动画,则为 假。如果启用了动画, SPI_GETMENUFADE 指示菜单是使用淡化动画还是幻灯片动画。
SPI_GETMENUUNDERLINES0x100A与 SPI_GETKEYBOARDCUES 相同。
SPI_GETSELECTIONFADE0x1014确定是否启用选择淡化效果。⑶数据 参数必须指向一个 BOOL 变量,该变量在启用时接收 真,如果禁用,则接收 假。选择淡化效果会导致用户选择的菜单项暂时停留在屏幕上,同时在关闭菜单后消失。
SPI_GETTOOLTIPANIMATION0x1016确定是否启用工具提示动画。⑶数据 参数必须指向一个 BOOL 变量,该变量在启用时接收 真,如果禁用,则接收 假。 如果启用了工具提示动画, SPI_GETTOOLTIPFADE 指示工具提示是使用淡化动画还是幻灯片动画。
SPI_GETTOOLTIPFADE0x1018如果启用SPI_SETTOOLTIPANIMATION,SPI_GETTOOLTIPFADE指示工具提示动画是使用淡化效果还是幻灯片效果。⑶数据 参数必须指向一个 BOOL 变量,该变量对于淡出动画接收 真,对于幻灯片动画接收 假。 有关幻灯片和淡化效果的详细信息,请参阅 AnimateWindow。
SPI_GETUIEFFECTS0x103E确定是启用还是禁用 UI 效果。⑶数据 参数必须指向一个 BOOL 变量,该变量在启用所有 UI 效果时接收 真;如果禁用,则为 假。
SPI_SETCOMBOBOXANIMATION0x1005启用或禁用组合框的幻灯片打开效果。 将⑶数据 参数设置为 真 可启用渐变效果,将 设置为 假 以禁用渐变效果。
SPI_SETCURSORSHADOW0x101B启用或禁用光标周围的阴影。⑶数据 参数是 BOOL 变量。 将⑶数据 设置为 真 可启用阴影,将 假 设置为禁用阴影。 仅当系统的颜色深度超过 256 种颜色时,才会显示此效果。
SPI_SETGRADIENTCAPTIONS0x1009启用或禁用窗口标题栏的渐变效果。 将⑶数据 参数设置为 真 以启用它,将 设置为 假 以禁用它。 仅当系统的颜色深度超过 256 种颜色时,才能产生渐变效果。 有关渐变效果的详细信息,请参阅 GetSysColor 函数。
SPI_SETHOTTRACKING0x100F启用或禁用用户界面元素(如菜单栏上的菜单名称)的热跟踪。 将⑶数据 参数设置为 真 以启用它,将 设置为 假 以禁用它。热跟踪是指当光标移动到某个项上时,它将被突出显示,但未选中。
SPI_SETLISTBOXSMOOTHSCROLLING0x1007启用或禁用列表框的平滑滚动效果。 将⑶数据 参数设置为 真 以启用平滑滚动效果,或将 假 设置为禁用它。
SPI_SETMENUANIMATION0x1003启用或禁用菜单动画。 此主控开关必须处于打开状态,才能发生任何菜单动画。⑶数据 参数是 BOOL 变量;将⑶数据 设置为 真 可启用动画,将 假 设置为禁用动画。如果启用了动画, SPI_GETMENUFADE 指示菜单是使用淡化动画还是幻灯片动画。
SPI_SETMENUUNDERLINES0x100B与 SPI_SETKEYBOARDCUES 相同。
SPI_SETSELECTIONFADE0x1015将⑶数据 设置为 真 可启用选择淡化效果,将 设置为 假 以禁用它。选择淡化效果会导致用户选择的菜单项暂时停留在屏幕上,同时在关闭菜单后消失。 仅当系统的颜色深度超过 256 种颜色时,才能实现选择淡化效果。
SPI_SETTOOLTIPANIMATION0x1017将⑶数据 设置为 真 可启用 ToolTip 动画,将 设置为 假 以禁用它。 如果启用,可以使用 SPI_SETTOOLTIPFADE 指定淡出动画或幻灯片动画。
SPI_SETTOOLTIPFADE0x1019如果启用了 SPI_SETTOOLTIPANIMATION 标志,请使用 SPI_SETTOOLTIPFADE 来指示 ToolTip 动画是使用淡化效果还是幻灯片效果。 对于淡化动画,请将⑶数据 设置为 真 ,将幻灯片动画设置为 假 。 仅当系统的颜色深度超过 256 种颜色时,才能实现工具提示淡出效果。 有关幻灯片和淡化效果的详细信息,请参阅 AnimateWindow 函数。
SPI_SETUIEFFECTS0x103F启用或禁用 UI 效果。 将⑶数据 参数设置为 真 可启用所有 UI 效果,将 假 设置为禁用所有 UI 效果。
系统参数-窗口参数。
SPI_GETACTIVEWINDOWTRACKING0x1000确定活动窗口跟踪 (激活鼠标打开的窗口,) 打开还是关闭。⑶数据 参数必须指向一个 BOOL 变量,该变量对于 on 接收 真,对于 off 接收 假。
SPI_GETACTIVEWNDTRKZORDER0x100C确定是否会将通过活动窗口跟踪激活的窗口带到顶部。⑶数据 参数必须指向一个 BOOL 变量,该变量对于 on 接收 真,对于 off 接收 假。
SPI_GETACTIVEWNDTRKTIMEOUT0x2002检索活动窗口跟踪延迟(以毫秒为单位)。⑶数据 参数必须指向接收时间的 DWORD 变量。
SPI_GETANIMATION0x0048检索与用户操作关联的动画效果。⑶数据 参数必须指向接收信息的 ANIMATIONINFO 结构。 将此 结构的 cbSize 成员和⑵附加 参数设置为 sizeof(ANIMATIONINFO)。
SPI_GETBORDER0x0005检索确定窗口大小边框宽度的边框乘数因子。⑶数据 参数必须指向接收此值的整数变量。
SPI_GETCARETWIDTH0x2006检索编辑控件中的插入点宽度(以像素为单位)。⑶数据 参数必须指向接收此值的 DWORD 变量。
SPI_GETDOCKMOVING0x0090确定将窗口移动到监视器或监视器数组的上边缘、左边缘或右边缘时,窗口是否停靠。⑶数据 参数必须指向一个 BOOL 变量(如果启用)接收 真;否则,该变量必须指向 假。必须启用窗口排列(0x82)。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETDRAGFROMMAXIMIZE0x008C确定拖动最大化窗口描述文字栏时是否还原该窗口。⑶数据 参数必须指向一个 BOOL 变量(如果启用)接收 真;否则,该变量必须指向 假。必须启用窗口排列(0x82)。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETDRAGFULLWINDOWS0x0026确定是否启用拖动整个窗口。⑶数据 参数必须指向一个 BOOL 变量(如果启用)接收 真;否则,该变量必须指向 假。
SPI_GETFOREGROUNDFLASHCOUNT0x2004检索 SetForegroundWindow 在拒绝前台切换请求时闪烁任务栏按钮的次数。⑶数据 参数必须指向接收值的 DWORD 变量。
SPI_GETFOREGROUNDLOCKTIMEOUT0x2000检索用户输入后的时间(以毫秒为单位),在此期间,系统不允许应用程序强制自己进入前台。⑶数据 参数必须指向接收时间的 DWORD 变量。
SPI_GETMINIMIZEDMETRICS0x002B检索与最小化窗口关联的指标。⑶数据 参数必须指向接收信息的 MINIMIZEDMETRICS 结构。 将此 结构的 cbSize 成员和⑵附加 参数设置为 sizeof(MINIMIZEDMETRICS)。
SPI_GETMOUSEDOCKTHRESHOLD0x007E检索使用鼠标将窗口拖动到监视器或监视器阵列边缘触发停靠行为的阈值(以像素为单位)。 默认阈值为 1。⑶数据 参数必须指向接收值的 DWORD 变量。必须启用窗口排列(0x82)。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETMOUSEDRAGOUTTHRESHOLD0x0084检索使用鼠标将窗口从监视器边缘或监视器数组向中心拖动来触发取消停靠行为的阈值(以像素为单位)。 默认阈值为 20。必须启用窗口排列(0x82)。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETMOUSESIDEMOVETHRESHOLD0x0088从监视器或监视器数组的顶部检索阈值(以像素为单位),其中使用鼠标拖动时将还原垂直最大化的窗口。 默认阈值为 50。必须启用窗口排列(0x82)。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETNONCLIENTMETRICS0x0029检索与非最小化窗口的非工作区相关联的度量值。⑶数据 参数必须指向接收信息的 NONCLIENTMETRICS 结构。 将此 结构的 cbSize 成员和⑵附加 参数设置为 sizeof(NONCLIENTMETRICS)。Windows Server 2003 和 Windows XP/2000: 请参阅 NONCLIENTMETRICS 的备注。
SPI_GETPENDOCKTHRESHOLD0x0080检索使用笔将窗口拖动到监视器或监视器阵列边缘触发停靠行为的阈值(以像素为单位)。 默认值为 30。必须启用窗口排列(0x82)。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETPENDRAGOUTTHRESHOLD0x0086检索使用笔将窗口从监视器或监视器阵列的边缘拖动到其中心,从而触发取消停靠行为的阈值(以像素为单位)。 默认阈值为 30。必须启用窗口排列(0x82)。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETPENSIDEMOVETHRESHOLD0x008A检索监视器或监视器数组顶部的阈值(以像素为单位),其中使用鼠标拖动时将还原垂直最大化的窗口。 默认阈值为 50。必须启用窗口排列(0x82)。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETSHOWIMEUI0x006E确定输入法状态窗口是否以每个用户) (可见。⑶数据 参数必须指向一个 BOOL 变量,该变量在状态窗口可见时接收 真;如果状态窗口不可见,则为 假。
SPI_GETSNAPSIZING0x008E确定窗口在调整到监视器或监视器数组的顶部或底部时是否垂直最大化。⑶数据 参数必须指向接收 真(如果启用)的 BOOL 变量;否则,该变量必须指向 假。必须启用窗口排列(0x82)。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_GETWINARRANGING0x0082确定是否启用窗口排列。⑶数据 参数必须指向接收 真(如果启用)的 BOOL 变量;否则,该变量必须指向 假。窗口排列方式通过简化拖动或调整窗口大小时的默认行为,减少了移动顶级窗口和调整窗口大小所需的鼠标、笔或触摸交互的数量。
SPI_SETACTIVEWINDOWTRACKING0x1001设置活动窗口跟踪 (激活鼠标打开或关闭) 窗口。 将⑶数据 设置为真开启。
SPI_SETACTIVEWNDTRKZORDER0x100D确定是否应将通过活动窗口跟踪激活的窗口带到顶部。 将⑶数据 设置为真开启。
SPI_SETACTIVEWNDTRKTIMEOUT0x2003设置活动窗口跟踪延迟。 将⑶数据 设置为激活鼠标指针下的窗口之前要延迟的毫秒数。
SPI_SETANIMATION0x0049设置与用户操作关联的动画效果。⑶数据 参数必须指向包含新参数的 ANIMATIONINFO 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(ANIMATIONINFO)。
SPI_SETBORDER0x0006设置确定窗口大小边框宽度的边框乘数因子。⑵附加 参数指定新值。
SPI_SETCARETWIDTH0x2007设置编辑控件中的插入点宽度。 将⑶数据 设置为所需的宽度(以像素为单位)。 默认值和最小值为 1。
SPI_SETDOCKMOVING0x0091设置在将窗口移动到监视器或监视器阵列上的顶部、左侧或右侧停靠目标时,窗口是停靠的。 将⑶数据 设置为真开启。 必须启用窗口排列(0x82)。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETDRAGFROMMAXIMIZE0x008D设置拖动最大化窗口描述文字栏时是否还原该窗口。 将⑶数据 设置为真开启。必须启用窗口排列(0x82)。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETDRAGFULLWINDOWS0x0025设置打开或关闭整个窗口的拖动。⑵附加 参数为真开启。
SPI_SETDRAGHEIGHT0x004D设置用于检测拖动操作开始的矩形的高度(以像素为单位)。 将⑵附加 设置为新值。 若要检索拖动高度,请使用 SM_CYDRAG 标志调用 GetSystemMetrics。
SPI_SETDRAGWIDTH0x004C设置用于检测拖动操作开始的矩形的宽度(以像素为单位)。 将⑵附加 设置为新值。 若要检索拖动宽度,请使用 SM_CXDRAG 标志调用 GetSystemMetrics。
SPI_SETFOREGROUNDFLASHCOUNT0x2005设置 SetForegroundWindow 在拒绝前台切换请求时闪烁任务栏按钮的次数。 将⑶数据 设置为闪烁的次数。
SPI_SETFOREGROUNDLOCKTIMEOUT0x2001设置用户输入后的时间量(以毫秒为单位),在此期间,系统不允许应用程序强制自己进入前台。 将⑶数据 设置为新的超时值。调用线程必须能够更改前台窗口,否则调用将失败。
SPI_SETMINIMIZEDMETRICS0x002C设置与最小化窗口关联的指标。⑶数据 参数必须指向包含新参数的 MINIMIZEDMETRICS 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(MINIMIZEDMETRICS)。
SPI_SETMOUSEDOCKTHRESHOLD0x007F设置使用鼠标将窗口拖动到监视器或监视器阵列边缘触发停靠行为的阈值(以像素为单位)。 默认阈值为 1。⑶数据 参数必须指向包含新值的 DWORD 变量。 SPI_GETWINARRANGING 必须为 真 才能启用此行为。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETMOUSEDRAGOUTTHRESHOLD0x0085设置阈值(以像素为单位),其中使用鼠标将窗口从监视器或监视器数组的边缘拖动到其中心触发的取消停靠行为。 默认阈值为 20。⑶数据 参数必须指向包含新值的 DWORD 变量。必须启用窗口排列(0x82)。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETMOUSESIDEMOVETHRESHOLD0x0089设置从监视器顶部开始的阈值(以像素为单位),在使用鼠标拖动时,垂直最大化窗口将还原到该窗口。 默认阈值为 50。⑶数据 参数必须指向包含新值的 DWORD 变量。必须启用窗口排列(0x82)。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETNONCLIENTMETRICS0x002A设置与非小窗口的非工作区关联的指标。⑶数据 参数必须指向包含新参数的 NONCLIENTMETRICS 结构。 将此 结构的 cbSize 成员和⑵附加 参数设置为 sizeof(NONCLIENTMETRICS)。 此外,LOGFONT 结构的 lfHeight 成员必须是负值。
SPI_SETPENDOCKTHRESHOLD0x0081设置使用笔将窗口拖动到监视器或监视器阵列边缘时触发停靠行为的阈值(以像素为单位)。 默认阈值为 30。⑶数据 参数必须指向包含新值的 DWORD 变量。 SPI_GETWINARRANGING 必须为 真 才能启用此行为。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETPENDRAGOUTTHRESHOLD0x0087设置使用笔将窗口从监视器或监视器阵列边缘拖动到其中心时触发取消停靠行为的阈值(以像素为单位)。 默认阈值为 30。⑶数据 参数必须指向包含新值的 DWORD 变量。 SPI_GETWINARRANGING 必须为 真 才能启用此行为。>Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETPENSIDEMOVETHRESHOLD0x008B设置监视器顶部的阈值(以像素为单位),在使用笔拖动时,垂直最大化窗口将还原到该窗口。 默认阈值为 50。⑶数据 参数必须指向包含新值的 DWORD 变量。 SPI_GETWINARRANGING 必须为 真 才能启用此行为。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETSHOWIMEUI0x006F设置输入法状态窗口是否以每个用户为基础可见。⑵附加 参数为真开启。
SPI_SETSNAPSIZING0x008F设置窗口在调整到监视器的顶部或底部时是垂直最大化的。 将⑶数据 设置为真开启。必须启用窗口排列(0x82) Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP/2000: 不支持此参数。
SPI_SETWINARRANGING0x0083设置是否启用窗口排列。 将⑶数据 设置为真开启。窗口排列方式通过简化拖动或调整窗口大小时的默认行为,减少了移动顶级窗口和调整窗口大小所需的鼠标、笔或触摸交互次数。
图形显示——功能函数
中文名字英文名称长度作用解释
绘制区类PAINTSTRUCT64包含用来绘制它所拥有的窗口客户区所需要的信息的结构体。
绘制区类——成员表
设备hdc整数用于绘制的句柄。
擦除fErase整数如果为非零值则擦除背景,否则不擦除
左边rcPaint.left整数要绘制矩形的左边位置
顶部rcPaint.top整数要绘制矩形的顶部位置
宽度rcPaint.right整数要绘制矩形的宽度
高度rcPaint.bottom整数要绘制矩形的高度
恢复fRestore整数预留参数
更新fIncUpdate整数预留参数
颜色rgbReserved文本[32]长度字符串

中文名称英文名称示例作用
开始绘图BeginPaint开始绘图(窗口,绘图区)为指定窗口进行绘图工作的准备,并用将和绘图有关的信息填充到一个绘图区类结构中
结束绘制EndPaint结束绘制(窗口,绘制区)结束程序窗口的绘制工作
更换屏显ChangeDisplaySettingsA更换屏显(设备模式类,0)将默认显示设备的设置更改为指定的图形模式(屏幕显示分辨率等)。
枚举显屏EnumDisplayMonitors枚举显屏(设备,矩形,@回调,参数)枚举显示监视器(包括与镜像驱动程序关联的不可见伪监视器)
显屏设备EnumDisplayDevicesA显屏设备(设备名,序号,信息,标志)获取有关当前会话中显示设备的信息。标志1取设备接口名称
显屏模式EnumDisplaySettingsA显屏模式(设备名,方式,模式类)检索有关显示设备的图形模式之一的信息。方式=-1当前设置 -2注册表
屏幕坐标ClientToScreen屏幕坐标(窗口,坐标)把窗口上的坐标转换成相对于屏幕的坐标
窗口动画DrawAnimatedRects窗口动画(窗口,3,最小矩形,还原矩形)为窗口的标题设置动画,以指示图标的打开或窗口的最小化或最大化。
绘制标题DrawCaption绘制标题(窗口,设备,矩形,选项)为窗口的指定设备的矩形内绘制标题文本。选项1活动 2小标题 4带图标 8带标题 $10按钮形式 $1000带按钮
绘制边缘DrawEdge绘制边缘(设备,矩形,边类,选项)绘制矩形的一条或多条边。1凸起外边 2下沉外缘 4凸起内边 8凹陷内缘 选项1左边 2顶边 4右边 8底边 $10对角边 $800填充 $1000软边 $2000收缩 $4000扁平 $8000一维
画焦点框DrawFocusRect画焦点框(设备,矩形)绘制一个具有焦点的样式矩形。
框架控件DrawFrameControl框架控件(设备,矩形,样式,初始)绘制指定类型和样式的控件。样式1标题 2菜单 3滚动条 4按钮 5弹出菜单
绘制框架DrawFrame绘制框架(设备,矩形,样式,初始)绘制指定类型和样式的控件。
绘制图标DrawIcon绘制图标(设备,左,上,图标)在限定的设备窗口的客户区域绘制图标。
绘制文本DrawTextA绘制文本(设备,文字,字数,矩形,格式)在指定的矩形中绘制格式化文本。格式0左顶对齐 1水平居中 2居右 4垂直居中 8居底 $10断词 $20单行 $40宽制表 $89-$8F制表符位 $100不剪切 $200含外部行距 $400限定宽高 $800前缀无效 $100000忽略前缀
闪烁窗口FlashWindow闪烁窗口(窗口,模式)模式为真时切换窗口标题
比较矩形EqualRect比较矩形(矩形1,矩形2)通过比较其左上角和右下角的坐标来确定两个指定的矩形是否相等。
填充矩形FillRect填充矩形(设备,矩形,笔刷)使用指定的画笔填充一个矩形。不包括矩形的右侧和底部边框。
画矩形框FrameRect画矩形框(设备,矩形,笔刷)使用指定的画笔在指定的矩形周围绘制一像素的边框。
排除更新ExcludeUpdateRgn排除更新(设备,窗口)从剪切区域中排除窗口中的更新区域来防止在窗口的无效区域内绘制
显屏信息GetMonitorInfoA显屏信息(显示器,信息)检索有关显示监视器的信息。
取元素色GetSysColor取元素色(元素)检索指定的显示元素的当前颜色。
改元素色SetSysColor改元素色(数量,元素组,颜色组)修改指定的显示元素的当前颜色。
取颜色刷GetSysColorBrush取颜色刷(元素)检索一个标识对应于指定颜色索引的逻辑画笔的句柄。
取设备GetDC设备=取设备(窗口)获得指定窗口的客户端区域的显示设备句柄
窗口区域GetWindowRgn窗口区域(窗口,区域)获得指定窗口边界矩形的区域
区域窗口SetWindowRgn区域窗口(窗口,区域,重绘)设置指定窗口边界矩形的区域,重绘为真/假
文字宽高GetTabbedTextExtentA宽高=文字宽高(设备,文字,字数,制表位数,制表位组)计算字符串的宽度和高度。
最小矩形GetUpdateRect最小矩形(窗口,矩形,擦除)检索完全包围指定窗口的更新区域的最小矩形的坐标。擦除为真会擦除背景
更新区域GetUpdateRgn更新区域(窗口,区域,擦除)通过将窗口复制到指定区域来检索窗口的更新区域。擦除为真会擦除背景
窗口设备GetWindowDC设备=窗口设备(窗口)返回与指定窗口的环境设备句柄,设备环境覆盖了整个窗口,例如标题栏、菜单、滚动条,以及边框。
交叉矩形IntersectRect交叉矩形(目标,矩形1,矩形2)计算矩形1和矩形2两个矩形是否有交叉,把交叉范围写入目标矩形
重绘矩形InvalidateRect重绘矩形(窗口,矩形,清背景)表示必须重新绘制的窗口的客户区域的部分
重绘区域InvalidateRgn重绘区域(窗口,区域,清背景)计示必须重新绘制的窗口的客户区域的部分
反色区域InvertRect反色区域(设备,区域)对矩形内部的每个像素的颜色值执行逻辑反转(反色)
是否矩形IsRectEmpty是否矩形(矩形)确定指定的矩形是否为空。指矩形的边界范围是否正常的矩形
禁止绘图LockWindowUpdate禁止重绘(窗口)在指定的窗口中禁用或重新启用绘图更新,窗口参数为0启用绘图
转换像素MapDialogRect转换像素(窗口,矩形)将指定的对话框单位转换为屏幕单位(像素)。将指定矩形中的坐标替换为转换后的屏幕单位
转换窗点MapWindowPoints转换窗点(源窗,到窗,点组,点数)将一组点从一个窗口的坐标空间转换(映射)到另一个窗口的坐标空间。
偏移矩形OffsetRect偏移矩形(矩形,左,顶)将指定的矩形移动指定的偏移量。
绘制桌面PaintDesktop绘制桌面(设备)在指定的设备场景中描绘桌面墙纸图案
重绘窗口RedrawWindow重绘窗口(窗口,矩形,区域,标志)更新窗口客户区中的指定矩形或区域。区域为0是整个客户区
释放设备ReleaseDC释放设备(窗口,设备)释放设备上下文(DC),将其释放供其他应用程序使用。
转换坐标ScreenToClient转换坐标(窗口,坐标)将屏幕上指定点的屏幕坐标转换为客户端坐标
设置矩形SetRect设置矩形(矩形,左,上,右,下)设置指定矩形的坐标。这等效于将左、上、右和下参数分配给矩形的相应成员。
设空矩形SetRectEmpty设空矩形(矩形)创建一个空矩形,其中所有坐标都设置为零。
减去矩形SubtractRect减去矩形(矩形,矩形1,矩形2)通过从矩形1减去矩形2而形成的矩形。
制表写字TabbedTextOutA制表写字(设备,左,上,文字,字数,组数,制表组,制表X)将一个字符串写到指定的位置,并按制表位位置数组里的值展开制表符。
设备窗口WindowFromDC窗口=设备窗口(设备)返回与指定的显示设备关联的窗口的句柄。
更新窗口UpdateWindow更新窗口(窗口)将重绘消息直接发送到指定窗口的窗口过程
合并矩形UnionRect合并矩形(矩形,矩形1,矩形2)合并的矩形包含矩形1和矩形2的最小矩形。
验证矩形ValidateRect验证矩形(窗口,矩形)从指定窗口的更新区域中删除矩形来验证矩形内的工作区。
验证区域ValidateRgn验证区域(窗口,区域)从指定窗口的当前更新区域中删除该区域来验证区域内的工作区。
菜单资源——功能函数
中文名字英文名称长度作用解释
菜单条类MENUBARINFO31包含菜单栏信息
菜单条类 成员表
中文英文类型作用解释
长度cbSize整数指定这个结构的大小,以字节为单位。
左边rcBar.left整数菜单项的左边位置
顶部rcBar.top整数菜单项的顶部位置
宽度rcBar.right整数菜单项的宽度
高度rcBar.bottom整数菜单项的高度
菜单hMenu整数菜单的句柄。
子项hwndMenu整数子菜单项的句柄。
焦点fBarFocused布尔如果菜单栏或弹出菜单具有焦点为真
项点fFocused布尔如果菜单项具有焦点则为真
预留fUnused布尔未使用

中文名字英文名称长度作用解释
菜单项类MENUITEMINFO48包含菜单栏信息
菜单项类 成员表
中文英文类型作用解释
长度cbSize整数指定这个结构的大小,以字节为单位。
成员fMask整数指示要检索或设置的成员。
选项fType整数菜单项类型。
状态fState整数菜单项状态。
编号wID整数标识菜单项的应用程序定义的值。
子项hSubMenu整数与菜单项关联的下拉菜单或子菜单的控点。
选图hbmpChecked整数选定菜单时位图的句柄
未选hbmpUnchecked整数未选定菜单时位图的句柄
项值dwItemData整数与菜单项关联的应用程序定义的值。
类值dwTypeData整数如果菜单项具有焦点则为真
字长cch整数接收菜单项文本的长度(以字符为单位)。
图片hbmpItem整数要显示的位图的句柄

中文名字英文名称长度作用解释
菜单类MENUINFO28包含菜单栏信息
菜单类 成员表
中文英文类型作用解释
长度cbSize整数指定这个结构的大小,以字节为单位。
成员fMask整数指示要检索或设置的成员。
样式dwStyle整数菜单样式。
最高cyMax整数菜单的最大高度。
背景hbrBack整数用于菜单背景的画笔的手柄。
帮助dwContextHelpID整数上下文帮助标识符。
定义dwMenuData整数应用程序定义的值。

中文名称英文名称示例作用
附加菜单AppendMenuA附加菜单(菜单,样式,标识,内容)将一个新项目附加到指定的菜单栏,下拉菜单,子菜单或快捷菜单。标识是菜单序号或者0文字,4图片,$100附加数据,样式还包括1灰化 2禁用 8复选 $10下拉式 $20垂直线分开列 $40新行列不分开 $800水平分界线
画菜单栏DrawMenuBar画菜单栏(窗口)如果窗口的菜单条被修改,则必须调用此函数来画修改了的菜单条。
菜单复选CheckMenuItem菜单复选(菜单,项,状态)将指定菜单项的复选标记属性的状态设置为选定或清除。0未选1灰色2禁用8选中$400相对菜单项
菜单单选CheckMenuRadioItem菜单单选(窗口,首个,最后,标识,选项)选中第四参数的菜单项。首个到末尾的其它项清除选中。选项0标识$400相对位置
转小写CharLowerA小写字=转小写("AASD")把某个字符或字符串转换为小写字母
转换小写CharLowerBuffA转换小写(文字,长度)把文本变量或内存缓冲区按指定长度转换为小写
转大写CharUpperA大写字=转大写("asdf")把某个字符或字符串转换为大写字母
转换大写CharUpperBuffA转换大写(文字,长度)把文本变量或内存缓冲区按指定长度转换为大写
转定义字CharToOemA转定义字(文字,缓冲区)将字符串转换为 OEM 定义的字符集。转ANSI编码时缓冲区可以跟源文字相同
转定量字CharToOemA转定量字(文字,缓冲区,长度)将字符串中指定数量的字符转换为 OEM 定义的字符集。转ANSI编码时缓冲区可以跟源文字相同
限定光标ClipCursor限定光标(矩形)将光标限定在屏幕上的矩形区域。
复制键表CopyAcceleratorTableA复制键表(键表,数组,数量)复制指定的快捷键表到ACCEL快捷键类数组中。
创建键表CreateAcceleratorTableA键表=创建键表(表组,数目)创建加速器表。
销毁键表DestroyAcceleratorTable创建键表(键表)销毁加速器表。
载入键表LoadAcceleratorsA载入键表(实例,表名)加载指定的键盘码表。
处理键表TranslateAcceleratorA处理键表(窗口,键表,消息)处理菜单命令的快捷键。
子窗键表TranslateMDISysAccel子窗键表(子窗,消息)处理子窗口的窗口菜单命令的快捷键击键。
复制图标CopyIcon图标=复制图标(图标)复制一个图标。在源图标被释放时新图标仍然可用
复制图像CopyImage图像=复制图像(图像,类,宽,高,方式)复制一个图像。类=1图标,2光标,0位图。方式1单色,4副本,8删除原图;加载图像标志
创建图标CreateIcon创建图标(实例,宽,高,面数,位数,位值,色值)创建一个具有指定大小,位模式和热点的光标。
资源图标CreateIconFromResource资源图标(数据,长度,标志,模式)从资源数据创建一个图标或光标。标志为真是图标,否则光标.模式$2000-Win2x;$30000=Win3x
新建图标CreateIconIndirect新建图标(图标结构)创建一个具有指定大小,颜色和位模式的图标。
创建菜单CreateMenu菜单=创建菜单创建一级空菜单。
建子菜单CreatePopupMenu菜单=建子菜单创建弹出式子菜单。
图标信息GetIconInfo图标信息(句柄,信息)检索有关指定图标或光标的信息。
图标光标GetIconInfoExA图标光标(句柄,信息)检索有关指定图标或光标的信息。
取光标区GetClipCursor取光标区(矩形)检索限制光标的矩形区域的屏幕坐标。
游标信息GetCursorInfo游标信息(信息)检索有关全局游标的信息。
获取游标GetCursor光标=获取游标获得以当前游标的句柄
更换游标SetCursor更换游标(光标)更换当前游标的形状
读取光标GetCursorPos读取光标(位置)获得当前鼠标的位置
光标位置SetCursorPos光标位置(水平,垂直)修改当前鼠标的位置
创建标记CreateCaret创建标记(窗口,形状,宽,高)在窗口上插入记号形状(可以是线条、块或位图)。
销毁标记DestroyCaret销毁标记从窗口中释放插入符号,并从屏幕中删除插入符号。不释放位图
闪烁时间GetCaretBlinkTime毫秒=闪烁时间获取插入字符标记闪烁的时间毫秒数
时间闪烁SetCaretBlinkTime时间闪烁(时间)设置插入字符标记闪烁的时间毫秒数
隐藏标记HideCaret隐藏标记(窗口)从屏幕上移除插入记号。隐藏插入记号不会破坏其当前形状或使插入点失效。
插入位置GetCaretPos插入位置(坐标)获取插入标记的位置到指定坐标上。
位置标记SetCaretPos位置标记(x,y)将插入标记移动到指定坐标上。
显示标记ShowCaret显示标记(窗口)使插入记号在屏幕上的插入记号当前位置可见。当插入记号变得可见时,它开始自动闪烁。
创建光标DestroyCursor创建光标(实例,左,顶,宽,高,与掩码,异或掩码)创建具有指定大小、位模式和热点的单色游标。
销毁光标DestroyCursor销毁光标(光标)销毁指定的光标并释放内存
销毁图标DestroyIcon销毁图标(图标)销毁指定的图标并释放内存
删除菜单DeleteMenu删除菜单(菜单,项,选项)从指定的菜单中删除一个项目。选项0标识$400相对位置
销毁菜单DestroyMenu销毁菜单(菜单)销毁指定的菜单并释放内存
获取菜单GetMenu菜单=获取菜单(窗口)返回分配给指定窗口的菜单的句柄。
设置菜单SetMenu设置菜单(窗口,菜单)将新菜单分配给指定的窗口。
图标尺寸GetMenuCheckMarkDimensions宽高=图标尺寸返回默认复选标记位图的尺寸。在菜单项旁边显示位图前,先获取大小。返回值低位是宽度,高位是高度
取菜单条GetMenuBarInfo取菜单条(窗口,选项,序号,信息)检索有关指定菜单栏的信息。选项=-1系统菜单 -4弹出菜单 -3普通菜单
菜单默认GetMenuDefaultItem项=菜单默认(菜单,方式,选项)返回指定菜单上的默认菜单项。方式为真获取位置,为假获取标识。选项1含禁用 2搜索打开菜单
默认菜单SetMenuDefaultItem默认菜单(菜单,项,方式)返回指定菜单上的默认菜单项。方式为真指定位置,为假指定标识。
取菜单数GetMenuItemCount数=取菜单数(菜单)返回指定菜单中的项目数
菜单信息GetMenuInfo菜单信息(菜单,菜单类)获取指定菜单的信息。
信息菜单SetMenuInfo信息菜单(菜单,菜单类)设置指定菜单的信息。
菜单帮助GetMenuContextHelpIdid=菜单帮助(菜单)返回指定菜单中的帮助上下文标识符
帮助菜单SetMenuContextHelpId帮助菜单(菜单,id)修改指定菜单中的帮助上下文标识符
菜单标识GetMenuItemID标识=菜单标识(菜单,位置)返回指定菜单中指定位置的菜单标识符
菜单图片SetMenuItemBitmaps菜单图片(菜单,项,方式,未选,选图)将指定的位图与菜单项相关联。方式0项为标识,$400位置
取菜单项GetMenuItemInfoA取菜单项(菜单,项,方式,菜单项类)获取有关菜单项的信息。方式为真指定位置,为假指定标识。
改菜单项SetMenuItemInfoA改菜单项(菜单,项,方式,菜单项类)修改有关菜单项的信息。方式为真指定位置,为假指定标识。
菜单边框GetMenuItemRect菜单边框(窗口,菜单,位置,矩形)检索指定菜单项的边框。
菜单标志GetMenuState菜单标志(菜单,项,方式)检索与指定菜单项关联的菜单标志。方式0项为标识,$400位置
取子菜单GetSubMenu取子菜单(菜单,位置)检索由指定菜单项激活的下拉菜单或子菜单的句柄。
载入菜单LoadMenuA菜单=载入菜单(实例,资源)从可执行文件中加载指定的菜单资源
加载菜单LoadMenuIndirectA菜单=加载菜单(模板)在内存中加载指定的菜单模板。
分离菜单RemoveMenu分离菜单(菜单,项,方式)删除菜单项或从指定菜单中分离子菜单。方式0项为标识,$400位置
菜单标题GetMenuStringA菜单标题(菜单,项,内容,长度,方式)将指定菜单项的文本字符串复制到指定的缓冲区中。方式0项为标识,$400位置
取主菜单GetSystemMenu取主菜单(菜单,重置)使应用程序能够访问系统菜单(也称为开始菜单或控制菜单)以进行复制和修改。
改主菜单SetSystemMenu改主菜单(菜单,位置)使应用程序能够访问系统菜单(也称为开始菜单或控制菜单)以进行复制和修改。
突出菜单HiliteMenuItem突出菜单(窗口,菜单,项,方式)在菜单栏中的项中添加或删除突出显示。方式 $400相对位置 $80突出显示 0不突出/标识
插入菜单InsertMenuA插入菜单(菜单,项,方式,标识,名称)将新菜单项插入到菜单中,并将其他项向下移动菜单。方式 $400相对位置 0标识
插菜单项InsertMenuItemA插入菜单(菜单,项,方式,信息)在菜单中的指定位置插入新菜单项。方式为真时项是相对位置
是否菜单IsMenu是否菜单(菜单)判断是否一个菜单
控制菜单EnableMenuItem控制菜单(菜单,项,选项)允许、禁止或变灰指定的菜单条目。0未选1灰色2禁用8选中$400相对菜单项
结束菜单EndMenu结束菜单结束程序窗口的菜单
载入位图LoadBitmapA图片=载入位图(实例,资源)从可执行文件中加载指定的位图资源
载入光标LoadCursorA光标=载入光标(实例,资源)从可执行文件中加载指定的光标资源
加载光标LoadCursorFromFileA光标=加载光标(文件名)加载光标文件或者系统光标号
载入图标LoadIconA图标=载入图标(实例,资源)从可执行文件中加载指定的图标资源
加载图像LoadImageA图像=加载图像(实例,文件名,类型,宽,高,标志)类型:0位图,1图标,2光标;读取文件时实例=0;标志:1黑白图像,$10加载文件,$20取透明色加载图像标志
载入文字LoadStringA载入文字(模块,标识,内容,长度)从可执行文件中加载字符串资源
查找图标LookupIconIdFromDirectory资源=查找图标(目录,真)在图标或光标资源组中搜索最适合当前显示设备的图标或光标(假)。目录=12光标目录 14图标目录
定位菜单MenuItemFromPoint定位菜单(窗口,菜单,坐标)获取指定位置的子菜单
修改菜单ModifyMenuA修改菜单(菜单,项,方式,标识,内容)更改现有菜单项。此函数用于指定菜单项的内容、外观和行为。方式为$400相对位置项
定义转字OemToCharA定义转字(文字,缓冲区)将 OEM 定义的字符集中的字符串转换为 ANSI 或宽字符字符串。
定量转字OemToCharBuffA定量转字(文字,缓冲区,长度)将 OEM 定义的字符集中的指定数量的字符串转换为 ANSI 或宽字符字符串。
设置光标SetSystemCursor设置光标(光标,标识)用指定的游标的替换标识指定的系统游标,然后销毁此游标
显隐光标ShowCursor显隐光标(真)显示或者隐藏光标
显示菜单TrackPopupMenu显示菜单(菜单,选项,x,y,0,窗口,0)在指定位置显示快捷菜单,并跟踪菜单上项的选择。选项=0左上对齐 2可右键 4对x居中 8居右 $10对y居中 $20底对齐 $80不发单击 $100返回标识
展示菜单TrackPopupMenuEx展示菜单(菜单,选项,x,y,窗口,数据)功能同上,可选数据用来指定不重叠区域.选项动画 $800右到左 $400左到右 $4000不动画 $2000下到上 $1000上到下 $40垂直居中适应不重叠
启动帮助WinHelpA启动帮助(窗口,名称,命令,数据)启动 Windows 帮助 (Winhelp.exe) 并传递指示应用程序所请求帮助的性质的其他数据。
组合式wsprintfA组合式(内容,格式,变量..)将多个变量按照指定格式组合成一个字符串
组合文字wvsprintfA组合文字(内容,格式,参数表)使用指向参数列表的指针将格式化数据写入指定的缓冲区。
窗口控件——功能函数
中文名称英文名称示例作用
按钮复选CheckDlgButton按钮复选(窗口,标识,状态)更改复选按钮控件的状态。0未选1选中2无效(灰色)
按钮单选CheckRadioButton按钮单选(窗口,首个,最后,标识)包含第一个和最后一个单选按钮的标识,这组按钮中只允许第四参数指定的标识按钮为选中
界面计数GetGuiResources计数=界面计数(进程,方式)获得指定进程正在使用的图形用户界面对象的句柄计数。方式=0界面计数 1用户计数 2界面峰值 4用户峰值
每列项数GetListBoxInfo项数=每列项数(列表)获得指定列表框中每列的项目数
前后控件GetNextDlgGroupItem前后控件(窗口,起始,向前)检索对话框中指定起始控件之前或后一个控件的句柄。向前为假是向后
前后切换GetNextDlgTabItem前后切换(窗口,起始,向前)检索对话框中指定起始控件之前或后一个具有WS_TABSTOP样式控件的句柄。向前为假是向后
读滚动条GetScrollBarInfo读滚动条(窗口,方式,信息)检索有关指定滚动条的信息。方式=-4控件 -5垂直 -6水平
读滚动区GetScrollInfo读滚动区(窗口,方式,信息)获取滚动条的信息,滚动信息类。方式=1垂直 0水平
改滚动区SetScrollInfo改滚动区(窗口,方式,信息)设置滚动条的信息,滚动信息类。方式=1垂直 0水平
读滚动位GetScrollPos位置=读滚动位(窗口,方式)检索有关指定滚动条的滑块位置。方式=1垂直 0水平
改滚动位SetScrollPos改滚动位(窗口,方式,位置,重绘)设置滚动框(滑块)在指定滚动条中的位置。方式=1垂直 0水平;重绘是真或假
读滚动框GetScrollRange读滚动框(窗口,方式,最小,最大)检索有关指定滚动条的当前最小和最大滚动框位置。方式=1垂直 0水平
改滚动框SetScrollRange改滚动框(窗口,方式,最小,最大,重绘)设置有关指定滚动条的当前最小和最大滚动框位置。方式=1垂直 0水平
取组合框GetComboBoxInfo取组合框(窗口,信息)检索有关指定组合框的信息。
字符宽高GetDialogBaseUnits宽高=字符宽高检索系统的对话框基本单位,即系统字体中字符的平均宽度和高度。
控件标识GetDlgCtrlID标识=控件标识(控件)返回指定控件的标识符。
获取控件GetDlgItem控件=获取控件(窗口,标识)通过标识获取窗体上的子窗控件
取控件数GetDlgItemInt数=取控件数(窗口,标识,@成功,符号)获取对话框控件的标题文本,并转换为数字,符号为真包含负数
改控件数SetDlgItemInt改控件数(窗口,标识,数值,符号)用指定数值修改对话框控件的标题文本(数字自动转文本),符号为假不检查"-"符号
取控件字GetDlgItemTextA取控件字(窗口,标识,内容,长度)获取对话框控件的文本和标题
改控件字SetDlgItemTextA改控件字(窗口,标识,内容)修改对话框控件的文本和标题
文件列表DlgDirListA文件列表(窗口,路径,列表标识,静态标识,属性)使用与指定路径或文件名匹配的所有文件的名称填充指定的列表框。
文件组合DlgDirListComboBoxA文件组合(窗口,路径,列表标识,静态标识,属性)使用与指定目录列表填充指定的组合框。
文件选择DlgDirSelectComboBoxExA文件选择(窗口,路径,长度,标识)从使用文件组合函数填充的组合框中获取当前选择的路径。
文件选表DlgDirSelectExA文件选表(窗口,路径,长度,标识)从使用文件列表函数填充的列表框中获取当前选择的路径。
控制滚条EnableScrollBar控制滚条(控件,方向,激活)允许、禁止或变灰指定的菜单条目。方向0水平箭头 1垂直箭头 2滑块 3双箭头;激活=0箭头有效 1左或上箭头无效 2右或下箭头无效 3都无效
结束模态EndDialog结束模态(窗口,真)结束模态对话框
取标题栏GetTitleBarInfo取标题栏(窗口,信息)检索有关指定标题栏的信息。
滚动矩形ScrollDC滚动矩形(设备,水平,垂直,滚动矩形,剪切矩形,区域,更新矩形)水平和垂直滚动一个位矩形。
滚动窗口ScrollWindow滚动窗口(窗口,水平,垂直,滚动矩形,剪切矩形)滚动指定窗口的工作区的内容。
显示滚动ShowScrollBar显示滚动(窗口,方式,真)显示或隐藏指定的滚动条。方式=1垂直 0水平 3水平和垂直
按钮信息IsDlgButtonChecked按钮信息(窗口,标识)确定按钮控件是否在其旁边有复选标记,还是三态按钮控件是否为灰色,已选中或两者都不是。
信息框MessageBoxA信息框(窗口,内容,标题,样式)弹出一个消息框,样式通过数字控制
消息框MessageBoxIndirectA消息框(消息框类)弹出一个消息框,样式通过消息类结构控制
延时框MessageBoxTimeoutA延时框(0,内容,标题,样式,0,毫秒)弹出一个消息框,超过设定时间未点击则自动关闭
是否最小IsIconic是否最小(窗口)判断给定的窗口句柄是否为最小化的窗口
锁工作站LockWorkStation锁工作站锁定工作站的显示。锁定工作站可防止未经授权使用。
会话连接DdeConnect会话连接(实例,服务器,主题,上下文)与支持指定服务名称和主题名称对的服务器应用程序建立会话。
会话全连DdeConnectList会话全连(实例,服务器,主题,列表,上下文)与支持指定服务名称和主题名称对的所有服务器应用程序建立会话。
会话创建DdeCreateDataHandle会话创建(实例,数据,大小,偏移,项名,剪板,标志)创建动态数据交换(DDE),并使用指定缓冲区中的数据填充对象。
会话字句DdeCreateStringHandleA会话字句(实例,名称,代码页)创建标识指定字符串的句柄。1004=ANSI,1200=UNICODE
会话终止DdeDisconnect会话终止(会话)终止启动的会话,并使指定的会话句柄失效。
会话销毁DdeDisconnectList会话销毁(会话列表)销毁指定的会话列表并终止与该列表关联的所有会话。
进程快照CreateToolhelp32Snapshot进程快照(对象,进程ID)可以获取系统中正在运行的进程信息,线程信息

重绘窗口标志——更新窗口指定矩形或区域

中文名字常量英文名称释义
重绘无效$0001RDW_INVALIDATE使指定区域或整个窗口无效,常用于重绘窗口
重绘内部$0002RDW_INTERNALPAINT使一条WM_PAINT消息被传递到窗口,而不管窗口是否包含一个无效区域。
重绘背景$0004RDW_ERASE使窗口在重画时接收到一个擦除背景消息。
重绘有效$0008RDW_VALIDATE使指定区域或整个窗口有效
重绘禁止$0010RDW_NOINTERNALPAINT禁止任何未处理的内部重绘消息。
重绘防擦$0020RDW_NOERASE禁止任何未处理的WM_ERASEBKGND消息。
重绘当前$0040RDW_NOCHILDREN在重画操作中不包括子窗口
重绘全部$0080RDW_ALLCHILDREN在重画操作中包含子窗口
重绘更新$0100RDW_UPDATENOW使窗口接收到WM_NCPAINT,WM_ERASEBKGND和WM_PAINT消息
重绘擦除$0200RDW_ERASENOW接收到WM_NCPAINT和WM_ERASEBKGND消息
重绘框架$0400RDW_FRAME使窗口非客户区中与更新区域重叠的任何部分接收到一条WM_NCPAINT消息。
重绘禁框$0800RDW_NOFRAME禁止任何未处理的WM_NCPAINT消息。
图形设备接口(Graphics Device Interface)
(GDI) 的 Microsoft Windows 图形设备接口使应用程序能够在视频显示器和打印机上使用图形和格式化文本。Windows应用程序不直接访问图形硬件,GDI负责应用程序与设备驱动程序交互。
开发人员需要熟悉 Windows 消息驱动的体系结构。测试程序之前请先检查位图、图元文件和字体是否已经损坏。程序可以为某些打印和后台打印API指定安全描述符。设置安全描述符时应小心。
1.位图
位图是一个图形对象,用于创建、操作 (缩放、滚动、旋转和绘制) ,以及将图像作为文件存储在磁盘上。
2.画刷
画刷是应用程序用于绘制多边形、椭圆形和路径内部的图形工具。 绘图应用程序使用画笔绘制形状;字处理应用程序使用画笔绘制规则;
计算机辅助设计 (CAD) 应用程序使用画笔绘制横断面视图的内部;和电子表格应用程序使用画笔绘制饼图的各个部分和条形图中的条形图。
3.剪裁
剪裁 是将输出限制为应用程序窗口的工作区中的某个区域或路径的过程。
4.颜色
颜色是应用程序生成的图片和图像中的重要元素。包括通过笔、画笔、文本或位图来管理和使用颜色。
5.坐标空间和转换
应用程序使用坐标空间和转换来缩放、旋转、平移、剪切和反射图形输出。坐标空间是一个平面空间,它通过使用两个相互垂直的引用轴定位二维对象。
有四个坐标空间:世界、页面、设备和物理设备 (工作区、桌面或打印纸页面) 。转换是一种算法,用于更改 (“转换”) 对象的大小、方向和形状。
转换还会将图形对象从一个坐标空间传输到另一个坐标空间。 最终,对象显示在物理设备上,通常是屏幕或打印机。
6.设备上下文
设备上下文是一种结构,用于定义一组图形对象及其关联属性,以及影响输出的图形模式。
图形对象包括用于线条绘制的笔、用于绘制和填充的画笔、用于复制或滚动屏幕部分的位图、用于定义可用颜色集的调色板、用于剪裁和其他操作的区域,以及用于绘制和绘制操作的路径。
7.填充的形状
填充形状 是使用当前笔轮廓并使用当前画笔填充的几何形式。 有五个填充形状:椭圆形、弧弦、饼图、多边形、矩形。
8.字体和文本
字体用于在视频显示器和其他输出设备上绘制文本。 使用字体和文本功能,可以安装、选择和查询不同的字体。
9.线条和曲线
线条和曲线用于在光栅设备上绘制图形输出。 线条 是光栅显示器上的一组突出显示像素 (或打印页上的一组点,) 由两个点标识:起点和终点。
常规曲线是光栅显示器上的一组突出显示像素,(或打印页上的点) ,用于定义圆锥部分的外围 (或一部分的外围) 。 不规则曲线是一组像素,用于定义不适合圆锥部分的外围的曲线。
10.图元文件
图元文件是以与设备无关的格式存储图片的结构集合。设备独立性是将图元文件与位图分开的一项功能。与位图不同,图元文件可保证设备独立性。
但是,图元文件的绘制速度通常比位图慢一些。 因此,如果应用程序需要快速绘制,并且设备独立性不是问题,则应使用位图而不是图元文件。
11.路径
路径是填充、轮廓(或同时填充和轮廓) 或形状的一个或多个图形。路径用于绘图和绘制应用程序。应用程序使用路径创建独特的剪裁区域、绘制不规则形状的轮廓以及填充不规则形状的内部。
不规则形状是由贝塞尔曲线和直线组成的形状。 (常规形状包括椭圆、圆、矩形和多边形。)
12.笔
笔是应用程序可用于绘制线条和曲线的图形工具。 绘图应用程序使用笔绘制自由手绘线条、直线和曲线。应用程序使用笔绘制可见线条、隐藏线、剖面线、中心线等。
Word处理和桌面发布应用程序使用笔绘制边框和规则。 电子表格应用程序使用笔来指定图形的趋势,并勾勒条形图和饼图。
13.矩形
应用程序使用 矩形 来指定屏幕上或窗口中的矩形区域。
14.区域
区域是一个矩形、多边形或椭圆 (或两个或更多个形状的组合,) 可以填充、绘制、倒排、定框,并用于对光标位置执行命中测试。
15.绘画和绘图
介绍系统如何管理屏幕输出,并说明应用程序必须执行哪些操作才能在窗口中绘制。具体介绍 显示设备上下文(DC) 以及如何准备和使用它们。

位图设备
位图是可在DC(设备上下文)中选择的GDI对象之一。设备上下文是定义一组图形对象及其关联属性以及影响输出的图形模式的结构。
位图分为两类:设备无关的位图(DIB)和设备依赖位图(DDB)
DIB 文件格式旨在确保使用一个应用程序创建的位图图形可以加载并显示在另一个应用程序中,同时保留与原始应用程序相同的外观。
与设备无关的位图 (DIB) 包含颜色表。颜色表描述像素值与RGB颜色值的对应方式,这些值描述由发射光产生的颜色。因此DIB可以在任何设备上实现正确的配色方案。DIB包含以下颜色和维度信息:
创建矩形图像的设备的颜色格式。
创建矩形图像的设备分辨率。
创建映像的设备的调色板。
将红色、绿色、蓝色 ( RGB ) 三元元素映射到矩形图像中的像素的位数组。
一个数据压缩标识符,指示 (使用任何) 来减小位数组大小的数据压缩方案。
颜色和维度信息存储在 位图信息类 结构中,该结构由 位图信息头类 结构组成,后跟两个或多个 色度类 结构。
位图信息头类 结构指定像素矩形的尺寸,描述设备的颜色技术,并标识用于减小位图大小的压缩方案。 色度类 结构标识像素矩形中显示的颜色。
DIB 有两种:自下而上的 DIB,其中原点位于左下角。自上而下的 DIB,其中原点位于左上角。
如果 DIB 的高度(如位图信息标头结构的 高度 成员所指示)为正值,则为自下而上的 DIB;如果高度为负值,则为自上而下的 DIB。 无法压缩自上而下的 DDB。
颜色格式根据颜色平面和颜色位的计数指定。 颜色平面的计数始终为 1;对于单色位图,颜色位的计数为 1,VGA 位图为 4,其他颜色设备上的位图为 8、16、24 或 32。
应用程序通过调用 设备项目 函数检索特定显示器 (或打印机) 使用的颜色位数,并将 BITSPIXEL 指定为第二个参数。
调色板由 色度类 结构数组表示,这些结构指定显示设备调色板中每种颜色的红色、绿色和蓝色强度分量。调色板数组中的每个颜色索引映射到与位图关联的矩形区域中的特定像素。
此数组的大小(以位为单位)等效于矩形的宽度(以像素为单位),乘以矩形的高度(以像素为单位),再乘以设备的颜色位计数。 应用程序可以通过调用 设备项目 函数来检索设备调色板的大小。
Windows 支持压缩 8 bpp 和 4 bpp 自下而上 DDB 的调色板数组。 可以使用运行长度编码 (RLE) 方案压缩这些数组。 RLE 方案使用 2 字节值,第一个字节指定使用颜色索引的连续像素数,第二个字节指定索引。
应用程序可以通过初始化所需的结构并调用 设备位图 函数,从 DDB 创建 DIB。 若要确定设备是否支持此函数,请调用 设备项目 函数,并将RC_DI_BITMAP指定为 RASTERCAPS 标志。
需要复制位图的应用程序可以使用 透明传输 将源位图中的所有像素复制到目标位图,但那些与透明颜色匹配的像素除外。
应用程序可以通过调用 指定像素 或 拉伸传输 函数,使用 DIB 在显示设备上设置像素。 若要确定设备是否支持 指定像素 函数,请调用 设备项目 函数。

设备依赖位图(也称为 GDI 位图)是 Microsoft Windows 16位DOS系统中唯一可用的位图。随着显示技术的改进和各种可用显示设备的增加,某些固有问题浮出水面,只能通过 DIB 来解决。
因此绘图应用程序无法快速确定位图是否适用于运行应用程序的视频显示设备类型。尽管存在这些问题,但 DDB (也称为兼容位图) 仍可用于更好的 GDI 性能和其他情况。
兼容位图使用单一结构(位图类)描述设备相关的位图 (DB) 。 此结构的成员指定矩形区域的宽度和高度;将设备调色板中的条目映射到像素的数组的宽度;和设备的颜色格式。
应用程序可以通过调用 设备项目 函数并指定适当的常量来检索设备的颜色格式。 请注意,DDB 不包含颜色值;相反,颜色采用与设备相关的格式。 有关详细信息,请参阅 位图中的颜色。
由于每个设备都可以有自己的一组颜色,因此为一个设备创建的 DDB 可能无法在不同的设备上很好地显示。 位图类
中文名字英文名称长度作用解释
位图类BITMAP28包含了位图数据的结构
位图类——成员表
分类bmType整数位图类型,其值必须为0
宽度bmWidth整数位图的宽度,单位为像素
高度bmHeight整数位图的高度,单位为像素
长度bmWidthBytes整数每行的字节数,其值必须能被2整除。
层数bmPlanes整形颜色平面数,一般为1。
位数bmBitsPixel整形位图的位深度,一般为24或32
数据bmBits整数一个指向内存的指针,所指向的内容为位图存放的地方
位图标头类
中文名字英文名称长度作用解释
位图标头类BITMAPCOREHEADER12包含了位图数据的标头信息
位图标头类——成员表
长度bcSize整数结构体的字节数,12
宽度bcWidth整形位图的宽度,单位为像素
高度bcHeight整形位图的高度,单位为像素
层数bcPlanes整形颜色平面数,一般为1。
位数bcBitCount整形位图的位深度,1, 4, 8, 24或32
位图文件类
中文名字英文名称长度作用解释
位图文件类BITMAPCOREHEADER14包含了位图文件的头部信息
位图文件类——成员表
分类bfType整形图片的类型,只能是BM
长度bfSize整数宽*高*位数+偏移
预留bfReserved1整数无效信息
偏移bfOffBits整数位图数据的偏移量。
位图信息头类
中文名字英文名称长度作用解释
位图信息头类BITMAPINFOHEADER40包含了位图信息的结构
位图信息头类——成员表
长度biSize整数指定这个结构的长度,为40
宽度biWidth整数位图的宽度,单位为像素
高度biHeight整数位图的高度,单位为像素
层数biPlanes整形颜色平面数,一般为1。
位数biBitCount整形位图的位深度,1, 4, 8, 24或32
压缩biCompression整数指定位图是否压缩,有效的值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS
大小biSizeImage整数指定实际的位图数据占用的字节数
水平像素biXPelsPerMeter整数指定目标设备的水平分辨率
垂直像素biYPelsPerMeter整数指定目标设备的垂直分辨率
实际颜色biClrUsed整数指定本图象实际用到的颜色数,0表示颜色数为2
重要颜色biClrImportant整数指定本图象中重要的颜色数,0表示全部颜色。
色度类
中文名字英文名称长度作用解释
色度类RGBQUAD4描述了由红色,绿色和蓝色的相对强度组成的颜色。
色度类——成员表
蓝度rgbBlue字节绿色强度值。
绿度rgbGreen字节绿色强度值。
红度rgbRed字节红色强度值。
预留rgbReserved字节预留,必须是0
位图信息类
中文名字英文名称长度作用解释
位图信息类BITMAPINFO44+定义 DIB 的尺寸和颜色信息。
位图类——成员表
信息头bmiHeader位图信息头类一个 位图信息头类 结构,其中包含有关颜色格式维度的信息。
颜色组bmiColors[1]色度类构成颜色表的色度类数组或者一个由16位正数数组,指定当前实现的逻辑调色板中的索引。

中文名称英文名称示例作用
位图函数
位图传输BitBlt位图传输(目标,左,顶,宽,高,源设备,源X,源Y,光栅)该函数对指定的源设备环境区域中的像素进行位块传输
创建位图CreateBitmap创建位图(宽度,高度,色面,色位,数据)创建一个具有指定宽度,高度和颜色格式(每个像素的颜色平面和位)的位图。
新建位图CreateBitmapIndirect位图=新建位图(位图类)通过位图结构创建一个具有指定宽度,高度和颜色格式(每个像素的颜色平面和位)的位图。
创建图像CreateCompatibleBitmap创建图像(设备,宽度,高度)创建与与指定设备参数标识的颜色格式兼容的位图。
内建位图CreateDIBSection内建位图(设备,位图信息,颜色索引,位图,映射,偏移)创建一个与设备无关的位图(DIB内图),应用程序可以直接写入。
关联位图CreateDIBitmap关联位图(设备,格式,标志,数据,位色,使用)从与设备无关的位图(DIB)创建与设备相关的位图(DDB)
兼容位图CreateDiscardableBitmap图像=兼容位图(设备,宽度,高度)创建与指定设备兼容的位图,具有与设备一样的位/像素格式和颜色调色板
填充表层ExtFloodFill填充表层(设备,左,上,填色,方式)使用当前画笔填充显示表面的一个区域。
填充表面FloodFill填充表面(设备,左,上,填色)使用当前画笔填充显示表面的一个区域。
透明混合GdiAlphaBlend透明混合(目标,左,顶,宽,高,源,左,顶,宽,高,混合)显示具有透明或半透明像素的位图。混合类
渐变填充GdiGradientFill渐变填充(设备,顶点组,顶点数,网格,数量,模式)指定顶点数组填充矩形三角形网格结构。渐变填充模式
掩码传输MaskBlt掩码传输(目标,左,顶,宽,高,源,左,顶,掩码图,左偏,上偏,光栅)使用指定的单色掩码位图(及偏移量)和光栅操作合并源位图和目标位图的颜色数据。光栅定义
方点传输PlgBlt方点传输(目标,三点,源,左,顶,宽,高,掩码图,左偏,上偏)执行颜色数据位从源设备的矩形到目标设备平行四边形三个顶点的位块传输。
位图数据GetBitmapBits位图数据(图片,长度,@数据)将指定与设备相关的位图的位图位复制到缓冲区中。
数据位图SetBitmapBits数据位图(图片,长度,数据)将位图的颜色数据位设置为指定的值。
取图宽高GetBitmapDimensionEx取图宽高(图像,尺寸类)获取位图的宽高尺寸
改图宽高SetBitmapDimensionEx改图宽高(图像,宽,高,旧尺寸)设置位图的宽高新尺寸
取颜色表GetDIBColorTable取颜色表(设备,序号,条目,数组)从当前在指定设备位图的颜色表中的一系列条目中检索颜色值。
改颜色表SetDIBColorTable改颜色表(设备,序号,条目,数组)将当前选择的DIB颜色表中的一系列颜色值数组设置为指定的设备中。
设备位图GetDIBits设备位图(设备,位图,首行,行数,@数据,@信息,格式)检索指定兼容位图的位,并使用指定的格式将它们作为 DIB 复制到缓冲区或信息结构中。格式:0=RGB,1=索引
设置像素SetDIBits设置像素(设备,位图,起始行,行数,数据,信息,格式)在指定的DIB中找到的颜色数据和信息设置兼容位图(DDB)中的像素。格式:0=RGB,1=索引
指定像素SetDIBitsToDevice指定像素(设备,左,顶,宽,高,源左,源上,起始行,行数,色组,像素,索引)使用源图像设备指定位置与目标设备指定矩形中的像素。索引:0=RGB颜色,1索引颜色
获取颜色GetPixel颜色=获取颜色(设备,x,y)获取设备指定坐标处像素的颜色值。
设置颜色SetPixel设置颜色(设备,x,y,颜色)设置设备指定坐标处像素的颜色值。
拉伸模式GetStretchBltMode模式=拉伸模式(设备)获取指定设备的拉伸模式
模式拉伸SetStretchBltMode模式拉伸(设备,模式)设置指定设备的拉伸模式
伸缩传输StretchBlt伸缩传输(目标,左,顶,宽,高,源,左,顶,宽,高,光栅)将位图从源矩形拉伸或压缩复制到目标矩形中,以适合尺寸。光栅定义
拉伸传输StretchDIBits拉伸传输(目标,左,顶,宽,高,左,顶,宽,高,位数,信息,色型,光栅)将图像中像素矩形的颜色数据拉伸或压缩复制到指定的目标矩形。信息; 色型:0=RGB,1=索引
透明传输TransparentBlt透明传输(设备,左,顶,宽,高,源设备,源,左,顶,宽,高,透明色)将对应于像素矩形的颜色数据从指定的源设备上下文传输到目标设备上下文中。
设备函数
取消挂起CancelDC取消挂起(设备)取消指定设备上下文上的任何挂起操作。
创建设备CreateCompatibleDC设备=创建设备(设备)创建与指定设备兼容的内存设备。只能用于支持栅格操作的设备
驱动设备CreateDCA设备=驱动设备(驱动名,设备名,0,驱动)通过使用指定的名称创建驱动设备
删除设备DeleteDC删除设备(设备)删除指定的设备
驱动信息CreateICA驱动=驱动信息(驱动名,设备名,端口或文件名,驱动)获取有关设备的信息而不创建设备
删除对象DeleteObject删除对象(对象)删除逻辑笔,画笔,字体,位图,区域或调色板,释放与对象相关联的所有系统资源。
视频绘图DrawEscape视频绘图(设备,转义函数,长度,数据)将数据直接发至显示设备,访问通过图形设备界面(GDI)无法直接使用的视频显示的绘图功能。
枚举对象EnumObjects枚举对象(设备,强元,@回调,数据,矩形)枚举可用于指定设备上下文的笔或画笔。直到所有对象都被枚举为止。
设备转码Escape设备转码(设备,转码,长度,输入,输出)访问不能通过GDI直接使用的特定设备的功能。
扩展转码ExtEscape扩展转码(设备,转码,长度,输入,长度,输出)允许应用程序访问通过GDI不可用的特定设备的功能。
当前对象GetCurrentObject设备=当前对象(设备,类型)返回指定类型的当前选定对象。类型有1画笔,2笔刷,5色板,6字体,7位图,14颜色空间
设备项目GetDeviceCaps设备项目(设备,项目)检索指定设备的特定于设备项目的信息。
设备起点GetDCOrgEx设备起点(设备,坐标)获取指定设备的最终转换起始点。
获得对象GetObjectA获得对象(图像,长度,@数据)获取图形对象的信息 位图类 画笔类 笔刷类 色板类 逻辑字体类 扩展笔类
对象类型GetObjectType图型=对象类型(图形对象)获取图形对象的类型
获取布局GetLayout布局=获取布局(设备)获取指定设备的当前布局。1从右到左,2位图传输,4LAYOUT_VBH
设置布局SetLayout设置布局(设备,布局)设置指定设备的当前布局。1从右到左,8位图传输禁用任何反射
固有对象GetStockObject对象=固有对象(类型)获取一个常用笔、画笔、字体或调色板的句柄。常用对象类型
复位设备ResetDCA复位设备(设备,信息)使用指定的信息更新指定的打印机或绘图仪设备
恢复设备RestoreDC恢复设备(设备,状态)通过从先前调用 "保存设备"得到的状态信息来恢复设备,-1是恢复到最近状态
保存设备SaveDC状态=保存设备(设备)将选定对象和图形模式的数据复制到堆栈来保存指定设备的当前状态。
选择对象SelectObject选择对象(设备,对象)在指定的设备中选择一个新对象。包括位图,笔刷,字体,画笔,区域等
枚举对象回调
中文名字英文名称参数作用解释
枚举对象回调EnumObjectsProc2用于处理对象数据。返回0停止枚举
枚举对象回调——成员表
参数lpLogObject整数指向描述对象属性的 画笔类笔刷类 结构的指针。
数据lpData整数传递的应用程序定义数据的指针。
设备对象类型
英文名称数值作用解释
OBJ_PEN1
OBJ_BRUSH2Brush
OBJ_DC3设备上下文
OBJ_METADC4图元文件 DC
OBJ_PAL5调色板
OBJ_FONT6字体
OBJ_BITMAP7Bitmap
OBJ_REGION8区域
OBJ_METAFILE9Metafile
OBJ_MEMDC10内存 DC
OBJ_EXTPEN11扩展笔
OBJ_ENHMETADC12增强型图元文件 DC
OBJ_ENHMETAFILE13增强型图元文件
OBJ_COLORSPACE14颜色空间
常用对象类型
英文名称数值作用解释
WHITE_BRUSH0白色画刷。
LTGRAY_BRUSH1浅灰色画刷。
GRAY_BRUSH2灰色画刷。
DKGRAY_BRUSH3深灰色画刷。
BLACK_BRUSH4黑色画刷。
NULL_BRUSH5空画刷
HOLLOW_BRUSH5空心画刷 。
WHITE_PEN6白色触笔。
BLACK_PEN7黑色触笔。
NULL_PEN8空触控笔不绘制任何内容。
OEM_FIXED_FONT10原始设备制造商 (OEM) 依赖固定间距 (正方形) 字体。
ANSI_FIXED_FONT11Windows 固定间距 (正) 系统字体。
ANSI_VAR_FONT12Windows 可变间距 (比例空间) 系统字体。
SYSTEM_FONT13系统字体。 默认情况下,系统使用系统字体来绘制菜单、对话框控件和文本。不建议使用。默认系统字体为 Tahoma。
DEVICE_DEFAULT_FONT14设备依赖字体。
DEFAULT_PALETTE15默认调色板。 此调色板由系统调色板中的静态颜色组成。
DEFAULT_GUI_FONT17用户界面对象(如菜单和对话框)的默认字体。不建议使用。默认字体为 Tahoma。
SYSTEM_FIXED_FONT16固定间距 (单调) 系统字体。 此库存对象仅用于与 3.0 之前的 16 位 Windows 版本兼容。
DC_BRUSH18纯色画笔。 默认颜色为白色。 可以使用 改笔刷色 函数更改颜色。
DC_PEN19纯色笔颜色。 默认颜色为黑色。 可以使用 改画笔色 函数更改颜色。
设备项值
英文名称数值作用解释
DRIVERVERSION0设备驱动程序版本。
TECHNOLOGY2设备技术。返回定义:0矢量绘图仪;1光栅显示;2光栅打印机;3光栅相机;4字符流;5图元文件;6显示文件
HORZSIZE4物理屏幕的宽度(以毫米为单位)。
VERTSIZE6物理屏幕的高度(以毫米为单位)。
HORZRES8屏幕的宽度(以像素为单位);或 ,对于打印机,页面可打印区域的宽度(以像素为单位)。
VERTRES10屏幕的高度(以光栅线为单位);对于打印机,页面可打印区域的高度(以像素为单位)。
BITSPIXEL12每个像素的相邻颜色位数。
PLANES14颜色平面数。
NUMBRUSHES16特定于设备的画笔数。
NUMPENS18特定于设备的笔数。
NUMMARKERS20特定于设备的标记数。
NUMFONTS22特定于设备的字体数。
NUMCOLORS24设备颜色表中的条目数(如果设备的颜色深度不超过每像素 8 位)。 对于颜色深度更大的设备,返回 -1。
PDEVICESIZE26保留。
CURVECAPS28指示设备的曲线功能的值。0设备不支持曲线。1设备可以绘制圆圈。2设备可以绘制饼楔。4设备可以绘制弦弧。8设备可以绘制省略号。16设备可以绘制宽边框。32设备可以绘制样式边框。64设备可以绘制宽度和样式的边框。128设备可以绘制内部。256设备可以绘制圆角矩形。
LINECAPS30指示设备的线路功能的值,0设备不支持行。2设备可以绘制折线。4设备可以绘制标记。8设备可以绘制多个标记。16设备可以绘制宽线。32设备可以绘制带样式的线条。64设备可以绘制宽度和样式的线条。128设备可以绘制内部。
POLYGONALCAPS32指示设备的多边形功能的值,0设备不支持多边形。1设备可以绘制交替填充多边形。2设备可以绘制矩形。4设备可以绘制绕组填充多边形。8设备可以绘制单个扫描线。16设备可以绘制宽边框。32设备可以绘制样式边框。64设备可以绘制宽度和样式的边框。128设备可以绘制内部。
TEXTCAPS34指示设备的文本功能的值,1设备能够进行字符输出精度。2设备能够进行笔划输出精度。4设备能够进行笔划剪辑精度。8设备能够进行 90 度字符旋转。0x10设备能够进行任何字符轮换。0x20设备可以在 x 方向和 y 方向上独立缩放。0x40设备能够使用双倍字符进行缩放。0x80设备仅对字符缩放使用整数倍数。0x100设备使用任意倍数进行精确的字符缩放。0x200设备可以绘制双重字符。0x400设备可以斜体化。0x800设备可以下划线。0x1000设备可以绘制删除线。0x2000设备可以绘制光栅字体。0x4000设备可以绘制矢量字体。0x8000保留;必须为零。0x10000设备无法使用位块传输进行滚动。请注意,此含义可能与预期相反。
CLIPCAPS36指示设备的剪辑功能的标志。 如果设备可以剪辑为矩形,则为 1。 否则为 0。
RASTERCAPS38指示设备的光栅功能的值。1能够传输位图。2需要条带支持。4支持大于64KB的位图。8能够缩放。0x80能够支持 设置像素 和 设备位图 函数。0x100指定基于调色板的设备。0x200能够支持 指定像素 函数。0x800能够执行 伸缩传输 函数。0x1000能够执行洪水填充。0x2000能够执行 拉伸传输 函数。
ASPECTX40用于线条绘制的设备像素的相对宽度。
ASPECTY42用于线条绘制的设备像素的相对高度。
ASPECTXY44用于线条绘制的设备像素的对角宽度。
SIZEPALETTE104系统调色板中的条目数。 仅当设备驱动程序在 RASTERCAPS 索引中设置RC_PALETTE位时,此索引才有效,并且仅当驱动程序与 16 位 Windows 兼容时才可用。 NUMRESERVED106系统调色板中的保留条目数。 仅当设备驱动程序在 RASTERCAPS 索引中设置RC_PALETTE位时,此索引才有效,并且仅当驱动程序与 16 位 Windows 兼容时才可用。 COLORRES108设备的实际颜色分辨率(以每像素位数为单位)。 仅当设备驱动程序在 RASTERCAPS 索引中设置RC_PALETTE位时,此索引才有效,并且仅当驱动程序与 16 位 Windows 兼容时才可用。 PHYSICALWIDTH110对于打印设备:物理页面的宽度(以设备单位为单位)。 例如,设置为在 8.5-x11 英寸纸张上以 600 dpi 打印的打印机的物理宽度值为 5100 设备单位。 请注意,物理页面几乎总是大于页面的可打印区域,并且永远不会更小。 PHYSICALHEIGHT111对于打印设备:物理页面的高度(以设备单位为单位)。 例如,设置为在 8.5 by-11 英寸纸张上以 600 dpi 打印的打印机的物理高度值为 6600 设备单位。 请注意,物理页面几乎总是大于页面的可打印区域,并且永远不会更小。 PHYSICALOFFSETX112对于打印设备:从物理页面的左边缘到可打印区域的左边缘的距离(以设备单位为单位)。 例如,设置为在 8.5 乘 11 英寸纸张上以 600 dpi 打印的打印机无法在最左侧的 0.25 英寸纸张上打印,其水平物理偏移量为 150 台设备单位。 PHYSICALOFFSETY113对于打印设备:从物理页面的上边缘到可打印区域的上边缘的距离(以设备单位为单位)。 例如,设置为在 8.5x11 英寸纸张上以 600 dpi 打印的打印机无法在最顶层 0.5 英寸的纸张上打印,其垂直物理偏移量为 300 个设备单位。 VREFRESH116对于显示设备:设备的当前垂直刷新率,以每秒周期 (Hz) 。垂直刷新率值为 0 或 1 表示显示硬件的默认刷新率。 此默认速率通常由显示卡或计算机主板上的开关设置,或者由不使用显示功能(如 ChangeDisplaySettings)的配置程序设置。 SCALINGFACTORX114打印机 x 轴的缩放因子。 SCALINGFACTORY115打印机的 y 轴比例系数。 BLTALIGNMENT119首选水平绘制对齐方式,表示为像素的倍数。 为了获得最佳绘制性能,窗口应水平对齐到此值的倍数。 值为零表示设备已加速,并且可以使用任何对齐方式。 SHADEBLENDCAPS120指示设备的着色和混合功能的值。 COLORMGMTCAPS121指示设备的颜色管理功能的值。CM_CMYK_COLOR 设备可以接受 CMYK 颜色空间 ICC 颜色配置文件。0设备不支持 ICM。1设备可以在设备驱动程序或设备本身上执行 ICM。2设备支持 取伽玛斜 和 改伽玛斜 光栅定义
中文名英文名数值作用
黑调色板BLACKNESS$00000042使用与物理调色板中的0号颜色(黑色)填充目标矩形。
白调色板WHITENESS$00FF0062使用与物理调色板中的1号颜色(白色)填充目标矩形。
合并图层CAPTUREBLT$40000000在生成的图像中包括分层在窗口顶部的任何窗口。
反转图形DSTINVERT$00550009反转目标矩形。
合并复制MERGECOPY$00C000CA使用布尔 AND 运算符将源矩形的颜色与当前在目标设备中选择的画笔合并。
反色合并MERGEPAINT$00BB0226使用布尔 OR 运算符将反转源矩形的颜色与目标矩形的颜色合并。
防止镜像NOMIRRORBITMAP$80000000防止对位图进行镜像。
反转复制NOTSRCCOPY$00330008将反转的源矩形复制到目标。
反色混合NOTSRCERASE$001100A6使用布尔 OR 运算符组合源矩形和目标矩形的颜色,然后反转生成的颜色。
填色复制PATCOPY$00F00021将当前在目标设备中选择的画笔复制到目标位图中。
混色复制PATINVERT$005A0049使用布尔 XOR 运算符将当前在目标设备中选择的画笔的颜色与目标矩形的颜色组合在一起。
加色复制PATPAINT$00FB0A09此操作的结果通过使用布尔 OR 运算符与目标矩形的颜色相结合。
降色复制SRCAND$008800C6使用布尔 AND 运算符组合源矩形和目标矩形的颜色。
原图复制SRCCOPY$00CC0020将源矩形直接复制到目标矩形。
反图复制SRCERASE$00440328使用布尔 AND 运算符将目标矩形的反面颜色与源矩形的颜色组合在一起。
混图复制SRCINVERT$00660046使用布尔 XOR 运算符组合源矩形和目标矩形的颜色。
加图复制SRCPAINT$00CC0020使用布尔 OR 运算符组合源矩形和目标矩形的颜色。
尺寸类
中文名字英文名称长度作用解释
尺寸类SIZE8用来存储尺寸大小的信息
尺寸类——成员表
中文英文类型作用解释
cx整数尺寸大小的宽度。
cy整数尺寸大小的高度。
混合类
中文名字英文名称长度作用解释
混合类BLENDFUNCTION4通过指定源位图和目标位图的混合函数来控制混合。
混合类——成员表
混合BlendOp字节源混合操作。 目前,唯一定义的源和目标混合操作是0。
标志BlendFlags字节必须为零。
透明SourceConstantAlpha字节指定要用于整个源位图的透明度值0-255。
格式AlphaFormat字节控制解释源位图和目标位图的方式。1=具有透明通道
顶点类
中文名字英文名称长度作用解释
顶点类TRIVERTEX16包含颜色信息和位置信息。
顶点类——成员表
x整数矩形左上角的 x 坐标(以逻辑单位为单位)。
y整数矩形左上角的 y 坐标(以逻辑单位为单位)。
Red整形x、y 点的颜色信息。
绿Green整形x、y 点的颜色信息。
Blue整形x、y 点的颜色信息。
Alpha整形x、y 点的颜色信息。
三角点类
中文名字英文名称长度作用解释
三角点类GRADIENT_TRIANGLE12指定数组中三个顶点的索引。这三个顶点构成一个三角形。
三角点类——成员表
点1Vertex1整数边相交的三角形的第一个点。
点2Vertex2整数边相交的三角形的第二个点。
点3Vertex3整数边相交的三角形的第三个点。
矩形点类
中文名字英文名称长度作用解释
矩形点类GRADIENT_RECT8指定数组中两个顶点的索引。 这两个顶点构成了矩形的左上角和右下边界。
矩形点类——成员表
左上UpperLeft整数矩形的左上角。
右下LowerRight整数矩形的右下角。
渐变填充模式
英文名称数值作用解释
GRADIENT_FILL_RECT_H0 在此模式下,两个终结点描述一个矩形。 矩形定义为具有常量颜色为左右边缘指定。 GDI 从左到右边缘插入颜色并填充内部。
GRADIENT_FILL_RECT_V1 在此模式下,两个终结点描述一个矩形。 矩形定义为上边缘和下边缘指定的常量颜色。GDI 将颜色从上边缘内插到下边缘,并填充内部。
GRADIENT_FILL_TRIANGLE2 在此模式下, 将 TRIVERTEX 结构的数组以及描述单独三角形的数组索引列表传递给 GDI。
GDI 在三角形顶点之间执行线性内插并填充内部。绘图在 24 和 32 bpp 模式下直接完成。
Dithering 在 16、8、4 和 1 bpp 模式下执行。
位图拉伸模式
英文名称数值作用解释
BLACKONWHITE1使用已消除像素和现有像素的颜色值执行逻辑与运算。单色位图会以牺牲白色像素为代价保留黑色像素。
WHITEONBLACK2使用已消除像素和现有像素的颜色值执行逻辑或操作。单色位图会以牺牲黑色像素为代价保留白色像素。
COLORONCOLOR3删除像素。此模式会删除所有已消除的像素线,而不会尝试保留其信息。
HALFTONE4将源矩形中的像素映射到目标矩形中的像素块。目标像素块上的平均颜色近似于源像素的颜色。
画刷画笔
有两种类型的画刷:逻辑画刷和物理画刷。逻辑画刷是应用程序用于绘制形状的理想位图的说明。物理画刷是设备驱动程序根据应用程序的逻辑画刷定义创建的实际位图。
当应用程序调用创建画刷的函数之一时,它将检索标识逻辑画刷的句柄。 当应用程序将此句柄传递给 选择对象 函数时,相应显示器或打印机的设备驱动程序将创建物理画刷。
当应用程序调用绘图函数来绘制形状时,系统会在绘制操作开始时放置画刷,并将画刷位图中的像素映射到 窗口原点(窗口左上角)的工作区。
系统映射的像素的坐标称为 画刷原点。 默认画刷原点位于画刷位图的左上角,坐标 (0,0) 。 然后,系统跨工作区复制画刷,形成与位图一样高的图案。
复制操作将继续逐行执行,直到填充整个工作区。 但是,画刷图案仅在指定形状的边界内可见。
在某些情况下,不应使用默认画刷原点。 例如,应用程序可能需要使用相同的画刷绘制其父窗口和子窗口的背景,并将子窗口的背景与父窗口的背景混合在一起。
为此,应用程序应通过调用 设置原点 函数并将原点移动到所需的像素数来重置画刷原点。
下图显示了使用应用程序定义的画笔填充的五角星。此图显示了画笔的缩放图像,以及在绘制操作开始时将其映射到的位置。

有四种类型的逻辑画刷: 实心画刷、 库存画刷、 阴影笔和 图案画刷。下图显示了这些画刷。

实心画刷 即纯色画刷,是包含 64 个相同颜色像素的逻辑画刷。 应用程序可以通过调用 创建画刷 函数创建纯色逻辑画刷,并指定所需的画刷颜色。
创建实心画刷后,应用程序可以在其设备上下文中选择它,并使用它来绘制填充形状。例如:
画刷=创建画刷(255);//创建红色画刷
选择对象(设备,画刷);//选择画刷对象到指定的设备
图形设备接口 (GDI) 维护了七个预定义的库存画刷。还有 21 个预定义的库存画刷由窗口管理界面维护 (USER) 。
下图显示了使用七个预定义的库存画刷绘制的矩形。

显示七个框的插图:一个黑色、三个灰色阴影和三个显示为空的框
应用程序可以通过调用 固有对象 函数并指定画刷类型来检索标识七个库存画刷之一的句柄。
窗口管理界面维护的 21 个常用画刷对应于菜单、滚动条和按钮等窗口元素的颜色。 应用程序可以通过调用 取颜色刷 函数并指定系统颜色值来获取标识这些画刷之一的句柄。
应用程序可以通过调用 取元素色 函数来检索与特定窗口元素对应的颜色。 应用程序可以通过调用 改元素色 函数来设置与窗口元素对应的颜色。
GDI 维护有六个预定义的逻辑阴影画刷。 以下矩形是使用六个预定义阴影画刷绘制的。

显示六个框的插图,其中一个由六个阴影画刷分别填充
应用程序可以通过调用 图案笔刷 函数(指定六种阴影样式之一)来创建阴影画刷。
从应用程序定义的位图或独立于设备的位图 (DIB) 创建模式 (或自定义) 画刷。 以下矩形是使用不同的图案画刷绘制的。

显示三个框的插图,每个框都填充了不同的图案
若要创建逻辑模式画笔,应用程序必须首先创建位图。 创建位图后,应用程序可以通过调用 图案笔刷 或 内建画刷 函数来创建逻辑模式画刷,并提供标识位图 (或 DIB) 的句柄。
上图中显示的画刷是从单色位图创建的。 有关位图、DIB 以及创建它们的函数的说明,请参阅 位图
画矩形 函数的名称 (模式块传输) 的缩写意味着此函数只是复制画笔 (或图案) ,直到它填充指定的矩形。 但是, 函数实际上要强大得多。
在复制画笔之前,它通过使用光栅操作 (ROP) ,将图案的颜色数据与视频显示器上现有像素的颜色数据组合在一起。
ROP 是应用于复制画笔的颜色数据位以及显示设备上目标矩形的颜色数据位的按位运算。有 256 个 ROM;但是, 画矩形 函数仅识别需要模式和目标 (不需要源) 。
下表标识了最常见的光栅。
中文名称英文名称示例作用
黑调色板BLACKNESS$00000042将所有输出转换为二进制零。
白调色板WHITENESS$00FF0062将所有输出转换为二进制输出。
反转图形DSTINVERT$00550009反转目标位图。
填色复制PATCOPY$00F00021将当前在目标设备中选择的画笔复制到目标位图中。
混色复制PATINVERT$005A0049使用布尔 XOR 运算符将目标位图与模式组合在一起。

Microsoft 图像颜色管理 (ICM) 可确保在任何设备上尽可能接近其原始意图呈现彩色图像、图形或文本对象,尽管设备之间的成像技术和颜色功能存在差异。
无论是在彩色扫描仪上扫描图像或其他图形、通过 Internet 下载图像、在屏幕上查看或编辑它,还是将其输出到纸张、胶片或其他媒体上,ICM 2.0 都可以帮助你保持颜色一致和准确。

有两种类型的笔:整形笔和几何笔。 整容笔用于需要固定宽度线条和快速绘制线条的应用程序。
例如,CAD 应用程序使用修饰笔生成隐藏的、部分、中心和尺寸线的宽度介于 0.015 到 0.022 英寸之间,而不考虑比例系数。
几何笔用于需要可缩放线条、具有独特端部或联接样式的线条以及比单个像素宽的线条的应用程序。 例如,电子表格应用程序使用几何笔将条形图中的每个条形图定义为宽线。
整容笔的尺寸以设备单位指定。 因此,使用整形笔绘制的线条始终具有固定宽度。 使用整形笔绘制的线条通常比使用几何笔绘制的线条快 3 到 10 倍。 整容笔有三个属性:宽度、样式和颜色。若要创建整容笔,请使用 创建画笔 新建画笔 或 扩展画笔 函数。 若要检索系统管理的三支常用整容笔之一,请使用 固有对象 函数。
(创建笔或获取其中一支常用笔) 的句柄后,使用 选择对象 函数将笔选入应用程序的设备上下文 (DC) 。 从此,应用程序将使用此笔在其工作区中的任何线条绘制操作。
几何笔的尺寸以逻辑单元指定。 因此,使用几何笔绘制的线条可以缩放,也就是说,它们可能看起来更宽或更窄,具体取决于当前世界转换。
除了与整容笔共享的三个属性 (宽度、样式和颜色) 外,几何笔还具有以下四个属性:图案、可选阴影、端部样式和联接样式。
有七个笔属性定义笔的类型及其特征:宽度、样式、颜色、图案、阴影、结束样式和联接样式。 整容笔和几何笔都具有宽度、样式和颜色属性。
只有几何笔具有图案、阴影、结束样式和联接样式属性。 图案和可选的阴影属性通常与画笔相关联,但也可用于几何笔。
中文名称英文名称示例作用
新建笔刷CreateBrushIndirect笔刷=新建笔刷(笔刷类)创建一个具有指定笔刷类结构样式,颜色和模式的逻辑画笔。
内建空刷CreateDIBPatternBrush笔刷=内建空刷(位图信息,格式)创建一个与设备无关的位图(DIB)的模式逻辑画刷。随后可以将刷子选择到与支持光栅操作的设备。格式:0=RGB,1=索引
内建画刷CreateDIBPatternBrushPt笔刷=内建画刷(位图信息,格式)创建一个与设备无关的位图(DIB)的模式逻辑画刷。格式:0=RGB,1=索引
图案笔刷CreateHatchBrush画刷=图案笔刷(样式,颜色)创建一个具有指定阴影图案和颜色的逻辑画笔。
内建笔刷CreatePatternBrush画刷=内建笔刷(内图)使用指定的位图模式创建逻辑画笔。位图可以是"内建位图"创建,也可以是与设备相关的位图。
创建画刷CreateSolidBrush画刷=创建画刷(颜色)创建一个具有指定纯色的实心逻辑画笔。用来绘制填充形状内部的位图。
笔刷原点GetBrushOrgEx笔刷原点(设备,坐标类)获取指定设备的当前画笔原点。
设置原点SetBrushOrgEx设置原点(设备,左,上,旧坐标)设置指定设备的当前画笔原点。
画矩形PatBlt画矩形(设备,左,上,宽,高,光栅)使用当前画笔来绘制给定的矩形。通过使用给定的光栅操作来组合画笔颜色和表面颜色。
创建画笔CreatePen画笔=创建画笔(样式,笔宽,颜色)创建一个具有指定样式,宽度和颜色的逻辑笔。用于在设备上绘制线条和曲线。
新建画笔CreatePenIndirect画笔=新建画笔(画笔类)创建一个逻辑的化妆笔,它具有在画笔类结构中指定的样式,宽度和颜色。
扩展画笔ExtCreatePen扩展画笔(样式,笔宽,笔刷类,长度,样式数组)创建一个具有指定样式,宽度和画笔属性的逻辑化妆或几何笔。样式是画笔样式、类型、端帽和联接的组合
阴影图案样式
英文名称数值作用解释
HS_HORIZONTAL0水平阴影
HS_VERTICAL1垂直阴影
HS_FDIAGONAL2从左到右阴影下 45 度
HS_BDIAGONAL3从左到右阴影向上 45 度
HS_CROSS4横向缩放与纵向阴影线
HS_DIAGCROSS545 度交叉截断
画笔样式
英文名称数值作用解释
PS_SOLID0触控笔是实心的。
PS_DASH1触控笔虚线。 仅当笔宽度为 1 或更少(以设备单位为单位)时,此样式才有效。
PS_DOT2笔被点点。 仅当笔宽度为 1 或更少(以设备单位为单位)时,此样式才有效。
PS_DASHDOT3笔具有交替的短划线和点。 仅当笔宽度为 1 或更少(以设备单位为单位)时,此样式才有效。
PS_DASHDOTDOT4笔具有交替的短划线和双点。 仅当笔宽度为 1 或更少(以设备单位为单位)时,此样式才有效。
PS_NULL5笔不可见。
PS_INSIDEFRAME6触控笔是实心的。在采用边框的绘图中图形的尺寸会缩小,使其完全适合边界矩形,同时考虑笔的宽度。 这仅适用于几何笔
PS_USERSTYLE7笔使用用户提供的样式数组。
PS_ALTERNATE8笔设置其他像素。(此样式仅适用于整容笔。)
画笔类型
英文名称数值作用解释
PS_COSMETIC0笔是整容的。
PS_GEOMETRIC0x10000笔是几何的。
画笔端帽
英文名称数值作用解释
PS_ENDCAP_ROUND0末端是圆的。
PS_ENDCAP_SQUARE0x100末端是正方的。
PS_ENDCAP_FLAT0x200末端是平的。
画笔联接
英文名称数值作用解释
PS_JOIN_ROUND0联接是圆的。
PS_JOIN_BEVEL0x1000联接是斜切的。
PS_JOIN_MITER0x2000当前限制内进行斜接。超出限制将进行斜角。
笔刷类
中文名字英文名称长度作用解释
笔刷类LOGBRUSH12包含了笔刷数据的信息
笔刷类——成员表
样式lbStyle整数指定画笔样式。BS_SOLID等
颜色lbColor整数指定要绘制画笔的颜色。中空笔刷和内存指定无效
填充lbHatch整数指定一个填充样式。HS_CROSS等
画笔类
中文名字英文名称长度作用解释
画笔类LOGPEN12包含了画笔数据的信息
画笔类——成员表
样式lopnStyle整数指定画笔样式。PS_SOLID等
宽度lopnWidth.x整数指定要绘制画笔的宽度
笔宽lopnWidth.y整数未使用,设计的问题
颜色lopnColor整数指定画笔的颜色
色位类
中文名字英文名称长度作用解释
色位类COLORBYTES4描述了由红色,绿色,蓝色和透明色的颜色位。
色度类——成员表
蓝位BlueByte字节绿色位值。
绿位GreenByte字节绿色位值。
红位RedByte字节红色位值。
透明AlphaByte字节透明色位值
字体文字
字体是共享共同设计的字符和符号的集合。 此设计的三个主要元素称为字体、样式和大小。
字体
术语“字体”是指字体中字符和符号的特定特征,例如构成字符的粗笔和细笔划的宽度,以及是否存在衬线。 衬线是未连接笔划末尾的短十字线。 没有衬线的字体或字样通常称为无衬线字体。
样式
术语样式是指字体的粗细和倾斜。 字体粗细范围从细到黑色。 下面是从最轻到重) (字体的可能权重列表:
薄特轻轻正常中等半Bold 粗特外博尔德重
三个术语对字体倾斜进行分类:罗马、倾斜和斜体。
罗马字体中的字符是直立的。 倾斜字体中的字符是人为倾斜的。 倾斜是通过对罗马字体中的字符执行剪切转换来实现的。 斜体字体中的字符确实倾斜,在设计时显示出来。
大小
字号是一个不精确值。 通常可以通过测量从小写 g 底部到相邻大写 M 顶部的距离来确定,如下图所示。

显示小写 g 和大写 m 的插图
字体的大小以称为磅的单位指定。 一个点是一英寸的 .013837。 按照皮埃尔·西蒙·富尼尔设计的点系统,通常的做法是将点近似为1/72英寸。
字体系列是一组具有常见笔划宽度和衬线特征的字体。 有五个字体系列。 第六个系列允许应用程序使用默认字体。 下表描述了字体系列。
指定新奇字体。 例如,旧英语。0指定带衬线或不带衬线的空白字体。 Monospace 字体通常采用新式字体;示例包括 Pica、Elite 和 Courier New。指定带衬线的比例字体。 例如,泰晤士新罗马。指定设计为类似于手写的字体;示例包括 Script 和 Cursive。指定不带衬线的比例字体。 例如 Arial。
字系英文名数值说明
装饰FF_DECORATIVE80
无关FF_DONTCARE指定泛型系列名称。 当有关字体的信息不存在或无关紧要时,将使用此名称。 使用默认字体。
新式FF_MODERN48
罗马FF_ROMAN16
脚本FF_SCRIPT64
瑞士FF_SWISS32
系列中的字体按大小 (10 磅、24 磅等进行区分,) 和样式 (常规、斜体等) 。
应用程序可以使用四种不同类型的字体技术来显示和打印文本:光栅、矢量字体、真字体、开放字体
这些字体之间的差异反映了每个字符或符号的 字形 在相应的字体资源文件中的存储方式:
在光栅字体中,字形是系统用来在字体中绘制单个字符或符号的位图。
在矢量字体中,字形是线条端点的集合,用于定义系统用于在字体中绘制字符或符号的线段。
在 TrueType 和 OpenType 字体中,字形是线条和曲线命令的集合以及提示的集合。
系统使用线条和曲线命令为 TrueType 或 Microsoft OpenType 字体中的字符或符号定义位图的轮廓。 系统使用提示调整用于绘制字符或符号的曲线的线条和形状的长度。
这些提示和相应的调整基于用于减小或增加位图大小的缩放量。 OpenType 字体等效于 TrueType 字体,但除了 TrueType 字形定义外,OpenType 字体还允许 PostScript 字形定义。
由于光栅字体中每个字形的位图都是针对设备的特定分辨率设计的,因此光栅字体通常被视为依赖于设备。
另一方面,矢量字体不依赖于设备,因为每个字形都存储为可缩放线条的集合。 但是,矢量字体的绘制速度通常比光栅字体或 TrueType 和 OpenType 字体更慢。
TrueType 和 OpenType 字体提供相对快速的绘制速度和真正的设备独立性。 通过使用与字形关联的提示,开发人员可以向上或向下缩放 TrueType 或 OpenType 字体中的字符,并保持其原始形状。
如前所述,字体的字形存储在字体资源文件中。 字体资源文件实际上是只包含数据的 DLL,没有代码。 对于光栅字体和矢量字体,此数据分为两个部分:描述字体指标的标题和字形数据。
光栅字体或矢量字体的字体资源文件由 .fon 文件扩展名标识。 对于 TrueType 和 OpenType 字体,每种字体有两个文件:第一个文件包含相对较短的标题,第二个文件包含实际字体数据。
第一个文件由 .fot 扩展名标识,第二个文件由 .ttf 扩展名标识。
所有字体都使用字符集。 字符集包含标点符号、数字、大写和小写字母以及所有其他可打印字符。 字符集的每个元素都由一个数字标识。
大多数使用的字符集都是美国 ASCII 字符集的超集,它为 32 到 127 的 96 个数值定义字符。 有五个主要的字符集组:
Windows 字符集
Windows 字符集是最常用的字符集。 它实质上等效于 ANSI 字符集。 空白字符是字符集中的第一个字符。 它具有十六进制值0x20 。字符集中的最后一个字符具有十六进制值0xFF。
许多字体指定默认字符。每当对不在字体中的字符发出请求时,系统会提供此默认字符。许多使用Windows字符集的字体将句点(.)指定为默认字符。TrueType和OpenType字体通常使用打开框作为默认字符。
字体使用称为四边形的断字符来分隔单词和对齐文本。 大多数使用 Windows 字符集的字体指定空白字符将用作断字符。
Unicode 字符集
Windows 字符集使用 8 位表示每个字符;因此,可以使用 8 位表示的最大字符数为 256 (2^8) 。 这通常足以满足西方语言的需求,包括法语、德语、西班牙语和其他语言中使用的音调符号。
但是,东部语言使用数千个单独的字符,无法使用单字节编码方案进行编码。 随着计算机商业的激增,开发了双字节编码方案,以便字符可以以 8 位、16 位、24 位或 32 位序列表示。
这需要复杂的传递算法:即便如此,使用不同的代码集可能会在两台不同的计算机上产生完全不同的结果。
为了解决多种编码方案的问题,开发了用于数据表示的 Unicode 标准。 Unicode 是 16 位字符编码方案,可以表示 65,536 (2^16) 字符,这足以包含当今计算机商业中的所有语言,
以及标点符号、数学符号和扩展空间。 Unicode 为每个字符建立唯一的代码,以确保字符转换始终准确。
OEM 字符集
OEM 字符集通常用于用于屏幕显示的全屏 MS-DOS 会话中。 在 OEM、美国 ASCII 和 Windows 字符集中,字符 32 到 127 通常相同。
OEM 字符集中的其他字符 (0 到 31 和 128 到 255) 对应于可以在全屏 MS-DOS 会话中显示的字符。 这些字符通常与 Windows 字符不同。
符号字符集
符号字符集包含通常用于表示数学公式和科学公式的特殊字符。
特定于供应商的字符集
许多打印机和其他输出设备提供基于不同于 Windows 和 OEM 集的字符集的字体,例如,扩展二进制编码的十进制交换代码 (EBCDIC) 字符集。
若要使用这些字符集之一,打印机驱动程序将从 Windows 字符集转换为特定于供应商的字符集。
仅当该字体驻留在指定的设备上或安装在系统字体表中时,应用程序才能使用该字体来绘制文本。 字体表是一个内部数组,用于标识应用程序可用的所有非设备字体。
应用程序可以通过调用 枚举字库 或 字体选框 函数来检索当前安装在设备上或存储在内部字体表中的字体的名称。
若要临时安装字体,请调用 添加字体 或 资源字体 这些函数加载存储在字体资源文件中的字体。 但是,这是一个临时安装,因为在重新启动后,字体将不存在。
当应用程序使用完已安装的字体时,它必须通过调用 移除字体 函数删除该字体。
每当应用程序调用添加和删除字体资源的函数时,它还应调用 发送消息 函数,并将 字库更新 消息发送到系统中的所有顶级窗口。 此消息通知其他应用程序,已由添加或删除字体的应用程序更改了内部字体表。
通常,字体包含在单个字体资源文件中。 但是,某些字体的信息分散在多个文件中。 例如,键入 1 多个主控字体需要两个文件:字体指标的 .pfm、字体位的 .pfb
若要将多个文件中的字体添加到系统,请使用 添加字体 或 资源字体 函数。 这些函数中的 文件名 参数必须指向包含由垂直条或管道分隔的文件名的字符串 ( | ).。 例如,"abcxxxxx.pfm|abcxxxxx.pfb."
文本输出是工作区中最常见的图形输出类型;应用程序以不同的方式使用它。 Word处理和桌面发布应用程序使用格式化文本创建文档;电子表格应用程序使用文本、数字和符号指定公式、标签列和列表值;
数据库应用程序使用文本创建记录和显示查询,CAD 应用程序使用文本标记对象和显示尺寸。
在应用程序的工作区和打印纸页上,有一些用于设置文本格式和绘制文本的功能。 这些函数可分为两类:一类是设置文本格式 (或准备输出) ,二是实际绘制文本。
格式设置函数对齐文本、设置字符间距、设置文本和文本背景颜色,以及对齐文本。 绘图函数 (或符号) 或整个文本字符串绘制单个字符。
在 Microsoft Windows 中工作时,使用回车符/换行符对 (\r\n) 指定硬换行符。
格式设置函数可分为三类:检索或设置设备上下文 的文本格式设置属性 的类别、检索 字符宽度的函数 和检索字符串宽度和高度的函数。
文本对齐
应用程序可以使用 对齐文本 函数指定在调用其中一个绘图函数时,系统应如何定位文本字符串中的字符。 此函数可用于定位标题、页码、标注等。
系统通过将引用点与当前光标位置或作为参数传递给其中一个文本绘制函数之一的点对齐来定位文本字符串。 对齐文本 函数允许应用程序指定此引用点的位置。
设备上下文的默认文本对齐方式是环绕文本的虚矩形的左上角。 应用程序可以通过调用 GetTextAlign 函数检索任何设备上下文的当前文本对齐设置。
字符间间距
应用程序可以使用 间隔字符 函数更改指定设备上下文中所有文本输出操作的字符间间距。 下图显示了通过调用 写字到 函数绘制两次的文本字符串。 第二次绘制文本之前,调用 间隔字符 函数以递增字符间间距。

插图将同一文本推倒两次:首先使用正常字符间间距,然后使用较宽的间距
任何设备上下文的默认字符间间距值为零。 应用程序可以通过调用 字符间距 函数检索设备上下文的当前字符间间距值。
文本行对齐 应用程序可以使用 文字尺寸 和 断句空间 函数来对齐文本行。 文本对齐是任何桌面发布和大多数字处理应用程序中的常见操作。 文字尺寸 函数计算文本字符串的宽度和高度。
计算宽度后,应用程序可以调用 断句空间 函数,以在文本行中的每个单词之间分配额外的间距。
文本和背景色 应用程序可以使用 文本改色 函数设置在其窗口的工作区中绘制的文本的颜色,以及在彩色打印机上绘制的文本的颜色。
应用程序可以使用 改背景色 函数设置每个字符后显示的颜色,并使用 改背景色 函数指定系统应如何将所选背景色与视频显示器上的当前颜色混合。
显示设备上下文的默认文本颜色为黑色;默认背景色为白色;默认后台模式为 OPAQUE。 应用程序可以通过调用 文字颜色 函数检索设备上下文的当前文本颜色。
应用程序可以通过调用 取背景色 函数检索设备上下文的当前背景色,并通过调用 取背景色 函数检索当前背景模式。
应用程序在执行此类任务时需要检索字符宽度数据,例如将文本字符串拟合到页面或列宽。 应用程序可以使用四个函数来检索字符宽度数据。 其中两个函数检索字符高级宽度,其中两个函数检索实际字符宽度数据。
应用程序可以使用 字符宽度 和 字隔宽度 函数检索文本字符串中单个字符或符号的前进宽度。 高级宽度是视频显示器上的光标或打印机上的打印头在打印文本字符串中的下一个字符之前必须前进的距离。
字符宽度 函数将高级宽度作为整数值返回。 如果需要更高的精度,应用程序可以使用 字隔宽度 函数检索小数高级宽度值。
应用程序可以使用 真字宽度 和 连字宽度 函数检索实际字符宽度数据。 连字宽度 函数适用于所有字体。 真字宽度 函数仅适用于 TrueType 和 OpenType 字体。
除了检索单个字符的字符宽度数据外,应用程序还需要计算整个字符串的宽度和高度。 两个函数检索字符串宽度和高度度量: 文字尺寸 和 文字宽高。
如果字符串不包含制表符,应用程序可以使用 文字尺寸 函数检索指定字符串的宽度和高度。 如果字符串包含制表符,则应用程序应调用 文字宽高 函数。
应用程序可以使用 文本尺寸 函数执行换行操作。 此函数返回指定字符串中适合指定空格的字符数。
字体升序和降序
某些应用程序使用字体的最大升序符和降序符确定不同大小文本行之间的行距。 应用程序可以通过调用 文字指标 函数,然后检查 物理字体类 的 上升 和 下降 成员来检索这些值。
最大上升和下降不同于版式上升和下降。 在 TrueType 和 OpenType 字体中,版式上升和下降通常是字形的顶部和字形的底部。
应用程序可以通过调用 文本指标 函数并检查 字体指标类 结构的 果上 和 果下 成员中的值,检索 TrueType 或 OpenType 字体的版式升序和降序。
字体尺寸
应用程序可以通过调用 文本指标 函数来检索 TrueType 或 OpenType 字体的物理尺寸。 应用程序可以通过调用 文字指标 函数来检索任何其他字体的物理尺寸。
若要确定输出设备的尺寸,应用程序可以调用 设备项目 函数。 设备项目 返回物理维度和逻辑维度。
逻辑英寸是系统用来在屏幕上显示清晰字体的度量值,比物理英寸大大约 30% 到 40%。 使用逻辑英寸会排除屏幕和打印机输出之间的完全匹配。
开发人员应注意,屏幕上的文本不仅仅是将显示在页面上的文本的缩放版本,尤其是在图形合并到文本中时。

绘制文本

在应用程序选择适当的字体、设置所需的文本格式设置选项并计算文本字符串所需的字符宽度和高度值后,它可以通过调用任何文本输出函数开始绘制字符和符号:绘制文本、绘制字符、绘制文字、制表写字、写字到。
当应用程序调用其中一个函数时,操作系统会将调用传递给图形引擎,而图形引擎又将调用传递给相应的设备驱动程序。 在设备驱动程序级别,所有这些调用都受驱动程序自己的 绘制字符 或 写字到 函数的一个或多个调用支持。
应用程序将通过调用 绘制字符 实现最快的执行,该调用会快速转换为设备的 绘制字符 调用。 但是,在某些情况下,应用程序应调用其他三个函数之一;
例如,若要在指定矩形区域的边框内绘制多行文本,调用 绘制文本 会更有效。 若要创建具有对齐文本列的多列表,调用 制表写字 会更有效。

复杂脚本

虽然前面讨论的函数适用于多种语言,但它们可能无法满足复杂脚本的需求。 复杂脚本 是其打印形式不以简单方式呈现的语言。
例如,复杂脚本可能允许双向呈现、字形的上下文调整或组合字符。由于这些特殊要求,文本输出的控制必须非常灵活。
显示文本 写字到、绘制字符、制表写字、 绘制文本 和 文本尺寸 的函数已扩展为支持复杂脚本。 通常,此支持对应用程序是透明的。
但是,应用程序应将字符保存在缓冲区中,并一次显示整行文本,以便复杂的脚本整形模块可以使用上下文正确重新排序和生成字形。
此外,由于字形的宽度可能因上下文而异,因此应用程序应使用 文本尺寸 来确定行长,而不是使用缓存字符宽度。
此外,复杂的脚本感知应用程序应考虑为其应用程序添加对从右到左阅读顺序和右对齐的支持。 可以使用以下代码在左和右之间切换阅读顺序或对齐方式:
对齐文本(设备,0);//左对齐
对齐文本(设备,2);//右对齐
对齐文本(设备,10);//2+8=右下对齐
文本对齐方式
英文名称作用解释
TA_TOP0参考点将位于边框的上边缘。
TA_BASELINE24参考点将位于文本的基行上。
TA_BOTTOM8参考点将位于边框的下边缘。
TA_CENTER6参考点将与边框中心水平对齐。
TA_LEFT0参考点将位于边框的左边缘。
TA_RIGHT2参考点将位于边框的右边缘。
TA_NOUPDATECP0每次文本输出调用后,当前位置不会更新。引用点将传递给文本输出函数。
TA_RTLREADING256中东语言版本:文本按从右到左的阅读顺序排列,而不是默认的从左到右的顺序。仅适用希伯来语或阿拉伯语时。
TA_UPDATECP1每次文本输出调用后,当前位置都会更新。 当前位置用作参考点。
中文名称英文名称示例作用
内存字体AddFontMemResourceEx内存字体(资源,大小,0,字体)将字体资源从内存图像添加到系统。
资源字体AddFontResourceEx资源字体(文件,特征,0)将指定文件中的字体资源添加到系统。特征:0x10当前进程有效,0x20所有进程有效
添加字体AddFontResourceA添加字体(文件名)添加字体到系统,可以是.FON .FNT .TTF .TTC .fot .otf .mmm .pfb .pfm
创建字体CreateFontA创建字体(15,0,0,0,0,0,0,0,0,0,0,0,0,"宋体")字体=创建字体(逻辑高度,字符宽度,擒纵角,取向角,粗细,斜体,下划线,删除线,字符集,输出精度,剪辑精度,输出质量,间距和字体,字体名称);
新建字体CreateFontIndirectA字体=新建字体(逻辑字体)逻辑字体类结构创建一个字体。
选建字体CreateFontIndirectExA字体=选建字体(枚举字体)从枚举字体结构中选择创建一个字体。
字体资源CreateScalableFontResourceA字体资源(权限,字体资源名,缩放字体名,缩放字体路径)为可缩放的字体(.TTF)创建一个字体资源文件(.FOT)。权限:0读写,1只读
枚举字库EnumFontFamiliesA枚举字库(设备,字体名,@回调,附加)枚举指定设备上可用的指定字体系列中的字体。回调
枚举字集EnumFontFamiliesExA枚举字集(设备,逻辑字体,@回调,附加,0)枚举系统中与逻辑字体类结构指定的字体特征匹配的所有唯一命名字体。回调
枚举字体EnumFontsA枚举字体(设备,字体名,@回调,附加)列举指定设备上可用的字体。回调
字体数据GetFontData字体数据(设备,指标表名,偏移量,@数据,大小)检索 TrueType 字体的字体指标数据。
设备字体GetFontLanguageInfo设备字体(设备)返回有关指定设备的当前选定字体的信息
宽字范围GetFontUnicodeRanges宽字范围(设备,宽字码类)返回有关字体支持哪些 宽字码类 字符的信息。
定义字符EnableEUDC定义字符(真)启用或禁用对最终用户定义字符的支持 (EUDC) 。
绘制字符ExtTextOutA绘制字符(设备,左,上,选项,矩形,文字,字数,间距)使用当前选定的字体绘制一个字符串。可选用于剪裁/不透明的矩形
取纵横比GetAspectRatioFilterEx取纵横比(设备,尺寸类)获取当前纵横比筛选器的设置。纵横比是由给定装置上的像素的宽度和高度形成的比率。为两个整数组成的尺寸类结构
真字宽度GetCharABCWidthsA真字宽度(设备,首字,尾字,字宽类)从当前 TrueType 字体检索指定范围内连续字符的宽度(以逻辑单位为单位)。
连字宽度GetCharABCWidthsFloatA连字宽度(设备,首字,尾字,连宽类)从当前字体检索指定范围内连续字符的宽度(以逻辑单位为单位)。
字形宽度GetCharABCWidthsI字形宽度(设备,首字,尾字,索引组,字宽类)从当前 TrueType 字体检索指定范围内连续字形索引的宽度。首尾字可以用索引数组代替
字符宽度GetCharWidth32A字符宽度(设备,首字,尾字,@宽度)获取当前字体在指定范围内的连续字符的宽度。
字间宽度GetCharWidthA字间宽度(设备,首字,尾字,@宽度)当前字体检索指定范围内连续字符的宽度(以逻辑坐标表示)。
字隔宽度GetCharWidthFloatA字隔宽度(设备,首字,尾字,@宽度)从当前字体检索指定范围内连续字符的小数宽度。
字序宽度GetCharWidthI字序宽度(设备,首字,尾字,索引组,@宽度)从当前字体检索指定范围内连续字形索引的宽度。首尾字可以用索引数组代替
字符信息GetCharacterPlacementA字符信息(设备,文字,字数,结果,标志)获取字符串的信息,例如字符宽度,插入符号定位,字符串中的排序和字形渲染。
文字取形GetGlyphIndices文字取形(设备,文字,字数,@数组,形式)将一个字符串转为字形数组。用来确定一种字体里是否存在某个字形。形式:1=用0xffff标记不受支持的字形
文字轮廓GetGlyphOutlineA文字轮廓(设备,字符,格式,字格类,大小,@数据,矩阵)检索选定到指定设备上下文中的 TrueType 字体字符的轮廓或位图。
间距调对GetKerningPairsA间距调对(设备,对数,@数组)获取指定设备上下文的当前选定字体的字符-字距调整对。写0用来获取缓冲区大小
文本指标GetOutlineTextMetricsA文本指标(设备,大小,@指标)获取当前设备使用字体的文本指标。指标写0用来获取缓冲区大小
真字状态GetRasterizerCaps真字状态(设备,@状态,大小)返回指示是否在系统中安装 TrueType 字体的状态标志
字集标识GetTextCharset字集标识(设备)检索当前选定到指定设备上下文中的字体的字符集标识符。
字集信息GetTextCharsetInfo字集信息(设备,@信息,0)检索有关当前选定到指定设备上下文中的字体的字符集的信息。信息写0可返回字符集标识
字空格组GetTextExtentExPointA字空格组(设备,文字,字长,最宽,@数量,@数组,尺寸类)检索指定字符串中适合指定空格的字符数,并使用其中每个字符的文本范围填充数组。对换行计算很有用。
字空点组GetTextExtentExPointI字空点组(设备,字组,字数,最宽,@数量,@数组,尺寸类)检索指定字符串中适合指定空格的字符数,并使用其中每个字符的文本范围填充数组。对换行计算很有用。
文本尺寸GetTextExtentPointA文本尺寸(设备,文字,长度,尺寸)计算指定文本字符串的宽度和高度(尺寸类)。
字符尺寸GetTextExtentPointI字符尺寸(设备,数组,数量,尺寸)计算指定字形索引数组的宽度和高度(尺寸类)。
文本对齐GetTextAlign方式=文本对齐(设备)获取指定设备的文本对齐方式
对齐文本SetTextAlign对齐文本(设备,方式)设置指定设备的文本对齐方式
字符间距GetTextCharacterExtra间距=文本对齐(设备)获取指定设备的文本字符间距。
间隔字符SetTextCharacterExtra间隔字符(设备,间距)设置指定设备的文本字符间距。
文字颜色GetTextColor颜色=文字颜色(设备)获取指定设备的文本颜色。
文本改色SetTextColor文本改色(设备,颜色)设置指定设备的文本颜色。
文字尺寸GetTextExtentPoint32A文字尺寸(设备,字符,长度,尺寸)计算指定文本字符串的宽度和高度(尺寸类)。
字体名称GetTextFaceA文字名称(设备,长度,@名称)获取指定设备选择的字体的字体名称。
文字指标GetTextMetricsA文字指标(设备,@指标)使用当前所选字体的指标填充指定的缓冲区。
绘制文字PolyTextOutA绘制文字(设备,字组,组数)使用指定的设备的字体和文本颜色绘制多个字符串
删除字体RemoveFontMemResourceEx删除字体(字体资源的句柄)从内存图像文件中删除添加的字体。
移除字体RemoveFontResourceA移除字体(字体资源名)从系统字体表中除去在指定文件里的字体。
清除字体RemoveFontResourceExA清除字体(字体资源名,特征,0)从系统字体表中除去在指定文件里的字体。特征:0x10当前进程有效,0x20所有进程有效
映射算法SetMapperFlags映射算法(设备,是否匹配)更改字体映射器在将逻辑字体映射到物理字体时使用的算法。
断句空间SetTextJustification断句空间(设备,大小,行数)指定系统应添加到文本字符串中的断句字符的空间量。 写字到 或 绘制字符 函数都需要空间
写字到TextOutA写字到(设备,左,上,文字,字数)使用当前选定的字体在指定的位置写入一个字符串。
转换字集TranslateCharsetInfo转换字集(源,信息,标志)转换字符集信息并将目标结构的所有成员设置为适当的值。标志:1源是字符集,2源是代码页,3源是代码页位域,0x1000源是语言标识
字形矩阵类
中文名字英文名称长度作用解释
字形矩阵类MAT212包含 文字轮廓 函数使用的转换矩阵的值。
字形矩阵类——成员表
行1列1eM11分数类3 乘 3 转换矩阵的 M11 分量固定点值。
行1列2eM12分数类3 乘 3 转换矩阵的 M12 分量固定点值。
行2列1eM21分数类3 乘 3 转换矩阵的 M21 分量固定点值。
行2列2eM22分数类3 乘 3 转换矩阵的 M22 分量固定点值。
分数类
中文名字英文名称长度作用解释
分数类FIXED4包含定点实数的整数部分和小数部分。
分数类——成员表
value整形数字的整数部分。
fract整形数字的小数部分。
字宽类
中文名字英文名称长度作用解释
字宽类ABC12包含 TrueType 字体中字符的宽度。
字宽类——成员表
abcA整数字符的 A 间距。 A 间距是在绘制字符标志符号之前要添加到当前位置的距离。
abcB整数字符的 B 间距。 B 间距是字符标志符号的绘制部分的宽度。
abcC整数字符的 C 间距。 C 间距是要添加到当前位置以便为字符标志符号的右侧提供空白的距离。
连宽类
中文名字英文名称长度作用解释
连宽类ABCFLOAT12包含字体字符的 A、B 和 C 宽度。
连宽类——成员表
abcA小数字符的 A 间距。 A 间距是在绘制字符标志符号之前要添加到当前位置的距离。
abcB小数字符的 B 间距。 B 间距是字符标志符号的绘制部分的宽度。
abcC小数字符的 C 间距。 C 间距是要添加到当前位置以便为字符标志符号的右侧提供空白的距离。
宽字码类
中文名字英文名称长度作用解释
宽字码类GLYPHSET20+包含有关一系列 宽字符 码位的信息。
宽字码类——成员表
大小cbThis整数此结构的大小(以字节为单位)。
位数flAccel整数描述字形索引最大大小的标志。1=将字形索引视为 8 位宽值。0=16位宽值
码数cGlyphsSupported整数字体中支持的 Unicode 码位总数。
组数cRanges整数范围 中的宽范围类的总数。
范围ranges[1]宽范围类字体中支持的宽范围类的数组。
宽范围类
中文名字英文名称长度作用解释
宽范围类WCRANGE4指定 Unicode 字符的范围。
宽范围类——成员表
低码wcLow整形支持的 Unicode 码位范围内的低 Unicode 码位。
位数cGlyphs整形此范围内支持的 Unicode 码位数。
字格类
中文名字英文名称长度作用解释
字格类GLYPHMETRICS20包含有关字符单元格中字形的位置和方向的信息。
字格类——成员表
框宽gmBlackBoxX整数完全包围字形的最小矩形的宽度 (其黑框) 。
框高gmBlackBoxY整数完全包围字形的最小矩形的高度 (其黑盒) 。
左边gmptGlyphOrigin.x整数完全包围字形的最小矩形左上角的 x 坐标。
顶边gmptGlyphOrigin.y整数完全包围字形的最小矩形左上角的 y 坐标。
横距gmCellIncX整形从当前字符单元格的原点到下一个字符单元格的原点的水平距离。
纵距gmCellIncY整形从当前字符单元格的原点到下一个字符单元格的原点的垂直距离。
字符集类
中文名字英文名称长度作用解释
字符集类CHARSETINFO32包包含有关字符集的信息。
字符集类——成员表
字集ciCharset整数字符集值。
码页ciACP整数Windows ANSI 代码页标识符。
签名fs字体签名类用于标识 Unicode 子范围和特定 Windows ANSI 字符集/代码页的 字体签名类 结构。
转换字集标志
英文名称数值作用解释
TCI_SRCCHARSET1源 包含低字中的字符集值,在高字中包含 0。
TCI_SRCCODEPAGE2源 是低字中的代码页标识符,在高字中为 0。
TCI_SRCFONTSIG3源是 字体签名类 结构的代码页位域部分。
TCI_SRCLOCALE0x1000源 是 LCID 或键盘布局的语言标识符 (区域设置标识符)。 如果它是语言标识符,则该值位于低字中。
字体信息值
英文名称数值作用解释
GCP_DBCS1字符集为 DBCS。
GCP_DIACRITIC0x0100字体/语言包含音调符号字形。
FLI_GLYPHS0x40000字体包含通常无法使用代码页访问的额外字形。
GCP_ERROR0x8000返回字体信息时发生错误。
GCP_GLYPHSHAPE0x10字体/语言包含每个码位或每个码位组合的多个字形 (支持定形和/或连接) ,字体包含高级字形表,为额外形状提供额外的字形。
GCP_KASHIDA0x0400字体/语言允许 Kashidas。
GCP_LIGATE0x20字体/语言包含可以替换特定字符组合的连字形。
GCP_USEKERNING8该字体包含字距调整表,可用于在字符和字形之间提供更好的间距。
GCP_REORDER2语言需要重新排序以显示,例如希伯来语或阿拉伯语。
字体轮廓格式
英文名称数值作用解释
GGO_BEZIER3函数将曲线数据检索为三次方贝塞尔样条, (不采用二次样条格式) 。
GGO_BITMAP1函数检索字形位图。 有关内存分配的信息,请参阅以下“备注”部分。
GGO_GLYPH_INDEX0x80指示 uChar 参数是 TrueType 字形索引,而不是字符代码。 有关 Glyph 索引的其他说明,请参阅 ExtTextOut 函数。
GGO_GRAY2_BITMAP4函数检索包含五个灰度级别的字形位图。
GGO_GRAY4_BITMAP5函数检索包含 17 级灰色的字形位图。
GGO_GRAY8_BITMAP6函数检索包含 65 级灰色的字形位图。
GGO_METRICS0函数仅检索 lpgm 指定的 GLYPHMETRICS 结构。 忽略 lpvBuffer。 此值在失败时影响函数返回值的含义;请参阅返回值部分。
GGO_NATIVE2函数检索光栅器本机格式的曲线数据点,并使用字体的设计单位。
GGO_UNHINTED0x100函数仅返回未受限制的大纲。 此标志仅适用于 GGO_BEZIER 和 GGO_NATIVE。
绘多字类
中文名字英文名称长度作用解释
绘多字类POLYTEXTA40描述如何绘制文本字符串。
绘多字类——成员表
x整数字符串的水平参考点。 字符串使用当前文本对齐模式与此点对齐。
y整数字符串的垂直引用点。 字符串使用当前文本对齐模式与此点对齐。
长度n整数字符串的长度。
文字lpstr整数绘制的文本字符串的指针。
标志uiFlags整数指定字符串是不透明(2)还是剪裁成矩形(4),以及字符串是否附带字符宽度值数组。
矩形rcl矩形类包含不透明矩形或剪裁矩形的尺寸的矩形结构。不剪裁成矩形可忽略
宽组pdx整数指向包含字符串中每个字符的宽度值的数组的指针。
真字状态类
中文名字英文名称长度作用解释
真字状态类RASTERIZER_STATUS6包含有关是否安装了 TrueType 的信息。
真字状态类——成员表
大小nSize整形结构的大小(以字节为单位)。
标志wFlags整形指定是否至少安装一种真字体(1)以及是否启用真字体(2)。 如果 TrueType 在系统上,此值为1、2或两者。
语言nLanguageID整形系统的 Setup.inf 文件中的语言。
字距对类
中文名字英文名称长度作用解释
字距对类KERNINGPAIR8定义字距对。
字距对类——成员表
首字wFirst整形字距调整对中第一个字符的字符代码。
次字wSecond整形字距调整对中第二个字符的字符代码。
差额iKernAmount整数如果它们以相同的字体和大小并排显示,则此对将被划线的量。
此值通常为负值,因为对字距调整通常会导致设置两个字符比正常更紧密。
该值以逻辑单元指定;也就是说,这取决于当前映射模式。
字体指标类
中文名字英文名称长度作用解释
字体指标类OUTLINETEXTMETRICA204包含描述 TrueType 字体的指标。
字体指标类——成员表
大小otmSize整数此 结构的大小(以字节为单位)。204
高度otmTextMetrics.tmHeight整数字符的高度 (上升 + 下降) 。
上升otmTextMetrics.tmAscent整数上升 (基本线上方的单位) 字符。
下降otmTextMetrics.tmDescent整数下降 (底线下方的单位) 字符。
前导otmTextMetrics.tmInternalLeading整数高度成员设置的(边界内)前导空间量。此区域中可能会出现重音符号和其他音调字符。可将此成员设置为零。
额外otmTextMetrics.tmExternalLeading整数应用程序在行之间添加的额外前导 (空间量) 。此区域位于字体外部,不包含任何标记。可将此成员设置为零。
均宽otmTextMetrics.tmAveCharWidth整数字体中字符的平均宽度 (通常定义为字母 x ) 的宽度。 此值不包括粗体或斜体字符所需的悬垂。
最宽otmTextMetrics.tmMaxCharWidth整数该字体中最宽字符的宽度。
粗细otmTextMetrics.tmWeight整数该字体的粗细。
加宽otmTextMetrics.tmOverhang整数可能添加到一些合成字体中的每个字符串的附加宽度。
横比otmTextMetrics.tmDigitizedAspectX整数该字体的目标设备的水平比例。
纵比otmTextMetrics.tmDigitizedAspectY整数该字体的目标设备的垂直比例。
首字otmTextMetrics.tmFirstChar字节字体中定义的第一个字符的值。
尾字otmTextMetrics.tmLastChar字节在字体中定义的最后一个字符的值。
换字otmTextMetrics.tmDefaultChar字节要替换为非字体字符的字符的值。
分词otmTextMetrics.tmBreakChar字节将用于定义文本对齐的分词符的字符的值。
斜体otmTextMetrics.tmItalic字节如果斜体字体为非零,则指定斜体字体。
下划otmTextMetrics.tmUnderlined字节指定带下划线的字体(如果为非零)。
删除otmTextMetrics.tmStruckOut字节非零字号的删除线字体。
系列otmTextMetrics.tmPitchAndFamily字节指定有关音调、技术和物理字体系列的信息
字集otmTextMetrics.tmCharSet字节字体的字符集
凑齐otmFiller字节一个值,该值使 结构以字节对齐。
族类otmPanoseNumber.bFamilyType字节字体族类型。
衬样otmPanoseNumber.bSerifStyle字节衬线样式。
粗细otmPanoseNumber.bWeight字节粗细。
比例otmPanoseNumber.bProportion字节比例。
对比otmPanoseNumber.bContrast字节对比度。
渐变otmPanoseNumber.bStrokeVariation字节笔划变化。
臂样otmPanoseNumber.bArmStyle字节手臂样式。
字形otmPanoseNumber.bLetterform字节字形。
中线otmPanoseNumber.bMidline字节中线。
小高otmPanoseNumber.bXHeight字节小写字母x的高度。
性质otmfsSelection整数字体模式的性质。0斜体,1下划线,2负数,3轮廓,4删除线,5加粗。
改换otmfsType整数指示字体是否获得许可。不得修改或交换许可的字体。 如果设置了位 1,则字体可能不会嵌入到文档中。 如果第 1 位被清除,则可以嵌入字体。 如果设置了位 2,则嵌入为只读。
平斜otmsCharSlopeRise整数光标的斜率。 如果斜率是垂直的,则此值为 1。 应用程序可以使用此值和 otmsCharSlopeRun 成员的值来创建斜光标,该游标的斜率与 otmItalicAngle 成员) 指定的main斜角 (相同。
直斜otmsCharSlopeRun整数光标的。 如果斜率是垂直的,则此值为零。 应用程序可以使用此值和 otmsCharSlopeRise 成员的值来创建斜光标,该游标的斜率与 otmItalicAngle 成员) 指定的main斜角 (相同。
斜角otmItalicAngle整数字体main斜角,以垂直方向逆时针的十分之一度为单位。 常规 (罗马) 字体的值为零。 斜体字体通常具有负斜角 (即它们向右倾斜) 。
字号otmEMSquare整数定义此字体的 em 正方形的 x 或 y 维度的逻辑单元数。 (对于 em square.) ,x 方向和 y 方向的单位数始终相同
升值otmAscent整数此字体中的最大距离字符超出基线。 这是字体的版式升值。
降值otmDescent整数此字体中的最大距离字符延伸至底线下方。 这是字体的版式下降。
行距otmLineGap整数版式行距。
间高otmsCapEmHeight整数不支持。
平高otmsXHeight整数不支持。
框左otmrcFontBox.left整数字体的边界框。
框顶otmrcFontBox.top整数字体的边界框。
框宽otmrcFontBox.right整数字体的边界框。
框高otmrcFontBox.bottom整数字体的边界框。
果上otmMacAscent整数此字体中的最大距离字符扩展到 Macintosh 计算机的基线上方。
果下otmMacDescent整数此字体中的最大距离字符延伸到 Macintosh 计算机的基线下方。
果行otmMacLineGap整数Macintosh 计算机的行距信息。
最小otmusMinimumPPEM整数此字体的最小建议大小,以像素为单位(以每 em-square 为单位)。
下宽otmptSubscriptSize.x整数此字体中下标的建议水平宽度。
下高otmptSubscriptSize.y整数此字体中下标的建议垂直高度。
下左otmptSubscriptOffset.x整数此字体中下标的建议水平偏移量。 从字符原点到下标字符的原点测量下标偏移量。
下顶otmptSubscriptOffset.y整数此字体中下标的建议垂直偏移量。 从字符原点到下标字符的原点测量下标偏移量。
上宽otmptSuperscriptSize.x整数此字体中上标的建议水平宽度。
上高otmptSuperscriptSize.y整数此字体中上标的建议垂直高度。
上左otmptSuperscriptOffset.x整数此字体中上标的建议水平偏移量。 上标偏移量是从字符基线到上标字符的基线测量的。
上顶otmptSuperscriptOffset.y整数此字体中上标的建议垂直偏移量。 上标偏移量是从字符基线到上标字符的基线测量的。
线宽otmsStrikeoutSize整数此字体的删除线笔划的宽度。 通常,这是字体的 em 短划线的宽度。
线位otmsStrikeoutPosition整数删除线笔划相对于此字体的基线的位置。 正值位于底线上方,负值低于底线。
线粗otmsUnderscoreSize整数此字体的下划线字符的粗细。
下线otmsUnderscorePosition整数此字体的下划线字符的位置。
系名otmpFamilyName整数从 结构开头到指定字体系列名称的字符串的偏移量。
字名otmpFaceName整数从 结构开头到指定字体字样名称的字符串的偏移量。 (此字样名称对应于 LOGFONT 结构中指定的名称。)
样名otmpStyleName整数从 结构开头到指定字体样式名称的字符串的偏移量。
全名otmpFullName整数从 结构开头到指定字体全名的字符串的偏移量。 此名称对于字体是唯一的,通常包含版本号或其他标识信息。
字细分类
中文名字英文名称长度作用解释
字细分类PANOSE10描述了 TrueType 字体的 PANOSE 字体分类值。然后,这些特征用于将字体与外观相似但名称不同的其他字体相关联。
字细分类——成员表
族类bFamilyType字节字体族类型。对于拉丁字体,为以下值之一。
PAN_ANY0任何
PAN_NO_FIT1不合适
PAN_FAMILY_TEXT_DISPLAY数值文本和显示
PAN_FAMILY_SCRIPT2脚本
PAN_FAMILY_DECORATIVE3装饰
PAN_FAMILY_PICTORIAL4画报
衬样bSerifStyle字节衬线样式。对于拉丁字体,为以下值之一。
PAN_ANY0任何
PAN_NO_FIT1不合适
PAN_SERIF_COVE
PAN_SERIF_OBTUSE_COVE3钝角湾
PAN_SERIF_SQUARE_COVE4方形海湾
PAN_SERIF_OBTUSE_SQUARE_COVE5钝方湾
PAN_SERIF_SQUARE6广场
PAN_SERIF_THIN7
PAN_SERIF_BONE8
PAN_SERIF_EXAGGERATED9夸张
PAN_SERIF_TRIANGLE10三角形
PAN_SERIF_NORMAL_SANS11普通无衬线
PAN_SERIF_OBTUSE_SANS12钝的无衬线
PAN_SERIF_PERP_SANS13Perp sans serif
PAN_SERIF_FLARED14爆发
PAN_SERIF_ROUNDED15滚圆的
粗细bWeight字节粗细。对于拉丁字体,为以下值之一。
PAN_ANY0任何
PAN_NO_FIT1不合适
PAN_WEIGHT_VERY_LIGHT2很轻
PAN_WEIGHT_LIGHT3
PAN_WEIGHT_THIN4
PAN_WEIGHT_BOOK5
PAN_WEIGHT_MEDIUM6中等
PAN_WEIGHT_DEMI7黛米粗体
PAN_WEIGHT_BOLD8粗体
PAN_WEIGHT_HEAVY9
PAN_WEIGHT_BLACK10
PAN_WEIGHT_NORD11
比例bProportion字节比例。对于拉丁字体,为以下值之一。
PAN_ANY0任何
PAN_NO_FIT1不合适
PAN_PROP_OLD_STYLE2旧式
PAN_PROP_MODERN3摩登
PAN_PROP_EVEN_WIDTH4均匀宽度
PAN_PROP_EXPANDED5扩大
PAN_PROP_CONDENSED6浓缩
PAN_PROP_VERY_EXPANDED7非常扩展
PAN_PROP_VERY_CONDENSED8非常浓缩
PAN_PROP_MONOSPACED9等宽
对比bContrast字节对比度。对于拉丁字体,为以下值之一。
PAN_ANY0任何
PAN_NO_FIT1不合适
PAN_CONTRAST_NONE2没有
PAN_CONTRAST_VERY_LOW3非常低
PAN_CONTRAST_LOW4
PAN_CONTRAST_MEDIUM_LOW5中低
PAN_CONTRAST_MEDIUM6中等
PAN_CONTRAST_MEDIUM_HIGH7中高
PAN_CONTRAST_HIGH8
PAN_CONTRAST_VERY_HIGH9非常高
渐变bStrokeVariation字节笔划变化。对于拉丁字体,为以下值之一。
PAN_ANY0任何
PAN_NO_FIT1不合适
PAN_STROKE_GRADUAL_DIAG2渐进/对角线
PAN_STROKE_GRADUAL_TRAN3渐进/过渡
PAN_STROKE_GRADUAL_VERT4渐进/垂直
PAN_STROKE_GRADUAL_HORZ5渐进/水平
PAN_STROKE_RAPID_VERT6快速/垂直
PAN_STROKE_RAPID_HORZ快速/水平
PAN_STROKE_INSTANT_VERT8即时/垂直
臂样bArmStyle字节手臂样式。对于拉丁字体,为以下值之一。
PAN_ANY0任何
PAN_NO_FIT1不合适
PAN_STRAIGHT_ARMS_HORZ2直臂/水平
PAN_STRAIGHT_ARMS_WEDGE3直臂/楔形
PAN_STRAIGHT_ARMS_VERT4直臂/垂直
PAN_STRAIGHT_ARMS_SINGLE_SERIF5直臂/单衬线
PAN_STRAIGHT_ARMS_DOUBLE_SERIF6直臂/双衬线
PAN_BENT_ARMS_HORZ7非直臂/水平
PAN_BENT_ARMS_WEDGE8非直臂/楔形
PAN_BENT_ARMS_VERT9非直臂/垂直臂
PAN_BENT_ARMS_SINGLE_SERIF10非直臂/单衬线
PAN_BENT_ARMS_DOUBLE_SERIF11非直臂/双衬线
字形bLetterform字节字形。对于拉丁字体,为以下值之一。
PAN_ANY0任何
PAN_NO_FIT1不合适
PAN_LETT_NORMAL_CONTACT2正常/接触
PAN_LETT_NORMAL_WEIGHTED3正常/加权
PAN_LETT_NORMAL_BOXED4普通/盒装
PAN_LETT_NORMAL_FLATTENED5正常/扁平化
PAN_LETT_NORMAL_ROUNDED6正常/四舍五入
PAN_LETT_NORMAL_OFF_CENTER7正常/偏心
PAN_LETT_NORMAL_SQUARE8正常/方形
PAN_LETT_OBLIQUE_CONTACT9倾斜/接触
PAN_LETT_OBLIQUE_WEIGHTED10倾斜/加权
PAN_LETT_OBLIQUE_BOXED11斜/盒装
PAN_LETT_OBLIQUE_FLATTENED12倾斜/扁平
PAN_LETT_OBLIQUE_ROUNDED13斜/圆角
PAN_LETT_OBLIQUE_OFF_CENTER14倾斜/偏心
PAN_LETT_OBLIQUE_SQUARE15斜/方形
中线bMidline字节中线。对于拉丁字体,为以下值之一。
PAN_ANY0任何
PAN_NO_FIT1不合适
PAN_MIDLINE_STANDARD_TRIMMED2标准/修整
PAN_MIDLINE_STANDARD_POINTED3标准/尖头
PAN_MIDLINE_STANDARD_SERIFED4标准/衬线
PAN_MIDLINE_HIGH_TRIMMED5高/修剪
PAN_MIDLINE_HIGH_POINTED6高/尖
PAN_MIDLINE_HIGH_SERIFED7高/衬线
PAN_MIDLINE_CONSTANT_TRIMMED8恒定/修整
PAN_MIDLINE_CONSTANT_POINTED9常量/尖头
PAN_MIDLINE_CONSTANT_SERIFED10常量/衬线
PAN_MIDLINE_LOW_TRIMMED11低/微调
PAN_MIDLINE_LOW_POINTED12低/尖
PAN_MIDLINE_LOW_SERIFED13低/衬线
平高bXHeight字节小写字母x的高度。对于拉丁字体,为以下值之一。
PAN_ANY0任何
PAN_NO_FIT1不合适
PAN_XHEIGHT_CONSTANT_SMALL2常量/小
PAN_XHEIGHT_CONSTANT_STD3常量/标准
PAN_XHEIGHT_CONSTANT_LARGE4常量/大
PAN_XHEIGHT_DUCKING_SMALL5闪避/小
PAN_XHEIGHT_DUCKING_STD6闪避/标准
PAN_XHEIGHT_DUCKING_LARGE7闪避/大
枚举字库回调
中文名字英文名称参数作用解释
枚举字库回调EnumFontFamProc4用于处理字体。对于每个枚举字体,都会调用一次。
枚举字库回调——成员表
逻辑lpelfe整数指向枚举逻辑字体类结构的指针,该结构包含有关枚举逻辑字体扩展轴属性的信息。
物理lpntme整数指向包含有关字体物理属性的信息的结构的指针。物理字体类新字体扩展类枚举物理字体类
类别FontType整数字体的类型。1栅格字体,2驱动字体,4真字体
附加lParam整数应用程序传递的定义数据。
返回值必须为非零值才能继续枚举;若要停止枚举,它必须为零。
枚举字集回调
中文名字英文名称参数作用解释
枚举字集回调EnumFontFamExProc4用于处理字体。对于每个枚举字体,都会调用一次。
枚举字集回调——成员表
逻辑lpelfe整数指向逻辑字体类结构的指针,该结构包含有关枚举逻辑字体扩展类枚举逻辑字体扩展轴属性的信息。
物理lpntme整数指向包含有关字体物理属性的信息的结构的指针。物理字体类新字体扩展类枚举物理字体类
类别FontType整数字体的类型。1栅格字体,2驱动字体,4真字体
附加lParam整数应用程序传递的定义数据。
返回值必须为非零值才能继续枚举;若要停止枚举,它必须为零。
枚举字体回调
中文名字英文名称参数作用解释
枚举字体回调EnumFontsProc4用于处理字体。对于每个枚举字体,都会调用一次。
枚举字体回调——成员表
逻辑lpelfe整数指向逻辑字体类结构的指针,该结构包含有关枚举逻辑字体扩展轴属性的信息。
物理lpntme整数指向包含有关字体物理属性的信息的结构的指针。物理字体类枚举物理字体类
类别FontType整数字体的类型。1栅格字体,2驱动字体,4真字体
附加lParam整数应用程序传递的定义数据。
返回值必须为非零值才能继续枚举;若要停止枚举,它必须为零。
逻辑字体类
中文名字英文名称长度作用解释
逻辑字体类LOGFONT60包含了逻辑字体信息的结构
逻辑字体类——成员表
高度lfHeight整数以逻辑单位指定字体字符元或字符的高度。
宽度lfWidth整数以逻辑单位指定字体字符的平均宽度。
角度lfEscapement整数以十分之一度为单位指定每一行文本输出时相对于页面底端的角度。
方向lfOrientation整数以十分之一度为单位指定字符基线相对于页面底端的角度。
粗细lfWeight整数用来指代字体的粗细程度。范围为0到1000
斜体lfItalic字节是否斜体
下划线lfUnderline字节是否下划线
删除线lfStrikeOut字节是否带删除线
字符集lfCharSet字节指定字符集。OEM_CHARSET依赖操作系统DEFAULT_CHARSET基于系统
精度lfOutPrecision字节指定输出精度。OUT_CHARACTER_PRECIS、
OUT_DEFAULT_PRECIS、OUT_STRING_PRECIS、OUT_STROKE_PRECIS。
剪裁lfClipPrecision字节当字符超过区域时的剪辑方式,它可以为:
CLIP_CHARACTER_PRECIS、CLIP_DEFAULT_PRECIS、CLIP_STROKE_PRECIS。
质量lfQuality字节定义输出质量。DEFAULT_QUALITY (默认质量)
、DRAFT_QUALITY (草稿质量)、PROOF_QUALITY (正稿质量)。
间距lfPitchAndFamily字节指定字体的字符间距和族。DEFAULT_PITCH、FIXED_PITCH、VARIABLE_PITCH
FF_DECORATIVE、FF_DONTCARE、FF_MODERN、FF_ROMAN、FF_SCRIPT、FF_SWISS
名称lfFaceName文本32字节以内的字体名
枚举逻辑字体类
中文名字英文名称长度作用解释
枚举逻辑字体类ENUMLOGFONTA156定义字体的属性、字体的完整名称和字体样式。
枚举逻辑字体类——成员表
逻辑elfLogFont逻辑字体类定义字体属性的逻辑字体类结构。
名称elfFullName[64]文本字体的唯一名称。例如,ABCD 字体公司 TrueType Bold Italic Sans Serif。
样式elfStyle[32]文本字体的样式。例如,粗体斜体。
枚举逻辑字体扩展类
中文名字英文名称长度作用解释
枚举逻辑字体类ENUMLOGFONTEXA188定义字体的属性、字体的完整名称和字体样式。
枚举逻辑字体类——成员表
逻辑elfLogFont逻辑字体类定义字体属性的逻辑字体类结构。
名称elfFullName[64]文本字体的唯一名称。例如,ABCD 字体公司 TrueType Bold Italic Sans Serif。
样式elfStyle[32]文本字体的样式。例如,粗体斜体。
脚本elfScript[32]文本字体的脚本,即字符集。 例如,西里尔文。
枚举逻辑字体扩展轴类
中文名字英文名称长度作用解释
枚举逻辑字体扩展轴类ENUMLOGFONTEXDVA260包含用于创建字体的信息。
枚举逻辑字体扩展轴类——成员表
逻辑elfEnumLogfontEx枚举逻辑字体扩展类定义字体属性的枚举逻辑字体类结构。
字轴elfDesignVector字轴值类字轴值类结构。 这是零填充的,除非所述的字体是多主控 OpenType 字体。
物理字体类
中文名字英文名称长度作用解释
物理字体类TEXTMETRICA53包含有关物理字体的基本信息。所有大小都以逻辑单元指定;也就是说它们依赖于显示上下文的当前映射模式。
物理字体类——成员表
高度tmHeight整数字符的高度 (上升 + 下降) 。
上升tmAscent整数上升 (基本线上方的单位) 字符。
下降tmDescent整数下降 (底线下方的单位) 字符。
前导tmInternalLeading整数高度成员设置的(边界内)前导空间量。此区域中可能会出现重音符号和其他音调字符。可将此成员设置为零。
额外tmExternalLeading整数应用程序在行之间添加的额外前导 (空间量) 。此区域位于字体外部,不包含任何标记。可将此成员设置为零。
均宽tmAveCharWidth整数字体中字符的平均宽度 (通常定义为字母 x ) 的宽度。 此值不包括粗体或斜体字符所需的悬垂。
最宽tmMaxCharWidth整数该字体中最宽字符的宽度。
粗细tmWeight整数该字体的粗细。
加宽tmOverhang整数可能添加到一些合成字体中的每个字符串的附加宽度。
横比tmDigitizedAspectX整数该字体的目标设备的水平比例。
纵比tmDigitizedAspectY整数该字体的目标设备的垂直比例。
首字tmFirstChar字节字体中定义的第一个字符的值。
尾字tmLastChar字节在字体中定义的最后一个字符的值。
换字tmDefaultChar字节要替换为非字体字符的字符的值。
分词tmBreakChar字节将用于定义文本对齐的分词符的字符的值。
斜体tmItalic字节如果斜体字体为非零,则指定斜体字体。
下划tmUnderlined字节指定带下划线的字体(如果为非零)。
删除tmStruckOut字节非零字号的删除线字体。
系列tmPitchAndFamily字节指定有关音调、技术和物理字体系列的信息
字集tmCharSet字节字体的字符集
字体技术系列
英文名称数值作用解释
TMPF_FIXED_PITCH1如果设置了此位,则字体是可变间距字体。 如果此位是明确的,则字体是固定的间距字体。 请仔细注意,这些含义与常量名称的含义相反。
TMPF_VECTOR2如果设置了此位,则字体是矢量字体。
TMPF_TRUETYPE4如果设置了此位,则字体为 TrueType 字体。
TMPF_DEVICE8如果设置了此位,则字体是设备字体。
字符集
英文名称数值作用解释
ANSI_CHARSET0指定英文字符 设置。
DEFAULT_CHARSET1指定字符集 基于当前系统区域设置;例如,当系统区域设置为 美国英语,默认字符集为 ANSI_CHARSET。
SYMBOL_CHARSET2指定 符号。
MAC_CHARSET77指定 Apple Macintosh 字符集。
SHIFTJIS_CHARSET128指定日语 字符集。
HANGUL_CHARSET129也拼写 “韩文”。指定朝鲜语韩文字符集。
JOHAB_CHARSET130也拼写为“Johap”。 指定 Johab 朝鲜语字符集。
GB2312_CHARSET134指定“简化” 中华人民共和国的汉字集。
CHINESEBIG5_CHARSET136指定 “繁体”汉字集,主要在台湾和 香港和澳门特别行政区。
GREEK_CHARSET161指定希腊字符 设置。
TURKISH_CHARSET162指定土耳其语 字符集。
VIETNAMESE_CHARSET163指定越南语 字符集。
HEBREW_CHARSET177指定希伯来语字符 设置
ARABIC_CHARSET178指定阿拉伯字符 设置
BALTIC_CHARSET186指定波罗的海 (东北欧)字符集
RUSSIAN_CHARSET204指定俄语 西里尔字符集。
THAI_CHARSET222指定泰语字符 设置。
EASTEUROPE_CHARSET238指定东部 欧洲字符集。
OEM_CHARSET255指定到以下 OEM 代码页,根据当前系统区域设置。
OEM字符集
英文名称数值作用解释
FS_LATIN10x00000001拉丁语1
FS_LATIN20x00000002拉丁语2
FS_CYRILLIC0x00000004西里尔文
FS_GREEK0x00000008希腊
FS_TURKISH0x00000010土耳其
FS_HEBREW0x00000020希伯来语
FS_ARABIC0x00000040阿拉伯
FS_BALTIC0x00000080波罗的海
FS_VIETNAMESE0x00000100越南
FS_THAI0x00010000泰国
FS_JISJAPAN0x00020000名称
FS_CHINESESIMP0x00040000中文简体
FS_WANSUNG0x00080000韩国
FS_CHINESETRAD0x00100000中文繁体
FS_JOHAB0x00200000朝鲜
FS_SYMBOL0x80000000符号。
代码页位域
代码页说明
01252拉丁语 1
11250拉丁语 2:中欧
21251西里尔语
31253希腊语
41254土耳其语
51255希伯来语
61256阿拉伯语
71257波罗的语
81258越南语
9 - 15为 ANSI 保留
16874泰语
17932日语 (Shift_JIS)
18936简体中文 (中国、新加坡)
19949朝鲜文统一朝鲜文代码 (朝鲜文通汉字代码)
20950繁体中文 (台湾:中国香港特别行政区)
211361韩语(Johab)
22 - 29保留给备用 ANSI 和 OEM
30 - 31按系统保留。
32 - 46保留给 OEM
471258越南语
48869现代希腊语
49866俄语
50865北欧
51864阿拉伯语
52863加拿大法语
53862
54861冰岛语
55860葡萄牙语
56857土耳其语
57855西里尔;主要是俄语
58852拉丁语 2
59775波罗的语
60737希腊语;以前为 437G
61708;720阿拉伯语;ASMO 708
62850多语言拉丁语 1
63437US
枚举物理字体类
中文名字英文名称长度作用解释
枚举物理字体类ENUMTEXTMETRICA421包含有关物理字体的基本信息。
枚举物理字体类——成员表
扩展etmNewTextMetricEx新字体扩展类新字体扩展类 结构,包含有关物理字体的信息。
字轴etmAxesList字轴组类字轴组类结构,包含有关字体轴的信息。 这仅适用于多个母版字体。
新字体扩展类
中文名字英文名称长度作用解释
新字体扩展类NEWTEXTMETRICEXA93包含有关物理字体的信息。
新字体扩展类——成员表
最小ntmTm新物理字体类新物理字体类 结构。
最大ntmFontSig字体签名类用于指示字体覆盖率的 字体签名类 结构。
新物理字体类
中文名字英文名称长度作用解释
新物理字体类NEWTEXTMETRICA69包含有关物理字体的基本信息。所有大小都以逻辑单元指定;也就是说它们依赖于显示上下文的当前映射模式。
新物理字体类——成员表
高度tmHeight整数字符的高度 (上升 + 下降) 。
上升tmAscent整数上升 (基本线上方的单位) 字符。
下降tmDescent整数下降 (底线下方的单位) 字符。
前导tmInternalLeading整数高度成员设置的(边界内)前导空间量。此区域中可能会出现重音符号和其他音调字符。可将此成员设置为零。
额外tmExternalLeading整数应用程序在行之间添加的额外前导 (空间量) 。此区域位于字体外部,不包含任何标记。可将此成员设置为零。
均宽tmAveCharWidth整数字体中字符的平均宽度 (通常定义为字母 x ) 的宽度。 此值不包括粗体或斜体字符所需的悬垂。
最宽tmMaxCharWidth整数该字体中最宽字符的宽度。
粗细tmWeight整数该字体的粗细。
加宽tmOverhang整数可能添加到一些合成字体中的每个字符串的附加宽度。
横比tmDigitizedAspectX整数该字体的目标设备的水平比例。
纵比tmDigitizedAspectY整数该字体的目标设备的垂直比例。
首字tmFirstChar字节字体中定义的第一个字符的值。
尾字tmLastChar字节在字体中定义的最后一个字符的值。
换字tmDefaultChar字节要替换为非字体字符的字符的值。
分词tmBreakChar字节将用于定义文本对齐的分词符的字符的值。
斜体tmItalic字节如果斜体字体为非零,则指定斜体字体。
下划tmUnderlined字节指定带下划线的字体(如果为非零)。
删除tmStruckOut字节非零字号的删除线字体。
系列tmPitchAndFamily字节指定有关音调、技术和物理字体系列的信息
字集tmCharSet字节字体的字符集
标志ntmFlags整数指定字体是否为斜体、下划线、轮廓、加粗等。可以是字体标志的任意合理组合。
字号ntmSizeEM整数字体的 em 正方形的大小。此值以名义单位表示, (即字体设计) 单位。
字高tmDescent整数字体的高度(以名义单位表示)。
字宽ntmAvgWidth整数字体中字符的平均宽度(以名义单位表示)。
字体标志
名称含义
0NTM_ITALIC斜体
5NTM_BOLD粗体
8NTM_REGULAR普通
16NTM_NONNEGATIVE_AC任何字形中任何大小的字体都没有负 A 或 C 空间。
17NTM_PS_OPENTYPEPostScript OpenType 字体
18NTM_TT_OPENTYPETrueType OpenType 字体
19NTM_MULTIPLEMASTER多母版字体
20NTM_TYPE1键入 1 字体
21NTM_DSIG具有数字签名的字体。 这允许可追溯性,并确保字体已经过测试且未损坏
字体签名类
中文名字英文名称长度作用解释
字体签名类FONTSIGNATURE24包含标识给定字体为其提供字形的代码页和 Unicode 子范围的信息。
字体签名类——成员表
子集位域fsUsb[4]整数一个 128 位 Unicode 子集位域 (USB) 标识最多 126 个 Unicode 子范围。
码页位域fsCsb[2]整数标识特定字符集或代码页的 64 位代码页位域 (CPB) 。代码页位于此位域的下 32 位中。 高 32 用于非 Windows 代码页。代码页位域
字轴组类
中文名字英文名称长度作用解释
字轴组类AXESLISTA328包含有关多个主控字体的所有轴的信息。
字轴组类——成员表
预留axlReserved整数保留。 必须0x8006C61。
上升axlNumAxes整数指定多主控字体的轴数。
上升axlAxisInfo[16]字体轴类字体轴类 结构的数组。 每个结构都包含指定多个主控字体轴上的信息。这对应于 字轴值类 结构中的 值组 数组。
字体轴类
中文名字英文名称长度作用解释
字体轴类AXISINFOA20包含有关多主控字体轴的信息。
字体轴类——成员表
最小axMinValue整数此轴的最小值。
最大axMaxValue整数此轴的最大值。
名称axAxisName[16]文本轴的名称,指定为字符数组。
字轴值类
中文名字英文名称长度作用解释
字轴值类DESIGNVECTOR72为多个主控字体的轴指定值。
字轴值类——成员表
最小axMinValue整数此轴的最小值。
最大axMaxValue整数此轴的最大值。
值组dvValues[16]整数轴的名称,指定为字符数组。
剪裁区域
应用程序通过多种方式使用剪裁。Word和电子表格剪裁键盘输入,使其不显示在页面或电子表格的边距中。计算机辅助设计(CAD)和绘图程序剪裁图形输出,使其不覆盖绘图或图片的边缘。
剪裁公为剪裁区域和剪裁路径,剪裁区域是一个边缘为直线或曲线的区域。 剪裁路径是具有直线、贝塞尔曲线或两者组合的边缘的区域。
剪裁区域是应用程序可以选择到设备上下文中的图形对象之一, (DC) 。 它通常是矩形的。 某些设备上下文提供预定义的或默认的剪辑区域,而另一些则不提供。
应用程序可以对剪裁区域执行各种操作。 其中一些操作需要标识区域的句柄,而有些则不需要。 例如,应用程序可以直接对设备上下文的剪辑区域执行以下操作。
通过将相应线条、弧线、位图、文本或填充形状的坐标传递给 点在剪裁 函数,确定图形输出是否显示在区域的边框内。
通过调用 矩形在剪 函数确定工作区的一部分是否与区域相交。
通过调用 剪裁偏移 函数按指定偏移量移动现有区域。
通过调用 剪裁新区 函数,从当前剪辑区域中排除工作区的矩形部分。
通过调用 交叉剪裁 函数,将工作区的矩形部分与当前剪辑区域合并。
获取标识剪辑区域的句柄后,应用程序可以执行区域通用的任何操作,例如:
通过调用 合并区域 函数将当前剪辑区域的副本与第二个区域组合在一起。
通过调用 对比区域 函数将当前剪辑区域的副本与第二个区域进行比较。
通过调用 点在区内 函数,确定某个点是否位于当前剪辑区域副本的内部。

应用程序通过调用与特定形状关联的函数来创建区域。 下表显示了与每个标准形状关联的函数 。
形状函数
矩形区域创建矩形、新建矩形、设置区域
带圆角的矩形区域建圆矩形
椭圆区域创建椭圆、新建椭圆
多边形区域建多边区 、叠多边区
每个区域创建函数返回一个标识新区域的句柄。 应用程序可以通过调用 选择对象 函数将区域选择到设备上下文中。将某个区域选入设备上下文后,应用程序可以对其执行各种操作。
应用程序可以组合区域、比较区域、填充区域、绘制区域、反转内部、在其周围绘制框架、移动区域、检索其尺寸以及测试光标是否位于其边界内。
中文名称英文名称示例作用
剪裁函数
剪裁新区ExcludeClipRect剪裁新区(设备,左,上,右,下)创建一个新的剪切区域,该区域由一个现存的剪切区域减去一个特定的矩形区域而构成
剪裁组合ExtSelectClipRgn剪裁组合(设备,区域,模式)使用指定的模式将指定的区域与当前的剪切区域进行组合。
设备边界GetClipBox设备边界(设备,矩形)获取围绕设备当前可见区域绘制的最紧密的边界矩形的尺寸。
剪裁区域GetClipRgn剪裁区域(设备,区域)获取指定设备的当前应用程序定义的剪切区域的句柄。
设备元区GetMetaRgn设备元区(设备,元区域)获取指定设备的元区域
区域相交SetMetaRgn区域相交(设备)将指定设备的当前裁剪区域与当前元区域相交,剪切区域将重置为空区域。
剪裁复制GetRandomRgn剪裁复制(设备,区域,4)将指定设备系统剪辑区域(4)复制到特定区域
交叉剪裁IntersectClipRect交叉剪裁(设备,左,上,右,下)从当前剪切区域和指定矩形的交点创建一个新的剪切区域。
剪裁偏移OffsetClipRgn剪裁偏移(设备,X,Y)将设备的剪切区域移动指定的偏移量。
点在剪裁PtVisible在否=点在剪裁(设备,x,y)确定指定的点是否在设备的剪裁区域内。
矩形在剪RectVisible在否=矩形在剪(设备,矩形)确定指定的矩形是否在设备的剪裁区域内。
选择剪裁SelectClipPath选择剪裁(设备,模式)选择当前路径作为设备的剪切区域,组合模式:1交集,2联合,3异或,4合并,5复制
选区剪裁SelectClipRgn选区剪裁(设备,区域)选择一个区域作为指定设备的当前剪辑区域。
区域函数
合并区域CombineRgn合并区域(目标,源区1,源区2,模式)组合两个区域,并将结果存储在第三个区域。模式:1交集,2联合,3异或,4合并,5复制
创建椭圆CreateEllipticRgn区域=创建椭圆(左,上,右,下)创建一个椭圆形区域。
新建椭圆CreateEllipticRgnIndirect区域=新建椭圆(矩形类)创建一个椭圆形区域。
建多边区CreatePolygonRgn建多边区(点数组,点数量,填充)创建一个由一系列点围成的区域。最后点与第一点相连以封闭多边形。
叠多边区CreatePolyPolygonRgn叠多边区(点数组,点计数组,点计数,填充)创建一个由一系列多边形组成的区域。多边形可以重叠。模式:1填充每个扫描线,2非零绕组值填充
创建矩形CreateRectRgn区域=创建矩形(左,上,右,下)创建一个矩形区域。
新建矩形CreateRectRgnIndirect区域=新建矩形(矩形类)创建一个矩形区域。
建圆矩形CreateRoundRectRgn区域=建圆矩形(左,上,右,下,圆宽,圆高)创建一个带圆角的矩形区域。
对比区域EqualRgn对比区域(区域1,区域2)检查两个指定的区域,以确定它们的大小形状是否相同。
区域转换ExtCreateRegion区域转换(转换,长度,数据)根据指定的区域转换数据创建区域。如缩放,平移,旋转,剪切
填充区域FillRgn填充区域(设备,区域,笔刷)使用指定的画笔填充区域。
区域画框FrameRgn区域画框(设备,区域,画笔,笔宽,笔高)使用指定的画笔在指定区域周围绘制一个边框。
区域边界GetRgnBox区域边界(区域,矩形)获取指定区域的边界矩形。
区域数据GetRegionData区域数据(区域,大小,数据)将指定区域的数据填充指定的缓冲区。
填充模式GetPolyFillMode模式=填充模式(设备)获取指定设备的多边形填充模式。模式:1填充每个扫描线,2非零绕组值填充
模式填充SetPolyFillMode填充模式(设备,模式)设置指定设备的多边形填充模式。模式:1填充每个扫描线,2非零绕组值填充
反转区域InvertRgn反转区域(设备,区域)可以反转指定区域的颜色。
区域偏移OffsetRgn区域偏移(区域,X,Y)将区域移动指定的偏移量。
喷涂区域PaintRgn喷涂区域(设备,区域)使用当前选定的画笔在设备中绘制(涂漆)指定的区域。
点在区内PtInRegion在否=点在区内(区域,x,y)确定指定的点是否在指定区域内。
转换区域PathToRegion区域=转换区域(设备)从选择到指定设备的路径中创建一个区域。
矩形在区RectInRegion在否=矩形在区(区域,矩形)确定指定的矩形是否在指定区域边界内。
设置区域SetRectRgn设置区域(区域,左,上,右,下)将区域转换为具有指定坐标的矩形区域。
区域数据类
中文名字英文名称长度作用解释
区域数据类RGNDATA32+包含一个标头和一个构成区域的矩形数组。 矩形按从上到下、从左到右排序。 它们不重叠。
区域数据类——成员表
标头rdh区域头类RGNDATAHEADER 结构。
数据Buffer[1]文本指定包含构成区域的矩形结构的任意大小的缓冲区。
区域头类
中文名字英文名称长度作用解释
区域头类RGNDATAHEADER32指定区域的类型(区域是矩形还是梯形)、组成区域的矩形数量、包含矩形结构的缓冲区的大小等。
区域头类——成员表
大小dwSize整数标头的大小(以字节为单位)。
分类iType整数区域的类型。此值必须是1。
区数nCount整数构成区域的矩形数。
区数nRgnSize整数接收构成区域的矩形结构所需的缓冲区的大小。如果大小未知,则此成员可以为零。
边框rcBound矩形类区域(以逻辑单元为单位)的边框。
画板绘图
颜色可用于传达想法、显示项目之间的关系以及提高输出的吸引力和质量。 Windows 使应用程序能够发现给定设备的颜色功能,并从最符合其需求的可用颜色中进行选择。
显示器和打印机等设备的颜色功能范围从单色到数千种颜色。 由于应用程序可能需要为整个范围内的设备生成输出,因此应准备好处理不同的颜色功能。
调色板是一个数组,其中包含标识当前可在输出设备上显示或绘制的颜色的颜色值。 调色板由能够生成许多颜色但只能在任何给定时间显示或绘制其中一部分颜色的设备使用。 对于此类设备,系统维护 一个系统调色板 来跟踪和管理设备的当前颜色。 应用程序没有直接访问系统调色板的权限。 相反,系统会将默认调色板与每个设备上下文相关联。
应用程序可以使用默认调色板中的颜色,也可以通过创建 逻辑调色板 并将其与单个设备上下文关联来定义其自己的颜色。

几乎所有应用程序都使用屏幕来显示它们操作的数据。 应用程序绘制图像、绘制图形和写入文本,以便用户可以在创建、编辑和打印数据时查看数据。
Microsoft Windows 为绘画和绘图提供了丰富的支持,但由于多任务操作系统的性质,应用程序在访问屏幕时必须相互协作。
为了保持所有应用程序顺利且协作地运行,系统会管理所有输出到屏幕。 应用程序使用窗口作为其主要输出设备,而不是屏幕本身。 系统提供与窗口唯一对应的显示设备上下文。
应用程序使用显示设备上下文将其输出定向到指定的窗口。 在窗口中绘制 (将输出定向到它) 可防止应用程序干扰其他应用程序的输出,并允许应用程序彼此共存,同时仍充分利用系统的图形功能。
中文名称英文名称示例作用
调色板函数
换调色板AnimatePalette换调色板(调色板,起始,数目,色组)将替换指定逻辑调色板中的条目。色板组是色板类数组的指针
半调色板CreateHalftonePalette色板=半调色板(设备)为指定的设备上下文创建一个半色调调色板。
创建色板CreatePalette色板=创建色板(调色类)使用调色类结构创建逻辑调色板。
调正色板ColorCorrectPalette调正色板(设备,控点,条目,数目)使用指定设备上下文中的 WCS 1.0 参数更正调色板的条目。
颜色调整GetColorAdjustment颜色调整(设备,色调)获取指定设备的颜色调整值
调整颜色SetColorAdjustment调整颜色(设备,色调)使用指定数据设置设备的颜色调整值
设备取色GetNearestColor颜色=设备取色(设备,颜色)根据设备的显示能力,取得与指定颜色最接近的一种纯色
色板取色GetNearestPaletteIndex色号=色板取色(色板,颜色)检索指定逻辑调色板中与指定颜色值最匹配的条目的索引。
取调色板GetPaletteEntries取调色板(色板,起始,数目,数组)从给定的逻辑调色板中检索指定范围的调色板条目。
改调色板SetPaletteEntries改调色板(色板,起始,数目,数组)修改逻辑调色板的一系列条目中设置颜色值和标志。
系统色板GetSystemPaletteEntries系统色板(设备,起始,数目,数组)从设备的系统调色板中检索指定范围的调色板条目。
色板状态GetSystemPaletteUse状态=色板状态(设备)检索指定设备的系统(物理)调色板的当前状态。1静态颜色,2黑白,3无静态色
色板系统SetSystemPaletteUse色板系统(设备,标志)修改系统调色板的一系列条目中设置颜色值和标志。1静态颜色,2黑白,3无静态色
色板映射RealizePalette色板映射(设备)将选项板条目从当前逻辑选项板映射到系统选项板。
调整色板ResizePalette调整色板(色板,条目)根据指定的值增加或减少逻辑调色板的条目大小。
选择色板SelectPalette选择色板(设备,色板,背景)在指定的设备中选择一个新的逻辑调色板。背景调色板为真则映射颜色到物理调色板中
重置画板UnrealizeObject重置画板(对象)可重置画笔的原点或逻辑调色板。
更新颜色UpdateColors更新颜色(设备)设备的当前颜色重新映射到当前实现的逻辑调色板来更新指定设备
绘图函数
刷新绘图GdiFlush刷新绘图刷新调用线程的任何未决的绘图操作。
绘图列数GdiGetBatchLimit队列数=绘图列数获取有多少个GDI绘图命令位于队列中。
绘图队列GdiSetBatchLimit绘图队列(100)指定有多少个GDI绘图命令能够进入队列
取背景色GetBkColor取背景色(设备)获取指定设备的当前背景颜色。
改背景色SetBkColor改背景色(设备,颜色)修改指定设备的背景颜色。
边界矩形GetBoundsRect边界矩形(设备,矩形,选项)获取指定设备上下文的当前累积边界矩形。选项为1清除边界
累积边界SetBoundsRect累积边界(设备,矩形,选项)获取指定设备上下文的当前累积边界矩形。选项1清除边框,2添加边框,4开启累积,8关闭累积
混合模式GetROP2模式=混合模式(设备)获取指定设备的前景混合模式
模式混合SetROP2模式混合(设备,模式)设置指定设备的前景混合模式
背景模式GetBkMode背景模式(设备)获取指定设备的背景混合填充模式。1透明,2不透明
模式背景SetBkMode模式背景(设备,模式)用指定模式填充指定设备的背景,如阴影刷子、虚线以及字符中的空隙。1透明,2不透明
取笔刷色GetDCBrushColor颜色=取笔刷色(设备)从指定的设备中获取笔刷的颜色。
改笔刷色SetDCBrushColor改笔刷色(设备,颜色)将指定设备笔刷的颜色设置为指定值。
颜色空间GetColorSpace空间=颜色空间(设备)从指定的设备中检索逻辑颜色空间的当前句柄。
空间颜色SetColorSpace空间颜色(设备,空间)给指定设备输入颜色空间。
取画笔色GetDCPenColor取画笔色(设备,颜色)从指定的设备中获取笔的颜色。
改画笔色SetDCPenColor改画笔色(设备,颜色)将指定设备画笔的颜色设置为指定值。
伽玛渐变GetDeviceGammaRamp伽玛渐变(设备,@颜色组)在具有支持硬件中可下载伽玛渐变的驱动程序的直接彩色显示板上获取伽玛渐变。
渐变伽玛SetDeviceGammaRamp渐变伽玛(设备,颜色组)在具有支持硬件中可下载伽玛渐变的驱动程序的直接彩色显示板上设置伽玛渐变。
检查色域CheckColorsInGamut检查色域(转换,颜色,数据,长度)检查指定的颜色值是否在指定设备的色域内,检查结果输出到数据字节组中
匹配像素ChoosePixelFormat匹配像素(设备,像素格式)尝试将设备上下文支持的适当像素格式与给定的像素格式规范进行匹配。
创建色域CreateColorSpaceA色域=创建色域(色域类)创建逻辑颜色空间。色域类
删除色域DeleteColorSpace删除色域(色域)删除指定的颜色空间,释放与其关联的所有内部资源。
设备像素DescribePixelFormat设备像素(设备,索引,长度,像素格式)获取有关设备的像素格式像素格式的信息。
枚举颜色EnumICMProfilesA枚举颜色(设备,@回调,参数)枚举系统支持的不同颜色配置文件
颜色模式SetICMMode颜色模式(设备,模式)指定设备的启用、禁用或查询图像颜色。
颜色配置GetICMProfileA颜色配置(设备,长度,名称)获取设备的颜色配置文件的名称。
配置颜色SetICMProfileA配置颜色(设备,长度,名称)将指定的颜色配置文件设置为指定设备的输出配置文件。
像素格式GetPixelFormat索引=像素格式(设备)获取指定设备的当前所选像素格式的索引。
格式像素SetPixelFormat格式像素(设备,索引,像素格式)将指定设备的像素格式设置为索引指定的格式。
交换缓冲SwapBuffers交换缓冲(设备)交换前缓冲区和后缓冲区。
更新色块UpdateICMRegKeyA更新色块(0,标识,结构,命令)管理系统中的颜色配置文件和颜色管理模块。
色板类
中文名字英文名称长度作用解释
色板类PALETTEENTRY4指定逻辑调色板中条目的颜色和用法。
色板类——成员表
peRed字节指定调色板条目的红色强度值。
绿peGreen字节指定调色板条目的绿色强度值。
peBlue字节指定调色板条目的绿色强度值。
方式peFlags字节指定调色板条目的使用方式。1动态,2索引,4非系统
调色类
中文名字英文名称长度作用解释
调色类LOGPALETTE4+定义逻辑调色板。
调色类——成员表
版本palVersion整形指定结构的Windows版本号(目前为$300)
数目palNumEntries整形指定逻辑调色板中的条目数
色板palPalEntry[1]色板类自定义 色板类 结构的数组
色域类
中文名字英文名称长度作用解释
色域类LOGCOLORSPACE12包含了逻辑颜色空间信息
色域类——成员表
签名lcsSignature整数颜色空间签名
版本lcsVersion整数版本号,目前是$400
大小lcsSize整数此结构的大小(以字节为单位)。
分类lcsCSType整数颜色空间类型。1设备RGB 2设备CMYK 0标准RGB
匹配lcsIntent整数色域匹配方法。1保持饱和度 2保持图案 3保持对比度
端点lcsEndpoints整数红色,绿色,蓝色端点。
lcsGammaRed整数红色坐标的比例。
绿lcsGammaGreen整数绿色坐标的比例。
lcsGammaBlue整数蓝色坐标的比例。
输出lcsFilename文本[260]输出变量字段的数据,用于命名颜色配置文件。该成员通常设置为零
像素格式类
中文名字英文名称长度作用解释
像素格式类PIXELFORMATDESCRIPTOR46包含了逻辑字体信息的结构
像素格式类——成员表
长度nSize整形结构的大小
版本nVersion整形结构的版本,一般设为1
标志dwFlags整数表明像素缓冲特性的标志位,如缓冲是否支持GDI或OpenGL等
索引iPixelType整数说明象素数据类型是RGBA还是颜色索引
颜色位cColorBits整数每个颜色缓冲区中颜色位平面的数目,对颜色索引方式是缓冲区大小
红位数cRedBits字节每个RGBA颜色缓冲区中红色位平面的数目
红偏移cRedShift字节每个RGBA颜色缓冲区中红色位平面的偏移数
绿位数cGreenBits字节每个RGBA颜色缓冲区中绿色位平面的数目
绿偏移cGreenShift字节每个RGBA颜色缓冲区中绿色位平面的偏移数
蓝位数cBlueBits字节每个RGBA颜色缓冲区中蓝色位平面的数目
蓝偏移cBlueShift字节每个RGBA颜色缓冲区中蓝色位平面的偏移数
透明位cAlphaBits字节每个RGBA颜色缓冲区中alpha位平面的数目(现不支持)
透明偏移cAlphaShift字节每个RGBA颜色缓冲区中alpha位平面的偏移数(现不支持)
缓冲位cAccumBits字节累加缓冲区中全部位平面的数目
红缓冲cAccumRedBits字节累加缓冲区中红色位平面的数目
绿缓冲cAccumGreenBits字节累加缓冲区中绿色位平面的数目
蓝缓冲cAccumBlueBits字节累加缓冲区中蓝色位平面的数目
透明缓冲cAccumAlphaBits字节累加缓冲区中透明位平面的数目
缓冲深度cDepthBits字节 Z(深度)缓冲区的深度
模板深度cStencilBits字节模板缓冲区的深度
轴向缓冲cAuxBuffers字节轴向缓冲区的数量(一般1.0版本不支持)
图层iLayerType字节未使用
层数bReserved字节表层和底层平面的数量
图码dwLayerMask整数未使用
显码dwVisibleMask整数是透明色彩的值(RGBA方式)或是一个底层平面的索引(Index)
坏码dwDamageMask整数未使用
颜色调整类
中文名字英文名称长度作用解释
颜色调整类COLORADJUSTMENT40定义颜色调整值。
颜色调整类——成员表
大小caSize整数结构的大小(以字节为单位)。
标志caFlags整数指定应如何准备输出映像。1原始图像的底片。2将对数函数应用于输出颜色的最终密度,当亮度较低时这将增加颜色对比度。
光源caIlluminantIndex整数查看图像时所依据的标准光源的类型。颜色调整光源
红加caRedGamma整数指定源颜色的红色主色的第 n次 幂伽玛校正值。 该值必须在 2500 到 65,000 的范围内。 值为 10,000 表示没有伽玛校正。
绿加caGreenGamma整数指定源颜色的绿色主色的第 n次 幂伽马校正值。 该值必须在 2500 到 65,000 的范围内。 值为 10,000 表示没有伽玛校正。
蓝加caBlueGamma整数指定源颜色的蓝色原色的第 n次 幂伽玛校正值。 该值必须在 2500 到 65,000 的范围内。 值为 10,000 表示没有伽玛校正。
黑参caReferenceBlack整数源颜色的黑色引用。 任何比这更深的颜色都被视为黑色。 该值必须在 0 到 4000 的范围内。
白参caReferenceWhite整数源颜色的白色引用。 任何比这更浅的颜色都被视为白色。 该值必须在 6000 到 10,000 的范围内。
对比caContrast整形要应用于源对象的对比度。 该值必须在 -100 到 100 的范围内。 值为 0 表示不调整对比度。
亮度caBrightness整形要应用于源对象的亮度量。 该值必须在 -100 到 100 的范围内。 值为 0 表示不调整亮度。
色彩caColorfulness整形要应用于源对象的色彩量。 该值必须在 -100 到 100 的范围内。 值为 0 表示没有色彩调整。
色调caRedGreenTint整形要应用于源对象的红色或绿色色调调整量。 该值必须在 -100 到 100 的范围内。 正数向红色调整,负数向绿色调整。 零表示无色调调整。
颜色调整光源
英文名称数值作用解释
ILLUMINANT_DEVICE_DEFAULT0设备的默认值。 输出设备使用的标准。
ILLUMINANT_A1碳化灯。
ILLUMINANT_B2中午的阳光。
ILLUMINANT_C3NTSC 日光。
ILLUMINANT_D504普通打印。
ILLUMINANT_D555债券纸打印。
ILLUMINANT_D656标准日照。 CRT 和图片的标准。
ILLUMINANT_D757北天。
ILLUMINANT_F28酷白灯。
前景混合模式
英文名称数值作用解释
R2_BLACK1像素始终为 0。
R2_NOTMERGEPEN2像素是R2_MERGEPEN颜色的反转。
R2_MASKNOTPEN3像素是屏幕和笔反面共有的颜色的组合。
R2_NOTCOPYPEN4像素是触笔颜色的反转。
R2_MASKPENNOT5像素是笔和屏幕反面共有的颜色的组合。
R2_NOT6像素是屏幕颜色的反转。
R2_XORPEN7像素是笔和屏幕中颜色的组合,但不是两者的组合。
R2_NOTMASKPEN8像素是R2_MASKPEN颜色的反转。
R2_MASKPEN9像素是笔和屏幕共有的颜色的组合。
R2_NOTXORPEN10像素是R2_XORPEN颜色的反转。
R2_NOP11像素保持不变。
R2_MERGENOTPEN12像素是屏幕颜色和笔颜色反转的组合。
R2_COPYPEN13像素是触笔颜色。
R2_MERGEPENNOT14像素是笔颜色和屏幕颜色反转的组合。
R2_MERGEPEN15像素是笔颜色和屏幕颜色的组合。
R2_WHITE16像素始终为 1。
空间转换
坐标空间和转换由以下类型的应用程序使用:
桌面发布应用程序 (“缩放”页面的各个部分或在) 窗口中显示相邻页面。
计算机辅助设计 (CAD) 应用程序 (旋转对象、缩放绘图或创建透视视图) 。
电子表格应用程序 (移动图形并调整图形) 大小。

下图显示了在绘图应用程序中创建的对象的连续视图。 第一个插图显示对象在原始绘图中显示的对象;后续的五个图示显示了应用各种转换的效果。






中文名称英文名称示例作用
组合变换CombineTransform组合变换(组合,转换1,转换2)将两个世界空间与页面空间转换相连接
设备坐标DPtoLP设备坐标(设备,坐标数组,坐标数量)将设备坐标转换为逻辑坐标。转换取决于设备上下文的映射模式、窗口和视区的原点和范围的设置,以及世界转换。
坐标设备LPtoDP坐标设备(设备,坐标数组,坐标数量)将逻辑坐标转换为设备坐标。 转换取决于设备上下文的映射模式、窗口和视区的原点和范围的设置,以及世界转换。
当前坐标GetCurrentPositionEx当前坐标(设备,坐标)从指定的设备中获取当前坐标位置。
图形模式GetGraphicsMode模式=图形模式(设备)返回有关指定设备的当前图形模式。1兼容模式2高级模式
模式图形SetGraphicsMode模式图形(设备,模式)设置有关指定设备的当前图形模式。1兼容模式2高级模式
映射模式GetMapMode模式=映射模式(设备)获取指定设备的当前映射模式
模式映射SetMapMode模式映射(设备,模式)设备指定设备的当前映射模式
视窗范围GetViewportExtEx视窗范围(设备,尺寸)获取指定设备的当前视区的宽和高大小。
范围视窗SetViewportExtEx范围视窗(设备,宽,高,原尺寸)修改指定设备的当前视区的宽和高大小。不需要原尺寸可以为0
视窗坐标GetViewportOrgEx视窗坐标(设备,坐标)获取指定设备的当前视区的x和y坐标。
坐标视窗SetViewportOrgEx坐标视窗(设备,x,y,原坐标)修改指定设备的当前视区的x和y坐标。不需要原坐标可以为0
窗口范围GetWindowExtEx窗口范围(设备,尺寸)获取指定设备的当前窗口的宽和高大小。
范围窗口SetWindowExtEx范围窗口(设备,宽,高,原尺寸)修改指定设备的当前窗口的宽和高大小。不需要原尺寸可以为0
窗口坐标GetWindowOrgEx窗口坐标(设备,坐标)获取指定设备的当前窗口的x和y坐标。
坐标窗口SetWindowOrgEx坐标窗口(设备,x,y,原坐标)修改指定设备的当前窗口的x和y坐标。不需要原坐标可以为0
转换空间GetWorldTransform转换空间(设备,转换类)设置世界空间和页面空间之间的二维线性转换。用于缩放、旋转、切变或平移图形输出。
空间转换SetWorldTransform空间转换(设备,转换类)设置世界空间和页面空间之间的二维线性转换。用于缩放、旋转、切变或平移图形输出。
世界转换ModifyWorldTransform世界转换(设备,转换类,模式)使用指定模式更改设备上下文的世界转换。模式:1重置为标识矩阵,2乘新矩阵在左,3乘新矩阵在右
视窗偏移OffsetViewportOrgEx视窗偏移(设备,X,Y,原点)用指定的水平位移和垂直位移改变设备环境的观察窗原点。不需要获取原点可以为0
窗口偏移OffsetWindowOrgEx窗口偏移(设备,X,Y,原点)使用指定的水平和垂直偏移修改设备上下文的窗口原点。不需要获取原点可以为0
视窗比率ScaleViewportExtEx视窗比率(设备,水平乘,水平除,垂直乘,垂直除,@尺寸类)使用指定的乘数和除数构成的比率修改设备上下文的视区。
窗口比率ScaleWindowExtEx窗口比率(设备,水平乘,水平除,垂直乘,垂直除,@尺寸类)使用指定的乘数和除数构成的比率修改设备上下文的窗口。
转换类
中文名字英文名称长度作用解释
转换类XFORM24指定世界空间到页面空间的转换。
转换类——成员表
首左eM11小数扩展:水平缩放组件;旋转:旋转角度余弦值;反射:水平组件
首右eM12小数剪切:水平比例常量;旋转:旋转角度的正弦值
次左eM21小数剪切:垂直比例常量;旋转:旋转角度的负正弦值
次右eM22小数扩展:垂直缩放组件;旋转:旋转角度余弦值;反射:垂直反射组件
平移eDx小数水平平移组件,以逻辑单元为单位。
直转eDy小数垂直转换组件,以逻辑单元为单位。
映射模式
中文名字英文名称长度作用解释
MM_ANISOTROPIC8逻辑单元映射到具有任意缩放轴的任意单元。 使用 范围窗口 和 范围视窗 函数指定单位、方向和缩放。
MM_HIENGLISH5每个逻辑单元映射到 0.001 英寸。 正 x 向右;正 y 向上。
MM_HIMETRIC3每个逻辑单元映射到 0.01 毫米。 正 x 向右;正 y 向上。
MM_ISOTROPIC7逻辑单元映射到具有等比例轴的任意单元;也就是说,沿 x 轴的一个单位等于沿 y 轴的一个单位。使用 范围窗口 和 范围视窗 函数指定轴的单位和方向。
图形设备接口 (GDI) 根据需要进行调整,以确保 x 和 y 单位保持相同的大小 (设置窗口范围时,视区将进行调整以保持单位各向同性) 。
MM_LOENGLISH4每个逻辑单元映射到 0.01 英寸。 正 x 向右;正 y 向上。
MM_LOMETRIC2每个逻辑单元映射到 0.1 毫米。 正 x 向右;正 y 向上。
MM_TEXT1每个逻辑单元映射到一个设备像素。 正 x 向右;正 y 向下。
MM_TWIPS6每个逻辑单元映射到打印机点的二十分之一 (1/1440 英寸,也称为缇) 。 正 x 向右;正 y 向上。
形状填充
许多类型的应用程序使用线条和曲线在光栅设备上绘制图形输出。 计算机辅助设计 (CAD) 和绘图应用程序使用线条和曲线来勾勒对象、指定对象的中心、对象的尺寸等。
电子表格应用程序使用线条和曲线绘制网格、图表和图形。 Word处理应用程序使用线条在文本页上创建规则和边框。
线条是光栅显示器上一组突出显示的像素 (或打印页上的一组点,) 由两个点标识:起点和终点。 位于起点的像素始终包含在行中,并且始终排除位于终点的像素。
正则曲线是光栅显示器上的一组突出显示像素, (或打印页上的点) ,用于定义圆锥部分的外围 (或外围) 的一部分。
不规则曲线是一组像素,用于定义不适合圆锥部分的外围的曲线。 终点从曲线中排除,就像从线条中排除一样。
当应用程序调用其中一个曲线绘制函数时,GDI 会将曲线分解成许多极小的离散线段。 确定每个线段 (起点和终点) 的终结点后,GDI 通过应用其 DDA 来确定 (或) 点定义每条线的像素。
应用程序可以通过调用 椭圆弧 函数来绘制椭圆或椭圆的一部分。此函数在称为边框的不可见矩形的外围内绘制曲线。 椭圆的大小由两个不可见的径向指定,从矩形的中心延伸到矩形的两侧。
下图显示了使用 椭圆弧 函数绘制的椭圆 (一部分的 弧) 。
显示代表全圆四分之三的弧形图
调用 椭圆弧 函数时,应用程序指定边框和径向的坐标。 上图显示了使用实线绘制实际弧线时,带有虚线的矩形和径向。
除了绘制椭圆或部分椭圆外,应用程序还可以绘制称为贝塞尔曲线的不规则曲线,其曲率由 p1、p2、p3 和 p4 四个控制点 定义。
控制点 p1 和 p4 定义曲线的起点和终点,控制点 p2 和 p3 通过标记曲线反转方向的点来定义曲线的形状,如下图所示。

显示两条贝塞尔曲线的插图,每个曲线在起点和终点之间,每个曲线都有两个控制点
应用程序可以通过调用 多点曲线 函数来绘制不规则曲线,并提供相应的控制点。
应用程序将填充的形状用于各种任务。 例如,电子表格应用程序使用填充形状来构造图表和图形,而绘图和绘画应用程序使用填充的形状允许用户绘制图形和插图。
椭圆是由两个固定点 (f1 和 f2 ) 定义的闭合曲线,以便从曲线上任意点到两个固定点) (d1 +d2 的距离之和是恒定的。 下图显示了使用 画椭圆 函数绘制的椭圆。

显示一个椭圆形、两个固定点、两个距离和一个边框的插图
调用 画椭圆 时,应用程序提供椭圆边框的左上角和右下角的坐标。 边框是完全围绕椭圆的最小矩形。 当系统绘制椭圆时,如果未设置世界转换,它将排除右侧和下侧。
因此,对于任何以 x 单位宽乘 y 单位高的任何矩形,关联的椭圆度量 x1 单位宽乘 y1 单位高。 如果应用程序设置了世界转换,则系统将包括右侧和下侧。
和弦是由椭圆和称为正割线段的交集限定的区域。也就是弓的圆弧和弓弦组成的弓形图案。下图显示了使用和弦函数绘制的 和弦 。

椭圆图,显示两个径向、一个正割和一个和弦
调用 画和弦 时,应用程序提供椭圆边框的左上角和右下角的坐标,以及定义两个径向的两个点的坐标。 径向是从椭圆边框的中心到椭圆上的点绘制的线。
当系统绘制和弦的曲线部分时,它通过使用指定设备上下文的当前弧方向执行此操作。默认的弧线方向是逆时针。可以通过调用 画弧改向 函数让应用程序重置弧线方向。
饼图是由椭圆曲线和两个径向的交集限定的区域。 下图显示了使用 画饼 函数绘制的 饼图 。

显示带阴影饼的椭圆的插图
调用 画饼 时,应用程序提供椭圆边框左上角和右下角的坐标,以及定义两个径向的两个点的坐标。
当系统绘制饼图的曲线部分时,它会使用给定设备上下文的当前弧线方向。 默认的弧线方向是逆时针方向。
多边形是一个带有直边的填充形状。 使用当前笔绘制多边形的两侧。 当系统填充多边形时,它使用当前画笔和当前多边形填充模式。
这两种填充模式(备用 (默认的) 和绕组)确定复杂多边形中的区域是填充的还是保持未配对状态。 应用程序可以通过调用 填充模式 函数来选择任一模式。
下图显示了使用 多边形绘制的多边形。

除了使用 画多边形 绘制单个多边形外,应用程序还可以使用 叠多边形 函数绘制多个多边形。
矩形是一个四面多边形,其对边是平行且长度相等的。 尽管应用程序可以通过调用 画多边形 函数(提供每个角的坐标)来绘制矩形, 但 画方块 函数提供了更简单的方法。
此函数只需要左上角和右下角的坐标。 当应用程序调用 画方块 函数时,系统会绘制矩形,如果未为给定设备上下文设置世界转换,则不包括右侧和下侧。
中文名称英文名称示例作用
线条曲线函数
画弧线AngleArc画弧线(设备,x,y,半径,起始角,扫视角)圆弧沿着具有给定半径和中心的圆的周边绘制。弧的长度由给定的起始和扫视角度定义
椭圆弧Arc椭圆弧(设备,左,顶,宽,高,起X,起Y,终X,终Y)指定的矩形内的一个椭圆。画出从起点坐标到终点坐标的椭圆弧线
画椭圆弧ArcTo画椭圆弧(设备,左,顶,宽,高,起X,起Y,终X,终Y)跟Arc区别是是从画笔当前位置,画直线到圆弧起点,画完之后画笔停在圆弧终点.而Arc没有直线,画笔位置也不变
画弧取向GetArcDirection方向=画弧取向(设备)画圆弧的时候,判断当前采用的绘图方向。1逆时针 2顺时针
画弧改向SetArcDirection画弧改向(设备,方向)修改当前绘图采用的方向。1逆时针 2顺时针
画线LineTo画线(设备,终X,终Y)用当前画笔画一条线,从当前位置连到一个指定的点
线段枚举LineDDA线段枚举(起X,起Y,终X,终Y,@回调,数据)枚举由指定的起点和终点定义的行应突出显示哪些像素。回调
移到MoveToEx移到(设备,X,Y,旧坐标)为指定的设备场景指定一个新的当前画笔位置,不需要旧坐标可以为0
矩形偏移OffsetRect矩形偏移(矩形,X,Y)将指定的矩形移动指定的偏移量。
多点曲线PolyBezier多点曲线(设备,点组,点数)根据指定的坐标点数组绘制一条或多条贝塞尔曲线,一点到四点为一个点数,二三为控制点.四点到七点为第二点数
离散曲线PolyBezierTo离散曲线(设备,点组,点数)根据指定的坐标点数组绘制一条或多条贝塞尔曲线,功能同上
多线曲线PolyDraw多线曲线(设备,点组,点控,点数)根据指定的坐标点数组绘制一组线段和贝塞尔曲线,多了个控制曲线的数组
画拆线Polyline画拆线(设备,点组,点数)依次连接所有点来绘制一系列线段
画拆线图PolylineTo画拆线图(设备,点组,点数)依次连接所有点来绘制一系列线段
叠拆线PolyPolyline叠拆线(设备,点组,点数组,数量)画多组可以重叠的拆线
填充形状函数
画和弦Chord画和弦(设备,左,顶,宽,高,起X,起Y,终X,终Y)绘制一个弧弦(由椭圆和线段的交点界定的区域,称为“割线”)。通过使用当前笔并使用当前画刷来填充弧弦。
画椭圆Ellipse画椭圆(设备,左,上,右,下)指定矩形内绘制一个椭圆。使用当前笔勾画,并使用当前笔刷填充椭圆。
画饼Pie画饼(设备,左,上,右,下,X1,Y1,X2,Y2)绘制一个由椭圆和两个径向交点界定的饼形楔形。通过使用当前笔并使用当前画笔填充饼图。(扇形)
画多边形Polygon画多边形(设备,点组,点数)依次连接所有点并把最后点与第一点相连,围成一个多边形并填充
叠多边形PolyPolygon叠多边形(设备,点组,点数组,数量)绘制一系列闭合多边形。绘制的面可以重叠。
画方块Rectangle画方块(设备,左,上,右,下)绘制一个矩形方块。使用当前画笔勾勒矩形的轮廓,并使用当前笔刷填充矩形。
圆角矩形RoundRect圆角矩形(设备,左,上,右,下,宽,高)在指定矩形内按圆角和宽度和高度绘制一个带有圆角的矩形。
线段枚举回调
中文名字英文名称参数作用解释
线段枚举回调LineDDAProc3它用于处理坐标。
线段枚举回调——参数表
参数1unnamedParam1整数unnamedParam1
参数2unnamedParam2整数unnamedParam2
参数3unnamedParam3整数unnamedParam3
图元文件
在内部,图元文件是称为 图元文件记录的可变长度结构的数组。 图元文件中的第一条记录指定常规信息,例如创建图片的设备分辨率、图片的尺寸等。
其余记录构成任何图元文件的大部分,对应于图形设备接口 (绘制图片所需的 GDI) 函数。 创建特殊的图元文件设备上下文后,这些记录将存储在图元文件中。
然后,此图元文件设备上下文将用于创建图片所需的所有绘图操作。 当系统处理与图元文件 DC 关联的 GDI 函数时,它会将该函数转换为适当的数据,并将此数据存储在追加到图元文件中的记录中。
图片完成后,最后一条记录存储在图元文件中后,可以通过以下方式将图元文件传递给另一个应用程序:
使用剪贴板
将其嵌入另一个文件中
将其存储在磁盘上
反复播放
当图元文件记录转换为设备命令并由相应设备处理时,将 播放 图元文件。
有两种类型的图元文件:增强格式的图元文件、Windows 格式图元文件
增强格式图元文件包含以下元素:
标头
GDI 对象的句柄表
私人调色板
图元文件记录数组
增强型图元文件提供真正的设备独立性。 可以将存储在增强图元文件中的图片视为在特定时刻拍摄的视频显示的“快照”。 无论此“快照”出现在打印机、绘图仪、桌面或任何应用程序的工作区中的何处,它都保持其尺寸。
可以使用增强型图元文件来存储通过使用 GDI 函数创建的图片 (包括新路径和转换函数) 。 由于增强型图元文件格式是标准化的,因此以此格式存储的图片可以从一个应用程序复制到另一个应用程序;
并且,由于图片是真正独立于设备,因此保证它们在任何输出设备上保持其形状和比例。
增强型图元文件是记录数组。 图元文件记录是可变长度 的 元记录类 结构。 每个增强型图元文件记录的开头都是一个 EMR 结构,其中包含两个成员。 第一个成员 类别 标识记录类型,
即其参数包含在记录中的 GDI 函数。 由于结构长度可变,因此另一个成员 大小 包含记录的大小。 紧跟在 大小 成员之后是 GDI 函数的其余参数(如果有)。 结构的其余部分包含依赖于记录类型的其他数据。
增强型图元文件中的第一条记录始终是 强图头类 结构,即增强型图元文件标头。
可以使用 创建强图 函数创建增强型图元文件,并提供相应的参数。 系统使用这些参数来维护图片尺寸,确定图元文件应存储在磁盘上还是内存中,等等。
若要跨输出设备维护图片尺寸, 创建强图 需要参考设备的分辨率。 此 参考设备 是首次显示图片的设备, 参考 DC 是与参考 设备关联的设备上下文 。
调用 创建强图 函数时,必须提供标识此 DC 的句柄。 可以通过调用 取设备 或 创建设备 函数来获取此句柄。 还可以指定 NULL 作为句柄,以将当前显示设备用于参考设备。
大多数应用程序永久存储图片,因此创建存储在磁盘上的增强型图元文件;但是,某些情况下不需要这样做。 例如,提供图表绘制功能的字处理应用程序可以将用户定义的图表作为增强型图元文件存储在内存中,
然后将增强型图元文件位从内存复制到用户的文档文件中。 需要永久存储在磁盘上的图元文件的应用程序在调用 创建强图 时必须提供文件名。 如果不提供文件名,系统会自动将图元文件视为临时文件并将其存储在内存中。
可以将可选文本说明添加到包含图片和作者相关信息的图元文件。 应用程序可以在“文件打开”对话框中显示这些字符串,以便为用户提供有关图元文件内容的信息,有助于选择相应的文件。
如果应用程序包含文本说明,则必须在调用 创建强图 时提供指向字符串的指针。
当 创建强图 成功时,它将返回标识特殊图元文件设备上下文的句柄。 图元文件设备上下文是唯一的,因为它与文件关联,而不是与输出设备关联。
当系统处理接收图元文件设备上下文句柄的 GDI 函数时,它会将 GDI 函数转换为增强型图元文件记录,并将该记录追加到增强型图元文件的末尾。
完成图片并将最后一条记录追加到增强型图元文件后,应用程序可以通过调用 关闭强图 函数关闭该文件。 此函数关闭并删除特殊图元文件设备上下文,并返回标识增强型图元文件的句柄。
若要删除增强格式图元文件或增强格式图元文件句柄,请调用 删除强图 函数。
显示存储在增强型图元文件中的图片
可以使用 显示强图 函数显示存储在增强型图元文件中的图片。 将函数的句柄传递给增强型图元文件,而不考虑增强型图元文件记录的格式。
但是,有时需要枚举增强型图元文件中的记录,以搜索特定的 GDI 函数并以某种方式修改函数的参数。 为此,可以使用 枚举强图 并提供回调函数 枚举强图回调 来处理增强型图元文件记录。
若要修改增强型图元文件记录的参数,必须知道记录中参数的格式。
创建增强型图元文件的副本
某些应用程序创建临时备份 (或复制文件) 副本,然后允许用户更改原始文件。 应用程序可以通过调用 复制强图 函数、提供标识增强型图元文件的句柄以及提供指向新文件名称的指针来创建增强型图元文件的备份副本。
若要创建基于内存的增强格式图元文件,请调用 数据强图 函数。
编辑增强型图元文件
大多数绘图、插图和计算机辅助设计 (CAD) 应用程序都需要编辑存储在增强型图元文件中的图片。 尽管编辑增强型图元文件是一项复杂的任务,但可以将 枚举强图 函数与其他函数结合使用,在应用程序中提供此功能。
枚举强图 函数及其关联的回调函数 枚举强图回调 使应用程序能够处理增强型图元文件中的单个记录。
检索存储在增强型图元文件中的可选说明
某些应用程序在“ 打开 ”对话框中显示具有相应文件名的增强型图元文件的文本说明。 通过使用 强图标头 函数检索图元文件标头并检查其成员之一,可以确定增强型图元文件中是否存在此字符串。
如果该字符串存在,应用程序将通过调用 强图描述 函数来检索它。
检索增强型图元文件的二进制版本
可以通过调用 强图数据 函数来检索图元文件的内容;但是,在检索内容之前,必须指定文件的大小。 若要获取大小,可以使用 强图标头 函数并检查相应的成员。
枚举可选调色板中的颜色
若要在各种输出设备上显示图片时实现一致的颜色,可以调用 创建色板 函数并将逻辑调色板存储在增强型图元文件中。 显示存储在增强型图元文件中的图片的应用程序检索此调色板,并在显示图片之前调用 色板映射 函数。
若要确定调色板是否存储在增强型图元文件中,请检索图元文件标头并检查相应的成员。 如果存在调色板,则可以调用 强图色板 函数来检索逻辑调色板。
Microsoft Windows 格式的图元文件的功能有限,很少应使用。 支持 Windows 格式函数,以保持与已编写为作为 16 位基于 Windows 的应用程序运行的应用程序的向后兼容性。 应改用增强格式函数。
基于 Windows 的 16 位应用程序使用 Windows 格式图元文件 。 格式由标头和图元文件记录数组组成。
以下是此格式的限制:
Windows 格式的图元文件依赖于应用程序和设备。 应用程序的映射模式或设备分辨率的更改会影响以此格式创建的图元文件的外观。
Windows 格式图元文件不包含描述原始图片尺寸、创建图片的设备分辨率、可选文本说明或可选调色板的综合标头。
Windows 格式图元文件不支持新的曲线、路径和转换函数。 请参阅下表中支持的函数列表。
某些 Windows 格式的图元文件记录无法缩放。
无法查询与 Windows 格式图元文件关联的图元文件设备上下文, (即应用程序无法检索设备分辨率数据、字体指标等) 。
中文名称英文名称示例作用
关闭强图CloseEnhMetaFile文件=关闭强图(设备)关闭增强型图元文件设备,并返回一个标识增强格式的图元文件的句柄
关闭图元CloseMetaFile文件=关闭图元(设备)关闭元文件设备并返回一个标识Windows格式的元文件的句柄
复制强图CopyEnhMetaFileA复制强图(图元文件,文件名)将增强格式的元文件的内容复制到指定的文件。
复制图元CopyMetaFileA复制图元(图元文件,文件名)将Windows格式的元文件的内容复制到指定的文件。
创建强图CreateEnhMetaFileA设备=创建强图(设备,文件名,矩形,描述)为增强格式的图元文件创建一个设备上下文。该设备上下文可用于存储与设备无关的图片。
创建图元CreateMetaFileA设备=创建图元(文件名)为Windows格式的图元文件创建一个设备
删除强图DeleteEnhMetaFile删除强图(设备)删除增强格式的图元文件或增强格式的图元文件句柄。
删除图元DeleteMetaFile删除图元(设备)删除Windows格式的图元文件或Windows格式的图元文件句柄。
枚举强图EnumEnhMetaFile枚举强图(设备,强元,@回调,数据,矩形)通过检索每个记录并将其传递给指定的回调函数来枚举增强格式的图元文件中的记录。
枚举图元EnumMetaFile枚举图元(设备,图元,@回调,参数)检索每个记录并将其传递给指定的回调函数来枚举Windows格式的图元文件中的记录。
注释图层GdiComment注释图层将注释从缓冲区复制到指定的增强格式的图元文件中。
增强图元GetEnhMetaFileA强图=增强图元(文件名)获取指定文件中的增强格式的元文件句柄
强图数据GetEnhMetaFileBits强图数据(强图,长度,数据)从增强格式的图元文件中获取文件内容到数据缓冲区
数据强图SetEnhMetaFileBits强图=数据强图(长度,数据)从指定的数据创建基于内存的增强格式图元文件。
强图描述GetEnhMetaFileDescriptionA长度=强图描述(强图,内容,长度)从增强格式的图元文件中检索可选文本描述
强图标头GetEnhMetaFileHeader长度=强图标头(强图,大小,@标头)检索包含指定增强格式图元文件的标头的记录。标头为0返回长度
强图色板GetEnhMetaFilePaletteEntries长度=强图色板(强图,数目,数据)从增强格式的图元文件中检索指定数目的调色板数据
强图像素GetEnhMetaFilePixelFormat长度=强图像素(强图,长度,像素)从增强格式的图元文件中检索像素格式信息
图元文件GetMetaFileA图元=图元文件(文件名)获取指定文件中的图元文件句柄
图元数据GetMetaFileBitsEx图元数据(图元,长度,数据)从图元文件中获取文件内容到数据缓冲区
数据图元SetMetaFileBitsEx图元=图元数据(长度,数据)从指定的数据创建基于内存的图元文件。
显示强图PlayEnhMetaFile显示强图(设备,强图,矩形)显示存储在指定增强格式图元文件中的图片。
回放强图PlayEnhMetaFileRecord回放强图(设备,图组,记录,数量)播放增强的图元文件记录
显示图元PlayMetaFile显示图元(设备,强图,矩形)显示存储在指定图元文件中的图片。
回放图元PlayMetaFileRecord回放图元(设备,图组,记录,数量)播放图元文件记录
强图格式GetWinMetaFileBits强图格式(强图,大小,@数据,映射模式,设备)将图元文件中的增强格式记录转换为 Windows 格式的记录,并将转换后的记录存储在指定的缓冲区中。
转强图元SetWinMetaFileBits强元=转强图元(大小,数据,设备,元图)将图元文件转换为新的增强格式,元文件元图类 结构包含建议大小及映射模式
元图类
中文名字英文名称长度作用解释
元图类METAFILEPICT16定义用于通过剪贴板交换图元文件数据的图元文件图片格式。
元图类——成员表
映射mm整数绘制图片的映射模式
宽度xExt整数指定在其中绘制图片的矩形的宽度。
高度yExt整数指定在其中绘制图片的矩形的高度。
图元hMF整数内存图元文件的句柄。
元记录类
中文名字英文名称长度作用解释
元记录类ENHMETARECORD12+包含描述图形设备接口的数据, (GDI) 函数用于在增强格式图元文件中创建图片的一部分。
元记录类——成员表
类别iType整数记录类型。 此成员必须指定为1。
大小nSize整数记录的大小(以字节为单位)。
数组dParm[1]整数传递给由记录标识的 GDI 函数的参数数组。
强图头类
中文名字英文名称长度作用解释
强图头类ENHMETAHEADER112包含增强型图元文件数据,例如增强型图元文件中存储的图片尺寸、增强型图元文件中的记录计数、创建图片的设备分辨率等。
强图头类——成员表
类别iType整数记录类型。 此成员必须指定为1。
大小nSize整数结构大小(以字节为单位)。
边框rclBounds矩形类可以在图元文件中存储的图片周围绘制的最小矩形的尺寸(以设备单位为单位)。 此矩形由图形设备接口 (GDI) 提供。 其尺寸包括右边缘和下边缘。
框架rclFrame矩形类矩形的尺寸(以 0.01 毫米为单位),该矩形围绕存储在图元文件中的图片。 此矩形必须由创建图元文件的应用程序提供。 其尺寸包括右边缘和下边缘。
签名dSignature整数签名。 此成员必须指定为0x464D4520。
版本nVersion整数图元文件版本。 当前版本值0x10000。
长度nBytes整数增强型图元文件的大小(以字节为单位)。
记录nRecords整数增强型图元文件中的记录数。
柄数nHandles整数增强型图元文件句柄表中的句柄数。 此表中 (索引为零。)
预留sReserved整数保留;必须为零。
说明nDescription整数数组中包含增强型图元文件内容的说明的字符数。 如果增强型图元文件不包含说明字符串,则应将此成员设置为零。
释偏offDescription整数从结构的开头到包含增强型图元文件内容说明的数组的偏移量。 如果增强型图元文件不包含说明字符串,则应将此成员设置为零。
条目nPalEntries整数增强型图元文件的调色板中的条目数。
像宽szlDevice.dx整数引用设备的分辨率水平宽度(以像素为单位)。
像高szlDevice.dy整数引用设备的分辨率垂直高度(以像素为单位)。
毫宽szlMillimeters.dx整数参考设备的分辨率水平宽度(以毫米为单位)。
毫高szlMillimeters.dy整数参考设备的分辨率垂直高度(以毫米为单位)。
像素cbPixelFormat整数图元文件中最后记录的像素格式的大小。 如果在录制开始时在引用 DC 中设置了像素格式, 则设置为 像素格式类 的大小。如果录制图元文件时未设置像素格式,则此成员设置为零。 如果设置了多个像素格式,则标头指向最后一个像素格式。
像偏offPixelFormat整数录制图元文件时使用的像素格式的偏移量。 如果在录制开始时或录制期间在引用 DC 中设置了像素格式, 则设置为图元文件中 像素格式类 的偏移量。 如果在记录图元文件时未设置像素格式,则此成员将设置为零。 如果设置了多个像素格式,则标头指向最后一个像素格式。
开图bOpenGL整数指示图元文件中是否存在任何 OpenGL 记录。 bOpenGL 是一个简单的布尔标志,可用于确定增强的图元文件是否需要 OpenGL 处理。 当图元文件包含 OpenGL 记录时, bOpenGL 为 TRUE;否则为 FALSE。
微宽szlMicrometers.dx整数参考设备的大小(以微米为单位)。
微高szlMicrometers.dy整数参考设备的大小(以微米为单位)。
路径转换
路径是与设备上下文关联的对象之一, (DC) 。 但是,与 (笔、画笔和字体) 属于任何新 DC 的默认对象不同,没有默认路径。
若要创建路径并将其选择到DC中,首先需要定义描述该路径的点。通过调用 开启路径 函数、指定适当的绘图函数,然后通过调用 结束路径 函数来完成的。(开启路径、绘图函数和 结束路径) 组合构成 路径括号。
绘图函数包括:画弧线、椭圆弧、画椭圆弧、画和弦、关闭图形、画椭圆、画线、移到、画饼、多点曲线、离散曲线、多线曲线、画多边形、画折线、画折线图、叠折线、画方块、圆角矩形、绘制字符、写字到
当应用程序调用 结束路径 时,系统会选择指定 DC 的关联路径。如果之前已选择另一个路径进入 DC,系统会删除该路径而不保存它。系统选择 DC 的路径后,应用程序可以通过以下方式之一对路径进行操作:
使用当前笔绘制路径的轮廓。
使用当前画刷绘制路径的内部。
绘制轮廓并填充路径的内部。
修改路径 (将曲线转换为线段) 。
将路径转换为剪辑路径。
将路径转换为区域。
通过将路径中的每个曲线转换为一系列线段来平展路径。
检索构成路径的线条和曲线的坐标。
应用程序可以通过调用 勾画路径 函数来绘制路径的轮廓,它可以通过调用 填充路径 函数来填充路径的内部,也可以通过调用 勾画填充 函数来勾勒和填充路径。
每当应用程序填充路径时,系统都使用 DC 的当前填充模式。应用程序可以通过调用 填充模式 函数来检索此模式,也可以通过调用 模式填充 函数来设置新的填充模式。请参阅 区域。 下图显示了由计算机辅助设计 (CAD) 应用程序创建的对象的横截面,这些路径同时具有轮廓和填充的路径。

显示对象的横断面视图的插图,其中不同填充图案指示了各种部分
路径是使用逻辑单元和当前转换定义的。 (如果已调用 空间转换 函数,则逻辑单元为世界单位;否则,逻辑单元为页单位。)
应用程序可以使用世界转换来缩放、旋转、剪切、平移和反射定义路径的线条和贝塞尔曲线。
如果笔是几何笔,应用程序还可以使用 空间转换 来勾勒出用于勾勒路径的笔的形状。
应用程序可以使用剪裁和路径来创建特殊的图形效果。 下图显示了用较大的 Arial 字体绘制的文本字符串。

显示白色背景上的黑色文本的插图
下图显示了选择文本作为剪辑路径并为中心位于字符串上方和左侧的圆绘制径向线条的结果。

插图显示相同的文本,但填充了线条而不是纯黑色
应用程序通过生成路径括号,然后调用 选择剪裁 函数来创建剪辑路径。 将剪辑路径选入 DC 后,输出仅显示在路径的边框内。
除了创建特殊图形效果外,剪辑路径在将图像另存为增强型图元文件的应用程序中也很有用。通过使用剪辑路径,应用程序能够确保设备独立性,因为用于指定路径的单元是逻辑单元。
应用程序可以通过调用 转换区域 函数将路径转换为区域。 与 选择剪裁 一样, 转换区域 在创建特殊图形效果时很有用。 例如,没有允许应用程序偏移路径的函数;
但是,有一个函数使应用程序能够偏移区域 (区域偏移) 。 使用 转换区域,应用程序可以通过创建定义形状的路径、调用 转换区域 将路径转换为区域,
然后通过按顺序调用函数(如 填充区域、区域偏移 和 填充区域)来创建复杂形状动画效果。
应用程序可以通过调用 转换线段 函数来平展路径中的曲线。 对于将文本拟合到包含曲线的路径轮廓上的应用程序,此函数特别有用。 为了适应文本,应用程序必须执行以下步骤:
创建文本显示的路径。
调用 转换线段 函数可将路径中的曲线转换为线段。
调用 获取路径 函数以检索这些线段。
计算字符串中每行的长度和每个字符的宽度。
使用线宽和字符宽度数据沿曲线放置每个字符。
中文名称英文名称示例作用
丢弃路径AbortPath丢弃路径(设备)抛弃选入指定设备场景中的所有路径。也取消目前正在进行的任何路径的创建工作
开启路径BeginPath开启路径(设备)启动一个路径分支。在这个命令后执行的GDI绘图命令会自动成为路径的一部分。对线段的连接会结合到一起。
结束路径EndPath结束路径(设备)关闭路径括号,并将括号中定义的路径选择到指定的设备
关闭图形CloseFigure关闭图形(设备)关闭路径中的打开图形。
填充路径FillPath填充路径(设备)关闭当前路径中的任何打开的图形,并使用当前画笔和多边形填充模式填充路径的内部。
转换线段FlattenPath转换线段(设备)将一个路径中的所有曲线都转换成线段
获取路径GetPath获取路径(设备,点组,点类,数量)取得对当前路径进行定义的一系列曲线的控制点
斜率限制GetMiterLimit斜率限制(设备,@斜率)取得设备场景的斜率限制
限制斜率SetMiterLimit限制斜率(设备,斜率,旧)为指定设备的斜接连接长度设置限制。不需要获取旧斜率可以为0
勾画填充StrokeAndFillPath勾画填充(设备)关闭路径中所有打开的图形,使用当前笔描边路径的轮廓,并使用当前画笔填充其内部。
勾画路径StrokePath勾画路径(设备)使用当前笔呈现指定的路径。
重设路径WidenPath重设路径(设备)根据选定画笔的宽度,重新定义当前选定的路径。
打印函数
中文名称英文名称示例作用
停止打印AbortDoc停止打印(设备)停止当前打印作业,并擦除自上次调用StartDoc功能以来绘制的所有内容
结束打印EndDoc结束打印(设备)停结束打印作业。
开始打印StartDoc开始打印(设备,文档类)启动打印作业
准备打印StartPage准备打印(设备)准备打印机驱动程序以接受数据。
开关预览ColorMatchToTarget开关预览(设备,方式)启用或禁用指定设备(通常是打印机)的预览。方式1启动预览,2禁用预览,3禁用预览并删除预览的颜色转换
打印功能DeviceCapabilitiesA打印功能(机名,"LPT1",功能,@接收,@驱动)检索打印机驱动程序的功能
结束页面EndPage结束页面(设备)通知设备应用程序已完成对页面的写入。此函数通常用于指示设备驱动程序转到新页面。
删除脱机GdiDeleteSpoolFileHandle删除脱机(脱机文件)释放假脱机文件句柄。
结束元档GdiEndDocEMF结束元档(脱机文件)结束 EMF 格式打印作业的 EMF 播放操作。
结束元页GdiEndPageEMF结束元页(脱机文件,标志)结束 EMF 格式打印作业的物理页面的 EMF 播放操作。标志:1启用颜色优化
打印设备GdiGetDC打印设备(脱机文件)返回打印机设备上下文的句柄。
取驱动页GdiGetDevmodeForPage取驱动页(脱机文件,页码,@指定驱动,@上个驱动)返回打印作业的指定页和上一页的 驱动模式 结构。
打印页数GdiGetPageCount打印页数(脱机文件)返回打印作业中的页数。
打印句柄GdiGetPageHandle打印句柄(脱机文件,页码,页类)返回打印作业中指定页面的句柄。页类:0普通,1水印
打印假脱GdiGetSpoolFileHandle打印假脱(打印机名,驱动,文档名)返回打印作业的 EMF 文件(假脱机文件)的句柄。
播放页面GdiPlayPageEMF播放页面(脱机文件,页面,矩形,边框,剪辑区)为假脱机打印作业的一个文档页播放指定矩形内的 EMF 记录。
重置元档GdiResetDCEMF重置元档(脱机文件,驱动)在播放后台打印的 EMF 打印作业期间重置打印机的设备上下文。由取驱动页获取的指定驱动
初始元档GdiStartDocEMF初始元档(脱机文件,驱动)对 EMF 格式的打印作业执行初始化操作。
初始元页GdiStartPageEMF初始元页(脱机文件)对 EMF 格式打印作业的物理页面执行初始化操作。
打印中止SetAbortProc打印中止(设备,回调)设置应用程序定义的中止函数,该函数允许在后台打印期间取消打印作业。
中止回调
中文名字英文名称参数作用解释
中止回调AbortProc2当在后台打印期间取消打印作业时,将调用此函数。返回真以继续打印作业,或返回假以取消打印作业。
中止回调——参数表
设备unnamedParam1整数unnamedParam1
数据unnamedParam2整数unnamedParam2
打印机功能
英文名称作用解释
DC_BINNAMES0检索打印机的纸箱的名称。 接收 缓冲区接收字符串缓冲区数组。 每个字符串缓冲区长度为 24 个字符,包含纸箱的名称。 返回值指示数组中的条目数。 除非名称长度为 24 个字符,否则名称字符串以 0 结尾。 如果 接收 为 0,则返回值是所需的 bin 条目数。
DC_BINS1检索可用纸箱的列表。 接收 缓冲区接收 一个 整形 值数组,这些值指示打印机的可用纸张来源。 返回值指示数组中的条目数。 有关可能数组值的列表,请参阅 设备环境类 结构的 dmDefaultSource 成员的说明。 如果 接收 为 0,则返回值指示数组中所需的条目数。
DC_COLLATE2如果打印机支持排序,则返回值为 1;否则,返回值为零。 不使用 接收 参数。
DC_COLORDEVICE3如果打印机支持彩色打印,则返回值为 1;否则,返回值为零。 不使用 接收 参数。
DC_COPIES4返回设备可以打印的副本数。
DC_DRIVER5返回打印机驱动程序的版本号。
DC_DUPLEX6如果打印机支持双面打印,则返回值为 1;否则,返回值为零。 不使用 接收 参数。
DC_ENUMRESOLUTIONS7检索打印机支持的分辨率列表。 接收 缓冲区接收 整数 值数组。 对于每个支持的分辨率,数组包含一对 整数 值,用于指定分辨率的 x 和 y 维度(以每英寸点为单位)。 返回值指示支持的分辨率数。 如果 接收 为 0,则返回值指示支持的分辨率数。
DC_EXTRA8返回打印机驱动程序的 设备环境类 结构的特定于设备的部分所需的字节数。
DC_FIELDS9返回打印机驱动程序的 设备环境类 结构的 标志 成员。 标志 成员指示打印机驱动程序支持结构中与设备无关部分的成员。
DC_FILEDEPENDENCIES10检索安装驱动程序时需要加载的任何其他文件的名称。 接收 缓冲区接收字符串缓冲区数组。 每个字符串缓冲区长度为 64 个字符,包含文件的名称。 返回值指示数组中的条目数。 除非名称长度为 64 个字符,否则名称字符串以 0 结尾。 如果 接收 为 0,则返回值为文件数。
DC_MAXEXTENT11返回打印机驱动程序的 设备环境类 结构的 长度 和 纸宽 成员可以指定的最大纸张大小。 返回值的 低字 包含最大 纸宽 值,高字 包含最大 长度 值。
DC_MEDIAREADY12检索当前可供使用的纸质表单的名称。 接收 缓冲区接收字符串缓冲区数组。 每个字符串缓冲区长度为 64 个字符,包含纸质窗体的名称。 返回值指示数组中的条目数。 除非名称长度为 64 个字符,否则名称字符串以 0 结尾。 如果 接收 为 0,则返回值为纸质表单的数量。
DC_MEDIATYPENAMES13检索支持的媒体类型的名称。 接收 缓冲区接收字符串缓冲区数组。 每个字符串缓冲区长度为 64 个字符,包含支持的媒体类型的名称。 返回值指示数组中的条目数。 除非名称长度为 64 个字符,否则字符串以 0 结尾。 如果 接收 为 0,则返回值是所需的媒体类型名称数。
DC_MEDIATYPES14检索支持的媒体类型的列表。 接收 缓冲区接收指示支持的媒体类型的 整数 值数组。 返回值指示数组中的条目数。 有关可能数组值的列表,请参阅 设备环境类 结构的 媒体 成员的说明。 如果 接收 为 0,则返回值指示数组中所需的条目数。
DC_MINEXTENT15返回打印机驱动程序的 设备环境类 结构的 长度 和 纸宽 成员可以指定的最小纸张大小。 返回值的 低字 包含最小 纸宽 值,高字 包含最小 长度 值。
DC_ORIENTATION16根据纵向逆时针旋转以生成横向方向的度数返回设备的纵向和横向方向之间的关系。 返回值可以是下列值之一:0无横向。90纵向旋转 90 度以产生景观。270纵向旋转 270 度以产生景观。
DC_NUP17检索一个整数数组,这些整数指示打印机能够打印每个打印页的多个文档页。 接收 缓冲区接收 整数 值的数组。 每个值表示每个打印页支持的文档页数。 返回值指示数组中的条目数。 如果 接收 为 0,则返回值指示数组中所需的条目数。
DC_PAPERNAMES18检索受支持纸张名称的列表, (例如 Letter 或 Legal) 。 接收 缓冲区接收字符串缓冲区数组。 每个字符串缓冲区长度为 64 个字符,包含纸质窗体的名称。 返回值指示数组中的条目数。 除非名称长度为 64 个字符,否则名称字符串以 0 结尾。 如果 接收 为 0,则返回值是纸质表单的数量。
DC_PAPERS19检索支持的纸张大小列表。 接收 缓冲区接收一个 整形 值数组,这些值指示打印机的可用纸张大小。 返回值指示数组中的条目数。 有关可能数组值的列表,请参阅 设备环境类 结构的 dmPaperSize 成员的说明。 如果 接收 为 0,则返回值指示数组中所需的条目数。
DC_PAPERSIZE20检索每个支持的纸张尺寸(以十分之一毫米为单位)。 接收 缓冲区接收 POINT 结构的数组。 每个结构都包含纸张大小的宽度 (x 维) 和长度 (y 维) ,就像纸张处于 DMORIENT_PORTRAIT 方向一样。 返回值指示数组中的条目数。
DC_PERSONALITY21检索打印机支持的打印机说明语言的列表。 接收 缓冲区接收字符串缓冲区数组。 每个缓冲区长度为 32 个字符,包含打印机说明语言的名称。 返回值指示数组中的条目数。 名称字符串以 0 结尾,除非名称长度为 32 个字符。 如果 接收 为 0,则返回值指示所需的数组条目数。
DC_PRINTERMEM22返回值是可用打印机内存量(以千字节为单位)。 不使用 接收 参数。
DC_PRINTRATE23返回值指示打印机的打印速率。 为 DC_PRINTRATEUNIT 返回的值指示 DC_PRINTRATE 值的单位。 不使用 接收 参数。
DC_PRINTRATEPPM24返回值指示打印机的打印速率(以每分钟页为单位)。 不使用 接收 参数。
DC_PRINTRATEUNIT25指示打印速率单位,返回值是以下值之一。1每分钟页数。2每秒的字符数。3每分钟行数。4每分钟英寸数。
DC_SIZE26返回打印机驱动程序的 设备环境类 结构的 大小 成员。
DC_STAPLE27如果打印机支持装订,则返回值为非零值;否则,返回值为零。 不使用 接收 参数。
DC_TRUETYPE28检索驱动程序使用 TrueType 字体的能力。 接收 参数应为 0。 返回值可以是以下一个或多个值:1设备可以将 TrueType 字体打印为图形。2设备可以下载 TrueType 字体。4设备可以将设备字体替换为 TrueType 字体。
DC_VERSION29返回打印机驱动程序符合的规范版本。

增强绘图(GDI+)编程基础

Windows GDI+ GDI+ 可用于所有基于 Windows 的应用程序。是在 Windows XP 和 Windows Server 2003 中引入的一组API,负责在屏幕上和打印机上显示信息。顾名思义,GDI+ 是 Windows 图形设备接口 (GDI) 的后续版本,优化了 GDI 的许多功能。
Windows GDI+ 的服务分为以下三大类:二维向量、图形映像和版式
二维向量图形
矢量图形涉及绘制基元 (例如由坐标系上的点集指定的线条、曲线和图形) 。 例如,直线可以由其两个端点指定,矩形可以通过一个点指定,该点提供其左上角的位置,以及一对数字来指定其宽度和高度。 简单路径可以通过要通过直线连接的点数组来指定。 贝塞尔自由绘制曲线是由四个控制点指定的复杂曲线。
映像
某些种类的图片很难或不可能用矢量图形技术显示。 例如,工具栏按钮上的图片以及显示为图标的图片很难指定为线条和曲线的集合。 使用矢量技术创建拥挤的棒球场的高分辨率数字照片将更加困难。 此类型的图像存储为位图,这些数字数组表示屏幕上各个点的颜色。 存储有关位图的信息的数据结构往往比矢量图形所需的数据结构更复杂,因此 GDI+ 中有多个类专用于此目的。
版式
版式涉及以各种字体、大小和样式显示文本。 GDI+ 为此复杂任务提供了大量支持。 GDI+ 中的一项新功能是次像素抗锯齿,它使在 LCD 屏幕上呈现的文本外观更流畅。

第一节 初始化绘图

在GDI+中,通过调用 绘图启动 函数可以初始化GDI+,而通过调用 绘图结束 函数可以结束对GDI+引用。需要注意的是,这两个函数是成对出现的。
编写自定义GDI+初始化过程和GDI+结束过程,其代码如下所示:
整数 令牌;//申请一个全局整数变量作为绘图启动的初始化标志
绘图启动类 绘图(版本=1);//申请一个绘图启动类,版本必须指定为1
程序段 初始化绘图
如果(令牌=0)绘图启动(@令牌,绘图,0)
结束

程序段 关闭绘图
如果(令牌)绘图结束(令牌)
结束

可以在窗体启动过程中调用初始化过程来初始化GDI+,并在程序结束过程中调用关闭绘图来结束对GDI+的引用。
绘图启动-函数功能
中文名字英文名称参数作用解释
绘图启动GdiplusStartup3初始化 Windows GDI+。 在进行任何其他 GDI+ 调用之前调用
绘图启动——参数表
令牌token整数指向接收令牌的整数指针。
输入input整数指向包含 GDI+ 版本的 绘图启动类 结构的指针。
输出output整数指向 绘图输出类 结构的指针。如果输入参数的 后台 成员为假,则此参数可以为0。
绘图启动类
中文名字英文名称长度作用解释
绘图启动类GdiplusStartupInput16包含GdiplusStartup函数所需的一个参数块。
绘图启动类——成员表
版本GdiplusVersion整数必须为1
调试DebugEventCallback整数可以在调试版本上调用的回调函数的指针
后台SuppressBackgroundThread整数指定是否禁止显示 GDI+ 后台线程的布尔值。
解码SuppressExternalCodecs整数指定是否希望 GDI+ 禁止显示外部图像编解码器的布尔值。
绘图调试回调
中文名字英文名称参数作用解释
绘图调试回调DebugEventProc2在应用程序中实现并传递给 绘图启动类 构造函数的回调函数的签名。
绘图调试回调——成员表
级别level整数表示调试事件的级别。0致命级别,1警告级别
信息message整数指向包含调试事件消息的窄字符串的指针。
绘图输出类
中文名字英文名称长度作用解释
绘图输出类GdiplusStartupOutput8绘图启动 函数在其输出参数中 指向挂钩函数和脱钩函数的指针。
绘图输出类——成员表
挂钩NotificationHookProc整数接收指向挂钩函数的指针。
脱钩NotificationUnhook整数接收指向挂钩函数的指针。
绘图挂钩回调
中文名字英文名称参数作用解释
绘图挂钩回调NotificationHookProc1绘图输出类 结构中返回的通知挂钩函数的签名。
绘图挂钩回调——参数表
牌号token整数指向包含令牌的整数指针。
绘图脱钩回调
中文名字英文名称参数作用解释
绘图脱钩回调NotificationUnhook1绘图输出类 结构中返回的通知脱钩函数的签名。
绘图脱钩回调——参数表
牌号token整数指向包含令牌的整数指针。

创建图形设备对象
图形设备是GDI+程序设计的基础对象,包括绘制图像、输出文本、绘制几何图形和填充以及坐标系统的变换等各种操作都是建立在该对象基础上的。
在GDI+中,可以根据设备、窗口和图像等不同的对象句柄分别调用 设备取图、窗口取图和图像取图 等不同创建函数的来创建图形设备对象。

在函数表示例参数中,图形设备对象简称为图形,也是为了跟基础绘图GDI的设备进行区分。函数名里简称绘图或者绘、图

初始化图形设备和图形设备绘制函数

中文名称英文名称示例作用
绘图启动GdiplusStartup绘图启动(@令牌,输入,输出)函数初始化 Windows GDI+。 在进行任何其他 GDI+ 调用之前调用
绘图结束GdiplusShutdown绘图结束(令牌)清理 Windows GDI+ 使用的资源。
绘图刷新GdipFlush绘图刷新(图形,意向)刷新所有待处理的图形操作。意向:0异步,1同步
绘图内存GdipAlloc指针=绘图内存(大小)为GDI +对象分配内存
绘存释放GdipFree绘存释放(指针)释放为GDI +对象分配的内存。
设备取图GdipCreateFromHDC设备取图(设备,@图形)创建与指定设备上下文相关联的图形设备对象。
绘制设备GdipCreateFromHDC2绘制设备(设备,设备,@图形)创建与指定设备上下文和指定设备关联的图形设备对象。
窗口取图GdipCreateFromHWND窗口取图(窗口,@图形)创建与指定窗口相关联的图形设备对象。
绘制窗口GdipCreateFromHWNDICM绘制窗口(窗口,@图形)使用图像颜色管理 (ICM) 创建与指定窗口相关联的图形设备对象。
绘图设备GdipGetDC绘图设备(图形,@设备)获取与此绘图对象关联的设备上下文的句柄。
绘图释放GdipReleaseDC绘图释放(图形,设备)释放通过先前调用绘图设备函数获取的设备上下文句柄。
图像取图GdipGetImageGraphicsContext图像取图(图像,@图形)创建与图片对象相关联的图形设备对象。
绘图删除GdipDeleteGraphics绘图删除(图形)删除指定的图形设备对象。
绘图清色GdipGraphicsClear绘图清色(图形,颜色)将图形设备对象清除为指定的颜色。
绘改合成GdipSetCompositingMode绘改合成(图形,模式)设置此图形设备对象的合成模式。0=混合,1=覆盖
绘取合成GdipGetCompositingMode绘取合成(图形,@模式)获取此图形设备对象的合成模式。0=混合,1=覆盖
绘改原点GdipSetRenderingOrigin绘改原点(图形,x,y)设置此图形设备对象的呈现原点。
绘取原点GdipGetRenderingOrigin绘取原点(图形,@x,@y)获取此图形设备对象的呈现原点。
绘改质量GdipSetCompositingQuality绘改质量(图形,质量)设置此图形设备对象的合成质量
绘取质量GdipGetCompositingQuality绘取质量(图形,@质量)获取此图形设备对象的合成质量
绘改画质GdipSetSmoothingMode绘改画质(图形,画质)设置此图形设备对象的呈现质量。平滑 (抗锯齿)
绘取画质GdipGetSmoothingMode绘取画质(图形,@画质)获取此图形设备对象的呈现质量。平滑 (抗锯齿)
绘改偏移GdipSetPixelOffsetMode绘改偏移(图形,模式)设置此图形设备对象的像素偏移模式
绘取偏移GdipGetPixelOffsetMode绘取偏移(图形,@模式)获取此图形设备对象的像素偏移模式
绘改渲染GdipSetTextRenderingHint绘改渲染(图形,模式)设置此图形设备对象的文本呈现模式
绘取渲染GdipGetTextRenderingHint绘取渲染(图形,@模式)获取此图形设备对象的文本呈现模式
绘改对比GdipSetTextContrast绘改对比(图形,对比度)设置此图形设备对象的抗锯齿文本对比度值。
绘取对比GdipGetTextContrast绘取对比(图形,@对比度)获取此图形设备对象的抗锯齿文本对比度值。
绘改内插GdipSetPixelOffsetMode绘改内插(图形,模式)设置此图形设备对象的内插模式。用于确定缩放或旋转图像时使用的算法。
绘取内插GdipGetPixelOffsetMode绘取内插(图形,@模式)获取此图形设备对象的内插模式。用于确定缩放或旋转图像时使用的算法。
绘改转矩GdipSetWorldTransform绘改转矩(图形,矩阵)设置图形设备对象的世界转换矩阵。
绘取转矩GdipGetWorldTransform绘取转矩(图形,@矩阵)获取图形设备对象的世界转换矩阵。
绘转标识GdipResetWorldTransform绘转标识(图形,颜色)将图形设备对象的世界转换矩阵设置为标识矩阵。
绘乘矩阵GdipMultiplyWorldTransform 绘乘矩阵(图形,矩阵,顺序)使用自身和另一个矩阵的乘积更新此图形对象的世界转换矩阵。乘法顺序:0新矩阵在左侧,1在右侧
绘乘转换GdipTranslateWorldTransform 绘乘转换(图形,小数 x缩,小数 y缩,顺序)此图形对象的世界转换矩阵设置为等于自身和转换矩阵的乘积。乘法顺序:0新矩阵在左侧,1在右侧
绘乘缩放GdipScaleWorldTransform 绘乘缩放(图形,小数 x缩,小数 y缩,顺序)此图形对象的世界转换矩阵设置为等于自身和缩放矩阵的乘积。乘法顺序:0新矩阵在左侧,1在右侧
绘乘旋转GdipRotateWorldTransform 绘乘旋转(图形,小数 角度,顺序)使用自身乘积和旋转矩阵更新此图形对象的世界转换矩阵。乘法顺序:0新矩阵在左侧,1在右侧
绘页标识GdipResetPageTransform绘页标识(图形)将页面转换矩阵重置为标识。
绘改单位GdipSetPageUnit绘改单位(图形,单位)设置此图形设备对象的度量单位。度量单位
绘取单位GdipGetPageUnit绘取单位(图形,@单位)获取此图形设备对象的度量单位。度量单位
绘改缩放GdipSetPageScale绘改缩放(图形,小数 比例)设置图形设备对象的页面转换设置的缩放因子。
绘取缩放GdipGetPageScale绘取缩放(图形,小数 @比例)获取图形设备对象的页面转换设置的缩放因子。
绘图宽度GdipGetDpiX绘图宽度(图形,小数 @宽)设置图形设备对象的显示设备的水平分辨率(以点/英寸为单位)。
绘图高度GdipGetDpiY绘图高度(图形,小数 @高)获取图形设备对象的显示设备的垂直分辨率(以点/英寸为单位)。
绘转坐标GdipTransformPointsI绘转坐标(图形,目标,源坐标,点组,数量)将点数组从一个坐标空间转换为另一个坐标空间。 转换基于此 图形设备 对象的当前世界和页面转换。
绘图近色GdipGetNearestColor绘图近色(图形,@颜色)获取与传入的颜色最接近的颜色。此方法适用于每像素 8 位或具有 8 位调色板的较低显示设备。
绘半色板GdipCreateHalftonePalette半调色板(图形)获取 Windows 半色调调色板。
绘图线条GdipDrawLine绘图线条(图形,笔,小数 x1,小数y1,小数x2,小数y2)绘制连接两个点的线条。小数值
绘图画线GdipDrawLineI绘图画线(图形,笔,x1,y1,x2,y2)绘制连接两个点的线条。整数值
绘图线序GdipDrawLines绘图线序(图形,笔,小数 点组,数量)绘制连接线的序列。小数值数组
绘图线组GdipDrawLinesI绘图线组(图形,笔,点组,数量)绘制连接线的序列。整数值数组
绘图弧线GdipDrawArc绘图弧线(图形,笔,左,顶,宽,高,起始角,扫视角)小数值绘制弧线。弧线是椭圆的一部分。
绘制弧线GdipDrawArcI绘制弧线(图形,笔,左,顶,宽,高,起始角,扫视角)整数值绘制弧线(角度为小数)。弧线是椭圆的一部分。
绘图曲线GdipDrawBezier绘图曲线(图形,笔,x1,y1,x2,y2,x3,y3,x4,y4)小数值绘制贝塞尔曲线。
绘制曲线GdipDrawBezierI绘制曲线(图形,笔,x1,y1,x2,y2,x3,y3,x4,y4)整数值绘制贝塞尔曲线。
绘点曲线GdipDrawBeziers绘点曲线(图形,笔,点组,数量)小数值数组绘制连接的贝塞尔样条序列。
绘组曲线GdipDrawBeziersI绘组曲线(图形,笔,点组,数量)整数值数组绘制连接的贝塞尔样条序列。
绘图矩形GdipDrawRectangle绘图矩形(图形,笔,左,顶,宽,高)小数值绘制矩形。
绘制矩形GdipDrawRectangleI绘制矩形(图形,笔,左,顶,宽,高)整数值绘制矩形。
绘多矩形GdipDrawRectangles绘多矩形(图形,笔,点组,数量)小数值矩形数组绘制一系列矩形。
绘组矩形GdipDrawRectanglesI绘组矩形(图形,笔,点组,数量)整数值矩形数组绘制一系列矩形。
绘图方块GdipFillRectangle绘图方块(图形,刷子,左,顶,宽,高)使用笔刷填充矩形的内部。(小数值)
绘制方块GdipFillRectangleI绘制方块(图形,刷子,左,顶,宽,高)使用笔刷填充矩形的内部。(整数值)
绘多方块GdipFillRectangles绘多方块(图形,刷子,数组,数量)使用笔刷填充矩形的内部。(小数矩形数组)
绘组方块GdipFillRectanglesI绘组方块(图形,刷子,数组,数量)使用笔刷填充矩形的内部。(整数矩形数组)
绘图椭圆GdipDrawEllipse绘图椭圆(图形,笔,左,顶,宽,高)小数值绘制椭圆形。
绘制椭圆GdipDrawEllipseI绘制椭圆(图形,笔,左,顶,宽,高)整数值绘制椭圆形。
绘图椭面GdipFillEllipse绘图椭面(图形,刷子,左,顶,宽,高)小数值绘制画刷填充的椭圆形。
绘制椭面GdipFillEllipseI绘制椭面(图形,刷子,左,顶,宽,高)整数值绘制画刷填充的椭圆形。
绘图画饼GdipDrawPie绘图画饼(图形,笔,左,顶,宽,高,起始角,扫视角)小数值绘制饼图。
绘制画饼GdipDrawPieI绘制画饼(图形,笔,左,顶,宽,高,起始角,扫视角)整数值绘制饼图(角度为小数)。
绘图饼面GdipFillPie绘图饼面(图形,笔,刷子,顶,宽,高,起始角,扫视角)小数值绘制画刷填充的饼图。
绘制饼面GdipFillPieI绘制饼面(图形,笔,刷子,顶,宽,高,起始角,扫视角)整数值绘制画刷填充的饼图(角度为小数)。
绘图多边GdipDrawPolygon绘图多边(图形,笔,点组,数量)小数值坐标点数组绘制多边形。
绘制多边GdipDrawPolygonI绘制多边(图形,笔,点组,数量)整数值坐标点数组绘制多边形。
绘图多面GdipFillPolygon绘图多面(图形,刷子,点组,数量,模式)小数值坐标点数组绘制画刷填充的多边形。填充模式:0奇偶,1缠绕
绘制多面GdipFillPolygonI绘制多面(图形,刷子,点组,数量,模式)整数值坐标点数组绘制画刷填充的多边形。填充模式:0奇偶,1缠绕
绘图多形GdipFillPolygon绘图多形(图形,刷子,点组,数量)小数值坐标点数组绘制画刷填充的多边形。填充模式为0奇偶
绘制多形GdipFillPolygonI绘制多形(图形,刷子,点组,数量)整数值坐标点数组绘制画刷填充的多边形。填充模式为0奇偶
绘图路径GdipDrawPath绘图路径(图形,笔,路径)绘制由路径对象定义的线条和曲线序列。
绘图片区GdipFillPath绘图片区(图形,笔,路径)使用画刷填充路径的内部。若路径未闭合,会将图形的起点和终点的连线闭合。
绘图闭弧GdipDrawCurve绘图闭弧(图形,笔,点组,数量)小数值坐标点数组绘制闭合的基数样条。
绘制闭弧GdipDrawCurveI绘制闭弧(图形,笔,点组,数量)整数值坐标点数组绘制闭合的基数样条。
绘图弧度GdipDrawCurve2绘图弧度(图形,笔,点组,数量,曲率)小数值坐标点数组绘制闭合的基数样条。
绘制弧度GdipDrawCurve2I绘制弧度(图形,笔,点组,数量,曲率)整数值坐标点数组绘制闭合的基数样条。
绘图弧形GdipDrawCurve3绘图弧形(图形,笔,点组,数量,偏移,段数,曲率)小数值坐标点数组绘制闭合的基数样条。
绘制弧形GdipDrawCurve3I绘制弧形(图形,笔,点组,数量,偏移,段数,曲率)整数值坐标点数组绘制闭合的基数样条。
绘图封闭GdipDrawClosedCurve绘图封闭(图形,笔,点组,数量,弧度)小数值坐标点数组绘制封闭的基数样条。
绘制封闭GdipDrawClosedCurveI绘制封闭(图形,笔,点组,数量,弧度)整数值坐标点数组绘制封闭的基数样条。
绘图闭合GdipDrawClosedCurve2绘图闭合(图形,笔,点组,数量)小数值坐标点数组绘制封闭的基数样条。
绘制闭合GdipDrawClosedCurve2I绘制闭合(图形,笔,点组,数量)整数值坐标点数组绘制封闭的基数样条。
绘图填充GdipFillClosedCurve绘图填充(图形,刷子,点组,数量)小数值坐标点数组绘制闭合的基数样条并填充。
绘制填充GdipFillClosedCurveI绘制填充(图形,刷子,点组,数量)整数值坐标点数组绘制闭合的基数样条。
绘图填封GdipFillClosedCurve2绘图填封(图形,刷子,点组,数量,弧度,模式)小数值坐标点数组绘制闭合的基数样条并填充。填充模式:0奇偶,1缠绕
绘制填封GdipFillClosedCurve2I绘制填封(图形,刷子,点组,数量,弧度,模式)整数值坐标点数组绘制闭合的基数样条并填充。填充模式:0奇偶,1缠绕
绘刷区域GdipFillRegion绘刷区域(图形,刷子,区域)使用画刷填充指定区域。
绘图注释GdipComment绘图注释(图形,长度,注释)向现有的图元文件添加文本注释。
绘图定点GdipDrawImage绘图定点(图形,图片,X,Y)在指定位置(单精度)绘制图像。
绘制定点GdipDrawImageI绘制定点(图形,图片,X,Y)在指定位置(整数)绘制图像。
绘图定区GdipDrawImageRect绘图定区(图形,图片,左,顶,宽,高)在指定区域(单精度)绘制图像。
绘制定区GdipDrawImageRectl绘制定区(图形,图片,左,顶,宽,高)在指定区域(整数)绘制图像。
绘图点组GdipDrawImagePoints绘图点组(图形,图片,点组,数量)在指定坐标点数组(单精度)绘制图像。
绘制点组GdipDrawImagePointsl绘制点组(图形,图片,点组,数量)在指定坐标点数组(整数)绘制图像。
绘图点区GdipDrawImagePointsRect绘图点区(图形,图片,点组,数量,源左,源顶,
源宽,源高,单位,属性,回调,附加)
在指定点数组(单精度)绘制指定区域图像。度量单位
绘制点区GdipDrawImagePointsRectl绘制点区(图形,图片,点组,数量,源左,源顶,
源宽,源高,单位,属性,回调,附加)
在指定点数组(整数)绘制指定区域图像。度量单位
绘图区块GdipDrawImageRectRect绘图区块(图形,图片,左,顶,宽,高,源左,源顶,
源宽,源高,单位,属性,回调,附加)
在指定区域(单精度)绘制指定区域图像。度量单位
区块整数GdipDrawImageRectRectl区块整数(图形,图片,左,顶,宽,高,源左,源顶,
源宽,源高,单位,属性,回调,附加)
在指定区域(整数)绘制指定区域图像。度量单位
绘图特效GdipDrawImageFX绘图特效(图形,图片,矩形,矩阵,效果,属性,单位)用指定效果后绘制图像的一部分。
绘图元点GdipEnumerateMetafileDestPoint绘图元点(图形,图元,坐标,回调,附加,属性)为指定图元文件中的每条记录调用应用程序定义的回调函数。坐标为小数
绘制元点GdipEnumerateMetafileDestPointI绘制元点(图形,图元,坐标,回调,附加,属性)为指定图元文件中的每条记录调用应用程序定义的回调函数。坐标为整数
绘图元区GdipEnumerateMetafileDestRect绘图元区(图形,图元,矩形,回调,附加,属性)为指定图元文件中的每条记录调用应用程序定义的回调函数。矩形为小数
绘制元区GdipEnumerateMetafileDestRectI绘制元区(图形,图元,矩形,回调,附加,属性)为指定图元文件中的每条记录调用应用程序定义的回调函数。矩形为整数
绘元点组GdipEnumerateMetafileDestPointsI绘元点组(图形,图元,点组,数量,回调,附加,属性)为指定图元文件中的每条记录调用应用程序定义的回调函数。坐标点数组为整数
绘元区点GdipEnumerateMetafileSrcRectDestPointI绘元区点(图形,图元,坐标,源区
,单位,回调,附加,属性)
为指定图元文件中的每条记录调用应用程序定义的回调函数。坐标点和源区矩形为整数
绘元区块GdipEnumerateMetafileSrcRectDestRect绘元区块(图形,图元,矩形,源区
,单位,回调,附加,属性)
为指定图元文件中的每条记录调用应用程序定义的回调函数。目标区矩形和源区矩形为小数
绘元块区GdipEnumerateMetafileSrcRectDestRectI绘元块区(图形,图元,矩形,源区
,单位,回调,附加,属性)
为指定图元文件中的每条记录调用应用程序定义的回调函数。目标区矩形和源区矩形为整数
绘元区组GdipEnumerateMetafileSrcRectDestPoints绘元区组(图形,图元,点组,数量,
源区,单位,回调,附加,属性)
为指定图元文件中的每条记录调用应用程序定义的回调函数。目标点数组和源区矩形为小数
绘元区系GdipEnumerateMetafileSrcRectDestPoints绘元区系(图形,图元,点组,数量,
源区,单位,回调,附加,属性)
为指定图元文件中的每条记录调用应用程序定义的回调函数。目标点数组和源区矩形为整数
绘元播放GdipPlayMetafileRecord绘元播放(图元,元类,标志,大小,数据)播放图元文件记录。
绘图合面GdipSetClipGraphics绘图合面(图形,源图形,模式)将两个图形设备对象的剪切区域进行组合。区域组合模式
绘图合区GdipSetClipRect绘图合区(图形,左,顶,宽,高,模式)将图形设备对象的剪切区域和指定矩形区域进行组合。左顶宽高为小数;区域组合模式
绘制合区GdipSetClipRectI绘制合区(图形,左,顶,宽,高,模式)将图形设备对象的剪切区域和指定矩形区域进行组合。左顶宽高为整数;区域组合模式
绘合路径GdipSetClipPath绘合路径(图形,路径,模式)将图形设备对象的剪切区域和指定路径区域进行组合。区域组合模式
绘合区域GdipSetClipRegion绘合区域(图形,区域,模式)将图形设备对象的剪切区域和指定区域进行组合。区域组合模式
绘合设备GdipSetClipHrgn绘合设备(图形,设备,模式)将图形设备对象的剪切区域和指定GDI图形设备进行组合。区域组合模式
绘区无限GdipResetClip绘区无限(图形)将此图形设备对象的剪切区域设置为无限区域。
绘区转换GdipTranslateClip绘区转换(图形,小数 左, 小数 上)转换此图形设备对象的剪裁区域。
绘区平移GdipTranslateClipI绘区平移(图形,左,上)转换此图形设备对象的剪裁区域。
绘图区域GdipGetClip绘图区域(图形,@区域)获取对象的剪裁区域。
绘图剪区GdipGetClipBounds绘图剪区(图形,矩形)获取此图形设备对象的一个矩形(小数)剪裁区域。
绘制剪区GdipGetClipBoundsI绘制剪区(图形,矩形)获取此图形设备对象的一个矩形(整数)剪裁区域。
绘图空区GdipIsClipEmpty绘图空区(图形,@是否)确定此图形设备对象的剪辑区域是否为空。
绘图显区GdipGetVisibleClipBounds绘图显区(图形,矩形)获取此图形设备对象与窗口交集的矩形(小数)可见剪裁区域
绘制显区GdipGetVisibleClipBoundsI绘制显区(图形,矩形)获取此图形设备对象与窗口交集的矩形(整数)可见剪裁区域。
绘图空显GdipIsVisibleClipEmpty绘图空显(图形,@是否)确定此图形设备对象的可见剪裁区域是否为空。
点在绘区GdipIsVisiblePoint点在绘区(图形,小数 x,小数 y,@是否)确定指定的点是否在此图形设备对象的可见剪裁区域之内。
点在视区GdipIsVisiblePointI点在视区(图形,左,上,@是否)确定指定的点是否在此图形设备对象的可见剪裁区域之内。
绘区相交GdipIsVisibleRect绘区相交(图形,左,顶,宽,高,@是否)确定指定的矩形(小数)是否与此图形设备对象的可见剪裁区域相交。
绘域相交GdipIsVisibleRectI绘域相交(图形,左,顶,宽,高,@是否)确定指定的矩形(整数)是否与此图形设备对象的可见剪裁区域相交。
绘图保存GdipSaveGraphics绘图保存(图形,@状态)保存此图形设备对象的当前状态 (转换、剪辑区域和质量设置) 。
绘图还原GdipRestoreGraphics绘图还原(图形,状态)将此图形设备对象的状态恢复到保存之前的绘图状态
绘图容器GdipBeginContainer绘图容器(图形,矩形,源区,单位,@状态)开始新的图形容器。目标矩形和源区矩形是小数
绘制容器GdipBeginContainerI绘制容器(图形,矩形,源区,单位,@状态)开始新的图形容器。目标矩形和源区矩形是整数
绘新容器GdipBeginContainer2绘新容器(图形,@状态)开始新的图形容器。
绘关容器GdipEndContainer绘关容器(图形,@状态)关闭图形容器。
枚举图元回调
中文名字英文名称参数作用解释
枚举图元回调EnumerateMetafileProc5在应用程序中为枚举图元文件记录实现的回调函数。
枚举图元回调——参数表
分类unnamedParam1整数WMF、EMF 或 EMF+ 记录类型。
标志unnamedParam2整数标志;对于 WMF/EMF 记录,始终为 0。
大小unnamedParam3整数记录数据的大小 (字节) ;如果没有数据,则为 0。
数据unnamedParam4整数指向记录数据的指针;如果没有数据,则为 0 。
附加unnamedParam5整数指向 附加(如果有)参数的指针。

区域组合-CombineMode 枚举指定新区域与现有区域的组合方式。

中文名字英文名称数值作用
合区替换CombineModeReplace0指定将现有区域替换为新区域。
合区交集CombineModeIntersect1指定将现有区域替换为自身与新区域的交集。
合区联合CombineModeUnion 2指定将现有区域替换为自身和新区域的联合。
合区异或CombineModeXor3指定将现有区域替换为执行 的结果这两个区域的 XOR。
合区排除CombineModeExclude 4指定将现有区域替换为位于新区域外部的自身部分。
合区补充CombineModeComplement5指定将现有区域替换为现有区域外部的新区域部分。

伽玛修正-CompositingQuality 指定在颜色与背景色混合时是否应用伽玛修正。

英文名称数值作用
CompositingQualityInvalid-1无效数值,不要使用
CompositingQualityDefault0指定不应用伽玛校正。默认
CompositingQualityHighSpeed1指定不应用伽玛校正。高速
CompositingQualityHighQuality2指定应用伽玛修正。高品质
CompositingQualityGammaCorrected3指定应用伽玛修正。伽玛校正
CompositingQualityAssumeLinear4指定不应用伽玛校正。呈现线性

平滑模式-SmoothingMode指定应用于线条和曲线的平滑 (抗锯齿) 的类型。

英文名称数值作用
SmoothingModeInvalid-1无效数值,不要使用
SmoothingModeDefault0指定不应用平滑。
SmoothingModeHighSpeed1指定不应用平滑。
SmoothingModeHighQuality2指定使用 8 X 4 框筛选器应用平滑。
SmoothingModeNone3指定不应用平滑。
SmoothingModeAntiAlias4指定使用 8 X 4 框筛选器应用平滑。
SmoothingModeAntiAlias8x45指定使用 8 X 4 框筛选器应用平滑。
SmoothingModeAntiAlias8x86指定使用 8 X 8 框筛选器应用平滑。

像素偏移-PixelOffsetMode 指定 图形设备 对象的像素偏移模式。

英文名称数值作用
PixelOffsetModeInvalid-1无效数值,不要使用
PixelOffsetModeDefault0指示像素中心具有整数坐标。默认
PixelOffsetModeHighSpeed1指示像素中心具有整数坐标。高速
PixelOffsetModeHighQuality2指示像素中心的坐标介于整数值之间。高品质
PixelOffsetModeNone3指示像素中心具有整数坐标。无像素偏移
PixelOffsetModeHalf4指示像素中心的坐标介于整数值之间。偏移-0.5,半偏用于快速防混叠性能

呈现文本-TextRenderingHint 枚举指定用于呈现文本的过程。 该过程会影响文本的质量。

英文名称数值作用
TextRenderingHintSystemDefault0指定使用当前所选系统字体平滑模式绘制字符 (也称为呈现提示) 。
TextRenderingHintSingleBitPerPixelGridFit1指定使用字符字形位图和提示绘制字符,以改进词干和曲率上的字符外观。
TextRenderingHintSingleBitPerPixel2指定使用字符字形位图绘制字符,且不显示提示。 这会在牺牲质量的情况下获得更好的性能。
TextRenderingHintAntiAliasGridFit3指定使用字符抗锯齿字形位图和提示绘制字符。 由于抗锯齿以更高的性能成本进行抗锯齿,因此质量要好得多。
TextRenderingHintAntiAlias4指定使用其抗锯齿字形位图绘制字符且不显示提示。 由于关闭了提示,主干宽度差可能会比较明显。
TextRenderingHintClearTypeGridFit5指定使用字符字形 ClearType 位图和提示绘制字符。 此类文本呈现不能与 CompositingModeSourceCopy 一起使用。

缩放旋转算法-InterpolationMode 枚举指定缩放或旋转图像时使用的算法。

英文名称数值作用
InterpolationModeInvalid-1无效数值,不要使用
InterpolationModeDefault0指定默认内插模式。
InterpolationModeLowQuality1指定低质量模式。
InterpolationModeHighQuality2指定高质量模式。
InterpolationModeBilinear3指定双线性插值法。 不进行预筛选。 将图像收缩为原始大小的 50% 以下时,此模式不适用。
InterpolationModeBicubic4指定双三次插值法。 不进行预筛选。 将图像收缩为原始大小的 25% 以下时,此模式不适用。
InterpolationModeNearestNeighbor5指定最临近插值法。
InterpolationModeHighQualityBilinear6指定高质量的双线性插值法。 执行预筛选以确保高质量的收缩。
InterpolationModeHighQualityBicubic7指定高质量的双三次插值法。 执行预筛选以确保高质量的收缩。 此模式可产生质量最高的转换图像。

坐标空间-CoordinateSpace 将点从一个坐标空间转换为另一个坐标空间。

英文名称数值作用
CoordinateSpaceWorld0指定世界坐标空间。
CoordinateSpacePage1指定页面坐标空间。
CoordinateSpaceDevice2指定设备坐标空间。

填充模式-FillMode 枚举指定如何填充当路径或曲线本身相交时形成的区域。

英文名称数值作用
FillModeAlternate0指定根据偶数奇偶校验规则填充区域。 根据此规则,可以确定测试点位于封闭曲线内部还是外部,如下所示:从测试点绘制一条线到距离曲线较远的点。 如果该线条与曲线相交奇数次,则测试点位于曲线内;否则,测试点位于曲线之外。
FillModeWinding1指定根据非零缠绕规则填充区域。 根据此规则,可以确定测试点位于封闭曲线内部还是外部,如下所示:从测试点绘制一条线到距离曲线较远的点。 计算曲线从左到右穿过测试线的次数,并计算曲线从右到左交叉测试线的次数。 如果这两个数字相同,则测试点在曲线之外:否则,测试点位于曲线内。

绘图状态-Status 枚举指示 Windows GDI+ 方法调用的结果。

英文名称数值作用
Ok0指示方法调用成功。
GenericError1指示方法调用上存在错误,该错误被标识为此枚举的其他元素定义的错误。
InvalidParameter2指示传递给方法的参数之一无效。
OutOfMemory3指示操作系统内存不足,无法分配内存来处理方法调用。 有关构造函数如何使用 OutOfMemory 状态的说明,请参阅本主题末尾的“备注”部分。
ObjectBusy4指示 API 调用中指定的参数之一已在另一个线程中使用。
InsufficientBuffer5指示在 API 调用中指定为参数的缓冲区不够大,无法容纳要接收的数据。
NotImplemented6指示方法未实现。
Win32Error7指示 方法生成了 Win32 错误。
WrongState8指示对象处于无效状态以满足 API 调用。 例如,调用不是单一纯色的笔中的 Pen::GetColor 会导致错误状态。
Aborted9指示方法已中止。
FileNotFound10指示找不到指定的图像文件或图元文件。
ValueOverflow11指示 方法执行生成数值溢出的算术运算。
AccessDenied12指示不允许对指定的文件执行写入操作。
UnknownImageFormat13指示指定的图像文件格式未知。
FontFamilyNotFound14指示找不到指定的字体系列。 字体系列名称不正确或字体系列未安装。
FontStyleNotFound15指示指定的样式不适用于指定的字体系列。
NotTrueTypeFont16指示从 中检索到的字体HDC 或LOGFONT 不是 TrueType 字体,不能与 GDI+一起使用。
UnsupportedGdiplusVersion17指示安装在系统上的 GDI+ 版本与编译应用程序的版本不兼容。
GdiplusNotInitialized18指示 GDI+API 未处于初始化状态。 若要正常工作,所有 GDI+ 对象都需要 GDI+ 处于初始化状态。 通过调用初始化 GDI+GdiplusStartup。
PropertyNotFound19指示图像中不存在指定的属性。
PropertyNotSupported20指示指定的属性不受图像格式支持,因此无法设置。
ProfileNotFound21指示找不到以 CMYK 格式保存图像所需的颜色配置文件。

矩阵顺序-MatrixOrder 枚举指定新矩阵乘以现有矩阵时的乘法顺序。

英文名称数值作用
MatrixOrderPrepend0指定新矩阵位于左侧,现有矩阵位于右侧。
MatrixOrderAppend1指定现有矩阵位于左侧,新矩阵位于右侧。

画笔画刷

画笔对象是用于绘制线条和曲线,简称笔。画刷对象用于绘制图形形状的内部(简称刷),例如矩形、椭圆形、饼、多边形和路径等填充内部。
阴影画刷对象定义具有阴影样式、前景色和背景色的矩形画笔。简称影刷,有六种阴影样式。 前景色定义阴影线的颜色;背景色定义绘制阴影线的颜色。
线性渐变画刷对象绘制颜色渐变,简称线刷。其中颜色从线性渐变画笔的起始边界线均匀变化到线性渐变画笔的结束边界线。线性渐变画笔的边界线是两条平行直线。
颜色渐变垂直于线性渐变画笔的边界线,在从起始边界线到结束边界线的笔划中逐渐变化。 颜色渐变在起始边界线处有一种颜色,在结束边界线有另一种颜色。
中文名称英文名称示例作用
画笔创建GdipCreatePen1画笔创建(颜色,小数 宽度,单位,@画笔)创建使用指定颜色和宽度的画笔对象。画笔单位
画笔新建GdipCreatePen2画笔新建(刷子,小数 宽度,单位,@画笔)使用指定刷子颜色和宽度创建画笔对象。画笔单位
画笔克隆GdipClonePen画笔克隆(画笔,@新笔)复制画笔对象。
画笔删除GdipDeletePen画笔删除(画笔)释放画笔对象使用的资源。
笔改宽度GdipSetPenWidth笔改宽度(画笔,小数 宽度)设置此画笔对象的宽度。
笔取宽度GdipGetPenWidth笔取宽度(画笔,小数 @宽度)获取此画笔对象的宽度。
笔改单位GdipSetPenUnit笔改单位(画笔,单位)设置此画笔对象的度量单位。度量单位
笔取单位GdipGetPenUnit笔取单位(画笔,@单位)获取此画笔对象的度量单位。度量单位
笔改样式GdipSetPenLineCap197819笔改样式(画笔,开始,结束,短线)设置用此笔绘制的线条中开始、结束短划线的上限样式。
笔改起点GdipSetPenStartCap笔改起点(画笔,形状)设置此画笔对象的起始上限。线头形状
笔改终点GdipSetPenEndCap 笔改终点(画笔,形状)设置此画笔对象的结束上限。线头形状
笔改短划GdipSetPenDashCap197819 笔改短划(画笔,形状)设置此画笔对象的短划线大写样式。短划线形状
笔取起点GdipGetPenStartCap 笔取起点(画笔,@形状)获取此画笔对象的起始上限。线头形状
笔取终点GdipGetPenEndCap 笔取终点(画笔,@形状)获取此画笔对象的结束上限。线头形状
笔取短划GdipGetPenDashCap197819笔取短划(画笔,@形状)获取此画笔对象的短划线大写样式。短划线形状
笔改线结GdipSetPenLineJoin笔改线结(画笔,方式)设置此画笔对象的线条联接。线条连接
笔取线结GdipGetPenLineJoin笔取线结(画笔,@方式)获取此画笔对象的线条联接。线条连接
笔改定起GdipSetPenCustomStartCap 笔改定起(画笔,线帽)设置此画笔对象的自定义起始上限。
笔取定起GdipGetPenCustomStartCap 笔取定起(画笔,@线帽)获取此画笔对象的自定义起始上限。
笔改定终GdipSetPenCustomEndCap 笔改定终(画笔,线帽)设置此画笔对象的自定义结束上限。
笔取定终GdipGetPenCustomEndCap 笔取定终(画笔,@线帽)获取此画笔对象的自定义结束上限。
笔改接长GdipSetPenMiterLimit 笔改接长(画笔,小数 长度)设置此画笔对象的斜接长度。
笔取接长GdipGetPenMiterLimit笔取接长(画笔,小数 @长度)获取此画笔对象的斜接长度。
笔改对齐GdipSetPenMode 笔改对齐(画笔,方式)设置此画笔对象的对齐方式。0=线条中心对齐,1=多边形内边对齐
笔取对齐GdipGetPenMode 笔取对齐(画笔,@方式)获取此画笔对象的对齐方式。0=线条中心对齐,1=多边形内边对齐
笔改转矩GdipSetPenTransform 笔改转矩(画笔,对象)设置此画笔对象的世界转换矩阵。
笔取转矩GdipGetPenTransform 笔取转矩(画笔,@对象)获取此画笔对象的世界转换矩阵。
笔转标识GdipResetPenTransform 笔转标识(画笔)设置此画笔对象的世界转换矩阵设置为标识矩阵。
笔乘矩阵GdipMultiplyPenTransform 笔乘矩阵(画笔,矩阵,顺序)使用自身和另一个矩阵的乘积更新此画笔对象的世界转换矩阵。乘法顺序:0新矩阵在左侧,1在右侧
笔乘转换GdipTranslatePenTransform 笔乘转换(画笔,小数 x缩,小数 y缩,顺序)此画笔对象的世界转换矩阵设置为等于自身和转换矩阵的乘积。乘法顺序:0新矩阵在左侧,1在右侧
笔乘缩放GdipScalePenTransform 笔乘缩放(画笔,小数 x缩,小数 y缩,顺序)此画笔对象的世界转换矩阵设置为等于自身和缩放矩阵的乘积。乘法顺序:0新矩阵在左侧,1在右侧
笔乘旋转GdipRotatePenTransform 笔乘旋转(画笔,小数 角度,顺序)使用自身乘积和旋转矩阵更新此画笔对象的世界转换矩阵。乘法顺序:0新矩阵在左侧,1在右侧
笔改颜色GdipSetPenColor笔改颜色(画笔,颜色)设置此画笔对象的颜色。
笔取颜色GdipGetPenColor笔取颜色(画笔,@颜色)获取此画笔对象的颜色。
笔改刷子GdipSetPenBrushFill笔改刷子(画笔,刷子)设置此画笔对象用于填充线条的刷子对象。
笔取刷子GdipGetPenBrushFill笔取刷子(画笔,@刷子)获取此画笔对象用于填充线条的刷子对象。
笔取类型GdipGetPenFillType笔取类型(画笔,颜色)获取此画笔对象设置的类型。
笔取线样GdipGetPenDashStyle笔取线样(画笔,@颜色)获取此画笔对象设置的短划线样式。线条样式
笔改线样GdipSetPenDashStyle笔改线样(画笔,颜色)设置此画笔对象设置的短划线样式。线条样式
笔取距离GdipGetPenDashOffset 笔取距离(画笔,小数 @距离)获取此画笔从行开始到虚线中第一个空格开始的距离。
笔改距离GdipSetPenDashOffset 笔改距离(画笔,小数 距离)设置此画笔从行开始到虚线中第一个空格开始的距离。
笔短线数GdipGetPenDashCount笔短线数(画笔,@数量)获取短划线图案数组中的元素数。
笔改短线GdipSetPenDashArray笔改短线(画笔,小数 组,数量)设置此画笔的自定义短划线和空格的数组。
笔取短线GdipGetPenDashArray笔取短线(画笔,小数 @组,数量)获取此画笔自定义短划线和空格的数组。
笔复合数GdipGetPenCompoundCount笔复合数(画笔,@数量)获取复合数组中的元素数。
笔改复合GdipSetPenCompoundArray笔改复合(画笔,小数 组,数量)设置此画笔的复合数组。
笔取复合GdipGetPenCompoundArray笔取复合(画笔,小数 组,数量)获取此画笔的复合数组。
画刷克隆GdipCloneBrush画刷克隆(画刷,@刷子)基于此画刷创建新的画刷对象。
画刷删除GdipDeleteBrush画刷删除(画刷)清理画刷对象使用的资源。
画刷类型GdipGetBrushType画刷类型(画刷,@类型)获取此画刷的类型。画刷类型
阴影画刷GdipCreateHatchBrush阴影画刷(样式,前景,背景,@刷子)基于阴影样式、前景色和背景色创建 阴影画刷 对象。
影刷样式GdipGetHatchStyle影刷样式(刷子,@样式)获取此阴影画笔的阴影样式
影刷前景GdipGetHatchForegroundColor影刷前景(刷子,@颜色)获取此阴影画笔的前景色。
影刷背景GdipGetHatchBackgroundColor影刷背景(刷子,@颜色)获取此阴影画笔的背景色。
纯色画刷GdipCreateSolidFill纯色画刷(颜色,@纯刷)基于颜色创建 纯色画刷 对象
纯刷改色GdipSetSolidFillColor纯刷改色(纯刷,颜色)设置此纯色画笔的颜色。
纯刷取色GdipGetSolidFillColor纯刷取色(纯刷,@颜色)获取此纯色画笔的颜色。
线性细刷GdipCreateLineBrush线性细刷(起点,终点,起色,末色,@线刷)从一组边界点和边界颜色创建线性画刷对象。坐标点为小数
线性刷子GdipCreateLineBrushI线性刷子(起点,终点,起色,末色,@线刷)从一组边界点和边界颜色创建线性画刷对象。坐标点为整数
线性宽刷GdipCreateLineBrushFromRect线性宽刷(矩形,起色,末色,线刷方向,模式,@线刷)基于矩形和模式创建线性画刷对象。矩形为小数
线性排刷GdipCreateLineBrushFromRectI线性排刷(矩形,起色,末色,线刷方向,模式,@线刷)基于矩形和方向模式创建线性画刷对象。矩形为整数
线性粗刷GdipCreateLineBrushFromRectWithAngle线性粗刷(矩形,起色,末色,角度,缩放,模式,@线刷)基于矩形和角度模式创建线性画刷对象。矩形为小数;缩放为真时方向线角度为中心角(小数)
线性大刷GdipCreateLineBrushFromRectWithAngleI线性大刷(矩形,起色,末色,角度,缩放,模式,@线刷)基于矩形和角度模式创建线性画刷对象。矩形为整数;缩放为假时方向线角度为顶角(小数)
线刷改色GdipSetLineColors线刷改色(线刷,起始颜色,结束颜色)设置此线性渐变画笔的起始颜色和结束颜色。
线刷取色GdipGetLineColors线刷取色(线刷,@颜色组)获取此线性渐变画笔的起始颜色和结束颜色。
线刷边界GdipGetLineRect线刷边界(线刷,@矩形)获取定义渐变边界的矩形。矩形为小数
线刷矩形GdipGetLineRectI线刷矩形(线刷,@矩形)获取定义渐变边界的矩形。矩形为整数
线刷修正GdipSetLineGammaCorrection线刷修正(线刷,是否)指定是否为此线性渐变画笔启用伽玛校正。
线刷校正GdipGetLineGammaCorrection线刷校正(线刷,@是否)获取是否启用了伽玛校正。
线刷混数GdipGetLineBlendCount线刷混数(线刷,@数量)获取当前设置的混合因子的数目。
线刷取混GdipGetLineBlend线刷取混(线刷,@因子,@位置,数量)获取此线性渐变画笔混合因子和混合位置。混合因子和位置为小数值数组
线刷改混GdipSetLineBlend线刷改混(线刷,因子,位置,数量)设置此线性渐变画笔混合因子和混合位置。混合因子和位置为小数值数组
线刷插数GdipGetLinePresetBlendCount线刷插数(线刷,@数量)获取当前设置为为此线性渐变画笔内插的颜色数。
线刷取插GdipGetLineColors线刷取插(线刷,@颜色组,@位置组,数量)获取当前设置为为此线性渐变画笔内插的颜色及其相应的混合位置。
线刷改插GdipSetLineColors线刷改插(线刷,颜色组,位置组,数量)设置要为此线性渐变画笔插入的颜色及其相应的混合位置。
线刷钟形GdipSetLineSigmaBlend线刷钟形(线刷,边距,混色)设置此线性渐变画笔的混合形状,以基于钟形曲线创建自定义混合。
边距是边界线之间距离的百分比,混色是始末颜色混合百分比,都是0.0 到1.0 之间。
线刷三角GdipSetLineLinearBlend线刷三角(线刷,边距,混色)设置此线性渐变画笔的混合形状,以基于三角形创建自定义混合。
边距是边界线之间距离的百分比,混色是始末颜色混合百分比,都是0.0 到1.0 之间。
线改平铺GdipSetLineWrapMode线改平铺(线刷,模式)设置此线性渐变画笔的环绕模式
线取平铺GdipGetLineWrapMode线取平铺(线刷,@模式)获取此画笔的换行模式。确定如何平铺区域。
线取转矩GdipGetLineTransform线取转矩(线刷,@矩阵)获取此线性渐变画笔的转换矩阵。
线改转矩GdipSetLineTransform 线改转矩(线刷,矩阵)设置此线性渐变画笔的转换矩阵。
线刷标识GdipResetLineTransform线刷标识(线刷,@矩阵)将此线性渐变画笔的转换矩阵重置为标识矩阵。这意味着不会发生任何转换。
线乘矩阵GdipMultiplyLineTransform 线乘矩阵(线刷,矩阵,顺序)使用自身和另一个矩阵的乘积更新此线刷对象的世界转换矩阵。乘法顺序:0新矩阵在左侧,1在右侧
线乘转换GdipTranslateLineTransform 线乘转换(线刷,小数 x缩,小数 y缩,顺序)此线刷对象的世界转换矩阵设置为等于自身和转换矩阵的乘积。乘法顺序:0新矩阵在左侧,1在右侧
线乘缩放GdipScaleLineTransform 线乘缩放(线刷,小数 x缩,小数 y缩,顺序)此线刷对象的世界转换矩阵设置为等于自身和缩放矩阵的乘积。乘法顺序:0新矩阵在左侧,1在右侧
线乘旋转GdipRotateLineTransform 线乘旋转(线刷,小数 角度,顺序)使用自身乘积和旋转矩阵更新此线刷对象的世界转换矩阵。乘法顺序:0新矩阵在左侧,1在右侧

度量单位-Unit 枚举指定给定数据类型的度量单位。

中文名称英文名称数值作用
单位世界UnitWorld0指定世界坐标,一个非物理单位。
单位显示UnitDisplay1指定显示单位。 例如,如果显示设备是监视器,则单位为 1 像素。
单位像素UnitPixel2指定单位为 1 像素。
单位打印UnitPoint3指定单位为 1 磅(打印点)或 1/72 英寸。
单位英寸UnitInch4指定单位为 1 英寸。
单位文档UnitDocument5指定单位为 1/300 英寸。
单位毫米UnitMillimeter6指定单位为 1 毫米。

画刷的类型-常量数值

中文名称英文名称数值作用
实心画刷BrushTypeSolidColor0指示 实心 类型的画笔。 纯色画笔可绘制不透明或透明的单一恒定颜色。
填充画刷BrushTypeHatchFill1阴影画笔绘制背景,并在该背景上绘制线条、点、短划线、方块、十字线或这些图案的某种变体。
阴影画笔由两种颜色组成:一种用于背景,一种用于背景上的图案。 背景的颜色称为背景色,图案的颜色称为前景色。
纹理画刷BrushTypeTextureFill2纹理画笔绘制图像。 图像或纹理 是指定图像的一部分或指定图像的缩放版本。
图像类型 (图元文件或非元数据) 确定纹理是图像的一部分还是图像的缩放版本。
渐变画刷BrushTypePathGradient3路径渐变画笔绘制颜色渐变,其中颜色从中心点向外变化,变为由闭合曲线或路径定义的边界。
颜色渐变在中心点有一种颜色,在边界处有一种或多种颜色。
线性画刷BrushTypeLinearGradient4线性渐变画笔绘制颜色渐变,其中颜色从线性渐变画笔的起始边界线到线性渐变画笔的结束边界线均匀变化。
颜色渐变垂直于线性渐变画笔的边界线,在笔划中从起始边界线到结束边界线逐渐变化。
颜色渐变在起始边界线具有一种颜色,在结束边界线具有另一种颜色。

线条连接-指定如何联接由同一笔绘制且两端相交的两条线。 在两条线的交汇处,线联接使联接看起来更连续。

英文名称数值作用
LineJoinMiter0指定斜联接。 这将产生一个锐角或切除角,具体取决于斜联接的长度是否超过斜联接限制。
LineJoinBevel1指定成斜角的联接。 这将产生一个斜角。
LineJoinRound2指定圆形联接。 这将在两条线之间产生平滑的圆弧。
LineJoinMiterClipped3指定斜联接。 这将产生一个锐角或斜角,具体取决于斜联接的长度是否超过斜联接限制。

线条样式-绘制的线条的线条样式。可以使用多种预定义样式或自定义样式之一绘制线条。

英文名称数值作用
DashStyleSolid0指定实线。
DashStyleDash1指定虚线。
DashStyleDot2指定虚线。
DashStyleDashDot3指定交替的虚线-点线。
DashStyleDashDotDot4指定交替的虚线-点-点线。
DashStyleCustom5指定用户定义的自定义虚线。

线刷方向-LinearGradientMode 枚举指定线性渐变画笔的颜色更改方向。

英文名称数值作用
LinearGradientModeHorizontal0指定要从屏幕左侧到屏幕右侧的水平方向变化的颜色。
LinearGradientModeVertical1指定要从显示器顶部到屏幕底部的垂直方向变化的颜色。
LinearGradientModeForwardDiagonal2指定要从屏幕左上角到右下角的对角线方向更改的颜色。
LinearGradientModeBackwardDiagonal3指定要从屏幕右上角到左下角的向后对角方向变化的颜色。

平铺模式-WrapMode 枚举指定如何使用图像的重复副本来平铺区域。

英文名称数值作用
WrapModeTile0指定不翻转的平铺。
WrapModeTileFlipX1指定在一行中从一个磁贴移动到下一个磁贴时水平翻转磁贴。
WrapModeTileFlipY2指定在列中从一个磁贴移动到下一个磁贴时垂直翻转磁贴。
WrapModeTileFlipXY3指定在沿行移动时水平翻转磁贴,在沿列移动时垂直翻转磁贴。
WrapModeClamp4指定不进行平铺。

阴影图案-HatchStyle 枚举指定由 阴影画刷使用的阴影图案。 阴影图案由纯色背景色和在背景上绘制的线条组成。

英文名称数值作用
HatchStyleHorizontal0指定水平线。
HatchStyleVertical1指定垂直线。
HatchStyleForwardDiagonal2指定从顶点到下点向右倾斜的对角线。 这些行已抗锯齿。
HatchStyleBackwardDiagonal3指定从顶点到下点向左倾斜的对角线。 这些行已抗锯齿。
HatchStyleCross4指定以 90 度角交叉的水平线和垂直线。
HatchStyleDiagonalCross5指定以 90 度角交叉的对角线和后向对角线。 这些行已抗锯齿。
HatchStyle05Percent6指定 5% 阴影。 前景色与背景色的比率为 5:100。
HatchStyle10Percent7指定 10% 阴影。 前景色与背景色的比率为 10:100。
HatchStyle20Percent8指定 20% 阴影。 前景色与背景色的比率为 20:100。
HatchStyle25Percent9指定 25% 阴影。 前景色与背景色的比率为 25:100。
HatchStyle30Percent10指定 30% 阴影。 前景色与背景色的比率为 30:100。
HatchStyle40Percent11指定 40% 阴影。 前景色与背景色的比率为 40:100。
HatchStyle50Percent12指定 50% 阴影。 前景色与背景色的比率为 50:100。
HatchStyle60Percent13指定 60% 阴影。 前景色与背景色的比率为 60:100。
HatchStyle70Percent14指定 70% 阴影。 前景色与背景色的比率为 70:100。
HatchStyle75Percent15指定 75% 阴影。 前景色与背景色的比率为 75:100。
HatchStyle80Percent16指定 80% 阴影。 前景色与背景色的比例为 80:100。
HatchStyle90Percent17指定 90% 阴影。 前景色与背景色的比率为 90:100。
HatchStyleLightDownwardDiagonal18指定从顶点到底点向右倾斜的对角线,其间距比 HatchStyleForwardDiagonal 更近 50%,但不抗锯齿。
HatchStyleLightUpwardDiagonal19指定从顶点到底部点向左倾斜的对角线,其间距比 HatchStyleBackwardDiagonal 更近 50%,但不抗锯齿。
HatchStyleDarkDownwardDiagonal20指定从顶点到底部点向右倾斜的对角线,其间距比 HatchStyleForwardDiagonal 更近 50%,并且宽度是 HatchStyleForwardDiagonal 的两倍,但不抗锯齿。
HatchStyleDarkUpwardDiagonal21指定从顶点到底部点向左倾斜的对角线,其间距比 HatchStyleBackwardDiagonal 更近 50%,并且宽度是 HatchStyleBackwardDiagonal 的两倍,但不抗锯齿。
HatchStyleWideDownwardDiagonal22指定从顶点到下点向右倾斜的对角线,其间距与 HatchStyleForwardDiagonal 相同,并且宽度为 HatchStyleForwardDiagonal 的三倍,但不抗锯齿。
HatchStyleWideUpwardDiagonal23指定从顶点到下点向左倾斜的对角线,其间距与 HatchStyleBackwardDiagonal 相同,并且宽度是 HatchStyleBackwardDiagonal 的三倍,但不抗锯齿。
HatchStyleLightVertical24指定间距比 HatchStyleVertical 更近 50% 的垂直线。
HatchStyleLightHorizontal25指定间距比 HatchStyleHorizontal 更近 50% 的水平线。
HatchStyleNarrowVertical26指定间距比 HatchStyleVertical (更近 75% 或比 HatchStyleLightVertical) 更近 25% 的垂直线。
HatchStyleNarrowHorizontal27指定间距比 HatchStyleHorizontal ( 更近 75% 或比 HatchStyleLightHorizontal) 更近 25% 的水平线。
HatchStyleDarkVertical28指定间距比 HatchStyleVerical 更近 50% 且宽度是 HatchStyleVertical 两倍的垂直线。
HatchStyleDarkHorizontal29指定间距比 HatchStyleHorizontal 更近 50% 且宽度是 HatchStyleHorizontal 两倍的水平线。
HatchStyleDashedDownwardDiagonal30指定由正对角线组成的水平线。
HatchStyleDashedUpwardDiagonal31指定由向后对角线组成的水平线。
HatchStyleDashedHorizontal32指定水平虚线。
HatchStyleDashedVertical33指定垂直虚线。
HatchStyleSmallConfetti34指定带有五彩纸屑外观的阴影。
HatchStyleLargeConfetti35指定具有五彩纸屑的外观的阴影,它由比 HatchStyleSmallConfetti 更大的部分组成。
HatchStyleZigZag36指定锯齿形的水平线。
HatchStyleWave37指定平铺的水平线。
HatchStyleDiagonalBrick38指定一个阴影,该阴影具有向后对角方向铺设的砖墙的外观。
HatchStyleHorizontalBrick39指定具有水平放置砖墙外观的阴影。
HatchStyleWeave40指定具有织物外观的阴影。
HatchStylePlaid41指定具有格子花呢材料外观的阴影。
HatchStyleDivot42指定具有草皮层外观的阴影。
HatchStyleDottedGrid43指定以 90 度角交叉的水平和垂直虚线。
HatchStyleDottedDiamond44指定以 90 度角交叉的正对角线和后向对角虚线。
HatchStyleShingle45指定一个阴影,该阴影具有在向前对角线方向放置的带状带状体的外观。
HatchStyleTrellis46指定具有格架外观的阴影。
HatchStyleSphere47指定具有球体棋盘外观的阴影。
HatchStyleSmallGrid48指定以 90 度角交叉且间距比 HatchStyleCross 更近 50% 的水平线和垂直线。
HatchStyleSmallCheckerBoard49指定带有棋盘外观的阴影。
HatchStyleLargeCheckerBoard50指定具有棋盘外观的阴影,其正方形是 HatchStyleSmallCheckerBoard 的两倍。
HatchStyleOutlinedDiamond51指定以 90 度角交叉但不抗锯齿的正对角线和后向对角线。
HatchStyleSolidDiamond52指定具有对角放置的棋盘外观的阴影。
HatchStyleTotal53指定无阴影,从而允许画笔透明。
HatchStyleLargeGrid54指定 HatchStyleCross。
HatchStyleMin55指定 HatchStyleHorizonal。
HatchStyleMax56指定 HatchStyleSolidDiamond。

定制线帽

自定义线帽对象定义用于绘制线条末端的图形样式。它可以是各种形状,如方形、圆形或菱形。 自定义线条上限由绘制它的路径定义。
使用 笔 对象绘制形状轮廓或使用 画刷 对象填充内部来绘制路径。线帽可以在线条的任一端或两端使用。 可以在端帽和线条之间调整间距。
可调整箭头帽 对象是 自定义线帽 的子类对象。 此类生成类似于箭头的线条帽,简称箭帽。
中文名称英文名称示例作用
线帽创建GdipCreateCustomLineCap线帽创建(填充,描边,形状,插值,@线帽)根据填充和描边路径对象、线头形状、基本插值(小数)创建自定义线帽。
线帽删除GdipDeleteCustomLineCap线帽删除(线帽)清理自定义线帽对象使用的资源。
线帽克隆GdipCloneCustomLineCap线帽克隆(线帽,@线帽)复制现有自定义线帽对象到新的线帽对象。
线帽类型GdipGetCustomLineCapType线帽类型(线帽,@类型)获取自定义线帽对象的线帽类型
帽改线头GdipSetCustomLineCapStrokeCaps帽改线头(线帽,开始,结束)设置自定义线帽对象开始和结束线头形状
帽取线头GdipGetCustomLineCapStrokeCaps帽取线头(线帽,@开始,@结束)获取自定义线帽对象开始和结束线头形状
帽改线结GdipSetCustomLineCapStrokeJoin帽改线结(线帽,样式)设置自定义线帽对象的线条联接样式
帽取线结GdipGetCustomLineCapStrokeJoin帽取线结(线帽,@样式)设置自定义线帽对象的线条联接样式
帽改末尾GdipSetCustomLineCapBaseCap帽改末尾(线帽,形状)设置自定义线帽对象用作线条末尾的顶端基帽的线头形状
帽取末尾GdipGetCustomLineCapBaseCap帽取末尾(线帽,形状)获取自定义线帽对象用作线条末尾的顶端基帽的线头形状
帽改插值GdipSetCustomLineCapBaseInset帽改插值(线帽,小数 插值)设置此自定义线帽的基内插值。这是线条的终点和起始之间的距离。
帽取插值GdipGetCustomLineCapBaseInset帽取插值(线帽,小数 @插值)获取此自定义线帽的基内插值。这是线条的终点和起始之间的距离。
帽改缩放GdipSetCustomLineCapWidthScale帽改缩放(线帽,比例)设置此自定义线帽对象的宽度缩放比例。这是相对于绘制线条的笔宽缩放的量。默认值 1.0 不会缩放线条上限。
帽取缩放GdipGetCustomLineCapWidthScale帽取缩放(线帽,@比例)获取此自定义线帽对象的宽度缩放比例。这是相对于绘制线条的笔宽缩放的量。默认值 1.0 不会缩放线条上限。
箭帽创建GdipCreateAdjustableArrowCap箭帽创建(高度,宽度,填充,@箭帽)创建具有指定小数值高度和宽度的可调整箭头线帽。填充可以是真或假。中间的插入值默认为零。
箭帽改高GdipSetAdjustableArrowCapHeight箭帽改高(箭帽,小数 高度)设置箭头帽的高度。这是从箭头的底部到其顶点的距离。
箭帽取高GdipGetAdjustableArrowCapHeight箭帽取高(箭帽,小数 @高度)获取箭头帽的高度。这是从箭头的底部到其顶点的距离。
箭帽改宽GdipSetAdjustableArrowCapWidth箭帽改宽(箭帽,小数 宽度)设置箭头帽的宽度。这是箭头底部端点之间的距离。
箭帽取宽GdipGetAdjustableArrowCapWidth箭帽取宽(箭帽,小数 @宽度)获取箭头帽的宽度。这是箭头底部端点之间的距离。
箭帽改插GdipSetAdjustableArrowCapMiddleInset箭帽改插(箭帽,小数 插值)设置箭头帽的底部中点向顶点移动的单位数。
箭帽取插GdipGetAdjustableArrowCapMiddleInset箭帽取插(箭帽,小数 @插值)获取箭头帽的底部中点向顶点移动的单位数。
箭帽改实GdipSetAdjustableArrowCapFillState箭帽改实(箭帽,实心)设置箭头帽的填充状态。如果未填充箭头帽,则仅绘制轮廓。
箭帽取实GdipGetAdjustableArrowCapFillState箭帽取实(箭帽,@实心)获取箭头帽的填充状态。

线头形状-绘制的线条末尾使用的图形形状的类型

英文名称数值作用
LineCapFlat0指定行在最后一点结束。 结束是平方的。
LineCapSquare1指定一个方帽。 正方形的中心是线条中的最后一个点。 正方形的高度和宽度是线条宽度。
LineCapRound2指定圆形大写字母。 圆的中心是线条中的最后一个点。 圆的直径是线条宽度。
LineCapTriangle3指定三角帽。 三角形的底是线条中的最后一个点。 三角形的底部是线条宽度。
LineCapNoAnchor0x10指定行尾未定位。
LineCapSquareAnchor0x11指定用正方形定位线条的终点。 正方形的中心是线条中的最后一个点。 正方形的高度和宽度是线条宽度。
LineCapRoundAnchor0x12指定用圆圈定位线条的终点。 圆的中心位于线条的最后一点。 圆比线宽。
LineCapDiamondAnchor0x13指定用菱形 (以 45 度) 旋转的正方形固定线条端。 菱形的中心位于线条中的最后一点。 菱形比线宽。
LineCapArrowAnchor0x14指定用箭头定位线条的终点。 箭头点位于线条中的最后一个点。 箭头比线条宽。
LineCapCustom0xff指定行尾由CustomLineCap。
LineCapAnchorMask0xf0

短线形状-在虚线中每个短划线的两端使用的图形形状的类型。

英文名称数值作用
DashCapFlat0指定每一划线段的两端均为方形的方帽。
DashCapRound2指定每一划线段的两端均为圆角的圆帽。
DashCapTriangle3指定每一划线段的两端均为带尖的三角帽。

线帽类型-CustomLineCapType指定自定义线帽的类型

英文名称数值作用
CustomLineCapTypeDefault0默认类型。
CustomLineCapTypeAdjustableArrowtd>1可调整箭头。

文本字体

文字格式对象包含文本布局信息(例如对齐、方向、制表位和剪裁)和显示操作(例如剪裁、对请求的字体不支持的字符的字体替换,以及不使用西欧数字的语言) 的数字替换。
使用文字格式对象可以绘制文字,以设置字符串的格式。文字格式对象简称为字形
中文名称英文名称示例作用
绘图文字GdipDrawString绘图文字(图形,宽字,长度,字体,布局,字形,刷子)根据字体、布局矩形和字形格式绘制字符串。
绘字范围GdipMeasureString绘字范围(图形,宽字,长度,字体,布局,字形,@矩形,@字数,@行数)测量指定字体、格式和布局矩形中的字符串范围。
绘字区域GdipMeasureCharacterRanges绘字区域(图形,宽字,长度,字体,布局,字形,区数,@区组)获取一组区域,每个区域在字符串中绑定一系列字符位置。
绘控制字GdipDrawDriverString绘控制字(图形,宽字,长度,字体,刷子,点组,选项,矩阵)在指定位置绘制字符。使客户端可以完全控制文本的外观选项。假定客户端已设置要应用的格式和布局。
绘字边界GdipMeasureDriverString绘字边界(图形,宽字,长度,字体,刷子,点组,选项,矩阵,@边界)测量指定字符及其相应位置的边界框。
字形创建GdipCreateStringFormat字形创建(格式,语言,@字形)基于字符串格式标志和语言创建 文字形式 对象。
字形默认GdipStringFormatGetGenericDefault字形默认(@字形)创建一个泛型的默认 文字形式 对象。
字形排版GdipStringFormatGetGenericTypographic字形排版(@字形)创建泛型排版的文字格式对象。
字形删除GdipDeleteStringFormat字形删除(字形)释放 文字形式 对象使用的资源。
字形克隆GdipCreateStringFormat字形克隆(字形,@新字形)复制另一个 文字形式 对象的副本。
字改标志GdipSetStringFormatFlags字改标志(字形,标志)设置文字形式对象的字符串格式标志
字取标志GdipGetStringFormatFlags字取标志(字形,@标志)获取文字形式对象的字符串格式标志
字改对齐GdipSetStringFormatAlign字改对齐(字形,对齐)设置文字形式对象的线条对齐方式相对于布局矩形的原点。
字取对齐GdipGetStringFormatAlign字取对齐(字形,@对齐)获取文字形式对象的线条对齐方式相对于布局矩形的原点。
字改线齐GdipSetStringFormatLineAlign字改线齐(字形,对齐)设置文字形式对象的线条对齐方式相对于布局矩形的原点。
字取线齐GdipGetStringFormatLineAlign字取线齐(字形,@对齐)获取文字形式对象的线条对齐方式相对于布局矩形的原点。
字改剪裁GdipSetStringFormatTrimming字改剪裁(字形,剪裁)设置文字形式对象的剪裁样式
字取剪裁GdipGetStringFormatTrimming字取剪裁(字形,@剪裁)获取文字形式对象的剪裁样式
字改热键GdipSetStringFormatHotkeyPrefix字改热键(字形,热键)设置文字形式对象的如何显示热键
字取热键GdipGetStringFormatHotkeyPrefix字取热键(字形,@热键)获取文字形式对象的如何显示热键
字改偏移GdipSetStringFormatTabStops字改偏移(字形,初始偏移,偏移数量,偏移数组)设置文字形式对象的制表位的偏移量。
字取偏移GdipGetStringFormatTabStops字取偏移(字形,偏移数量,@初始偏移,@偏移数组)获取文字形式对象的制表位的偏移量。
字偏移数GdipGetStringFormatTabStopCount字偏移数(格式,语言,@字形)获取文字格式对象的制表位偏移数量。
字改替换GdipSetStringFormatDigitSubstitution字改替换(字形,语言,替换)设置文字形式对象的数字替换方式
字取替换GdipGetStringFormatDigitSubstitution字取替换(字形,@语言,@替换)获取文字形式对象的数字替换方式
字改段数GdipSetStringFormatMeasurableCharacterRangeCount字改段数(字形,数量,范围数组)设置文字形式对象的一系列字符范围。
字取段数GdipGetStringFormatMeasurableCharacterRangeCount字取段数(字形,@范围数)获取当前设置的可度量字符范围的数量。

绘图字体

字体对象定义特定字体的特征,例如系列、高度、大小和样式 (或样式) 组合。 绘制字符串时使用字体对象。
字体系列对象包含组成字体系列的一组字体,简称字系。 字体系列是一组具有相同字样但样式不同的字体。
字体集合类是抽象基类,简称字集。 它包含用于枚举字体集合中字体系列的方法。
中文名称英文名称示例作用
字体设备GdipCreateFontFromDC字体设备(设备,@字体)基于当前选定到指定设备的字体对象创建字体对象。
字体逻辑GdipCreateFontFromLogfontA字体逻辑(设备,逻辑,@字体)直接从GDI逻辑字体创建字体对象。
逻辑字体GdipCreateFontFromLogfontW逻辑字体(设备,逻辑,@字体)直接从GDI逻辑字体创建字体对象。宽字符版
字体创建GdipCreateFont字体创建(宽字系名,字号,样式,单位,@字体)基于字体系列、字号(小数)、字体样式度量单位创建字体对象。
字体克隆GdipCloneFont字体克隆(字体,@字体)基于此字体对象创建新的字体对象。
字体删除GdipDeleteFont字体删除(字体)未实现。
字体系列GdipGetFamily字体系列(字体,@字系)获取此字体所基于的字体系列。
字体样式GdipGetFontStyle字体样式(字体,@样式)获取此字体的字体样式
字体大小GdipGetFontSize字体大小(字体,小数 @字号)获取此字体对象的字体大小。
字体单位GdipGetFontUnit字体单位(字体,@单位)获取此字体对象的度量单位
字体高度GdipGetFontHeight字体高度(字体,图形,@高度)获取指定图形设备对象的当前单位中此字体的行距(小数)。
字体行距GdipGetFontHeightGivenDPI字体行距(字体,垂直分辨率,@字号)获取此字体的行距(以像素为单位)。
字体结构GdipGetLogFontA字体结构(字体,@逻辑)获取此字体对象的逻辑字体属性。
字体属性GdipGetLogFontW字体属性(字体,@逻辑)获取此字体对象的逻辑字体属性。
字体新类GdipNewInstalledFontCollection字体新类(@字集)定义一个类,该类表示安装在系统上的字体。字集是字体的集合类。
字体集合GdipNewPrivateFontCollection字体集合(@字集)集合中的字体可以包括已安装的字体以及尚未安装在系统上的字体。
字集删除GdipDeletePrivateFontCollection字集删除(字集)删除创建的字体集合对象。
字集数量GdipGetFontCollectionFamilyCount字集数量(字集,数量)获取此字体对象的字体大小。
字集列表GdipGetFontCollectionFamilyList字集列表(字集,数量,@数组,@已收)获取此字体对象的字体大小。
字集文件GdipPrivateAddFontFile字集文件(字集,宽文件名)将字体文件添加到此专用字体集合。
字集内存GdipPrivateAddMemoryFont字集内存(字体,小数 @字号)将包含在系统内存中的字体添加到字体集合。
字系创建GdipCreateFontFamilyFromName字系创建(宽字体名,字集,@字系)基于指定的字体系列创建字体系列对象。
字系克隆GdipCloneFontFamily字系克隆(字系,@字系)使用字系对象创建新的字系对象副本。
字系删除GdipDeleteFontFamily字系删除(字系)释放创建的字系对象。
字系无衬GdipGetGenericFontFamilySansSerif字系无衬(@字系)获取一个字系对象,该对象指定泛型无衬线字样。
字系衬线GdipGetGenericFontFamilySerif字系衬线(@字系)获取一个字系对象,该对象指定泛型衬线字样。
字系单间GdipGetGenericFontFamilyMonospace字系单间(@字系)获取一个字系对象,该对象指定泛型单空间字样。
字系名称GdipGetFamilyName字系名称(字系)获取此字体系列的名称。
字系取样GdipIsStyleAvailable字系取样(字系,样式,@是否)确定指定的字体样式是否可用于此字体系列。
字系高度GdipGetEmHeight字系高度(字系,样式,@大小)获取此字体系列的设计单位(通常称为字号或字高)的大小。
字系升序GdipGetCellAscent字系升序(字系,样式,@上升)获取指定字体样式或样式组合的此字体族的单元格升序(以设计单位为单位)。
字系降序GdipGetCellDescent字系降序(字系,样式,@下降)获取指定字体样式或样式组合的此字体系列的单元格降序(以设计单位表示)。
字系行距GdipGetLineSpacing字系行距(字系,样式,@行距)获取指定字体样式或样式组合的此字体系列的行距(以设计单位为单位)。

字体样式-FontStyle 枚举指定字体的字体样式。 样式可以组合使用。

中文名称英文名称数值作用
字样正常FontStyleRegular0指定字样的正常粗细或粗细。
字样粗体FontStyleBold1指定粗体字样。 粗体表示较重的粗细。
字样斜体FontStyleItalic2指定斜体字样,该字样对字符的垂直词干产生明显的倾斜。
字样粗斜FontStyleBoldItalic3将字样指定为粗体和斜体。
字样下划FontStyleUnderline4指定下划线,在字符基线下方显示一行。
字样删除FontStyleStrikeout8指定删除线,它显示通过字符中间绘制的水平线。

文字对齐-StringAlignment 枚举指定字符串在引用边界矩形时如何对齐。边界矩形用于定义文本显示的区域。

中文名称英文名称数值作用
对齐近点StringAlignmentNear0指定对齐方式接近边框的原点。可用于沿行对齐字符或矩形内线条的对齐。 对于从右到左的边框,原点位于右上角。
对齐居中StringAlignmentCenter1指定对齐方式在原点和范围之间居中 (宽度) 格式矩形。
对齐远点StringAlignmentFar2指定对齐方式远 (格式矩形的右侧) 。

文字选项-DriverStringOptions 枚举指定驱动程序字符串的呈现间距、方向和质量。

英文名称数值作用
DriverStringOptionsCmapLookup1指定字符串数组包含 Unicode 字符值。如果未设置此标志,数组中的每个值将解释为字体字形的索引,该字形定义要显示的字符。
DriverStringOptionsVertical2指定字符串垂直显示。
DriverStringOptionsRealizedAdvance4指定从第一个字形的位置计算字形位置。 如果未设置此标志,则从坐标数组获取字形位置。
DriverStringOptionsLimitSubpixel8指定应将更少的内存用于缓存抗锯齿字形。 这也会产生较低的质量。 如果未设置此标志,则会使用更多内存,但质量会更高。

文字格式-StringFormatFlags 枚举指定文本布局信息 (如方向和剪裁) 和显示操作 (,如省略号插入、数字替换和字体) 不支持的字符的表示形式。

英文名称数值作用
StringFormatFlagsDirectionRightToLeft0x00000001指定读取顺序为从右到左。 对于水平文本,字符从右到左读取。 对于垂直文本,列从右到左读取。 默认情况下,从左到右读取水平或垂直文本。
StringFormatFlagsDirectionVertical0x00000002指定在显示设备上垂直绘制单个文本行。 默认情况下,文本行是水平行,每一个新行都低于上一行。
StringFormatFlagsNoFitBlackBox0x00000004指定允许部分字符悬停字符串的布局矩形。 默认情况下,字符首先在矩形的边界内对齐,然后重新定位仍悬停边界的任何字符,以避免任何悬垂,从而避免影响布局矩形外部的像素。 斜体小写字母f是可能具有悬垂部分的字符的一个示例。 设置此标志可确保字符在视觉上与上方和下方的线条对齐,但可能会导致部分字符(位于布局矩形外)被剪裁或绘制。
StringFormatFlagsDisplayFormatControl0x00000020指定使用代表字符显示 Unicode 布局控制字符。
StringFormatFlagsNoFontFallback0x00000400指定对请求的字体中不支持的字符使用备用字体。 默认情况下,任何缺失字符都以“缺少字体”字符显示,通常是一个开放的正方形。
StringFormatFlagsMeasureTrailingSpaces0x00000800指定每行末尾的空格包含在字符串度量中。 默认情况下,由 返回的边界矩形 绘字范围 方法排除每行末尾的空间。 设置此标志以在度量中包含该空间。
StringFormatFlagsNoWrap0x00001000指定禁止将文本换行到下一行。 使用原点而不是布局矩形时,隐含 NoWrap。 在矩形内绘制文本时,默认情况下,文本在矩形边界内的最后一个单词边界处被断开,并换行到下一行。
StringFormatFlagsLineLimit0x00002000指定在布局矩形中仅布局整条线。 默认情况下,布局一直持续到文本末尾或直到剪裁导致不再显示行,以先到者为准。 默认设置允许最后一行被不是行高度的整个倍数的布局矩形部分遮盖。 若要确保只看到整条线,请设置此标志,并注意提供至少与一行高度相同的布局矩形。
StringFormatFlagsNoClip0x00004000指定允许显示悬停在布局矩形上的字符和在布局矩形外延伸的文本。 默认情况下,将剪裁所有悬垂字符和布局矩形外的文本。 在布局矩形外延伸) 行尾的任何尾随空格 (空格均被剪裁。 因此,如果度量中包含尾随空格,则此标志的设置将影响字符串度量。 如果启用了剪裁,则度量中不包括在布局矩形外延伸的尾随空格。 如果禁用剪裁,则所有尾随空格都包含在度量中,无论它们是否在布局矩形之外。
StringFormatFlagsBypassGDI0x80000000避开GDI绘制

文字剪裁-StringTrimming 枚举指定如何剪裁字符串中的字符,以便字符串适合布局矩形。布局矩形用于定位和调整显示字符串的大小。

英文名称数值作用
StringTrimmingNone0指定不执行剪裁。
StringTrimmingCharacter1指定在布局矩形内最后一个字符的边界处断开字符串。 这是默认值。
StringTrimmingWord2指定在布局矩形内最后一个单词的边界处断开字符串。
StringTrimmingEllipsisCharacter3指定在布局矩形内最后一个字符的边界处断开字符串,并在字符后面插入省略号 (...) 。
StringTrimmingEllipsisWord4指定字符串在布局矩形内最后一个单词的边界处断开,并在单词后面插入省略号 (...) 。
StringTrimmingEllipsisPath5指定从字符串中删除中心并替换为省略号。 该算法尽可能保留字符串的最后一部分。

文字热键-HotkeyPrefix 枚举指定如何显示热键。 有三个选项:不执行任何操作、显示带下划线的热键和隐藏热键下划线。

英文名称数值作用
HotkeyPrefixNone0指定不发生热键处理。
HotkeyPrefixShow1指定扫描 Unicode 文本 (&) 的和号,这些文本被解释为热键标记,与在 Windows 用户界面中处理菜单和对话框资源的方式相同。 所有与数对都由单个和号替换。 删除所有单和号,第一个单和号后面的第一个字符显示为下划线。
HotkeyPrefixHide2指定扫描 Unicode 文本以查找 (&) 的和号,这些文本将作为 HotkeyPrefixShow 中的替换和删除,但不显示下划线。 当不需要辅助功能热键下划线时,可以使用此选项。

文字替换-StringDigitSubstitute 枚举指定如何根据用户的区域设置或语言替换字符串中的数字。

英文名称数值作用
StringDigitSubstituteUser0指定用户定义的替换方案。
StringDigitSubstituteNone1指定禁用替换。
StringDigitSubstituteNational2指定与用户区域设置的正式国家/地区语言相对应的替换数字位。
StringDigitSubstituteTraditional3指定与用户的本机脚本或语言(可能与用户区域设置的正式国家/地区语言不同)相对应的替换数字位。

路径迭代

路径渐变笔刷对象存储颜色渐变的属性,可用于用逐渐变化的颜色填充路径的内部。路径渐变画笔具有边界路径、边界颜色、中心点和中心颜色。
使用路径渐变画笔绘制区域时,从边界路径移动到中心点时,颜色会逐渐从边界颜色更改为中心颜色。路径渐变笔刷对象简称为路刷
图形路径对象存储一系列线条、曲线和形状。可以通过调用图形对象的绘制路径方法来绘制整个序列。可以将线条、曲线和形状序列划分为图形,借助图形路径迭代器对象,可以绘制所选图形。
还可以在序列中放置标记,以便绘制路径的选定部分。图形路径迭代器提供用于隔离图形路径对象中存储的路径的选定子集的方法。 路径由一个或多个数字组成。图形路径对象简称为路径
可以使用图形路径迭代器来隔离其中一个或多个数字。 路径还可以具有将路径划分为多个部分的标记。可以使用图形路径迭代器对象来隔离其中一个或多个部分。图形路径迭代器对象简称为迭代
中文名称英文名称示例作用
路刷创建GdipCreatePathGradient路刷创建(点组,数量,模式,@路刷)基于小数坐标点数组创建路径渐变笔刷对象。初始化路径渐变画笔的环绕模式
路刷新建GdipCreatePathGradientI路刷新建(点组,数量,模式,@路刷)基于整数坐标点数组创建路径渐变笔刷对象。初始化路径渐变画笔的环绕模式
路径变刷GdipCreatePathGradientFromPath路径变刷(路径,@路刷)基于路径对象创建路径渐变笔刷对象。
路取中色GdipGetPathGradientCenterColor路取中色(路刷,@颜色)获取此路径渐变画笔的中心点的颜色。
路改中色GdipSetPathGradientCenterColor路改中色(路刷,颜色)设置此路径渐变画笔的中心点的颜色。
路取边色GdipGetPathGradientSurroundColorsWithCount路取边色(路刷,@颜色组,@组数)获取此路径渐变画笔的中心点的颜色。
路改边色GdipGetPathGradientSurroundColorsWithCount路改边色(路刷,颜色组,@组数)设置此路径渐变画笔的中心点的颜色。
路取中心GdipGetPathGradientCenterPoint路取中心(路刷,@点组)获取此路径渐变画笔的小数值中心点。
路改中心GdipSetPathGradientCenterPoint路改中心(路刷,点组)设置此路径渐变画笔的小数值中心点。
路取中点GdipGetPathGradientCenterPointI路取中点(路刷,@点组)获取此路径渐变画笔的整数值中心点。
路改中点GdipSetPathGradientCenterPointI路改中点(路刷,点组)设置此路径渐变画笔的整数值中心点。
路刷边界GdipGetPathGradientRect路刷边界(路刷,@点组)获取包含此路径渐变画笔的边界路径的最小矩形。
路刷矩形GdipGetPathGradientRectI路刷矩形(路刷,点组)获取包含此路径渐变画笔的边界路径的最小矩形。
路刷点数GdipGetPathGradientPointCount路刷点数(路刷,@点组)获取定义此画笔边界路径的点数组中的点数。
路边色数GdipGetPathGradientSurroundColorCount路边色数(路刷,@数量)获取已为此路径渐变画笔的边界路径指定的颜色数。
路取校正GdipGetPathGradientGammaCorrection路取校正(路刷,@是否)确定是否为此路径渐变画笔启用伽玛校正。
路改校正GdipSetPathGradientGammaCorrection路改校正(路刷,是否)指定是否为此路径渐变画笔启用伽玛校正。
路刷因数GdipGetPathGradientBlendCount路刷因数(路刷,@数量)获取当前为此路径渐变画笔设置的混合因子数。
路取混合GdipGetPathGradientBlend路取混合(路刷,@因子,@点组,数量)获取当前为此路径渐变画笔设置的混合因子和相应的混合位置。
路改混合GdipSetPathGradientBlend路改混合(路刷,因子,点组,数量)设置此路径渐变画笔的混合因子和混合位置。
路颜色数GdipGetPathGradientPresetBlendCount路颜色数(路刷,@数量)获取当前为此路径渐变画笔指定的预设颜色数。
路取混色GdipGetPathGradientPresetBlend路取混色(路刷,@色组,@点组,数量)获取当前为此路径渐变画笔设置的混合因子和相应的混合位置。
路改混色GdipSetPathGradientPresetBlend路改混色(路刷,色组,点组,数量)设置此路径渐变画笔的预设颜色和混合位置。
路混原形GdipSetPathGradientSigmaBlend路混原形(路刷,中心强度,边界强度)设置此路径渐变画笔的混合形状。
路混线性GdipSetPathGradientLinearBlend路混线性(路刷,中心强度,边界强度)设置此路径渐变画笔的混合形状。
路改平铺GdipSetPathGradientWrapMode路改平铺(路刷,模式)设置此路径线性渐变画笔的环绕模式
路取平铺GdipGetPathGradientWrapMode路取平铺(路刷,@模式)获取此路径线性渐变画笔的换行模式。确定如何平铺区域。
路取转矩GdipGetPathGradientTransform路取转矩(路刷,@矩阵)获取此路径线性渐变画笔的转换矩阵。
路改转矩GdipSetPathGradientTransform 路改转矩(路刷,矩阵)设置此路径线性渐变画笔的转换矩阵。
路刷标识GdipResetPathGradientTransform路刷标识(路刷,@矩阵)将此路径线性渐变画笔的转换矩阵重置为标识矩阵。这意味着不会发生任何转换。
路乘矩阵GdipMultiplyPathGradientTransform 路乘矩阵(路刷,矩阵,顺序)使用自身和另一个矩阵的乘积更新此线刷对象的世界转换矩阵。乘法顺序:0新矩阵在左侧,1在右侧
路乘转换GdipTranslatePathGradientTransform 路乘转换(路刷,平缩,纵缩,顺序)此路径线性渐变画刷对象的世界转换矩阵设置为等于自身和转换矩阵的乘积。乘法顺序:0新矩阵在左侧,1在右侧
路乘缩放GdipScalePathGradientTransform 路乘缩放(路刷,横缩,纵缩,顺序)此路径线性渐变画刷对象的世界转换矩阵设置为等于自身和缩放矩阵的乘积。乘法顺序:0新矩阵在左侧,1在右侧
路乘旋转GdipRotatePathGradientTransform 路乘旋转(路刷,小数 角度,顺序)使用自身乘积和旋转矩阵更新此线刷对象的世界转换矩阵。乘法顺序:0新矩阵在左侧,1在右侧
路取比例GdipGetPathGradientFocusScales路取比例(路刷,@横比,@纵比)获取此路径渐变画笔的焦点比例。
路改比例GdipSetPathGradientFocusScales路改比例(路刷,横比,纵比)设置此路径渐变画笔的焦点比例。
路径创建GdipCreatePath路径创建(模式,@路径)创建路径对象并初始化填充模式。这是默认构造函数。
路径新建GdipCreatePath2路径新建(点组,类组,数量,模式,@路径)基于小数值点数组、类型字节数组填充模式创建路径对象。
路径建立GdipCreatePath2I路径建立(点组,类组,数量,模式,@路径)基于整数值点数组、类型字节数组填充模式创建路径对象。
路径克隆GdipClonePath路径克隆(路径,@新路径)创建新的路径对象,并使用此路径对象的内容对其进行初始化。
路径删除GdipDeletePath路径删除(路径)释放路径对象使用的资源。
路径重置GdipResetPath路径重置(路径)清空路径并将填充模式设置为0奇偶交替。
路径点数GdipGetPointCount路径点数(路径,@数量)获取此路径的数据点数组中的点数。这与路径的点类型数组中的类型数相同。
路径类型GdipGetPathTypes路径类型(路径,@类型组,数量)获取此路径的点类型的字节数组。
路径点组GdipGetPathPoints路径点组(路径,@点组,数量)获取此路径的小数值点数组。包含用于绘制路径的线条和贝塞尔样条的端点和控制点。
路径点集GdipGetPathPointsI路径点集(路径,@点组,数量)获取此路径的整数值点数组。包含用于绘制路径的线条和贝塞尔样条的端点和控制点。
路取填充GdipGetPathFillMode路取填充(路径,@模式)获取此路径的填充模式
路改填充GdipSetPathFillMode路改填充(路径,模式)设置此路径的填充模式
路径数据GdipGetPathData路径数据(路径,路径数据类)从此路径获取点数组和点类型的数组。路径点类的两个数组一起定义此路径的线条、曲线、图形和标记。
路开新图GdipStartPathFigure路开新图(路径)不闭合当前图形即开始一个新图形。添加到此路径的后续点将添加到新图中。
路关现图GdipClosePathFigure路关现图(路径)关闭此路径的当前图。
路关全图GdipClosePathFigures路关全图(路径)关闭此路径中的所有打开的图形。
路径标记GdipSetPathMarker路径标记(路径)将此路径中的最后一个点指定为标记点。
路清标识GdipClearPathMarkers路清标识(路径)清除此路径中的标记。
路径反转GdipReversePath路径反转(路径)反转定义此路径的线条和曲线的点的顺序。
路径终点GdipGetPathLastPoint路径终点(路径,@终点)获取此路径中最后一个图形的终点。
路加线段GdipAddPathLine路加线段(路径,左,上,右,下)向此路径的当前图形添加一条线段。
路加多线GdipAddPathLine2路加多线(路径,点组,数量)向此路径的当前图形添加多条线段。
路加圆弧GdipAddPathArc路加圆弧(路径,左,顶,宽,高,起始角,扫视角)向此路径的当前图形添加椭圆弧。
路加曲线GdipAddPathBezier路加曲线(路径,x1,y1,x2,y2,x3,y3,x4,y4)向此路径的当前图形添加贝塞尔样条。
路多曲线GdipAddPathBeziers路多曲线(路径,点组,数量)向此路径的当前图形添加一系列贝塞尔样条。
路加弧线GdipAddPathCurve路加弧线(路径,点组,数量)将基数样条添加到此路径的当前图形。
路加弧度GdipAddPathCurve2路加弧度(路径,点组,数量,曲率)将基数样条添加到此路径的当前图形。
路加弧形GdipAddPathCurve3路加弧形(路径,点组,组数,起始,段数,曲率)将基数样条添加到此路径的当前图形。
路加闭合GdipAddPathClosedCurve路加闭合(路径,点组,组数)将一个闭合的基数样条添加到此路径。
路加闭弧GdipAddPathClosedCurve2路加闭弧(路径,点组,组数,曲率)将一个闭合的基数样条添加到此路径。
路加矩形GdipAddPathRectangle路加矩形(路径,点组,组数)将一个矩形添加到此路径。
路加方组GdipAddPathRectangles路加方组(路径,点组,组数,曲率)将多个矩形添加到此路径。
路加椭圆GdipAddPathEllipse路加椭圆(路径,左,顶,宽,高)将一个椭圆添加到此路径。
路加饼图GdipAddPathPie路加饼图(路径,左,顶,宽,高,起始角,扫视角)将一个饼图添加到此路径。
路加多边GdipAddPathPolygon路加多边(路径,点组,组数)将一个多边形添加到此路径。
路加路径GdipAddPathPath路加路径(路径,路径,合并)将一个路径添加到此路径。合并为真时原图是新图形的一部分
路加轮廓GdipAddPathString路加轮廓(路径,宽字,长度,字系,字样,字高,边框,字形)将字符串的轮廓添加到此路径。边框矩形为小数,字高为小数世界单位;字样
路字轮廓GdipAddPathStringI路字轮廓(路径,宽字,长度,字系,字样,字高,边框,字形)将字符串的轮廓添加到此路径。边框矩形为整数,字高为小数世界单位;字样
路径线段GdipAddPathLineI路径线段(路径,左,上,右,下)向此路径的当前图形添加一条线段。
路径多线GdipAddPathLine2I路径多线(路径,点组,数量)向此路径的当前图形添加多条线段。
路径圆弧GdipAddPathArcI路径圆弧(路径,左,顶,宽,高,起始角,扫视角)向此路径的当前图形添加椭圆弧。
路径曲线GdipAddPathBezierI路径曲线(路径,x1,y1,x2,y2,x3,y3,x4,y4)向此路径的当前图形添加贝塞尔样条。
路径曲组GdipAddPathBeziersI路径曲组(路径,点组,数量)向此路径的当前图形添加一系列贝塞尔样条。
路径弧线GdipAddPathCurveI路径弧线(路径,点组,数量)将基数样条添加到此路径的当前图形。
路径弧度GdipAddPathCurve2I路径弧度(路径,点组,数量,曲率)将基数样条添加到此路径的当前图形。
路径弧形GdipAddPathCurve3I路径弧形(路径,点组,组数,起始,段数,曲率)将基数样条添加到此路径的当前图形。
路径闭合GdipAddPathClosedCurveI路径闭合(路径,点组,组数)将一个闭合的基数样条添加到此路径。
路径闭弧GdipAddPathClosedCurve2I路径闭弧(路径,点组,组数,曲率)将一个闭合的基数样条添加到此路径。
路径矩形GdipAddPathRectangleI路径矩形(路径,点组,组数)将一个矩形添加到此路径。
路径方组GdipAddPathRectanglesI路径方组(路径,点组,组数,曲率)将多个矩形添加到此路径。
路径椭圆GdipAddPathEllipseI路径椭圆(路径,左,顶,宽,高)将一个椭圆添加到此路径。
路径饼图GdipAddPathPieI路径饼图(路径,左,顶,宽,高,起始角,扫视角)将一个饼图添加到此路径。
路径多边GdipAddPathPolygonI路径多边(路径,点组,组数)将一个多边形添加到此路径。
路径平展GdipFlattenPath路径平展(路径,矩阵,平整度)将转换应用于此路径,并将路径中的每个曲线转换为连接的线条序列。
路径卷边GdipWindingModeOutline路径卷边(路径,矩阵,平整度)转换和平展此路径,然后转换此路径的数据点,以便它们仅表示路径的轮廓。
路径扩展GdipWidenPath路径扩展(路径,笔,矩阵,平整度)将此路径替换为包含指定笔绘制此路径时所填充区域的曲线。此方法还会平展路径。
路径扭曲GdipWarpPath路径扭曲(路径,矩阵,点组,数组,左,顶,宽,高,平整度)将扭曲转换应用于此路径。此方法还会平展 (转换为路径) 直线序列。
路径转换GdipTransformPath路径转换(路径,矩阵)将此路径的每个数据点乘以指定的矩阵。
路径边框GdipGetPathWorldBounds路径边框(路径,@边框,矩阵,笔)获取此路径的小数值边框矩形。
路径外框GdipGetPathWorldBoundsI路径外框(路径,@边框,矩阵,笔)获取此路径的整数值边框矩形。
路径区点GdipIsVisiblePathPoint路径区点(路径,左,上,图形,@是否)确定指定小数值点是否位于由指定的图形设备对象填充此路径时所填充的区域。
路径内点GdipIsVisiblePathPointI路径内点(路径,左,上,图形,@是否)确定指定整数值点是否位于由指定的图形设备对象填充此路径时所填充的区域。
路径边线GdipIsOutlineVisiblePathPoint路径边线(路径,左,上,笔,图形,@是否)确定当路径由指定的图形设备对象和指定的笔绘制时,指定的点是否触及此路径的轮廓。
路径边界GdipIsOutlineVisiblePathPoint路径迭代(路径,左,上,笔,图形,@是否)确定当路径由指定的图形设备对象和指定的笔绘制时,指定的点是否触及此路径的轮廓。
路径迭代GdipCreatePathIter路径迭代(@迭代,路径)创建新的迭代器对象,并将其与 路径 对象相关联。
删除迭代GdipDeletePathIter删除迭代(迭代)释放迭代器对象使用的资源。
迭代索引GdipPathIterNextSubpath迭代索引(迭代,@结果,@起始,@结束,@闭合)获取此迭代器的关联路径中下一个子路径(图)的起始索引和结束索引。
迭代子路GdipPathIterNextSubpath迭代子路(迭代,@结果,@路径,@闭合)从此迭代器的关联路径获取下一个图 (子路径) 。
迭代同类GdipPathIterNextPathType迭代同类(迭代,@结果,@起始,@结束,@闭合)获取全部具有相同类型的下一组数据点的起始索引和结束索引。
迭代标记GdipPathIterNextMarker迭代标记(迭代,@结果,@起始,@结束)获取此迭代器的关联路径中下一个标记分隔节的起始索引和结束索引。
迭代记路GdipPathIterNextMarkerPath迭代记路(迭代,@结果,@路径)获取此迭代器的关联路径的下一个标记分隔部分。
迭代点数GdipPathIterGetCount迭代点数(迭代,@点数)返回路径中的数据点数。
迭代数目GdipPathIterGetSubpathCount迭代数目(迭代,@数目)返回路径中子路径的数目。
迭代有效GdipPathIterIsValid迭代有效(迭代,@是否)指示迭代器参数指定的路径迭代器是否有效。
迭代曲线GdipPathIterHasCurve迭代曲线(迭代,@是否)确定路径是否具有任何曲线。
迭代倒放GdipPathIterRewind迭代倒放(迭代)将此迭代器倒带到其关联路径的开头。
迭代枚举GdipPathIterEnumerate迭代枚举(迭代,@结果,@点组,@类组,数量)将路径的数据点复制到小数值点数组,并将路径的点类型复制到字节数组。
迭代数据GdipPathIterCopyData迭代数据(迭代,@结果,@点组,@类组,起始,结束)将路径数据点的子集复制到小数值点数组,并将路径的点类型的子集复制到字节数组。
路径点类型PathPointType 路径中数据点的点类型和标志。0到2位指定点的类型,3到7位指定点属性的标志。
中文名称英文名称数值作用
路点开头PathPointTypeStart0指示该点是图形的开头。
路点线段PathPointTypeLine1指示该点是线条的两个端点之一。
贝塞尔点PathPointTypeBezier3指示该点是三次方贝塞尔样条的端点或控制点。
路点掩码PathPointTypePathTypeMask0x07掩码除三个低序位(指示点类型)之外的所有位。
路点虚线PathPointTypeDashMode0x10未使用。
路点标记PathPointTypePathMarker0x20指定该点为标记。
路点终点PathPointTypeCloseSubpath0x80指定该点是封闭的子路径中的最后一个点(图) 。
路径点类
中文名字英文名称长度作用解释
路径点类PathData12具有一个点数组和一个类型的数组。
路径点类——成员表
数量count整数数组元素的数量。
点组Points整数指向小数坐标点数组的指针
类组types整数指向点类型数组的指针。类型数组中的每个元素都是一个字节,用于指定点类型和点数组中对应元素的一组标志。

矩阵变换

矩阵对象表示 3 ×3 矩阵,该矩阵又表示仿射转换。矩阵对象在 3 ×3 矩阵中仅存储 9 个小数值中的 6 个,因为表示仿射变换的所有 3 ×3 矩阵都具有相同的第三列 (0、0、1) 。

[1] m11 指定第一行、第一列中元素的实数-水平缩放分量或旋转角度的余弦值。
[2] m12 指定第一行、第二列中的元素的实数-水平剪切分量或旋转角度的正弦值。
[3] m21 指定第二行、第一列中的元素的实数 - 垂直剪切分量或旋转角度的负正弦值。
[4] m22 指定第二行、第二列中元素的实数-垂直缩放分量或旋转角度的余弦值。
[5] dx 指定第三行、第一列(水平平移组件)中的元素的实数。
[6] dy 指定第三行、第二列中的元素的实数-垂直转换组件。
中文名称英文名称示例作用
矩阵创建GdipCreateMatrix矩阵创建(@矩阵)创建并初始化矩阵对象。
矩阵新建GdipCreateMatrix2矩阵新建(m11,m12,m21,m22,dx,dy,@矩阵)基于定义仿射转换的六个数字创建并初始化矩阵对象。
矩阵建立GdipCreateMatrix3矩阵建立(矩形,点,@矩阵)基于小数值的矩形和点创建矩阵对象。
矩阵建设GdipCreateMatrix3I矩阵建设(矩形,点,@矩阵)基于整数值的矩形和点创建矩阵对象。
矩阵克隆GdipCloneMatrix矩阵克隆(矩阵,@新矩阵)创建一个新的矩阵对象副本。
矩阵删除GdipDeleteMatrix矩阵删除(矩阵)清理矩阵对象使用的资源。
矩阵修改GdipSetMatrixElements矩阵修改(矩阵,m11,m12,m21,m22,dx,dy)设置此矩阵的元素。
矩阵相乘GdipMultiplyMatrix矩阵相乘(矩阵,矩阵2,顺序)使用自身和另一个矩阵的乘积更新此矩阵。乘法顺序:0新矩阵在左侧,1在右侧
矩阵转换GdipTranslateMatrix矩阵转换(矩阵,矩阵2,顺序)使用自身乘积和转换矩阵更新此矩阵。乘法顺序:0新矩阵在左侧,1在右侧
矩阵缩放GdipScaleMatrix矩阵缩放(矩阵,横缩,纵缩,顺序)使用自身和缩放矩阵的乘积更新此矩阵。乘法顺序:0新矩阵在左侧,1在右侧
矩阵旋转GdipRotateMatrix矩阵旋转(矩阵,角度,顺序)使用自身乘积和旋转矩阵更新此矩阵。乘法顺序:0新矩阵在左侧,1在右侧
矩阵剪切GdipShearMatrix矩阵剪切(矩阵,平剪,直剪,顺序)使用自身乘积和剪切矩阵更新此矩阵。乘法顺序:0新矩阵在左侧,1在右侧
矩阵反转GdipInvertMatrix矩阵反转(矩阵)将此矩阵的元素替换为其逆矩阵的元素。
矩乘点组GdipTransformMatrixPoints矩乘点组(矩阵,点组,数量)将小数值数组中的每个点乘以此矩阵。每个点为一行。相乘时行矩阵在左侧,此矩阵在右侧。
矩乘点阵GdipTransformMatrixPointsI矩乘点阵(矩阵,点组,数量)将整数值数组中的每个点乘以此矩阵。每个点为一行。相乘时行矩阵在左侧,此矩阵在右侧。
矩乘向量GdipVectorTransformMatrixPoints矩乘向量(矩阵,点组,数量)将小数值数组中的每个向量乘以此矩阵。每个向量为一行。忽略第三行转换元素。
矩乘矢量GdipVectorTransformMatrixPointsI矩乘矢量(矩阵,点组,数量)将整数值数组中的每个向量乘以此矩阵。每个向量为一行。忽略第三行转换元素。
矩阵元素GdipGetMatrixElements矩阵元素(矩阵,@点组)获取此矩阵的元素。按 m11、m12、m21、m22、m31、m32 的顺序放置在数组中
矩阵可逆GdipIsMatrixInvertible矩阵可逆(矩阵,@是否)确定此矩阵是否不可逆。返回真是不可逆
矩阵标识GdipIsMatrixIdentity矩阵标识(矩阵,@是否)确定此矩阵是否为标识矩阵。
矩阵相等GdipIsMatrixEqual矩阵相等(矩阵,矩阵2,@是否)确定此矩阵的元素是否等于另一个矩阵的元素。

位图缓存

位图是一个位数组,用于指定像素矩形数组中每个像素的颜色。位图对象用来存储与设备无关的图像和与应用程序无关的图像的标准格式。
缓存位图对象以针对特定设备上显示进行优化的格式存储位图。缓存位图对象简称存图
中文名称英文名称示例作用
文件取流GdipCreateStreamOnFile文件取流(名称,读写,@流)基于文件获取指向流对象接口的指针。
文件取图GdipCreateBitmapFromFile文件取图(宽文件名,@位图)基于图像文件创建位图对象。格式包括 BMP、GIF、JPEG、PNG、TIFF、Exif、WMF 和 EMF。
配置取图GdipCreateBitmapFromFileICM配置取图(宽文件名,@位图)基于ICM配置文件的图像文件创建位图对象。
数据取图GdipCreateBitmapFromStream数据取图(流,@位图)基于流创建位图对象。此函数使用ICM。
配流取图GdipCreateBitmapFromStreamICM配流取图(流,@位图)基于ICM流创建位图对象。
定位取图GdipCreateBitmapFromScan0定位取图(宽,高,步幅,格式,字节组,@位图)根据字节数组以及宽高和格式信息创建位图对象。步幅:相邻行间隔字节数;
图形取图GdipCreateBitmapFromGraphics图形取图(宽,高,图形,@位图)基于图形设备对象,宽度和高度创建位图对象。
图面取图GdipCreateBitmapFromDirectDrawSurface图面取图(驱动图面对象,@位图)基于图像对象,宽度和高度创建位图对象。
结构取图GdipCreateBitmapFromGdiDib结构取图(结构,数组,@位图)基于位图信息结构和像素数据数组创建位图对象。
位图取图GdipCreateBitmapFromHBITMAP位图取图(句柄,色板,@位图)基于图形设备接口位图的句柄和GDI调色板的句柄创建位图对象。
位图绘图GdipCreateHBITMAPFromBitmap位图绘图(位图,@句柄,背景色)从此位图对象创建Windows图形设备接口(GDI)位图句柄。
图标取图GdipCreateBitmapFromHICON图标取图(句柄,@位图)根据图标创建位图对象。
图标绘图GdipCreateHICONFromBitmap图标绘图(位图,@句柄)从此位图对象创建一个图标。
资源取图GdipCreateBitmapFromResource资源取图(实例,资源,@位图)基于应用程序或动态链接库(DLL)实例句柄和位图资源的名称创建位图对象。
裁剪位图GdipCloneBitmapArea裁剪位图(小数 左,顶,宽,高,格式,源图,@位图)通过复制该位图的一部分来创建新的位图对象。图像像素格式。左顶宽高为小数
裁剪图像GdipCloneBitmapAreal裁剪图像(左,顶,宽,高,格式,源图,@位图)通过复制该位图的一部分来创建新的位图对象。图像像素格式。左顶宽高为整数
位图取色GdipBitmapGetPixel位图取色(位图,X,Y,@颜色)获取此位图中指定像素的颜色。
位图改色GdipBitmapSetPixel位图改色(位图,X,Y,颜色)设置此位图中指定像素的颜色。
位图锁定GdipBitmapLockBits位图锁定(位图,矩形,标志,格式,数据)锁定此位图的矩形部分,并提供可用于以指定格式读取或写入像素数据的临时缓冲区。标志
位图解锁GdipBitmapUnlockBits位图解锁(位图,数据)解锁此位图之前由 位图锁定 锁定的此位图的一部分。
位图尺寸GdipBitmapSetResolution位图尺寸(位图,小数 X,小数 Y)设置此位图对象的水平和垂直分辨率大小。(以点/英寸为单位)
位图改色GdipBitmapSetPixel位图改色(位图,X,Y,颜色)设置此位图中指定像素的颜色。
图转格式GdipBitmapConvertFormat图转格式(位图,像素,抖动,色板类型,色板组,透明度)位图中的原始像素数据将替换为新的像素格式数据。像素格式,抖动类型,色板类型,色板数组类
初始色板GdipInitializePalette初始色板(@色板组,色板类型,颜色数,是否透明,位图)初始化标准、最佳或自定义调色板。色板数组类,色板类型
位图效果GdipBitmapApplyEffect位图效果(位图,效果,矩形,是否辅助,辅助数据,数据大小)通过应用指定的效果来更改此位图对象。
建效果图GdipBitmapCreateApplyEffect位图效果(位图,数量,效果,矩形,@新矩形
,@新图,是否辅助,辅助数据,数据大小)
通过将指定的效果应用于现有位图对象来创建新的位图对象。
取直方图GdipBitmapGetHistogram取直方图(位图,直方格式,元素数,数组0,数组1,数组2,数组3)为此位图对象的指定颜色通道返回一个或多个直方图。直方图格式
直方数目GdipBitmapGetHistogramSize直方数目(直方格式,@元素数)返回在调用 取直方图 函数之前必须分配的数组中元素的数目。直方图格式
创建效果GdipCreateEffect创建效果(类标识,@效果)通过类标识GUID创建效果对象。
改效果值GdipSetEffectParameters改效果值(效果,数量,参数组)设置此效果对象的参数组数值。
取效果值GdipGetEffectParameters取效果值(效果,数量,参数组)设置此位图中指定像素的颜色。
内测控制GdipTestControl内测控制(控制,@参数)指定图像处理行为中的更改。控制:0=强制双线性(参数为真且非临近插值=惰性双线性),
1=非ICM(参数为真忽略ICM配置文件),2=取版本号(参数接收)
创建存图GdipCreateCachedBitmap创建存图(位图,图形,@存图)基于位图对象和图形设备对象创建缓存位图对象。
删除存图GdipDeleteCachedBitmap删除存图(存图)清理缓存位图对象使用的资源。
绘制存图GdipDrawCachedBitmap绘制存图(图形,存图,X,Y)绘制存储在 缓存位图 对象中的图像。
位图数据类
中文名字英文名称长度作用解释
位图数据类BitmapData24包含了位图数据相关信息的结构
位图数据类——成员表
宽度Width整数位图对象的像素宽度
高度Height整数位图对象的像素高度
步长stride整数位图对象的跨距宽度(也称为扫描宽度)
像素PixelFormat整数位图对象的像素信息格式
扫描scan0整数位图对象第一像素数据的地址
预留Reserved整数保留。 请勿使用
色板数组类
中文名字英文名称长度作用解释
色板数组类ColorPalette12+包含了位图数据相关信息的结构
色板数组类——成员表
标志Flags整数标准调色板格式标志的组合。
数量Count整数数组中的元素数。
数组Entries[1]整数ARGB 颜色数组。自定义长度

标准调色板格式标志-PaletteType标识多种标准调色板格式。

英文名称数值作用
PaletteTypeCustom0调用方提供的任意自定义调色板。
PaletteTypeOptimal1最适合特定位图的调色板。 若要创建最佳调色板,请将 PaletteTypeOptimal、调色板中所需的颜色数以及 位图 对象的地址传递给 初始色板 方法。
PaletteTypeFixedBW2具有两种颜色的调色板。 此调色板类型适用于每个像素存储 1 位的位图。
PaletteTypeFixedHalftone83基于两个强度的调色板,每个强度 (红色、绿色和蓝色通道的关闭或完全) 。 还包含系统调色板的 16 种颜色。 由于红色、绿色和蓝色的所有 8 个开/关组合已在系统调色板中,因此此调色板与系统调色板相同。 此调色板类型适用于每个像素存储 4 位的位图。
PaletteTypeFixedHalftone274基于红色、绿色和蓝色通道的三种强度的调色板。 还包含系统调色板的 16 种颜色。 16 种系统调色板颜色中有 8 种是红、绿、蓝三种三强度组合,因此调色板中的颜色总数为 35。 如果调色板还包含透明颜色,则颜色总数为 36。
PaletteTypeFixedHalftone645基于红色、绿色和蓝色通道的四种强度的调色板。 还包含系统调色板的 16 种颜色。 16 种系统调色板颜色中有 8 种是红色、绿色和蓝色的 64 种四强度组合,因此调色板中的颜色总数为 72。 如果调色板还包含透明颜色,则颜色总数为 73。
PaletteTypeFixedHalftone1256基于红色、绿色和蓝色通道的五种强度的调色板。 还包含系统调色板的 16 种颜色。 16 种系统调色板颜色中有 8 种是红色、绿色和蓝色的 125 种五强度组合,因此调色板中的颜色总数为 133。 如果调色板还包含透明颜色,则颜色总数为 134。
PaletteTypeFixedHalftone2167基于红色、绿色和蓝色通道的六种强度的调色板。 还包含系统调色板的 16 种颜色。 16 种系统调色板颜色中有 8 种是红色、绿色和蓝色的 216 种六强度组合,因此调色板中的颜色总数为 224。 如果调色板还包含透明颜色,则颜色总数为 225。 此调色板有时称为 Windows 半色调调色板或 Web 调色板。
PaletteTypeFixedHalftone2528基于 6 个红色强度、7 个绿色强度和 6 个蓝色强度的调色板。 不包括系统调色板。 颜色总数为 252。 如果调色板还包含透明颜色,则颜色总数为 253。
PaletteTypeFixedHalftone2569基于 8 种红色强度、8 种绿色强度和 4 种蓝色强度的调色板。 不包括系统调色板。 颜色总数为 256。 如果此调色板中包含透明颜色,则必须替换 RGB 组合之一。

图像像素格式常量

中文名称英文名称数值作用
像素1位索引PixelFormat1bppIndexed$30101指定格式为每像素 1 位,已编制索引。
像素4位索引PixelFormat4bppIndexed$30402指定格式为每像素 4 位而且已创建索引。
像素8位索引PixelFormat8bppIndexed$30803指定格式为每像素 8 位而且已创建索引。
像素16位灰度PixelFormat16bppGreyScale$101004指定格式为每像素 16 位灰度。
像素16位均色PixelFormat16bppRGB555$21005指定格式为每像素 16 位;红色、绿色和蓝色分量各使用 5 位。 剩余的 1 位未使用。
像素16位偏绿PixelFormat16bppRGB565$21006指定格式为每像素 16 位;红色分量使用 5 位,绿色分量使用 6 位,蓝色分量使用 5 位。
像素16位透明PixelFormat16bppARGB1555$61007指定格式为每像素 16 位;1 位用于 alpha 分量,5 位分别用于红色、绿色和蓝色分量。
像素24位均色PixelFormat24bppRGB$21808指定格式为每像素 24 位;红色、绿色和蓝色分量各使用 8 位。
像素32位均色PixelFormat32bppRGB$22009指定格式为每像素 32 位;红色、绿色和蓝色分量各使用 8 位。 剩余的 8 位未使用。
像素32位透明PixelFormat32bppARGB$26200A指定格式为每像素 32 位;alpha、红色、绿色和蓝色分量各使用 8 位。
像素32位左乘PixelFormat32bppPARGB$E200B指定格式为每像素 32 位;alpha、红色、绿色和蓝色分量各使用 8 位。 根据 alpha 分量,对红色、绿色和蓝色分量进行自左乘。
像素48位均色PixelFormat48bppRGB$10300C指定格式为每像素 48 位;红色、绿色和蓝色分量各使用 16 位。
像素64位透明PixelFormat64bppARGB$34400D指定格式为每像素 64 位;alpha、红色、绿色和蓝色分量各使用 16 位。
像素64位左乘PixelFormat64bppPARGB$1C400E指定格式为每像素 64 位;alpha、红色、绿色和蓝色分量各使用 16 位。 根据 alpha 分量,对红色、绿色和蓝色分量进行自左乘。

位图锁定标志-传递给 位图锁定 函数的 标志 参数的标志。

英文名称数值作用
ImageLockModeRead0x0001指定锁定图像的一部分以便读取。
ImageLockModeWrite0x0002指定锁定图像的一部分以便写入。
ImageLockModeUserInputBuf0x0004指定由用户分配读取或写入像素数据时使用的缓冲区。如果设置了此标志则 数据 参数为输入,否则为输出

位图抖动类型标志-标识转换位图时用于抖变的可用算法。DitherType

英文名称数值作用
DitherTypeNone0未执行抖振。 源位图中的像素映射到由 Bitmap::ConvertFormat 方法的调色板参数指定的调色板中最近的颜色。 此算法可以与任何调色板一起使用。 如果 调色板参数指定的调色板 没有 PaletteType 枚举中列出的标准固定格式之一,请将 PaletteTypeCustom 传递给 palettetype 参数。
DitherTypeSolid1未执行抖振。 源位图中的像素映射到由 Bitmap::ConvertFormat 方法的调色板参数指定的调色板中最近的颜色。 此算法可以与任何调色板一起使用。 如果 调色板参数指定的调色板 没有 PaletteType 枚举中列出的标准固定格式之一,请将 PaletteTypeCustom 传递给 palettetype 参数。
DitherTypeOrdered4x42可以使用此算法根据其中一个标准固定调色板中的颜色执行抖动。 还可以使用此算法将位图转换为没有调色板的每像素 16 位格式。
DitherTypeOrdered8x83使用其中一个标准固定调色板中的颜色执行抖动。
DitherTypeOrdered16x164使用其中一个标准固定调色板中的颜色执行抖动。
DitherTypeSpiral4x45使用其中一个标准固定调色板中的颜色执行抖动。
DitherTypeSpiral8x86使用其中一个标准固定调色板中的颜色执行抖动。
DitherTypeDualSpiral4x47使用其中一个标准固定调色板中的颜色执行抖动。
DitherTypeDualSpiral8x88使用其中一个标准固定调色板中的颜色执行抖动。
DitherTypeErrorDiffusion9抖动是基于 图转格式函数的调色板参数指定的调色板执行的。 此算法可以与任何调色板一起使用。 如果 调色板参数指定的调色板 没有 PaletteType 枚举中列出的标准固定格式之一,请将 PaletteTypeCustom 传递给 palettetype 参数。
DitherTypeMax10TBD

直方图格式标志-HistogramFormat指定表示位图颜色通道的直方图的数量和类型。

英文名称数值作用
HistogramFormatARGB0指定 取直方图 函数返回四个直方图:透明、红色、绿色和蓝色通道各一个直方图。 透明 通道直方图写入 取直方图 函数的 数组0 参数指向的缓冲区。 红色通道直方图将写入 数组1 参数指向的缓冲区。 绿色通道直方图将写入 数组2 参数指向的缓冲区。 蓝色通道直方图写入 数组3 参数指向的缓冲区。
HistogramFormatPARGB1指定 取直方图 函数返回四个直方图:透明、红色、绿色和蓝色通道各一个直方图。 创建直方图之前,红色、绿色和蓝色通道分别乘以 透明 通道。 当颜色通道乘以 透明 通道时,位图不会永久更改;该乘法仅用于创建直方图。 透明 通道直方图写入 取直方图 函数的 数组0 参数指向的缓冲区。 红色通道直方图将写入 数组1 参数指向的缓冲区。 绿色通道直方图将写入 数组2 参数指向的缓冲区。 蓝色通道直方图写入 数组3 参数指向的缓冲区。
HistogramFormatRGB2指定 取直方图 函数返回三个直方图:红色、绿色和蓝色通道各一个直方图。 红色通道直方图写入 取直方图 函数的 数组0 参数指向的缓冲区。 绿色通道直方图将写入 数组1 参数指向的缓冲区。 蓝色通道直方图将写入 数组2 参数指向的缓冲区。 数组3 参数必须设置为 0。
HistogramFormatGray3指定将每个像素转换为 0 到 255 范围内的灰度值,然后根据这些灰度值返回一个直方图。 位图不会因转换为灰度值而永久更改;计算这些值只是为了创建直方图。 灰度直方图写入 取直方图 函数的 数组0 参数指向的缓冲区。 数组1、数组2 和 数组3 参数必须设置为 0。
HistogramFormatB4指定 取直方图 函数返回蓝色通道的直方图。 蓝色通道直方图写入 取直方图 函数的 数组0 参数指向的缓冲区。 数组1、数组2 和 数组3 参数必须设置为 0。
HistogramFormatG5指定 取直方图 函数返回绿色通道的直方图。 绿色通道直方图将写入 取直方图 函数的 数组0 参数指向的缓冲区。 数组1、数组2 和 数组3 参数必须设置为 0。
HistogramFormatR6指定 取直方图 函数返回红色通道的直方图。 红色通道直方图写入 取直方图 函数的 数组0 参数指向的缓冲区。 数组1、数组2 和 数组3 参数必须设置为 0。
HistogramFormatA7指定 取直方图 函数返回 透明 通道的直方图。 透明 通道直方图写入 取直方图 函数的 数组0 参数指向的缓冲区。 数组1、数组2 和 数组3 参数必须设置为 0。


图像图元

图像对象提供用于 (位图加载和保存光栅图像的方法) 和矢量图像 (图元文件) 。可以从各种文件类型(包括 BMP、ICON、GIF、JPEG、Exif、PNG、TIFF、WMF 和 EMF)构造图像对象。
图元文件对象定义图形图元文件。 图元文件包含描述图形 API 调用序列的记录。可以构造(录制)图元文件显示(播放)。图元文件对象简称图元
中文名称英文名称示例作用
文件载图GdipLoadImageFromFile文件载图(文件名,@图像)根据文件创建图像对象。
配置载图GdipLoadImageFromFileICM配置载图(文件名,@图像)根据ICM文件创建图像对象。
数据载图GdipLoadImageFromStream数据载图(流,@图像)根据文件流创建图像对象。
配流载图GdipLoadImageFromStreamICM配流载图(文件流,@图像)根据ICM文件流创建图像对象。
克隆图像GdipCloneImage克隆图像(图像,@新图)创建一个新的图像对象,并使用此图像对象的内容进行初始化。
释放图像GdipDisposeImage释放图像(图像)释放图像对象使用的资源。
添加存图GdipSaveAdd添加存图(图像,编码)将所选帧从多帧图像保存到文件流。
添加新图GdipSaveAddImage添加新图(图像,新图,编码)将所选帧从多帧图像保存到文件流。
文件存图GdipSaveImageToFile文件存图(图像,宽文件名,类号,编码)将图像保存到文件。
数据存图GdipSaveImageToStream数据存图(图像,流,类号,编码)将图像保存到流对象。
图像类型GdipGetImageType图像类型(图像,@类型)获取此图像对象的类型。
图像宽度GdipGetImageWidth图像宽度(图像,@宽度)获取此图像对象的宽度。
图像高度GdipGetImageHeight图像高度(图像,@高度)获取此图像对象的高度。
图像边界GdipGetImageBounds图像边界(图像,矩形,@单位)获取此图像对象的边界矩形。
图像宽高GdipGetImageDimension图像宽高(图像,@宽度,@高度)获取此图像对象的宽度和高度(小数值)。
图像横值GdipGetImageHorizontalResolution图像横值(图像,@宽度)获取此图像的水平分辨率(以英寸为单位)。
图像竖值GdipGetImageVerticalResolution图像竖值(图像,@高度)获取此图像的垂直分辨率(以英寸为单位)。
图像标志GdipGetImageFlags图像标志(图像,@标志)获取此图像对象的标志
图像标识GdipGetImageRawFormat图像标识(图像,@类号)获取此图像对象的全局唯一标识符(GUID)。
图像格式GdipGetImagePixelFormat图像格式(图像,@格式)获取此图像对象的像素格式
图像缩略GdipGetImageThumbnail图像缩略(图像,宽,高,@小图,回调,附加)从图像对象获取缩略图。回调函数
编码表长GdipGetEncoderParameterListSize编码表长(图像,类号,@大小)获取指定图像编码器的参数列表的大小(以字节为单位)。
编码列表GdipGetEncoderParameterList编码列表(图像,类号,大小,@缓冲区)获取指定图像编码器支持的参数列表。
图像帧长GdipImageGetFrameDimensionsCount图像帧长(图像,类号,@大小)获取此图像对象中的帧尺寸(GUID)数。
图像帧类GdipImageGetFrameDimensionsList图像帧类(图像,@类号,大小)获取此图像对象的帧尺寸(GUID)的标识符
图像帧数GdipImageGetFrameCount图像帧数(图像,类号,@数量)获取此图像对象中指定尺寸(GUID)的帧数。
图像选帧GdipImageSelectActiveFrame图像选帧(图像,类号,索引)选择由标识(GUID)和索引指定的此图像对象中的帧。
图像旋转GdipImageRotateFlip图像旋转(图像,类型)旋转和翻转此图像。旋转翻转类型
图像取板GdipGetImagePalette图像取板(图像,色板,大小)获取此图像对象的色板数组
图像改板GdipSetImagePalette图像改板(图像,色板)获取此图像对象的色板数组
图像板长GdipGetImagePaletteSize图像板长(图像,@大小)获取此图像对象的调色板大小。
图像项数GdipGetPropertyCount图像项数(图像,@数量)获取此图像对象的属性项数量。
图像项列GdipGetPropertyIdList图像项列(图像,数量,@数组)获取此图像对象的元数据中使用的属性标识符的列表。
图像项长GdipGetPropertyItemSize图像项长(图像,序号,@大小)获取此图像对象的的指定属性项的大小(以字节为单位)。
图像项值GdipGetPropertyItem图像项值(图像,序号,大小,@数据)获取此图像对象的定的属性项一段元数据。
图像总项GdipGetPropertySize图像总项(图像,@大小,@项数)获取此图像对象存储的所有属性项数和总大小(以字节为单位)。
图像全项GdipGetAllPropertyItems图像全项(图像,大小,项数,项数组)获取此图像对象的元数据的全部属性项
图像删项GdipRemovePropertyItem图像删项(图像,序号)从图像对象中删除属性项 (元数据) 片段。
图像改项GdipSetPropertyItem图像改项(图像,属性项)设置此图像对象元数据的一个属性项
图像首项GdipFindFirstImageItem图像首项(图像,数据项)检索此图像对象中第一个元数据项的说明和数据大小。
图像次项GdipFindNextImageItem图像次项(图像,数据项)检索此图像对象中下一个元数据项的说明和数据大小。
图像取项GdipGetImageItemData图像取项(图像,数据项)从此图像对象中获取一段元数据项
图像中止GdipImageSetAbort图像中止(图像,@中止)设置在耗时的呈现操作期间定期调用 中止 函数(无参数)。
图像验证GdipImageForceValidation图像项数(图像,@数量)此函数强制验证映像。
图元转强GdipConvertToEmfPlus图元转强(图形,图元,@成功,类型,描述,@强元)将此 图元 对象转换为 EMF+ 格式。描述为可选宽字符
图元强文GdipConvertToEmfPlusToFile图元增强(图形,图元,@成功,宽名,类型,描述,@强元)将此 图元文件 对象转换为 EMF+ 格式。描述为可选宽字符
图元强流GdipConvertToEmfPlusToStream图元转强(图形,图元,@成功,流,类型,描述,@强元)将此 图元流 对象转换为 EMF+ 格式。描述为可选宽字符
图元标头GdipGetMetafileHeaderFromWmf图元标头(元窗口,标头,@副本)获取图元标头。
强元标头GdipGetMetafileHeaderFromEmf强元标头(元窗口,@标头)获取强图元标头。
文件标头GdipGetMetafileHeaderFromFile文件标头(宽文件名,@标头)获取文件标头。
取流标头GdipGetMetafileHeaderFromStream取流标头(流,@标头)获取流对象标头。
取元标头GdipGetMetafileHeaderFromMetafile取元标头(图元,@标头)获取图元文件标头。
图元窗口GdipGetHemfFromMetafile图元窗口(图元,@窗口)获取增强型图元文件 (EMF) 文件的窗口句柄。
新建图元GdipCreateMetafileFromWmf新建图元(窗口,删除,图元类,@图元)创建用于录制的 Windows GDI+ 图元文件对象。
新建强元GdipCreateMetafileFromEmf新建强元(窗口,是否删除,@图元)创建可以进行播放增强型图元文件 (EMF) 文件。
文件图元GdipCreateMetafileFromFile文件图元(宽文件名,@图元)从文件创建用于播放的图元文件对象。
流建图元GdipCreateMetafileFromStream流建图元(流,@图元)从流创建用于播放的图元文件对象。
录制图元GdipRecordMetafile录制图元(设备,边框,单位,类型,描述,@图元)创建用于录制的图元文件对象。边框矩形为小数,描述为可选宽字符
记录图元GdipRecordMetafileI记录图元(设备,边框,单位,类型,描述,@图元)创建用于录制的图元文件对象。边框矩形为整数,描述为可选宽字符
录制文元GdipRecordMetafileFileName录制文元(宽名,设备,边框,单位,类型,描述,@图元)从宽文件名创建用于录制的图元文件对象。边框矩形为小数,描述为可选宽字符
记录文元GdipRecordMetafileFileNameI记录文元(宽名,设备,边框,单位,类型,描述,@图元)从宽文件名创建用于录制的图元文件对象。边框矩形为整数,描述为可选宽字符
录制流元GdipRecordMetafileStream录制流元(流,设备,边框,单位,类型,描述,@图元)从流对象创建用于录制的图元文件对象。边框矩形为小数,描述为可选宽字符
记录流元GdipRecordMetafileStreamI记录流元(流,设备,边框,单位,类型,描述,@图元)从流对象创建用于录制的图元文件对象。边框矩形为整数,描述为可选宽字符
元改分辨GdipSetMetafileDownLevelRasterizationLimit元改分辨(图元,分辨率)设置存储在此图元文件中的某些画笔位图的分辨率。
元取分辨GdipGetMetafileDownLevelRasterizationLimit元取分辨(图元,@分辨率)获取存储在此图元文件中的某些画笔位图的分辨率。

框架单位-MetafileFrameUnit 枚举指定图元文件框架矩形的度量单位。

英文名称数值作用
MetafileFrameUnitPixel2指定单位为 1 像素。
MetafileFrameUnitPoint3指定单位为 1 磅。
MetafileFrameUnitInch4指定单位为 1 英寸。
MetafileFrameUnitDocument5指定单位为 1/300 英寸。
MetafileFrameUnitMillimeter6指定单位为 1 毫米。
MetafileFrameUnitGdi7指定单位为 0.01 毫米。 提供此元素是为了与 GDI 兼容。

图元类型-EmfType 枚举指定放置在增强型图元文件 (EMF) 文件中的记录的性质。

英文名称数值作用
EmfTypeEmfOnly0指定图元文件中的所有记录都是 EMF 记录,这些记录可由 GDI 或 GDI+ 显示。
EmfTypeEmfPlusOnly1指定图元文件中的所有记录都是 EMF+ 记录,这些记录可由 GDI+ 显示,但不能由 GDI 显示。
EmfTypeEmfPlusDual2指定图元文件中所有的 EMF+ 记录都与一个替换的 EMF 记录相关联。 EmfTypeEmfPlusDual 类型的图元文件可由 GDI 或 GDI+ 显示。

图像标志-ImageFlags 枚举指定图像对象中包含的像素数据的属性。

英文名称数值作用
ImageFlagsNone0不指定格式信息。
ImageFlagsScalable0x0001指定可以缩放映像。
ImageFlagsHasAlpha0x0002指定像素数据包含 alpha 值。
ImageFlagsHasTranslucent0x0004指定此像素数据有不同于 0(透明)和 255(不透明)的 alpha 值。
ImageFlagsPartiallyScalable0x0008指定像素数据可部分缩放,但存在一些限制。
ImageFlagsColorSpaceRGB0x0010指定使用 RGB 颜色空间存储图像。
ImageFlagsColorSpaceCMYK0x0020指定使用 CMYK 颜色空间存储图像。
ImageFlagsColorSpaceGRAY0x0040指定图像为灰度图像。
ImageFlagsColorSpaceYCBCR0x0080指定使用 YCBCR 颜色空间来存储图像。
ImageFlagsColorSpaceYCCK0x0100指定使用 YCCK 颜色空间来存储图像。
ImageFlagsHasRealDPI0x1000指定在图像中存储每英寸点数信息。
ImageFlagsHasRealPixelSize0x2000指定在图像中存储像素大小。
ImageFlagsReadOnly0x00010000指定像素数据为只读。
ImageFlagsCaching0x00020000指定可以缓存像素数据以加快访问速度。

旋转翻转-RotateFlipType 枚举指定图像的旋转方向和用于翻转图像的轴。

英文名称数值作用
RotateNoneFlipNone0指定无旋转和不翻转。
Rotate90FlipNone1指定不翻转的 90 度旋转。
Rotate180FlipNone2指定不翻转的 180 度旋转。
Rotate270FlipNone3指定不翻转的 270 度旋转。
RotateNoneFlipX4指定无旋转和水平翻转。
Rotate90FlipX5指定后跟水平翻转的 90 度旋转。
Rotate180FlipX6指定后跟水平翻转的 180 度旋转。
Rotate270FlipX7指定后跟水平翻转的 270 度旋转。
RotateNoneFlipY8指定无旋转和垂直翻转。
Rotate90FlipY9指定后跟垂直翻转的 90 度旋转。
Rotate180FlipY10指定后跟垂直翻转的 180 度旋转。
Rotate270FlipY11指定后跟垂直翻转的 270 度旋转。
RotateNoneFlipXY12指定无旋转、水平翻转和垂直翻转。
Rotate90FlipXY13指定 90 度旋转,然后水平翻转,然后垂直翻转。
Rotate180FlipXY14指定 180 度旋转,然后水平翻转,然后垂直翻转。
Rotate270FlipXY15指定 270 度旋转,然后水平翻转,然后垂直翻转。

图像完成
中文名字英文名称参数作用解释
图像完成Imageabort1在应用程序中实现的回调函数的签名。在创建或检索缩略图或绘制图像的过程中,GDI+ 会调用此函数来中止该过程。
图像完成——参数表
附加unnamedParam1整数定义回调函数时程序指定的附加数据。
属性项类
中文名字英文名称长度作用解释
属性项类PropertyItem4包含一段图像元数据。
属性项类——成员表
编号propId整数标识存储在此结构中的元数据类型
长度Length整数值数组的大小(以字节为单位)。
分类type整形标识值数组中值的数据类型
项值value整数指向值数组的指针。数组中的每个值都具有由分类数据成员指定的数据类型。

数据类型-RotateFlipType 枚举指定图像的旋转方向和用于翻转图像的轴。

英文名称数值作用
PropertyTagTypeByte1指定 值 数据成员是字节数组。
PropertyTagTypeASCII2指定 值 数据成员是以 null 结尾的 ASCII 字符串。如果设置此值则应将长度数据成员设置为字符串的长度,包括 0 终止符。 例如,字符串 HELLO 的长度为 6。
PropertyTagTypeShort3指定 值 数据成员是无符号短 (16 位) 整数的数组。
PropertyTagTypeLong4指定 值 数据成员是无符号长 (32 位) 整数的数组。
PropertyTagTypeRational5指定 值 数据成员是无符号长整数对的数组。 每对表示一个分数;第一个整数是分子,第二个整数是分母。
PropertyTagTypeUndefined7指定 值 数据成员是可以保存任何数据类型的值的字节数组。
PropertyTagTypeSLONG9指定 值 数据成员是带符号长 (32 位) 整数的数组。
PropertyTagTypeSRational10指定 值 数据成员是带符号长整数对的数组。 每对表示一个分数;第一个整数是分子,第二个整数是分母。

图项数据类
中文名字英文名称长度作用解释
图项数据类ImageItemData28用于存储和检索自定义图像元数据。
图项数据类——成员表
大小Size整数指定此结构大小(28)。
位置Position整数数据位置 枚举的元素,该元素指定图像文件中应存储一段自定义元数据的位置。
描述Desc整数您创建的用于标识一段自定义元数据的字节序列。JPEG是一字节。PNG为四字节。GIF为11 字节。
字数DescSize整数指定描述指向的标识符的大小(以字节为单位)的整数。JPEG 设置为 1,PNG 设置为 4,GIF 设置为 11。
数据Data整数指向包含元数据的缓冲区的指针。
长度DataSize整数指定数据缓冲区的大小(以字节为单位)。
身份Cookie整数由 GDI+ 在内部使用。

数据位置-ItemDataPosition 枚举用于指定自定义元数据在图像文件中的位置。

英文名称数值作用
ItemDataPositionAfterHeader0x0指定自定义元数据存储在文件标头之后。 对 JPEG、PNG 和 GIF 有效。
ItemDataPositionAfterPalette0x1指定自定义元数据存储在调色板之后。 对 PNG 有效。
ItemDataPositionAfterBits0x2指定自定义元数据存储在像素数据之后。 对 GIF 和 PNG 有效。

图像属性

图像属性对象包含有关如何在呈现期间操作位图和图元文件颜色的信息,简称图性。图像属性对象维护多个颜色调整设置,包括颜色调整矩阵、灰度调整矩阵、伽玛校正值、颜色映射表和颜色阈值。
颜色调整矩阵包含25个小数值的 5×5 矩阵,简称色阵。图像属性对象的几种方法通过使用颜色矩阵调整图像颜色。
中文名称英文名称示例作用
图性创建GdipCreateImageAttributes图性创建(@图性)创建图像属性对象。
图性克隆GdipCloneImageAttributes图性克隆(图性,@图性)创建图像属性对象的副本。
图性释放GdipDisposeImageAttributes图性释放(图性)释放图像属性对象使用的资源。
图性标识GdipSetImageAttributesToIdentity图性标识(图性,调整类别)将指定类别的颜色调整矩阵设置为标识矩阵。五个调整类别:默认、位图、画笔、笔和文本。
图性重置GdipResetImageAttributes图性重置(图性)创建图像属性对象。
图性色阵GdipSetImageAttributesColorMatrix图性色阵(图性,调整,启用,色阵,灰阵,标志)为指定类别设置颜色调整矩阵。启用为真时调整类别启用单独的颜色调整。标志为1时灰阵用于调整灰色阴影的矩阵。
图性阈值GdipSetImageAttributesThreshold图性阈值(图性,类别,启用,阈值)为指定类别设置阈值(小数透明范围)。启用为真时调整类别启用单独的阈值,为假清除。
图性校正GdipSetImageAttributesGamma图性校正(图性,类别,启用,伽玛)为指定类别设置伽玛值(小数)。透明为真时调整类别启用单独的伽玛。为假禁用。
图性调整GdipSetImageAttributesNoOp图性调整(图性,类别,启用)为指定类别关闭颜色调整。启用为真时调整类别启用单独的颜色调整,为假清除。类别为0恢复以前设置。
图性色键GdipSetImageAttributesColorKeys图性色键(图性,类别,启用,低位色,高位色)为指定类别设置颜色键(透明范围)。启用为真时调整类别启用单独的透明度范围,为假清除。
图性通道GdipSetImageAttributesOutputChannel图性通道(图性,类别,启用,通道)为指定类别设置输出通道0青色-1品红-2黄色-4黑色(CMYK) 。启用为真时调整类别启用单独的输出通道,为假清除。
图性配置GdipSetImageAttributesOutputChannelColorProfile图性配置(图性,类别,启用,宽文件名)为指定类别设置输出通道颜色配置文件。启用为真时调整类别启用单独的配置文件,为假清除。
图性映射GdipSetImageAttributesRemapTable图性映射(图性,类别,启用,组数,映射数组)为指定类别设置颜色重新映射表。启用为真时调整类别启用单独的映射表,为假清除。
图性平铺GdipSetImageAttributesWrapMode图性平铺(图性,模式,颜色,0)设置图像属性对象的平铺模式
图性管理GdipSetImageAttributesICMMode图性管理(图性,启用)如果启用为真,则图像颜色管理 (ICM) 用于所有颜色调整。为假则不使用ICM。
图性色板GdipGetImageAttributesAdjustedPalette图性色板(图性,色板组,类别)根据指定类别的调整设置,调整调色板中的颜色。
图性缓存GdipSetImageAttributesCachedBackground图性缓存(图性,启用)设置或清除指定图像属性对象的缓存背景成员。此函数不起作用。

颜色调整-ColorAdjustType 枚举指定哪些 GDI+ 对象使用颜色调整信息。

英文名称数值作用
ColorAdjustTypeDefault0指定颜色或灰度调整应用于没有自己的调整设置的所有类别。
ColorAdjustTypeBitmap1指定颜色或灰度调整应用于位图图像。
ColorAdjustTypeBrush2指定颜色或灰度调整应用于图元文件中的画笔操作。
ColorAdjustTypePen3指定颜色或灰度调整应用于图元文件中的笔操作。
ColorAdjustTypeText4指定颜色或灰度调整应用于在图元文件中绘制的文本。
ColorAdjustTypeCount5在内部用于记录颜色调整类型的数量。
ColorAdjustTypeAny6保留

颜色矩阵标志-ColorMatrixFlags 枚举指定受 图像属性 对象的颜色和灰度调整设置影响的图像和颜色的类型。

英文名称数值作用
ColorMatrixFlagsDefault0指定 (包括灰色) 的所有颜色值都由同一颜色调整矩阵调整。
ColorMatrixFlagsSkipGrays1指定调整颜色,但不调整灰色底纹。 灰色底纹是指其红色、绿色和蓝色分量的值都相同的任何颜色。
ColorMatrixFlagsAltGray2指定颜色由一个矩阵调整,灰色阴影由另一个矩阵调整。

颜色通道-ColorChannelFlags 枚举指定 CMYK (青色、洋红色、黄色、黑色) 颜色空间中的单个通道。

英文名称数值作用
ColorChannelFlagsC0指定青色通道。
ColorChannelFlagsM1指定洋红色颜色通道。
ColorChannelFlagsY2指定黄色通道。
ColorChannelFlagsK3指定黑色通道。
变色类
中文名字英文名称长度作用解释
变色类ColorMap8定义两个转换颜色的映射。
变色类——成员表
旧色oldColor整数要转换至的新颜色结构。
新色newColor整数要转换至的现有颜色结构。

纹理图刷


纹理图刷对象定义一个画刷对象,该对象包含用于填充的图像对象。可以使用画刷对象中包含的本地矩阵对象转换填充图像。
中文名称英文名称示例作用
纹理创建GdipCreateTexture纹理创建(图像,模式,@纹理)基于图像和平铺模式创建纹理刷子对象。
纹理单模GdipCreateTexture2纹理单模(图像,模式,左,顶,宽,高,@纹理)基于图像、平铺模式和定义坐标集创建纹理刷子对象。
纹理整模GdipCreateTexture2I纹理整模(图像,模式,左,顶,宽,高,@纹理)基于图像、平铺模式和定义坐标集创建纹理刷子对象。
纹理单属GdipCreateTextureIA纹理单属(图像,属性,左,顶,宽,高,@纹理)基于图像、定义矩形和一组图像属性创建纹理刷子对象。
纹理整属GdipCreateTextureIAI纹理整属(图像,属性,左,顶,宽,高,@纹理)基于图像、定义矩形和一组图像属性创建纹理刷子对象。
纹理取图GdipGetTextureImage纹理取图(纹理,@图像)获取由此纹理画笔定义的图像对象的指针。
纹取矩阵GdipGetTextureTransform纹取矩阵(纹理,@矩阵)获取此纹理画笔的变换矩阵。
纹改矩阵GdipSetTextureTransform纹改矩阵(纹理,矩阵)设置此纹理画笔的变换矩阵。
纹取平铺GdipGetTextureWrapMode纹取平铺(纹理,@模式)获取当前为此纹理画笔设置的平铺模式
纹改平铺GdipGetTextureWrapMode纹改平铺(纹理,模式)设置当前为此纹理画笔设置的平铺模式
纹理标识GdipResetTextureTransform纹理标识(纹理)将此纹理画笔的变换矩阵重置为标识矩阵。这意味着不会发生转换。
纹乘矩阵GdipMultiplyTextureTransform纹乘矩阵(纹理,矩阵,顺序)使用本身和另一个矩阵的乘积更新此转换矩阵。乘法顺序:0新矩阵在左侧,1在右侧
纹乘转换GdipTranslateTextureTransform纹乘转换(纹理,水平量,垂直量,顺序)使用自身和转换矩阵的乘积更新此转换矩阵。乘法顺序:0新矩阵在左侧,1在右侧
纹乘缩放GdipScaleTextureTransform纹乘缩放(纹理,水平量,垂直量,顺序)使用本身和缩放矩阵的乘积更新此转换矩阵。乘法顺序:0新矩阵在左侧,1在右侧
纹乘旋转GdipRotateTextureTransform纹乘旋转(纹理,小数 角度,顺序)使用自身乘积和旋转矩阵更新此转换矩阵。乘法顺序:0新矩阵在左侧,1在右侧

图面区域

区域对象描述显示图面的区域。该区域可以是任何形状,区域的边界可以是曲线和直线的组合。还可以从矩形、路径的内部或这些矩形、路径的内部创建区域。区域用于剪辑和命中测试操作。
基本图形库GDI的区域跟GDI+的区域同时使用时,GDI的区域称之为老区。
中文名称英文名称示例作用
区域创建GdipCreateRegion区域创建(@区域)创建无限的区域。这是默认构造函数。
区域矩形GdipCreateRegionRect区域矩形(矩形,@区域)创建由小数值矩形定义的区域。
矩形区域GdipCreateRegionRectI矩形区域(矩形,@区域)创建由整数值矩形定义的区域。
路径区域GdipCreateRegionPath路径区域(路径,@区域)创建由路径对象定义且具有包含在路径对象中的填充模式的区域。
数据区域GdipCreateRegionRgnData数据区域(数据,大小,@区域)创建由从另一个区域获取的数据定义的区域。
区域转型GdipCreateRegionHrgn区域转型(老区,@区域)创建一个区域,该区域与GDI区域的句柄指定的区域相同。
区域克隆GdipCloneRegion区域克隆(区域,@区域)创建区域对象的副本。
区域删除GdipDeleteRegion区域删除(区域)释放区域对象使用的资源。
区域无限GdipSetInfinite区域无限(区域)将此区域改为无限区域。
区域清空GdipSetEmpty区域清空(区域)将此区域改为空区域。不会在显示设备上占用空间。
区交矩形GdipCombineRegionRect区交矩形(区域,矩形,模式)将此区域更新为与指定小数值矩形内部相交的自身部分。模式
区交方形GdipCombineRegionRectI区交方形(区域,矩形,模式)将此区域更新为与指定整数值矩形内部相交的自身部分。模式
区交路径GdipCombineRegionPath区交路径(区域,路径,模式)将此区域更新为与指定路径内部相交的自身部分。模式
区交区域GdipCombineRegionRegion区交区域(区域,区域2,模式)将此区域更新为与另一个区域相交的自身部分。模式
区域转向GdipTranslateRegion区域转向(区域,水平量,垂直量)在水平和垂直方向按指定量偏移此区域。
区域偏转GdipTranslateRegionI区域偏转(区域,水平量,垂直量)在水平和垂直方向按指定量偏移此区域。
区乘矩阵GdipTransformRegion区乘矩阵(区域,矩阵)通过将该区域的每个数据点乘以指定的矩阵来转换此区域。
区域边框GdipGetRegionBounds区域边框(区域,图形,@矩形)获取包含此区域的小数值矩形。
区域方框GdipGetRegionBoundsI区域方框(区域,图形,@矩形)获取包含此区域的整数值矩形。
区域建区GdipCloneRegion区域建区(区域,图形,@老区)从此区域创建 GDI 区域。
区域为空GdipIsEmptyRegion区域为空(区域,图形,@是否)确定此区域是否为空。
区取无限GdipIsInfiniteRegion区取无限(区域,图形,@是否)确定此区域是否是无限的。
区域相等GdipIsEqualRegion区域相等(区域,二区,图形,@是否)确定此区域是否等于指定区域。
区域大小GdipGetRegionDataSize区域大小(区域,@区域)获取描述此区域的数据字节数。
区取数据GdipGetRegionData区取数据(区域,@数据,大小,@已收)获取描述此区域的数据。
区域查点GdipIsVisibleRegionPoint区域查点(区域,左,上,图形,@是否)确定某个小数值的点是否在此区域内。
区域内点GdipIsVisibleRegionPointI区域内点(区域,左,上,图形,@是否)确定某个整数值的点是否在此区域内。
区域重合GdipIsVisibleRegionRect区域重合(区域,左,顶,宽,高,图形,@是否)确定小数值矩形是否与该区域相交。
区域重叠GdipIsVisibleRegionRectI区域重叠(区域,左,顶,宽,高,图形,@是否)确定整数值矩形是否与该区域相交。
区矩形数GdipGetRegionScansCount区矩形数(区域,@数量,矩阵)获取与该区域近似的矩形数。在计算矩形之前,区域由指定的矩阵进行转换。
区矩形组GdipGetRegionScans区矩形组(区域,@矩形,@数量,矩阵)获取与该区域近似的小数值矩形数组。在计算矩形之前,区域由指定的矩阵进行转换。
区方形组GdipGetRegionScans区方形组(区域,@矩形,@数量,矩阵)获取与该区域近似的整数值矩形数组。在计算矩形之前,区域由指定的矩阵进行转换。

编码解码

中文名称英文名称示例作用
解码信息GdipGetImageDecoders解码信息(数量,长度,数据)获取包含有关可用图像解码器信息的图码信息类结构数组。
解码大小GdipGetImageDecodersSize解码大小(@数量,@长度)获取包含有关可用图像解码器信息的数量和结构数组长度。
编码信息GdipGetImageEncoders编码信息(数量,长度,数据)获取包含有关可用图像解码器信息的图码信息类结构数组。
编码大小GdipGetImageEncodersSize编码大小(@数量,@长度)获取包含有关可用图像解码器信息的数量和结构数组长度。

中文名字英文名称长度作用解释
编解码类EncoderParameters24包含GdiplusStartup函数所需的一个参数块。
编解码类——成员表
数量count整数编解码器的总数量
数1Data1整数Clsid结构数据1
数2Data2整数Clsid结构数据2
数3Data3整数Clsid结构数据3
数4Data4整数Clsid结构数据4
个数NumberOfValues整数图像编解码器设定参数值的个数
编码EncoderParameterValueType整数指定图像编解码器数据类型
数值value整数指定图像编解码器转换质量等的数值地址。
图码信息类
中文名字英文名称长度作用解释
图码信息类ImageCodecInfo80存储有关图像编解码器(编码器/解码器)的信息。
图码信息类——成员表
类号ClassID[16]文本编解码器标识符。
格式FormatID[16]文本文件格式标识符。标识各种文件格式(ImageFormatBMP、ImageFormatEMF 等)
码名CodecName整数指向包含编解码器名称的以 0 结尾的字符串的指针。
库名DllName整数指向以 0 结尾的字符串的指针,该字符串包含编解码器所在的 DLL 的路径名。如果编解码器不在 DLL 中,则此指针为 0。
说明FormatDescription整数指向以 0 结尾的字符串的指针,该字符串包含编解码器使用的文件格式的名称。
扩展FilenameExtension整数指向以 0 结尾的字符串的指针,该字符串包含与编解码器关联的所有文件扩展名。扩展名用分号分隔。
头类MimeType整数指向以 0 结尾的字符串的指针,该字符串包含编解码器的 mime 类型。
标志Flags整数图像编码中的标志组合。
版本Version整数指示编解码器版本的整数。
名数SigCount整数指示与编解码器关联的文件格式使用的签名数的整数。
名长SigSize整数指示每个签名中的字节数的整数。
模式SigPattern整数指向包含每个签名的模式的字节数组的指针。
掩码SigMask整数指向包含每个签名掩码的字节数组的指针。

图像编码-ImageCodecFlags 枚举指示图像编解码器的属性。

英文名称数值作用
ImageCodecFlagsEncoder0x00000001指示编解码器支持编码 (保存) 。
ImageCodecFlagsDecoder0x00000002指示编解码器支持解码 (读取) 。
ImageCodecFlagsSupportBitmap0x00000004指示编解码器支持光栅图像 (位图) 。
ImageCodecFlagsSupportVector0x00000008指示编解码器支持向量图像 (图元文件) 。
ImageCodecFlagsSeekableEncode0x00000010指示编码器需要可查找的输出流。
ImageCodecFlagsBlockingDecode0x00000020指示解码器在解码过程中具有阻塞行为。
ImageCodecFlagsBuiltin0x00010000指示编解码器内置于 GDI+ 中。
ImageCodecFlagsSystem0x00020000在 GDI+ 1.0 版中不使用。
ImageCodecFlagsUser0x00040000在 GDI+ 1.0 版中不使用。

Win32编程常用函数-advapi32库

某些函数需要特殊 权限 才能正确运行。 在某些情况下,函数只能由某些用户或特定组的成员运行。 最常见的要求是用户是本地管理员。 其他函数要求用户帐户启用特定权限。
为了降低未经授权的代码能够获得控制权的可能性,系统应以所需的最低特权运行。 需要调用需要特殊权限的函数的应用程序可能会使系统保持开放状态,以受到黑客的攻击。 此类应用程序应设计为短时间运行,并应告知用户所涉及的安全隐患。
使用管理员权限运行
确定应用程序需要在哪种类型的帐户下运行的第一步是检查应用程序将使用的资源以及它将调用哪些特权 API。 你可能会发现应用程序或其大部分不需要管理员权限。
Michael Howard 和 David LeBlanc 撰写的安全代码很好地介绍了如何进行此评估,强烈建议使用。 (此资源可能在某些语言和国家/地区不可用。)
可以通过使用以下方法之一来提供应用程序所需的特权,减少受到恶意攻击的风险:
在特权较低的帐户下运行。 执行此操作的一种方法是使用 PrivilegeCheck 来确定令牌中启用了哪些权限。 如果可用权限不足以执行当前操作,则可以禁用该代码,并要求用户使用管理员权限登录到帐户。
闯入需要管理员权限的单独应用程序功能。 可以为用户提供执行 RunAs 命令的快捷方式。 有关如何设置快捷方式的详细说明,请在“帮助”中搜索“runas”。 可以通过编程方式为应用程序配置 AppId Key 注册表项下的 RunAs 命令。
通过调用 CredUIPromptForCredentials (GUI) 或 CredUICmdLinePromptForCredentials (命令行) 对用户进行身份验证,以获取用户名和密码。
模拟用户。 在系统等高特权帐户下启动的进程可以通过调用 ImpersonateLoggedOnUser 或类似的 Impersonate 函数来模拟用户帐户,从而降低特权级别。 但是,如果将对 RevertToSelf 的调用注入到线程中,则进程将返回到原始系统特权。
如果已确定应用程序必须在具有管理员特权的帐户下运行,并且管理员密码必须存储在软件系统中,请参阅 处理密码 ,了解安全执行此操作的方法。
向用户询问凭据
应用程序可能需要提示用户输入用户名和密码信息,以避免存储管理员密码或验证令牌是否具有适当的权限。
但是,仅提示输入凭据可能会训练用户将这些凭据提供给屏幕上显示的任何随机、未识别的对话框。 建议执行以下过程来降低训练效果。
正确获取用户凭据
通过使用明确属于应用程序的消息通知用户,他们将看到一个对话框,请求其用户名和密码。 还可以在调用 CredUIPromptForCredentials 时使用 CREDUI_INFO 结构来传达标识数据或消息。
调用 CredUIPromptForCredentials。 请注意,为用户名和密码信息指定的最大字符数包括终止 null 字符。
调用 CredUIParseUserName 和 CredUIConfirmCredentials 以验证是否获得了适当的凭据。
以下示例演示如何调用 CredUIPromptForCredentials 以要求用户输入用户名和密码。 首先,使用有关使用提示的信息填充CREDUI_INFO结构。 接下来,代码用零填充两个缓冲区。
这样做是为了确保不会将任何信息传递给可能会向用户显示旧用户名或密码的函数。 调用 CredUIPromptForCredentials 将打开对话框。
出于安全原因,此示例使用 CREDUI_FLAGS_DO_NOT_PERSIST 标志来阻止操作系统存储密码,因为随后可能会公开密码。
如果没有错误, CredUIPromptForCredentials 将填充 pszName 和 pszPwd 变量并返回零。 应用程序使用完凭据后,应在缓冲区中放置零,以防止意外泄露信息。
更改令牌中的特权
可以通过两种方式更改主要令牌或模拟令牌中的特权:
使用 AdjustTokenPrivileges 函数启用或禁用特权。
使用 CreateRestrictedToken 函数限制或删除特权。
AdjustTokenPrivileges 无法添加或删除令牌中的特权。 它只能启用当前已禁用的现有特权或禁用当前启用的现有特权。
若要向用户帐户分配权限,请参阅 向帐户分配特权。
CreateRestrictedToken 具有更广泛的功能,如下所示:
删除权限。 请注意,删除权限与禁用权限不同。 从令牌中删除权限后,无法将其放回。
将仅拒绝属性附加到令牌中的 SID。 这具有禁止特定组或帐户的效果,例如,拒绝“每个人”组删除对特定文件的访问权限。 有关限制 SID 的详细信息,请参阅 访问令牌中的 SID 属性。
指定令牌中限制 SID 的列表。 有关限制 SID 的信息,请参阅 受限令牌。
可以通过使用本地安全策略 Microsoft 管理控制台 (MMC) 管理单元 (Secpol.msc) 或通过调用 LsaAddAccountRights 函数向帐户分配权限。
向帐户分配权限不会影响现有用户令牌。 用户必须注销,然后重新登录才能使用新分配的权限获取访问令牌。
若要使用本地安全策略 MMC 管理单元分配权限,请编辑 安全设置/本地策略/用户权限分配下列出的每个特权的用户列表。
InitiateSystemShutdown 和 InitiateSystemShutdownEx 函数显示一个对话框,通知用户系统正在关闭。 在关闭超时期间, AbortSystemShutdown 函数可能会阻止系统关闭。
Windows Server 2003 和 Windows XP SP1: 如果要关闭的计算机是终端服务服务器,系统会向所有本地和远程用户显示一个对话框,警告他们已启动关闭。
如果 AbortSystemShutdown 阻止关闭,系统会向用户显示对话框,告知他们服务器不再关闭。
若要阻止本地计算机关闭,调用进程必须具有SE_SHUTDOWN_NAME特权。 若要阻止远程计算机关闭,调用进程必须在远程计算机上具有SE_REMOTE_SHUTDOWN_NAME特权。
默认情况下,用户可以在登录的计算机上启用SE_SHUTDOWN_NAME特权,管理员可以在远程计算机上启用SE_REMOTE_SHUTDOWN_NAME特权。 失败的常见原因包括计算机名称无效、计算机不可访问或权限不足。
若要关闭本地计算机,调用线程必须具有 SE_SHUTDOWN_NAME 特权。 若要关闭远程计算机,调用线程必须在远程计算机上具有 SE_REMOTE_SHUTDOWN_NAME 特权。
默认情况下,用户可以在登录的计算机上启用 SE_SHUTDOWN_NAME 特权,管理员可以在远程计算机上启用 SE_REMOTE_SHUTDOWN_NAME 特权。 有关详细信息,请参阅使用特殊特权运行。
失败的常见原因包括计算机名无效或不可访问或权限不足。 如果指定的计算机上正在进行关闭,则返回错误 ERROR_SHUTDOWN_IN_PROGRESS 。
如果启用了快速用户切换,但没有用户登录,则可能会返回错误 ERROR_NOT_READY 。
非零返回值并不意味着注销已成功或将成功。 关闭是一个异步过程,它可能在 API 调用已返回后很长时间发生,也可能根本不发生。 即使超时值为零,应用程序、服务甚至系统仍可能中止关闭。
非零返回值指示权限和参数验证成功,并且系统已接受关闭请求。
调用此函数时,调用方必须指定是否应强制关闭具有未保存更改的应用程序。 如果调用方选择不强制关闭这些应用程序,并且具有未保存更改的应用程序正在控制台会话上运行,则关闭将保持进行状态,
直到登录到控制台会话的用户中止关闭、保存更改、关闭应用程序或强制关闭应用程序。 在此期间,除主机用户外,关闭可能不会中止,并且可能不会启动另一个关闭。
请注意,使用 bForceAppsClosed 参数的值设置为 TRUE 调用此函数可避免这种情况。 请记住,这样做可能会导致数据丢失。
Windows Server 2003 和 Windows XP: 如果计算机已锁定,并且 bForceAppsClosed 参数为 FALSE,则 最后一个错误代码ERROR_MACHINE_LOCKED。
如果系统尚未准备好处理请求,则会 ERROR_NOT_READY最后一个错误代码。 应用程序应稍等片刻,然后重试调用。
例如,如果用户尝试登录系统的同时发出关闭请求,系统可能未准备启动关闭并返回 ERROR_NOT_READY。 在这种情况下,应用程序应稍等片刻,然后重试调用。
特权常量(授权)
权限决定了用户帐户可以执行的系统操作的类型。管理员为用户帐户和组帐户分配权限。每个用户的权限包括授予用户和用户所属组的权限。
获取和调整访问令牌中的特权的函数使用本地唯一标识符 (LUID) 类型来标识特权。使用 LookupPrivilegeValue 函数确定本地系统上与特权常量对应的 LUID。
使用 LookupPrivilegeName 函数将 LUID 转换为其相应的字符串常量。
操作系统使用下表的“说明”列中“用户权限”后面的字符串表示特权。操作系统在本地安全设置 Microsoft 管理控制台 (MMC) 管理单元的“用户权限分配”节点的“策略”列中显示用户权限字符串。
关机错误
英文名称常量作用解释用户权限
SE_ASSIGNPRIMARYTOKEN_NAME"SeAssignPrimaryTokenPrivilege"需要分配进程的主令牌。替换进程级令牌。
SE_AUDIT_NAME"SeAuditPrivilege"需要生成审核日志条目。将此权限授予安全服务器。生成安全审核。
SE_BACKUP_NAME"SeBackupPrivilege"需要执行备份操作。此权限使系统授予对任何文件的所有读取访问控制权,而不考虑为文件指定的访问控制列表 (ACL)。
除读取以外的任何访问请求仍使用 ACL 进行评估。RegSaveKey 和 RegSaveKeyEx函数需要此权限。
如果持有此权限,则授予以下访问权限:READ_CONTROL,ACCESS_SYSTEM_SECURITY,FILE_GENERIC_READ,FILE_TRAVERSE;
如果文件位于可移动驱动器上,并且启用了“审核可移动存储”,则SE_SECURITY_NAME需要具有ACCESS_SYSTEM_SECURITY。
备份文件和目录。
SE_CHANGE_NOTIFY_NAME"SeChangeNotifyPrivilege"需要接收文件或目录更改的通知。此权限还会导致系统跳过所有遍历访问检查。默认情况下,它对所有用户启用。绕过遍历检查。
SE_CREATE_GLOBAL_NAME"SeCreateGlobalPrivilege"在终端服务会话期间,需要在全局命名空间中创建命名文件映射对象。默认情况下,为管理员、服务和本地系统帐户启用此权限。创建全局对象。
SE_CREATE_PAGEFILE_NAME"SeCreatePagefilePrivilege"创建分页文件是必需的。创建页面文件。
SE_CREATE_PERMANENT_NAME"SeCreatePermanentPrivilege"创建永久对象是必需的。创建永久共享对象。
SE_CREATE_SYMBOLIC_LINK_NAME"SeCreateSymbolicLinkPrivilege"需要创建符号链接。创建符号链接。
SE_CREATE_TOKEN_NAME"SeCreateTokenPrivilege"创建主令牌是必需的。您无法将此权限添加到具有“创建令牌对象”策略的用户帐户。
此外,不能使用 Windows API 将此权限添加到拥有的进程。
Windows XP SP1 及更早版本:API 可以将此权限添加到拥有的进程。
创建令牌对象。
SE_DEBUG_NAME"SeDebugPrivilege"需要调试和调整另一个帐户拥有的进程的内存。调试程序。
SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME"SeDelegateSessionUserImpersonatePrivilege"需要获取同一会话中其他用户的模拟令牌。模拟其他用户。
SE_ENABLE_DELEGATION_NAME"SeEnableDelegationPrivilege"需要将用户和计算机帐户标记为受信任的委派。允许信任计算机和用户帐户进行委派。
SE_IMPERSONATE_NAME"SeImpersonatePrivilege"需要模拟。身份验证后模拟客户端。
SE_INC_BASE_PRIORITY_NAME"SeIncreaseBasePriorityPrivilege"需要提高进程的基本优先级。提高调度优先级。
SE_INCREASE_QUOTA_NAME"SeIncreaseQuotaPrivilege"需要增加分配给进程的配额。调整进程的内存配额。
SE_INC_WORKING_SET_NAME"SeIncreaseWorkingSetPrivilege"需要为在用户上下文中运行的应用程序分配更多内存。增加进程工作集。
SE_LOAD_DRIVER_NAME"SeLoadDriverPrivilege"加载或卸载设备驱动程序时需要。加载和卸载设备驱动程序。
SE_LOCK_MEMORY_NAME"SeLockMemoryPrivilege"需要锁定内存中的物理页。锁定内存中的页面。
SE_MACHINE_ACCOUNT_NAME"SeMachineAccountPrivilege"需要创建计算机帐户。将工作站添加到域。
SE_MANAGE_VOLUME_NAME"SeManageVolumePrivilege"需要启用卷管理权限。管理卷上的文件。
SE_PROF_SINGLE_PROCESS_NAME"SeProfileSingleProcessPrivilege"需要收集单个进程的分析信息。分析单个进程。
SE_RELABEL_NAME"SeRelabelPrivilege"需要修改对象的强制完整性级别。修改对象标签。
SE_REMOTE_SHUTDOWN_NAME"SeRemoteShutdownPrivilege"使用网络请求关闭系统时需要。从远程系统强制关闭。
SE_RESTORE_NAME"SeRestorePrivilege"执行还原操作所必需的。此权限使系统授予对任何文件的所有写入访问控制权,而不考虑为该文件指定的 ACL。
除写入以外的任何访问请求仍使用 ACL 进行评估。此外,此权限允许您将任何有效的用户或组 SID 设置为文件的所有者。
RegLoadKey 函数需要此权限。如果持有此权限,则授予以下访问权限: WRITE_DAC,WRITE_OWNER,ACCESS_SYSTEM_SECURITY,FILE_GENERIC_WRITE,FILE_ADD_FILE,FILE_ADD_SUBDIRECTORY,DELETE。
如果文件位于可移动驱动器上,并且启用了“审核可移动存储”,则SE_SECURITY_NAME需要具有ACCESS_SYSTEM_SECURITY。
恢复文件和目录。
SE_SECURITY_NAME"SeSecurityPrivilege"需要执行许多与安全相关的功能,例如控制和查看审核消息。此权限将其持有者标识为安全操作员。管理审核和安全日志。
SE_SHUTDOWN_NAME"SeShutdownPrivilege"需要关闭本地系统。关闭系统。
SE_SYNC_AGENT_NAME"SeSyncAgentPrivilege"域控制器使用轻型目录访问协议目录同步服务是必需的。
此权限使持有者能够读取目录中的所有对象和属性,而不管对象和属性的保护情况如何。
默认情况下,它分配给域控制器上的管理员和 LocalSystem 帐户。
同步目录服务数据。
SE_SYSTEM_ENVIRONMENT_NAME"SeSystemEnvironmentPrivilege"需要修改使用此类型存储器来存储配置信息的系统的非易失性 RAM。修改固件环境值。
SE_SYSTEM_PROFILE_NAME"SeSystemProfilePrivilege"需要收集整个系统的性能分析信息。分析系统性能。
SE_SYSTEMTIME_NAME"SeSystemtimePrivilege"需要修改系统时间。更改系统时间。
SE_TAKE_OWNERSHIP_NAME"SeTakeOwnershipPrivilege"需要在不被授予自由裁量访问权限的情况下取得对象的所有权。
此权限仅允许将所有者值设置为持有者可以合法地分配为对象所有者的那些值。
获取文件或其他对象的所有权。
SE_TCB_NAME"SeTcbPrivilege"此权限将其持有者标识为受信任计算机库的一部分。某些受信任的受保护子系统被授予此权限。作为操作系统的一部分。
SE_TIME_ZONE_NAME"SeTimeZonePrivilege"需要调整与计算机内部时钟关联的时区。更改时区。
SE_TRUSTED_CREDMAN_ACCESS_NAME"SeTrustedCredManAccessPrivilege"需要以受信任的调用方身份访问凭据管理器。以受信任的调用方身份访问 Credential Manager。
SE_UNDOCK_NAME"SeUndockPrivilege"需要拔出笔记本电脑。从坞站中取出计算机。
SE_UNSOLICITED_INPUT_NAME"SeUnsolicitedInputPrivilege"需要读取来自终端设备的未经请求的输入。不适用。
关机原因
英文名称数值作用
SHTDN_REASON_MAJOR_APPLICATION0x00040000应用程序问题。
SHTDN_REASON_MAJOR_HARDWARE0x00010000硬件问题。
SHTDN_REASON_MAJOR_LEGACY_API0x00070000使用 InitiateSystemShutdown 函数而不是 InitiateSystemShutdownEx。
SHTDN_REASON_MAJOR_OPERATINGSYSTEM0x00020000操作系统问题。
SHTDN_REASON_MAJOR_OTHER0x00000000其他问题。
SHTDN_REASON_MAJOR_POWER0x00060000电源故障。
SHTDN_REASON_MAJOR_SOFTWARE0x00030000软件问题。
SHTDN_REASON_MAJOR_SYSTEM0x00050000系统故障。
SHTDN_REASON_MINOR_BLUESCREEN0x0000000F蓝屏崩溃事件。
SHTDN_REASON_MINOR_CORDUNPLUGGED0x0000000b拔出。
SHTDN_REASON_MINOR_DISK0x00000007
SHTDN_REASON_MINOR_ENVIRONMENT0x0000000c环境。
SHTDN_REASON_MINOR_HARDWARE_DRIVER0x0000000d司机。
SHTDN_REASON_MINOR_HOTFIX0x00000011热修复。
SHTDN_REASON_MINOR_HOTFIX_UNINSTALL0x00000017热修复卸载。
SHTDN_REASON_MINOR_HUNG0x00000005反应 迟钝。
SHTDN_REASON_MINOR_INSTALLATION0x00000002安装。
SHTDN_REASON_MINOR_MAINTENANCE0x00000001维护。
SHTDN_REASON_MINOR_MMC0x00000019MMC 问题。
SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY0x00000014网络连接。
SHTDN_REASON_MINOR_NETWORKCARD0x00000009网络卡。
SHTDN_REASON_MINOR_OTHER0x00000000其他问题。
SHTDN_REASON_MINOR_OTHERDRIVER0x0000000e其他驱动程序事件。
SHTDN_REASON_MINOR_POWER_SUPPLY0x0000000a电源。
SHTDN_REASON_MINOR_PROCESSOR0x00000008处理器。
SHTDN_REASON_MINOR_RECONFIG0x00000004配置。
SHTDN_REASON_MINOR_SECURITY0x00000013安全问题。
SHTDN_REASON_MINOR_SECURITYFIX0x00000012安全修补程序。
SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL0x00000018安全修补程序卸载。
SHTDN_REASON_MINOR_SERVICEPACK0x00000010Service Pack。
SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL0x00000016Service Pack 卸载。
SHTDN_REASON_MINOR_TERMSRV0x00000020终端服务。
SHTDN_REASON_MINOR_UNSTABLE0x00000006稳定。
SHTDN_REASON_MINOR_UPGRADE0x00000003升级。
SHTDN_REASON_MINOR_WMI0x00000015WMI 问题。
SHTDN_REASON_FLAG_USER_DEFINED0x40000000原因代码由用户定义。
SHTDN_REASON_FLAG_PLANNED0x80000000计划关闭。 系统 (SSD) 文件生成系统状态数据。

中文名称英文名称示例作用
关计算机AbortSystemShutdownA关计算机(机名)停止已启动的系统。机名为0关闭本地计算机
开启关机InitiateShutdownA开启关机(机名,提示,秒数,标志,原因)启动指定计算机的关闭和重启,并重启已注册重启的任何应用程序。标志原因
直接关机InitiateSystemShutdownA直接关机(机名,提示,秒数,强制,重启)启动指定计算机的关闭和可选重启。秒数不过10年(315360000)强制和重启是真和假
关机重启InitiateSystemShutdownExA关机重启(机名,提示,秒数,强制,重启,原因)启动指定计算机的关闭和可选重启。秒数不过10年(315360000)强制和重启是真和假;原因
访问检查AccessCheck访问检查(安全,令牌,掩码,映射,权集,权长,授权,权限)检查客户端对对象的访问权限。
访问授权AddAccessAllowedAce访问授权(访问,级别,掩码,用户)将允许访问的访问控制项添加到访问控制列表(ACL)中。访问权限被授予指定的安全标识符 (SID)。
访问加权AddAccessAllowedAceEx访问加权(访问,级别,标志,掩码,用户)允许访问的访问控制项添加到(DACL)任意访问控制列表的末尾。
访问对象AddAccessAllowedObjectAce访问对象(访问,级别,标志,掩码,新类,继承,用户)添加新的ACE可以授予对对象的访问权限,或者授予对对象的属性集或属性的访问权限。
访问拒绝AddAccessDeniedAce访问拒绝(访问,级别,掩码,用户)拒绝访问访问控制项添加到访问控制列表。
访问拒加AddAccessDeniedAceEx访问拒加(访问,级别,标志,掩码,用户)拒绝访问访问控制项添加到任意访问控制列表末尾。
拒绝对象AddAccessDeniedObjectAce拒绝对象(访问,级别,标志,掩码,新类,继承,用户)拒绝对对象或对象的属性集或属性的访问。
访问控制AddAce访问控制(访问,级别,位置,表组,长度)将一个或多个访问控制项添加到指定的访问控制列表。
访问审核AddAuditAccessAce访问审核(访问,级别,掩码,新类,继承,用户,成功,失败)将系统审核访问控制项(ACE)添加到系统访问控制列表(ACL) 。审核指定安全标识符 (SID) 的访问。
访问加审AddAuditAccessAceEx访问加审(访问,级别,标志,掩码,进程号,成功,失败)系统审核访问控制项添加到系统访问控制列表的末尾, (SACL) 。
审核对象AddAuditAccessObjectAce审核对象(访问,级别,标志,掩码,新类,继承,用户,成功,失败)新的 ACE 可以审核对对象或对象上属性集或属性的访问。
安全标识AllocateAndInitializeSid安全标识(机构,数量,子权0,子权1,2,3,4,5,6,7,@SID)分配和初始化一个安全标识符, (SID) 最多八个子授权。
本地标识AllocateLocallyUniqueId本地标识(LUID)分配本地唯一标识符 (LUID)。
已授全权AreAllAccessesGranted已授全权(授权,请求)检查是否已授予一组请求的访问权限。
已授权限AreAnyAccessesGranted已授权限(授权,请求)测试是否已授予一组请求的访问权限中的任何一项。
已授权限AreAnyAccessesGranted已授权限(授权,请求)使用调用方指定的数据初始化EXPLICIT_ACCESS结构。 受信人由名称字符串标识。
复制标识CopySid复制标识(长度,@数据,SID)将安全标识符 (SID) 复制到缓冲区。
私对象号CreatePrivateObjectSecurity私对象号(父目录,描述,@新描述,容器,令牌,映射)为新的私有对象分配和初始化自相对安全描述符。
私分对象CreatePrivateObjectSecurityEx私分对象(父目录,描述,@新描述,类号,容器,标志,令牌,映射)分配和初始化由资源管理器调用此函数创建的新私有对象的自相对安全描述符。
删除访问DeleteAce删除访问(访问,序号)从访问控制列表 (ACL) 中删除访问控制项 (ACE) 。
销毁私号DestroyPrivateObjectSecurity销毁私号(描述)删除私有对象的安全描述符。
安全同域EqualDomainSid安全同域(SID1,SID2,@真假)确定两个 SID 是否来自同一个域。
安全同姓EqualPrefixSid安全同姓(SID1,SID2)测试两个安全标识符 (SID) 前缀值是否相等。
安全同值EqualSid安全同值(SID1,SID2)测试两个安全标识符 (SID) 值是否相等。 两个 SID 必须完全匹配才能被视为相等。
访问首字EqualPrefixSid访问首字(访问,@指针)检索指向访问控制列表中的第一个自由字节的指针 (ACL) 。
安全释放FreeSid安全释放(SID)释放以前使用 安全标识 函数分配 (SID) 安全标识符。
安全长度GetLengthSid安全长度(SID)返回有效安全标识符的长度(以字节为单位)。
取访问项GetAce取访问项(访问,序号,@项目)访问控制列表中的访问控制项 。
取访问表GetAclInformation取访问表(访问,@数据,大小,信息类)检索有关访问控制列表的信息。
改访问表SetAclInformation改访问表(访问,数据,大小,信息类)设置有关访问控制列表的信息。
取件安全GetFileSecurityA取件安全(文件名,信息,@描述,大小,@已收)获取有关文件或目录安全性的指定信息。
改件安全SetFileSecurityA改件安全(文件名,信息,描述)获取有关文件或目录安全性的指定信息。
取内对象GetKernelObjectSecurity取内对象(对象,信息,@描述,大小,@已收)检索保护内核对象的安全描述符的副本。
改内对象SetKernelObjectSecurity改内对象(对象,信息,描述)设置保护内核对象的安全描述符的副本。
取名安全GetNamedSecurityInfoA取名安全(名称,类型,@持有,@主组,@任意,@系统,@数据)检索由名称指定的对象的安全描述符的副本。
改名安全SetNamedSecurityInfoA改名安全(名称,类型,信息,持有,主组,任意,系统)按名称标识对象的安全描述符中设置指定的安全信息。
取私对象GetPrivateObjectSecurity取私对象(描述,部件,@描述,大小,@剩余)从私有对象的安全描述符检索信息。
改私对象SetPrivateObjectSecurity改私对象(描述,部件,@描述,映射,令牌)从私有对象的安全描述符检索信息。
取安全符GetSecurityInfo取安全符(对象,类型,@持有,@主组,@任意,@系统,@数据)检索句柄指定的对象的安全描述符的副本。
改安全符SetSecurityInfo改安全符(对象,类型,信息,持有,主组,任意,系统)在句柄标识对象的安全描述符中设置指定的安全信息。
名称委托BuildExplicitAccessWithNameA名称委托(委托,名称,权限,模式,继承)指定的数据初始化访问委托类结构。受信人由名称字符串标识。
模拟登陆ImpersonateLoggedOnUser模拟登陆(令牌)允许调用线程模拟登录用户的安全上下文。
访问委托类
中文名字英文名称长度作用解释
访问委托类EXPLICIT_ACCESS_A32定义指定受托人的访问控制信息。
安全描述类 成员表
中文英文类型作用解释
权限grfAccessPermissions整数使用访问掩码指定 ACE 允许、拒绝或审核受托人的访问权限。
模式grfAccessMode整数指示访问控制列表的访问模式
继承grfInheritance整数用于确定其他容器或对象是否可以从附加 ACL 的主对象继承 ACE。
委托Trustee整数用于标识用户、组或程序 的 TRUSTEE 结构。
访问继承标志
英文名称数值作用
NO_INHERITANCE0不继承。
OBJECT_INHERIT_ACE1主对象包含的非容器对象继承 ACE。
CONTAINER_INHERIT_ACE2主对象包含的其他容器继承 ACE。
NO_PROPAGATE_INHERIT_ACE4OBJECT_INHERIT_ACE和CONTAINER_INHERIT_ACE标志不会传播到继承的 ACE。
INHERIT_ONLY_ACE8ACE 不适用于附加 ACL 的主对象,但主对象包含的对象将继承 ACE。
SUB_OBJECTS_ONLY_INHERIT1主对象包含的非容器对象继承 ACE。 此标志对应于OBJECT_INHERIT_ACE标志。
SUB_CONTAINERS_ONLY_INHERIT2主对象包含的其他容器继承 ACE。 此标志对应于CONTAINER_INHERIT_ACE标志。
SUB_CONTAINERS_AND_OBJECTS_INHERIT3主对象包含的容器和非容器对象都继承 ACE。 此标志对应于CONTAINER_INHERIT_ACE和OBJECT_INHERIT_ACE标志的组合。
INHERIT_NO_PROPAGATE4继承但不传播。
INHERIT_ONLY8仅继承。
安全访问模式
指示EXPLICIT_ACCESS结构中的访问权限如何应用于受托人。
英文名称数值作用
NOT_USED_ACCESS0未使用值。
GRANT_ACCESS1指示ACCESS_ALLOWED_ACE 结构。 新的 ACE 将指定权限与受托人的任何现有允许或拒绝权限组合在一起。
SET_ACCESS2指示允许指定权限 的ACCESS_ALLOWED_ACE 结构。输入时,此值将放弃受托人的任何现有访问控制信息。
DENY_ACCESS3指示ACCESS_DENIED_ACE 拒绝指定权限的结构。输入时,除受托人当前拒绝的任何权利外,此值还会拒绝指定权限。
REVOKE_ACCESS4指示所有现有 ACCESS_ALLOWED_ACE 或删除 指定受托人的SYSTEM_AUDIT_ACE结构。
SET_AUDIT_SUCCESS5指示一个 SYSTEM_AUDIT_ACE 结构,该结构为成功尝试使用指定访问权限生成审核消息。输入时,此值将指定权限与受托人的任何现有审核访问权限组合在一起。
SET_AUDIT_FAILURE6指示SYSTEM_AUDIT_ACE 结构,为使用指定访问权限的失败尝试生成审核消息。输入时,此值将指定权限与受托人的任何现有审核访问权限组合在一起。
关机标志
英文名称数值作用
SHUTDOWN_FORCE_OTHERS1强制注销所有会话。 如果未设置此标志,并且当前用户以外的用户登录到 由 机名 参数指定的计算机,则此函数将失败,返回值 ERROR_SHUTDOWN_USERS_LOGGED_ON。
SHUTDOWN_FORCE_SELF2指定强制注销原始会话。 如果未设置此标志,则会以交互方式关闭原始会话,因此即使函数成功返回,也不能保证关闭。
SHUTDOWN_GRACE_OVERRIDE0x20替代宽限期,以便立即关闭计算机。
SHUTDOWN_HYBRID0x200从在 Windows 8 上运行的 InitiateShutdown 开始,必须包含此表中的一个或多个标志的 SHUTDOWN_HYBRID 标志,以指定关机选项。从 Windows 8 开始,如果缺少SHUTDOWN_HYBRID标志,则 InitiateShutdown 始终启动完全系统关闭。
SHUTDOWN_INSTALL_UPDATES0x00000040 (0x40)计算机在开始关闭之前安装任何更新。
SHUTDOWN_NOREBOOT0x00000010 (0x10)计算机已关闭,但未关闭或重新启动。
SHUTDOWN_POWEROFF0x00000008 (0x8)计算机已关闭并关机。
SHUTDOWN_RESTART0x00000004 (0x4)计算机已关闭并重新启动。
SHUTDOWN_RESTARTAPPS0x00000080 (0x80)使用带有 EWX_RESTARTAPPS 标志的 ExitWindowsEx 函数重新启动系统。 这会使用 RegisterApplicationRestart 函数重启已注册重启的任何应用程序。
关机错误
英文名称数值作用
ERROR_ACCESS_DENIED5调用方没有执行此操作所需的权限 (SE_SHUTDOWN_PRIVILEGE 或SE_REMOTE_SHUTDOWN_PRIVILEGE) 。
ERROR_BAD_NETPATH53指定的计算机不存在或无法访问。
ERROR_INVALID_COMPUTERNAME1210指定的计算机名称不是有效的计算机名称。
ERROR_INVALID_FUNCTION1指定的计算机不支持关闭接口。
ERROR_INVALID_PARAMETER87传递的参数集无效。
ERROR_SHUTDOWN_IN_PROGRESS1115已在指定的计算机上启动关闭。
ERROR_SHUTDOWN_IS_SCHEDULED1190已计划关闭指定的计算机,但未启动。 要使此函数成功,必须设置 0x20 标志。
ERROR_SHUTDOWN_USERS_LOGGED_ON1191当前用户以外的一个或多个用户登录到指定的计算机上,并且未设置 1 标志。
安全对象类型
SE_OBJECT_TYPE 枚举包含的值对应于支持安全性的 Windows 对象类型。
英文名称数值作用
SE_UNKNOWN_OBJECT_TYPE0未知的对象类型。
SE_FILE_OBJECT1指示文件或目录。 ..\FileName 或 FileName.dat、d:\sec\sec.dat 或 \\ComputerName\ShareName\FileName.dat。
SE_SERVICE2指示 Windows 服务。 服务对象可以是本地服务(如 ServiceName)或远程服务(如 \\ComputerName\ServiceName)。
SE_PRINTER3指示打印机。 打印机对象可以是本地打印机(如 PrinterName)或远程打印机(如 \\ComputerName\PrinterName)。
SE_REGISTRY_KEY4指示注册表项。 本地注册表(如 CLASSES_ROOT\SomePath )远程注册表中,如 \\ComputerName\CLASSES_ROOT\SomePath。
SE_LMSHARE5指示网络共享。 共享对象可以是本地对象(如 ShareName)或远程对象(如 \\ComputerName\ShareName)。
SE_KERNEL_OBJECT6指示本地内核对象。取/改名安全:信号灯、事件、互斥体、计时器和文件映射。取/改安全符支持所有
SE_WINDOW_OBJECT7指示本地计算机上的窗口工作站或桌面对象。
SE_DS_OBJECT8指示目录服务对象或目录服务对象的属性集或属性。例如:CN=SomeObject,OU=ou2,OU=ou1,DC=DomainName,DC=CompanyName,DC=com,O=internet
SE_DS_OBJECT_ALL9指示目录服务对象及其所有属性集和属性。
SE_PROVIDER_DEFINED_OBJECT10指示提供程序定义的 对象。
SE_WMIGUID_OBJECT11指示 WMI 对象。
SE_REGISTRY_WOW64_32KEY12指示 WOW64 下的注册表项的对象。
SE_REGISTRY_WOW64_64KEY13指示 WOW64 下的注册表项的对象。

进程令牌

中文名称英文名称示例作用
改令牌组AdjustTokenGroups改令牌组(令牌,默认,权组,长度,状态,大小)启用或禁用指定访问令牌中已存在的组。
令牌权限AdjustTokenPrivileges令牌权限(令牌,禁用,权组,长度,状态,大小)启用或禁用指定访问令牌中的权限。
新建令牌CreateRestrictedToken新建令牌(令牌,选项,数目,用户组删数,删权,新数,新组,新牌)创建一个新的访问令牌,该令牌是现有访问令牌的受限版本。
再造令牌DuplicateToken再造令牌(令牌,级别,新牌)创建一个新的访问令牌,该令牌复制已存在的访问令牌。
复制令牌DuplicateTokenEx复制令牌(令牌,访问,属性,级别,类型,@新牌)创建一个复制现有令牌的新访问令牌。
令牌信息GetTokenInformation令牌信息(令牌,类集,信息,长度,大小)检索有关访问令牌的指定类型的信息。调用进程必须具有适当的访问权限才能获取信息。
信息令牌SetTokenInformation信息令牌(令牌,类集,信息,长度,大小)为指定的访问令牌设置各种类型的信息。
是否限牌IsTokenRestricted是否限牌(令牌)指示令牌是否包含受限制的安全标识符 (SID) 的列表。
进程令牌OpenProcessToken进程令牌(进程,访问,令牌)打开与进程关联的访问令牌。
线程令牌OpenThreadToken线程令牌(线程,访问,令牌)打开与线程关联的访问令牌。
线程发牌SetThreadToken线程发牌(线程,令牌)将模拟令牌分配给线程。该函数还可能导致线程停止使用模拟令牌。
安全令牌ImpersonateSelf安全令牌(级别)获取模拟调用进程的安全上下文的访问令牌。令牌将分配给调用线程。
权限检查PrivilegeCheck权限检查(令牌,权集,权限)确定是否在访问令牌中启用了一组指定的权限。
匿名令牌ImpersonateAnonymousToken匿名令牌(进程)使指定的线程能够模拟系统的匿名登录令牌。远程访问前使用

日志事件

中文名称英文名称示例作用
备份日志BackupEventLogA备份日志(日志,路径)将指定的事件日志保存到备份文件。该函数不会清除事件日志。
清除日志ClearEventLogA清除日志(日志,路径)清除指定的事件日志,并选择性地将日志的当前副本保存到备份文件。
关闭日志CloseEventLog关闭日志(日志)关闭指定的事件日志。
注销日志DeregisterEventSource注销日志(日志)注销指定的事件日志。
日志数量GetNumberOfEventLogRecords日志数量(日志,@数量)检索指定事件日志中的记录数。
日志编号GetOldestEventLogRecord日志编号(日志,@编号)检索指定事件日志中最旧记录的绝对记录号。
事件通知NotifyChangeEventLog事件通知(日志,事件)使应用程序能够在将事件写入指定的事件日志时接收通知。
打开备份OpenBackupEventLogA打开备份(服务名,路径)打开指定事件日志的句柄。
事件日志OpenEventLogA事件日志(服务名,路径)打开指定事件日志的句柄。
读取日志ReadEventLogA读取日志(日志,选项,序号,内容,长度,大小,0)从指定的事件日志中读取指定数目的条目。该函数可用于按时间顺序或反向时间顺序读取日志条目。
报告事件ReportEventA报告事件(日志,选项,类别,标识,用户,字数,数据,内容,缓冲)从指定的事件日志中读取指定数目的条目。该函数可用于按时间顺序或反向时间顺序读取日志条目。
注册事件RegisterEventSource源=注册事件(机名,源名)取得事件源句柄
已注事件RegisterEventSourceA已注事件(服务器名,@事件源)检索指定事件日志的已注册句柄。本机为0

加密算法

中文名称英文名称示例作用
加密服务CryptAcquireContextA加密服务(@服务,密名,服名,类型,选项)用于获取特定加密服务提供程序(CSP)中特定密钥容器的句柄。
加密引用CryptContextAddRef加密引用(服务,0,0)将一个添加到 HCRYPTPROV 加密服务提供程序 (CSP) 句柄的引用计数中。
创建哈希CryptCreateHash创建哈希(服务,算法,密钥,摘要,@哈希)启动数据流的哈希处理。算法可参见下表,密钥和摘要一般为0
加密解密CryptDecrypt加密解密(密钥,哈希,完成,选项,内容,长度)使用哈希算法对数据内容进行解密(加密的内容解密后写回内容缓冲区和长度),选项$20不检查填充 $40最佳非对称加密填充
派生密钥CryptDeriveKey派生密钥(服务,算法,哈希,选项,@密钥)生成从基本数据值派生的加密会话密钥。
销毁哈希CryptDestroyHash销毁哈希(密钥)销毁指定的哈希对象。
销毁密钥CryptDestroyKey销毁密钥(密钥)销毁指定的密钥对象。
哈希副本CryptDuplicateHash哈希副本(哈希,0,0,@副本)在复制完成后制作哈希的精确副本(包含状态)。
密钥副本CryptDuplicateKey密钥副本(密钥,0,0,@副本)创建密钥和密钥状态的精确副本。
密钥加密CryptEncrypt密钥加密(密钥,哈希,完成,选项,内容,长度,大小)使用指定密钥加密数据。
检索加密CryptEnumProvidersA检索加密(序号,0,0,类型,名称,长度)检索第一个或下一个可用的加密服务,循环检索可遍历所有服务
查加密类CryptEnumProviderTypesA查加密类(序号,0,0,类型,名称,长度)检索第一个或下一个支持类型的加密服务,循环检索可遍历所有服务
导出密钥CryptExportKey导出密钥(密钥,新密,类型,选项,内容,长度)以安全的方式从加密服务中导出加密密钥或密钥对。
生成密钥CryptGenKey生成密钥(服务,算法,选项,@密钥)生成随机加密会话密钥或公钥/私钥对。
加密随机CryptExportKey加密随机(服务,长度,内容)使用加密随机字节填充缓冲区。
默认加密CryptGetDefaultProviderA默认加密(类,0,选项,名称,长度)查找本地计算机或当前用户的指定提供程序类型的默认加密服务提供程序(CSP)。类:1 PROV_RSA_FULL... 选项:1计算机 2用户
加密数据CryptGetHashParam加密数据(哈希,参数,数据,长度,0)检索控制哈希对象操作的数据的哈希值等。参数:1哈希算法 2哈希值 4值大小
加密密钥CryptGetKeyParam加密密钥(密钥,类型,内容,长度,0)检索控制密钥操作的数据。
加密参数CryptGetProvParam加密参数(服务,类型,内容,长度,0)检索控制加密服务操作的参数。
用户密钥CryptGetUserKey用户密钥(服务,私钥,@密钥)检索用户的两个公钥/私钥对之一的句柄。
哈希数据CryptHashData哈希数据(哈希,数据,长度,0)将数据添加到指定的哈希对象。可多次调用
哈希密钥CryptHashSessionKey哈希密钥(哈希,密钥,选项)计算会话密钥对象的加密哈希(可多次调用或者跟"哈希数据"混用)。选项=1小端序(低位数据存储在低位内存)0大端序(数据反向存储)
导入密钥CryptImportKey导入密钥(服务,数据,长度,公钥,选项,@密钥)将加密密钥从密钥数据传输到加密服务。
释放加密CryptReleaseContext释放加密(服务,0)释放加密服务和密钥容器的句柄。
定义哈希CryptSetHashParam定义哈希(哈希,参数,数据,0)自定义哈希对象的操作,包括设置初始哈希内容和选择特定的哈希算法。参数 2:哈希值 5:HMAC信息
定义密钥CryptSetKeyParam定义密钥(哈希,参数,数据,选项)自自定义会话密钥操作的各个方面。参数为 7 KP_ALGID时,选项可以保存密钥大小等值
定默加密CryptSetProviderA定默加密(名称,类型)指定当前用户的默认加密服务提供程序 (CSP)。
定义加密CryptSetProvParam定义加密(服务,参数,数据,选项)自定义加密服务提供程序 (CSP) 的操作。此函数通常用于在与 CSP 关联的密钥容器上设置安全描述符
加密签名CryptSignHashA加密签名(哈希,私钥,0,选项,签名,长度)数据进行哈希处理之后,获取数据加密的签名。选项 1:未设对象标识 4:ANSI X9.31标准
验证签名CryptVerifySignatureA验证签名(哈希,签名数据,长度,公钥,0,选项)验证哈希对象的签名。选项 1:未设对象标识 4:ANSI X9.31标准
解密文件DecryptFileA解密文件(路径,0)解密加密的文件或目录。
加密文件EncryptFileA加密文件(路径)加密文件或目录。目录中所有新文件都将被加密。
打开加密OpenRawA打开加密(路径,选项,@块)打开加密文件以备份(导出)或还原(导入)文件。选项 0备份 1还原 2目录 4覆盖隐藏文件
关闭加密CloseRaw关闭加密(块)在备份或还原操作后关闭加密文件,并释放关联的系统资源。
导出加密ReadRaw导出加密(@回调,块数据,块)备份(导出)加密文件,同时将文件保持在加密状态。回调函数收到三个参数(写数据,块数据,大小)
导入加密WriteRaw导入加密(@回调,块数据,块)恢复(导入)加密文件。回调函数收到三个参数(收数据,块数据,大小)

注册表

注册表是系统定义的数据库,应用程序和系统组件在其中存储和检索配置数据。 存储在注册表中的数据因 Microsoft Windows 版本而异。
应用程序使用注册表 API 检索、修改或删除注册表数据。
除非绝对必要,否则不应编辑不属于应用程序的注册表数据。 如果注册表中存在错误,则表示系统可能无法正常工作。
如果发生这种情况,可以将注册表还原到上次成功启动计算机时的状态。
注册表的结构
注册表是一个分层数据库,其中包含对 Windows 的操作以及 Windows 上运行的应用程序和服务至关重要的数据。 数据以树格式进行结构化。 树中的每个节点称为 键。
每个键可以同时包含 子项 和数据条目(称为 值)。 有时,密钥的存在是应用程序所需的所有数据;其他时候,应用程序会打开一个密钥并使用与该键关联的值。
键可以有任意数量的值,值可以采用任何形式。 有关详细信息,请参阅注册表值类型和注册表元素大小限制。
每个键都有一个由一个或多个可打印字符组成的名称。 键名称不区分大小写。 键名称不能包含反斜杠字符 (\) ,但可以使用任何其他可打印字符。
值名称和数据可以包含反斜杠字符。每个子项的名称对于层次结构中紧靠在它的上方的键而言是唯一的。 键名称未本地化为其他语言,但值可能为 。
下图是注册表编辑器显示的示例注册表项结构。
注册表编辑器窗口
每个值都包含一个值名称及其关联的数据。注册表树的深度可以为 512 级。 通过单个注册表 API 调用,一次最多可以创建 32 个级别。
注册表存储空间
尽管应用程序可以在注册表中存储的数据的类型和大小几乎没有技术限制,但存在某些实用准则以提高系统效率。
应用程序应将配置和初始化数据存储在注册表中,并将其他类型的数据存储在其他地方。
通常超过一两千字节的数据应存储为文件,并使用注册表中的键引用,而不是作为值存储。
应用程序应将数据保存为文件并引用文件,而不是在注册表中复制大块数据。 可执行的二进制代码绝不应存储在注册表中。
值项使用的注册表空间比键少得多。为了节省空间,应用程序应将类似数据分组为结构,并将结构存储为值,而不是将每个结构成员存储为单独的键。
注册表文件的视图在计算机缓存地址空间中映射。 因此,无论注册表数据的大小如何,其费用不超过 4 MB。注册表配置单元的最大大小为 2 GB,系统配置单元除外。
预定义键
应用程序必须先打开密钥,然后才能将数据添加到注册表。 若要打开密钥,应用程序必须向注册表中已打开的另一个项提供句柄。 系统定义始终打开的预定义密钥。
预定义键可帮助应用程序在注册表中导航,并可以开发允许系统管理员操作数据类别的工具。 将数据添加到注册表的应用程序应始终在预定义键的框架中工作,因此管理工具可以找到并使用新数据。
应用程序可以使用这些键的句柄作为注册表的入口点。 尽管这些句柄的使用可能因平台而异,但这些句柄对所有注册表实现都有效。 此外,已针对特定平台定义了其他预定义句柄。

下面是预定义键的句柄。

中文名称英文名称数值作用
表键类根HKEY_CLASSES_ROOT0x80000000从属于此项的注册表项定义类型 (或类) 文档以及与这些类型关联的属性。 Shell 和 COM 应用程序使用此密钥下存储的信息。
表键当前HKEY_CURRENT_USER0x80000001从属于此键的注册表项定义当前用户的首选项。包括环境变量的设置、有关程序组、颜色、打印机、网络连接和应用程序首选项的数据。
表键本机HKEY_LOCAL_MACHINE0x80000002从属于此键的注册表项定义计算机的物理状态,包括有关总线类型、系统内存以及已安装硬件和软件的数据。
表键用户HKEY_USERS0x80000003从属于此项的注册表项定义本地计算机上新用户的默认用户配置和当前用户的用户配置。
表键数据HKEY_PERFORMANCE_DATA0x80000004从属于此键的注册表项允许访问性能数据。数据实际上不存储在注册表中;注册表函数会导致系统从其源收集数据。
表键配置HKEY_CURRENT_CONFIG0x80000005包含有关本地计算机系统的当前硬件配置文件的信息。信息仅描述了当前硬件配置与标准配置之间的差异。
表键首选HKEY_CURRENT_USER_LOCAL_SETTINGS0x80000007从属于此项的注册表项定义当前用户的首选项,这些首选项是计算机的本地用户。漫游用户配置文件的按用户注册表部分不包括这些条目。
表键英语HKEY_PERFORMANCE_TEXT0x80000050从属于此键的注册表项引用描述美国英语计数器的文本字符串。
表键本语HKEY_PERFORMANCE_NLSTEXT0x80000060从属于此键的注册表项引用以运行计算机系统的区域的本地语言描述计数器的文本字符串。
注册表配置单元
配置单元是注册表中键、子项和值的逻辑组,在操作系统启动或用户登录时,这些键、子项和值具有一组加载到内存中的支持文件。
每次新用户登录到计算机时,都会为该用户创建一个新的配置单元,其中包含用于用户配置文件的单独文件。 这称为 用户配置文件配置单元。
用户的配置单元包含与用户的应用程序设置、桌面、环境、网络连接和打印机相关的特定注册表信息。 用户配置文件配置单元位于 HKEY_USERS 键下。
配置单元的大多数支持文件位于 %SystemRoot%\System32\Config 目录中。 每次用户登录时,这些文件都会更新。
这些目录中文件的文件扩展名(或在某些情况下缺少扩展名)指示它们包含的数据类型。 下表列出了这些扩展以及文件中数据的说明。
扩展名说明
配置单元数据的完整副本。
.Alt关键 HKEY_LOCAL_MACHINE\System 配置单元的备份副本。 只有 System 键具有 .alt 文件。
.log配置单元中键和值条目的更改的事务日志。
.sav配置单元的备份副本。.sav 文件用于还原配置单元数据。
下表列出了标准配置单元及其支持文件。
注册表配置单元支持文件
HKEY_CURRENT_CONFIGSystem、System.alt、System.log、System.sav
HKEY_CURRENT_USERNtuser.dat、Ntuser.dat.log
HKEY_LOCAL_MACHINE\SAMSam、Sam.log、Sam.sav
HKEY_LOCAL_MACHINE\SecuritySecurity、Security.log、Security.sav
HKEY_LOCAL_MACHINE\SoftwareSoftware、Software.log、Software.sav
HKEY_LOCAL_MACHINE\SystemSystem、System.alt、System.log、System.sav
HKEY_USERS\.DEFAULTDefault、Default.log、Default.sav
数据的类别
在将数据放入注册表之前,应用程序应将数据分为两类:计算机特定的数据和用户特定的数据。 通过进行此区分,应用程序可以支持多个用户,并通过网络查找特定于用户的数据,并在不同的位置使用该数据,从而允许与位置无关的用户配置文件数据。
安装应用程序后,它应在 HKEY_LOCAL_MACHINE 键下记录特定于计算机的数据。 具体而言,它应为公司名称、产品名称和版本号创建密钥,如以下示例所示:
**HKEY_LOCAL_MACHINE\Software\**MyCompany\MyProduct\1.0
如果应用程序支持 COM,则应在 HKEY_LOCAL_MACHINE\Software\Classes下记录该数据。
应用程序应在 HKEY_CURRENT_USER 键下记录特定于用户的数据,如以下示例所示:
**HKEY_CURRENT_USER\Software\**MyCompany\MyProduct\1.0

注册表数据类型


中文名称英文名称数值作用
表无形REG_NONE0没有定义的值类型。
表文本REG_SZ1以 0 结尾的字符串。
表环境REG_EXPAND_SZ2包含对环境变量 (例如“%PATH%”) 的未扩展引用的 0 终止字符串。
表数据REG_BINARY3任意格式的二进制数据。
表整数REG_DWORD432 位数字。
表大端REG_DWORD_BIG_ENDIAN5采用高位在前大端序格式的32位数字。
表链接REG_LINK6Unicode 符号链接。
表宽字REG_MULTI_SZ7以两个 0 结尾的字符串数组,宽字符。
表资源REG_RESOURCE_LIST8设备驱动程序资源列表。
表描述REG_FULL_RESOURCE_DESCRIPTOR9完整资源描述符
表需求REG_RESOURCE_REQUIREMENTS_LIST10资源需求列表
表大数REG_QWORD1164 位数字。
打开、创建和关闭键
应用程序必须先创建或打开密钥,然后应用程序才能将数据添加到注册表。 若要创建或打开密钥,应用程序始终将密钥引用为当前打开的密钥的子项。
始终打开以下预定义键:表键本机、表键类根、 表键用户和表键当前。 应用程序使用 打开表密 函数打开密钥,并使用 创建表密 函数创建密钥。
注册表树的深度可以为 512 级。 通过单个注册表 API 调用,一次最多可以创建 32 个级别。
应用程序可以使用 关闭表项 函数关闭某个键,并将它包含的数据写入注册表。 关闭表项 在返回之前不一定将数据写入注册表;缓存刷新到硬盘可能需要几秒钟的时间。
如果应用程序必须将注册表数据显式写入硬盘,则可以使用 更新表项 函数。 但是,更新表项 使用许多系统资源,并且仅在绝对必要时才应调用。
写入和删除注册表数据
应用程序可以使用 改子项值 函数将值及其数据与键相关联。 有关 改子项值 支持的值类型的列表,请参阅 注册表值类型。
若要从键中删除值,应用程序可以使用 删除值名 函数。若要删除密钥,可以使用 删除子项 函数。在关闭该密钥的最后一个句柄之前,不会删除已删除的密钥。
在写入操作期间无法锁定注册表项以同步对数据的访问。 但是,可以使用安全属性控制对注册表项的访问。 有关详细信息,请参阅 注册表项安全和访问权限。
可以在单个事务中执行多个注册表操作。 若要将注册表项与事务关联,应用程序可以使用 表键事务 或 表项事务 函数。
从注册表检索数据
若要从注册表中检索数据,应用程序通常会枚举项的子项,直到找到特定的项,然后从与其关联的值检索数据。 应用程序可以调用 枚举表项 函数来枚举给定密钥的子项。
若要检索有关特定子项的详细数据,应用程序可以调用 查询表项 函数。 表项信息 函数检索保护密钥的安全描述符的副本。
应用程序可以使用 枚举项值 函数枚举给定键的值,并使用 查询值项 函数检索键的特定值。 应用程序通常调用 枚举项值 来确定值名称,然后 调用 查询值项 来检索名称的数据。
查询项值 函数检索与打开的注册表项关联的值名称列表的类型和数据。 此函数对于动态密钥提供程序很有用,因为它通过在原子操作中检索多个值来确保数据的一致性。
由于其他应用程序可以在应用程序读取值并使用该值之间更改注册表值中的数据,因此可能需要确保应用程序具有最新数据。
可以使用 表项变动 函数在注册表项的属性或内容发生更改时通知调用线程,或者如果删除了该键。 函数向事件对象发出信号,以通知调用方。
如果调用 表项变动 的线程退出,则会发出事件信号,并停止对注册表项的监视。
可以通过使用通知筛选器或标志来控制或指定应报告哪些更改。 通常,更改是通过向函数发出指定的事件信号来报告的。 请注意, 表项变动 函数不适用于远程句柄。
注册表文件
应用程序可以将注册表的一部分保存在文件中,然后将文件的内容加载回注册表。 当正在操作大量数据、在注册表中创建多个条目时,或者当数据是临时的并且必须加载然后再次卸载时,
注册表文件非常有用。备份和还原部分注册表的应用程序可能使用注册表文件。
若要将键及其子项和值保存到注册表文件,应用程序可以调用 修改子项 或 改子项值 函数。
修改子项 和 改子项值 使用 archive 属性创建文件。 文件在本地密钥进程的当前目录中创建,在远程密钥的 %systemroot%\system32 目录中创建。
注册表文件具有以下两种格式:标准格式和最新格式。 标准格式是 Windows 2000 支持的唯一格式。 为了向后兼容,更高版本的 Windows 也支持它。 修改子项 以标准格式创建文件。
从 Windows XP 开始,支持最新格式。 无法在 Windows 2000 上加载以此格式创建的注册表文件。 改子项值 可以通过指定REG_STANDARD_FORMAT或REG_LATEST_FORMAT,
以任一格式保存注册表文件。 因此,它可用于将使用标准格式的注册表文件转换为最新格式。
若要将注册表文件写回到注册表,应用程序可以使用 加载子项 替换表项 或 读取表项 函数,如下所示。
加载子项 将注册表数据从指定文件加载到调用应用程序的计算机上或远程计算机上的 HKEY_USERS 或 HKEY_LOCAL_MACHINE 下的指定子项中。
如果指定的子项尚不存在,则函数将创建该子项。 调用此函数后,应用程序可以使用 卸载子项 函数将注册表还原到其以前的状态。
替换表项 将注册表项及其注册表中的所有子项和值替换为指定文件中包含的数据。 新数据在下次启动系统时生效。
读取表项 将注册表数据从指定文件加载到调用应用程序的计算机上或远程计算机上的指定键中。 此函数将指定键下面的子项和值替换为文件中顶级键后面的子项和值。
连接表项 函数与另一台计算机上的预定义注册表句柄建立连接。 应用程序使用此函数主要用于从网络环境中其他计算机上的远程注册表访问信息,也可以使用注册表编辑器执行此操作。
你可能想要访问远程注册表以备份注册表或规范对它的网络访问。 请注意,必须具有适当的权限才能使用此函数访问远程注册表。
注册表项安全和访问权限
Windows 安全模型使你能够控制对注册表项的访问。 有关安全性的详细信息,请参阅 访问控制模型
调用 创建表密 或 改表信息 函数时,可以为注册表项指定安全描述符。如果指定0则密钥将获取默认安全描述符。密钥的默认安全描述符中的ACL继承自其直接父密钥。
若要获取注册表项的安全描述符,请调用 表项信息、 取名安全 或 取安全符 函数。
注册表项的有效访问权限包括 DELETE、READ_CONTROL、WRITE_DAC和WRITE_OWNER 标准访问权限。 注册表项不支持 SYNCHRONIZE 标准访问权限。

注册表访问权限

英文名称数值作用
KEY_ALL_ACCESS0xF003F合并 全权访问、查询值、设置值、创建子项、枚举子项、更改通知和创建链接访问权限。
KEY_CREATE_LINK0x0020预留给系统使用。
KEY_CREATE_SUB_KEY0x0004创建注册表项的子项所必需的。
KEY_ENUMERATE_SUB_KEYS0x0008枚举注册表项的子项所必需的。
KEY_EXECUTE0x20019等效于 KEY_READ。
KEY_NOTIFY0x0010请求对注册表项或注册表项的子项的更改通知是必需的。
KEY_QUERY_VALUE0x0001查询注册表项的值所必需的。
KEY_READ0x20019合并 读取信息、查询值、枚举子项和更改通知值。
KEY_SET_VALUE0x0002创建、删除或设置注册表值所必需的。
KEY_WOW64_32KEY0x0200指示 64 位 Windows 上的应用程序应在 32 位注册表视图上运行。32 位 Windows 会忽略此标志。必须使用 OR 运算符将此标志与此表中查询或访问注册表值的其他标志结合使用。
KEY_WOW64_64KEY0x0100指示 64 位 Windows 上的应用程序应在 64 位注册表视图上运行。 32 位 Windows 会忽略此标志。必须使用 OR 运算符将此标志与此表中查询或访问注册表值的其他标志结合使用。
KEY_WRITE0x20006合并 读写信息、设置值和创建子项 访问权限。

注册表元素大小限制
元素大小限制
项名255 个字符。 键名称包括注册表中项的绝对路径,始终从主键开始,例如,表键本机。
值名称16,383 个字符。 Windows 2000: 260 个 ANSI 字符或 16,383 个 Unicode 字符。
可用内存 (最新格式) 1 MB (标准格式)
注册表树的深度可以为 512 级。 通过单个注册表 API 调用,一次最多可以创建 32 个级别。

(超过 2,048 字节的长值) 应存储在文件中,文件的位置应存储在注册表中。 这有助于注册表高效执行。
文件位置可以是值的名称或值的数据。如果某个文件位置在键名称的 255 个字符限制内,则文件位置也可以是键的名称。
注册表中的 32 位和 64 位应用程序数据
在 64 位 Windows 上,部分注册表项分别存储为 32 位应用程序和 64 位应用程序,并使用注册表重定向器和注册表反射映射到单独的逻辑注册表视图中,
因为 64 位版本的应用程序可能使用不同于 32 位版本的注册表项和值。 还有未重定向或反映的 共享注册表项 。
每个 64 位注册表节点的父节点是 Image-Specific 节点或 ISN。 注册表重定向程序以透明方式将应用程序的注册表访问定向到相应的 ISN 子节点。
注册表树中的重定向子节点由 WOW64 组件使用名称 Wow6432Node 自动创建。 因此,必须不命名创建 Wow6432Node 的任何注册表项。
KEY_WOW64_64KEY和KEY_WOW64_32KEY标志分别允许显式访问 64 位注册表视图和 32 位视图。

注册表函数

中文名称英文名称示例作用
关闭表项RegCloseKey关闭表项(表项)关闭指定注册表项的句柄。
连接表项RegConnectRegistryA连接表项(机名,主键,@表项)建立与另一台计算机上的预定义注册表项的连接。
创建表项RegCreateKeyA创建表项(主键,子项,@表项)创建指定的注册表项。如果注册表中已存在该项,则该函数将打开它。
创建表密RegCreateKeyExA创建表密(主键,子项,0,类,选项,权限,属性,@表项,处置)创建或打开指定的注册表项。键名称不区分大小写。属性;处置:1新建,2只读;选项
删除子项RegDeleteKeyA删除子项(主键,子项)删除注册表子项及其值。子项键名不区分大小写。
删除值名RegDeleteValueA删除值名(主键,值名)从指定的注册表项中删除命名值。值名称不区分大小写。
枚举子项RegEnumKeyA枚举子项(主键,序号,名称,长度)枚举指定的打开的注册表项的子项。(连续查询)
枚举表项RegEnumKeyExA枚举表项(主键,序号,名称,长度,0,类,数据,时间)枚举指定打开的注册表项的子项。 函数在每次调用时检索有关一个子项的信息。
枚举项值RegEnumValueA枚举项值(主键,序号,名称,长度,0,类,数据,大小)枚举指定的打开的注册表项的值。获取指定索引的值名称、数据类型和数据块。
更新表项RegFlushKey更新表项(主键)将指定的打开的注册表项的所有属性写入注册表。
表项信息RegGetKeySecurity表项信息(安全键,安全信息,@安全描述,@长度)检索保护指定打开的注册表项的安全描述符的副本。
加载子项RegLoadKeyA加载子项(主键,子项,文件名)在用户或本机主键下创建一个子项,并将指定注册表配置单元中的数据加载到该子项中。
表键事务RegCreateKeyTransactedA表键事务(主键,子项,0,类,选项,
权限,属性,@表项,处置,事务,0)
创建或打开指定的注册表项并将其与事务相关联。属性;处置:1新建,2只读;选项:1可变,4忽略权限
表项事务RegOpenKeyTransactedA表项事务(主键,子项,0,权限,@表项,事务,0)打开指定的注册表项并将其与事务相关联。键名称不区分大小写。
表项变动RegNotifyChangeKeyValue表项变动(主键,项,选项,事件,立即)通知调用方对指定注册表项的属性或内容的更改。项为真时包括子项变动,立即为真立即返回,选项=1子项变更 2密钥属性 4密钥值 8密钥描述
打开表项RegOpenKeyA打开表项(主键,子项,@表项)打开指定的注册表项。
打开表密RegOpenKeyExA打开表密(主键,子项,选项,权限,@表项)打开指定的注册表项。名称不区分大小写。选项:2链接
映射表项RegOverridePredefKey映射表项(主键,表项)将预定义的注册表项映射到指定的注册表项。
查询表项RegQueryInfoKeyA查询表项(主键,@类,@大小,0,@项数,@名长,@子类长,
@值数,@键长,@值长,@描述长,@时间)
检索有关指定注册表项的信息。
查询项值RegQueryMultipleValuesA查询项值(主键,值表,值数,数据,长度)检索与打开的注册表项关联的值名称列表的类型和数据。
查询值名RegQueryValueA查询值名(主键,子项,数据,长度)检索与指定注册表项的默认值或未命名值关联的文本数据。
查询值项RegQueryValueExA查询值项(主键,子项,0,类型,数据,长度)检索与打开的注册表项关联的指定值名称的类型和数据。
替换表项RegReplaceKeyA替换表项(主键,子项,新名,旧名)将支持注册表项及其所有子项的文件替换为另一个文件,下次启动系统时,此项使用新文件中。
读取表项RegRestoreKeyA读取表项(表项/主键,文件名,选项)读取指定文件中的注册表信息,并将其复制到指定的注册表项上。选项1不保存 8还原
保存表项RegSaveKeyA保存表项(表项/主键,文件名,属性)将指定的键及其所有子项和值以标准格式保存到新文件中。属性
保存表键RegSaveKeyExA保存表键(表项,文件名,属性,格式)将指定的键及其所有子项和值以标准格式保存到新文件中。属性;格式:1标准,2最新,4无压缩
改表信息RegSetKeySecurity改表信息(安全键,安全信息,安全描述)用于设置指定项的安全特性。安全描述
修改子项RegSetValueA修改子项(表项,子项,类型,数据,长度)设置指定注册表项的默认值或未命名值的数据。数据必须是文本字符串。
改子项值RegSetValueExA改子项值(表项,值名,0,类型,数据,长度)设置注册表项下指定值的数据和类型。
卸载子项RegUnLoadKeyA卸载子项(表项,子项)从注册表中卸载指定的注册表项及其子项。
表密选项标志
英文名称作用解释
REG_OPTION_BACKUP_RESTORE4忽略 权限 参数,并尝试使用备份或还原密钥所需的访问权限打开密钥。
REG_OPTION_CREATE_LINK2此键是符号链接。 目标路径分配给键的 L“SymbolicLinkValue”值。 目标路径必须是绝对注册表路径。
REG_OPTION_NON_VOLATILE0此键不是易失的;这是默认值。信息存储在文件中,并在系统重启时保留。
REG_OPTION_VOLATILE1函数创建的所有键都是可变的。此信息存储在内存中,并且在卸载相应的注册表配置单元时不保留此信息。
安全描述类
中文名字英文名称长度作用解释
安全描述类SECURITY_DESCRIPTOR20包含与 对象关联的安全信息。 应用程序使用此结构来设置和查询对象的安全状态。
安全描述类 成员表
中文英文类型作用解释
修订Revision整形指定安全描述符的修订级别。
描述Control整形安全描述符的控制信息。
权人Owner整数指向所有者安全标识符的指针。
主组Group整数指向主组安全标识符的指针。
系统Sacl整数指向系统访问控制列表的指针 (SACL) 。
任意Dacl整数指向任意访问控制列表的指针 (DACL) 。
安全属性类
中文名字英文名称长度作用解释
安全属性类SECURITY_ATTRIBUTES12包含对象的安全描述符,并指定通过指定此结构检索的句柄是否可继承。
安全属性类 成员表
中文英文类型作用解释
长度nLength整数此结构的大小(以字节为单位)。
描述lpSecurityDescriptor整数指向控制对对象的访问的安全描述类结构的指针。
继承bInheritHandle整数一个布尔值,该值指定在创建新进程时是否继承返回的句柄。如果此成员为 TRUE,则新进程将继承句柄。

服务管理

中文名称英文名称示例作用
关闭服务CloseServiceHandle关闭服务(服务)关闭服务控制管理器或服务对象的句柄。
控制服务ControlService控制服务(服务,控制,@状态)将控制代码发送到服务。
服务控制ControlServiceExA服务控制(服务,控制,级别,@参数)将控制代码发送到服务。
关闭服务DeleteService删除服务(服务)将指定的服务标记为从服务控制管理器数据库中删除。
注册服务RegisterServiceCtrlHandlerA注册服务(服务名,@处理函数)注册用于处理服务控制请求的函数。
开服务库OpenSCManagerA开服务库(计算机,0,权限)打开指定的服务控制管理器数据库。
打开服务OpenServiceA打开服务(服务库,服务名,权限)打开现有服务。
改服务类SetServiceBits改服务类(服务,类型,设置,更新)向服务控制管理器和服务器服务注册服务类型。设置为假是清除;更新为真立即更新
服务对象SetServiceObjectSecurity服务对象(服务,信息,描述)设置服务对象的安全描述符。
服务状态SetServiceStatus服务状态(服务,状态)更新调用服务的服务控制管理器的状态信息。
启动服务StartServiceA启动服务(服务,长度,名称)启动服务
开主服务StartServiceCtrlDispatcherA开主服务(服务,长度,名称)将服务进程的main线程连接到服务控制管理器,这会使线程成为调用进程的服务控制调度程序线程。
Win32常用哈希算法对应数值
标识符数值描述
CALG_3DES$6603三重 DES 加密算法。
CALG_3DES_112$6609双密钥三重 DES 加密,有效密钥长度等于 112 位。
CALG_AES$6611高级加密标准 (AES)。此算法受微软AES 加密提供程序支持。
CALG_AES_128$660E128 位 AES。此算法受微软AES 加密提供程序支持。
CALG_AES_192$660F192 位 AES。此算法受微软AES 加密提供程序支持。
CALG_AES_256$6610256 位 AES。此算法受微软AES 加密提供程序支持。
CALG_AGREEDKEY_ANY$AA03Diffie-HellmAn-Agreed keys的句柄的临时算法标识符。
CALG_CYLINK_MEK$660C一种算法,用于创建具有奇偶校验位和归零密钥位的 40 位 DES 密钥,以使其密钥长度为 64 位。此算法受微软基本加密提供程序支持。
CALG_DES$6601DES 加密算法。
CALG_DESX$6604DESX 加密算法。
CALG_DH_EPHEM$AA02Diffie-HellmAn 瞬时密钥交换算法。
CALG_DH_SF$AA01Diffie-HellmAn存储和转发密钥交换算法。
CALG_DSS_SIGN$2200DSA 公钥签名算法。
CALG_ECDH$AA05椭圆曲线 Diffie-HellmAn 密钥交换算法。WinXP和2003不支持。
CALG_ECDH_EPHEM$AE06临时椭圆曲线Diffie-HellmAn密钥交换算法。WinXP和2003不支持
CALG_ECDSA$2203椭圆曲线数字签名算法。WinXP和2003不支持
CALG_ECMQV$A001椭圆曲线美内塞斯、Qu 和 VAnstone (MQV) 密钥交换算法。不支持此算法。
CALG_HASH_REPLACE_OWF$800B单向函数哈希算法。
CALG_HUGHES_MD5$A003休斯 MD5 哈希算法。
CALG_HMAC$8009HMAC 键控哈希算法。此算法受微软基本加密提供程序支持。
CALG_KEA_KEYX$AA04KEA密钥交换算法(FORTEZZA)。不支持此算法。
CALG_MAC$8005MAC 键控哈希算法。此算法受微软基本加密提供程序支持。
CALG_MD2$8001MD2 哈希算法。此算法受微软基本加密提供程序支持。
CALG_MD4$8002MD4 哈希算法。此算法受微软基本加密提供程序支持。
CALG_MD5$8003MD5 哈希算法。此算法受微软基本加密提供程序支持。
CALG_NO_SIGN$2000无签名算法。
CALG_OID_INFO_CNG_ONLY$ffffffff该算法仅在 CNG 中实现。
CALG_OID_INFO_PARAMETERS$fffffffe该算法在编码参数中定义。
CALG_PCT1_MASTER$4C04由 SChAnnel.dll 操作系统使用。应用程序不应使用此ALG_ID。
CALG_RC2$6602RC2 块加密算法。此算法受微软基本加密提供程序支持。
CALG_RC4$6801RC4 流加密算法。此算法受微软基本加密提供程序支持。
CALG_RC5$660DRC5 块加密算法。
CALG_RSA_KEYX$A400RSA 公钥交换算法。此算法受微软基本加密提供程序支持。
CALG_RSA_SIGN$2400RSA 公钥签名算法。此算法受微软基本加密提供程序支持。
CALG_SCHANNEL_ENC_KEY$4C07由 SChAnnel.dll 操作系统使用。应用程序不应使用此ALG_ID。
CALG_SCHANNEL_MAC_KEY$4C03由 SChAnnel.dll 操作系统使用。应用程序不应使用此ALG_ID。
CALG_SCHANNEL_MASTER_HASH$4C02由 SChAnnel.dll 操作系统使用。应用程序不应使用此ALG_ID。
CALG_SEAL$6802SEAL 加密算法。不支持此算法。
CALG_SHA$8004SHA 哈希算法。此算法受微软基本加密提供程序支持。
CALG_SHA1$8004与CALG_SHA相同。此算法受微软基本加密提供程序支持。
CALG_SHA_256$800C256 位 SHA 哈希算法。MiCrosoft EnhAnCed RSA 和 AES 加密提供程序支持此算法。
CALG_SHA_384$800D384 位 SHA 哈希算法。MiCrosoft EnhAnCed RSA 和 AES 加密提供程序支持此算法。
CALG_SHA_512$800E512 位 SHA 哈希算法。MiCrosoft EnhAnCed RSA 和 AES 加密提供程序支持此算法。
CALG_SKIPJACK$660ASkipjACk BloCk enCryption Algorithm (FORTEZZA).不支持此算法。
CALG_SSL2_MASTER$4C05由 SChAnnel.dll 操作系统使用。应用程序不应使用此ALG_ID。
CALG_SSL3_MASTER$4C01由 SChAnnel.dll 操作系统使用。应用程序不应使用此ALG_ID。
CALG_SSL3_SHAMD5$8008由 SChAnnel.dll 操作系统使用。应用程序不应使用此ALG_ID。
CALG_TEK$660BTEK (FORTEZZA).不支持此算法。
CALG_TLS1_MASTER$4C06由 SChAnnel.dll 操作系统使用。应用程序不应使用此ALG_ID。
CALG_TLS1PRF$800A由 SChAnnel.dll 操作系统使用。应用程序不应使用此ALG_ID。

Win32常用函数-shell32库

判断(消息)为 拖放文件 拖曳文件(参数)//在窗体消息里增加拖放文件消息到来时的处理
程序段 拖曳文件(拖曳)
	整数 序号=0,数量=查询拖曳(拖曳,-1,0,0)
	文本 名称[32]
	循环(序号<数量){
	查询拖曳(拖曳,序号,名称,32)
	发送消息(列表,列表添加,0,名称)
	序号++}释放拖曳(拖曳)
结束

窗体消息收到拖放文件的消息时,第三参数是拖曳的对象指针
查询拖曳时序号写-1,查询总共拖放进来的文件数量
然后让序号递增循环查询拖曳对象里的文件名称
把查询到的文件名显示到列表框,循环完成后释放拖曳对象
中文名称英文名称示例作用
接受拖曳DragAcceptFiles接受拖曳(窗口,真)登记窗口是否接受拖曳的文件
释放拖曳DragFinish释放拖曳(拖曳)释放系统分配用于将文件名传输到应用程序的内存
查询拖曳DragQueryFileA查询拖曳(拖曳,序号,名称,大小)检索由成功的拖放操作生成的文件名称
拖曳位置DragQueryPoint拖曳位置(拖曳,坐标)检索在拖放操作时鼠标指针的位置

托盘图标、菜单和提示信息

先申请一个全局的托盘类变量:托盘,定义一个托盘消息的常量
常量 托盘消息=$3FF;
托盘类 托盘(长度=488,标识=7,回调=$3FF,超时=12000,信息图标=4,提示="测试程序",标题="提示",信息="鼠标右键右下角图标可以弹出菜单!");
标识=1回调+2图标+4提示;回调消息的值要跟定义的托盘消息数值相同,定义此值会向指定的窗口发送托盘消息
判断(消息)为 托盘消息 托盘点击(数据)//在窗体消息里增加托盘消息到来时的处理
程序段 窗体启动//在窗体启动的时候添加托盘图标
托盘图标(托盘添加,托盘)//添加托盘图标,托盘是在全局变量定义的结构体数据

程序段 按钮1_点击//在按钮事件里更新托盘
托盘.标识=$17;//托盘标识增加了$10气泡信息
托盘图标(托盘更新,托盘)//更新托盘会在窗口右下角弹出托盘消息
程序段 托盘点击(动作)
	判断(动作)
	为 释放左键 显隐窗口(窗体, 窗口显示)
	为 释放右键 显隐窗口(窗体, 窗口隐藏)
结束

窗体消息的第四个参数:数据,可以判断鼠标点击的点击的动作
根据鼠标动作执行相应的程序代码
函数名称英文名称示例作用
托盘图标Shell_NotifyIconA托盘图标(方式,托盘类)控制任务栏右下角图标,方式:0添加,1更新,2删除;托盘类
图标边框Shell_NotifyIconGetRect托盘图标(边框,矩形类)获取通知图标的边框的屏幕坐标。
托盘图标方式
中文名字常量英文名称释义
托盘添加0NIM_ADD将图标添加到状态区域。
托盘更新1NIM_MODIFY修改状态区域中的图标。
托盘删除2NIM_DELETE从状态区域中删除图标。
托盘焦点3NIM_SETFOCUS将焦点返回到任务栏通知区域。
托盘版本4NIM_SETVERSION指示通知区域按照指定的版本号的行为
图标边界类
中文名字英文名称长度作用解释
图标边界类NOTIFYICONIDENTIFIER28用于标识要检索边界矩形的图标的信息。
图标边界类 成员表
中文英文类型作用解释
长度cbSize整数指定这个结构的大小,以字节为单位。
窗口hWnd整数通知的回调函数使用的父窗口的句柄。
标号uID整数通知图标的应用程序定义的标识符。
类号guidItem[16]文本标识图标的已注册 GUID。 如果图标未通过 GUID 标识,请使用 GUID_NULL 。
托盘类
中文名字英文名称长度作用解释
托盘类NOTIFYICONDATA英文88用来向任务栏托盘区域添加图标和发送消息
托盘类 成员 中文(5.0)488字节,英文不包含5.0版本的成员,只有88字节
中文英文类型作用解释
长度cbSize整数指定这个结构的大小,以字节为单位。
窗口hWnd整数指向所在窗口的句柄。
标号uID整数程序定义的任务栏图标编号
标识uFlags整数表明哪些成员有效:1回调;2图标;4提示;8状态;$10气泡信息
回调uCallbackMessage整数程序定义的消息常量。托盘图标发生鼠标等事件时,向指定窗口发送此消息。
图标hIcon整数指向托盘图标的句柄。
提示szTip文本鼠标指向托盘图标时的提示信息,英文64个字符,中文128字节
状态dwState(5.0)整数图标的状态,可选值:1隐藏,2共享
状态值dwStateMask(5.0)整数指明dwState状态在哪种状态下可以访问。
信息szInfo(5.0)文本气球提示信息的内容。最长256字节
超时uTimeout(5.0)整数单位为毫秒,到时间后气球提示将消失。最小值为10秒,最大值为30秒
标题szInfoTitle(5.0)文本气球提示的标题,小于64个字符
信息图标dwInfoFlags(5.0)整数1信息图标、2警告图标、3错误图标、4用户自定图标

图标提取

函数名称英文名称示例作用
副本图标DuplicateIcon图标=副本图标(实例,图标)创建指定图标的副本。
关联图标ExtractAssociatedIconA关联图标(实例,路径,索引)获取作为资源存储在文件中的图标或存储在文件关联的可执行文件中的图标的句柄。
相关图标ExtractAssociatedIconExA相关图标(实例,路径,索引,编号)获取作为资源存储在文件中的图标或存储在文件关联的可执行文件中的图标的句柄。
文件图标ExtractIconA文件图标(实例,路径,索引)获取指定可执行文件、DLL 或图标文件中图标的句柄。索引从0开始,如果是-1获取图标数
提取图标ExtractIconEx提取图标(路径,索引,大图组,小图组,数量)从指定的可执行文件、DLL 或图标文件中提取的大图标或小图标创建一个句柄数组。
索引从0开始,如果是-1获取图标数

应用栏消息、关于消息框和运行程序

函数名称英文名称示例作用
关于程序ShellAboutA关于程序(窗口,标题,信息,图标)显示“命令行管理程序关于”对话框。
运行程序ShellExecuteA运行程序(窗口,操作,文件名,参数,目录,显示)对指定文件执行操作
执行文件ShellExecuteExA执行文件(执行类)对指定文件执行操作执行类
应用消息SHAppBarMessage应用消息(消息,应用栏类)向系统发送应用栏消息应用栏类
执行类
中文名字英文名称长度作用解释
执行类SHELLEXECUTEINFO60用来运行一个外部程序或者打开文件、目录、网址以及打印文件。
执行类 成员表
中文英文类型作用解释
长度cbSize整数指定这个结构的大小,以字节为单位。
标志fMask整数用来设置其他成员的有效性
窗口hwnd整数指向本程序窗口的句柄。
动作lpVerb整数设定执行的动作。"edit"编辑文档,"explore"打开资源管理器,"find"指定目录搜索
"open"打开对应文件,"print"打印文档,"properties"显示文件或文件夹的属性
路径lpFile整数指向操作对象路径的文本
参数lpParameters整数运行/打开程序的参数
目录lpDirectory整数指定工作目录,默认为当前目录
显示nShow整数运行程序显示的模式
回执hInstApp整数如果运行成功,该项的值将大于32,否则是对应的错误值
标识lpIDList整数一个itemidlist结构的地址,用来存储成员的特别标识符
类别lpClass整数用以指明文件类别的名字或GUID,fMask包括see_mask_classname
注册hkeyClass整数获得已注册的文件类型的句柄,fMask包括see_mask_classkey
热键dwHotKey整数程序的热键关联,参照wm_sethotkey消息的描述,fmask包括see_mask_hotkey<
图标hIcon_OR_Monitor整数取得对应文件类型图标和文档显示的句柄,当fMask不含SEE_MASK_ICON时图标无效,不含SEE_MASK_HMONITOR时文档无效
句柄hProcess整数fMask设为see_mask_nocloseprocess且程序运行成功,可返回目标程序的句俩
应用栏消息常量
英文名称作用解释
ABM_NEW0注册新的应用栏,并指定系统应用来向应用栏发送通知消息的消息标识符。
ABM_REMOVE1取消注册应用栏,从系统的内部列表中删除该应用栏。
ABM_QUERYPOS2请求应用栏的大小和屏幕位置。
ABM_SETPOS3设置应用栏的大小和屏幕位置。
ABM_GETSTATE4检索 Windows 任务栏的自动隐藏状态和始终处于顶部状态。
ABM_GETTASKBARPOS5检索 Windows 任务栏的边框。 请注意,这仅适用于系统任务栏。 其他对象(特别是第三方软件提供的工具栏)也可以存在。
ABM_ACTIVATE6通知系统激活或停用应用栏。 应用栏类 的 附加 成员设置为 TRUE 以激活或设置为 FALSE 以停用。
ABM_GETAUTOHIDEBAR7检索与屏幕的特定边缘关联的自动隐藏应用栏的句柄。
ABM_SETAUTOHIDEBAR8注册或注销屏幕边缘的自动隐藏应用栏。
ABM_WINDOWPOSCHANGED9当应用栏的位置发生更改时通知系统。
ABM_SETSTATE10Windows XP 及更高版本: 设置应用栏的自动隐藏和始终位于顶部的属性的状态。
ABM_GETAUTOHIDEBAREX11Windows XP 及更高版本: 检索与特定监视器的特定边缘关联的自动隐藏应用栏的句柄。
ABM_SETAUTOHIDEBAREX12Windows XP 及更高版本: 注册或取消注册特定监视器边缘的自动隐藏应用栏。
应用栏类
中文名字英文名称长度作用解释
应用栏类APPBARDATA36包含有关系统应用栏消息的信息。
应用栏类 成员表
中文英文类型作用解释
大小cbSize整数指定这个结构的大小,以字节为单位。
窗口hWnd整数应用栏窗口的句柄。
消息uCallbackMessage整数应用程序定义的消息标识符。发送 ABM_NEW 消息时使用此成员。
边缘uEdge整数指定屏幕的边缘。0左边;1上边;2右边;3下边
左边rc.left整数指定坐标矩形左上角的 x 坐标。
上边rc.top整数指定坐标矩形左上角的 y 坐标。
右边rc.right整数指定坐标矩形右下角的 x 坐标。
下边rc.bottom整数指定坐标矩形右下角的 y 坐标。
附加lParam整数依赖于消息的值。

磁盘路径、目录路径转换

函数名称英文名称示例作用
目录选框SHBrowseForFolderA目录选框(目录框类)显示一个对话框,使用户能够选择文件夹。
特定位置SHGetSpecialFolderLocation特定位置(0,标识,@项目)检索指向特殊文件夹的指针。
特定路径SHGetSpecialFolderPathA特定路径(0,路径,特定,创建)检索由其特定标识的文件夹的路径。创建非零自动创建文件夹
转换数据SHGetDataFromIDListA转换数据(接口,标识,格式,缓冲,大小)从相对标识符列表中检索扩展属性数据。格式:1系统文件;2网络资源;3描述结构体;
转换路径SHGetPathFromIDListA转换路径(项目,路径)将项目标识符列表转换为文件系统路径。
磁盘信息SHGetDiskFreeSpaceExA磁盘信息(卷,@可用,@总数,@剩余)检索磁盘卷的磁盘空间信息。
驱动类型SHGetDriveMedia驱动类型(驱动器,@类型)返回给定驱动器中的媒体类型。
文件信息SHGetFileInfoA文件信息(路径,属性,结构,大小,标志)检索文件或目录的信息

系统特定目录——常量数值

中文名字常量英文名称释义
桌面目录0CSIDL_DESKTOP表示Windows桌面的虚拟文件夹,命名空间的根目录。
上网目录1CSIDL_INTERNETInternet Explorer 的虚拟文件夹。
程序目录2CSIDL_PROGRAMS包含用户程序组的文件系统目录
控制面板3CSIDL_CONTROLS包含控制面板应用程序的图标的虚拟文件夹。
打印目录4CSIDL_PRINTERS包含已安装打印机的虚拟文件夹。
文档目录5CSIDL_PERSONAL表示“我的文档”桌面项的虚拟文件夹。
收藏目录6CSIDL_FAVORITES用作用户收藏项的公共存储库的文件系统目录。
启动目录7CSIDL_STARTUP对应于用户的启动程序组的文件系统目录。
最近记录8CSIDL_RECENT包含用户最近使用的文档的快捷方式的文件系统目录。
发送目录9CSIDL_SENDTO包含“ 发送到” 菜单项的文件系统目录。
回收目录10CSIDL_BITBUCKET包含用户 回收站中的对象的虚拟文件夹。
开始菜单11CSIDL_STARTMENU包含 “开始” 菜单项的文件系统目录。
用户桌面16CSIDL_DESKTOPDIRECTORY用于在桌面上物理存储文件对象的文件系统目录 (不要与桌面文件夹本身混淆) 。
我的电脑17CSIDL_DRIVES表示“我的电脑”的虚拟文件夹,其中包含本地计算机上的所有内容
网络目录18CSIDL_NETWORK表示网络邻里(网络命名空间层次结构的根)的虚拟文件夹。
网上邻居19CSIDL_NETHOOD包含“网上邻居”虚拟文件夹中可能存在的链接对象。
字体目录20CSIDL_FONTS包含字体的虚拟文件夹。典型路径为 C:\Windows\Fonts。
模板目录21CSIDL_TEMPLATES用作文档模板通用存储库的文件系统目录。
公用菜单22CSIDL_COMMON_STARTMENU包含所有用户的“开始”菜单上都出现的程序和文件夹。
公用程序23CSIDL_COMMON_PROGRAMS包含所有用户在 “开始” 菜单上显示的常见程序组的目录。
公用开始24CSIDL_COMMON_STARTUP包含在所有用户的“开始”文件夹中都出现的程序的文件系统目录。
公用桌面25CSIDL_COMMON_DESKTOPDIRECTORY包含在所有用户桌面上出现的文件和文件夹的文件系统目录。
应用数据26CSIDL_APPDATA用作应用程序特定数据的通用存储库的文件系统目录。
用户打印27CSIDL_PRINTHOOD文件系统目录,包含“打印机”虚拟文件夹中可能存在的链接对象。
虚程序组29CSIDL_ALTSTARTUP对应于用户的非本地化启动程序组的文件系统目录。(已弃用)
公程序组30CSIDL_COMMON_ALTSTARTUP与所有用户的非本地化启动程序组对应的文件系统目录。(已弃用)
公用收藏31CSIDL_COMMON_FAVORITES文件系统目录,用作所有用户通用的收藏夹项目的通用存储库。
网络缓存32CSIDL_INTERNET_CACHE用作临时 Internet 文件的通用存储库的文件系统目录。
信息缓存33CSIDL_COOKIES用作 Internet Cookie 通用存储库的文件系统目录。
历史记录34CSIDL_HISTORY用作Internet历史记录项的公共存储库的文件系统目录。

系统环境、桌面内存托管实例

函数名称英文名称示例作用
命令参数CommandLineToArgvW命令参数(命令,@数量)分析宽字命令行字符串,并返回参数的数组以及参数的数量
环境变量DoEnvironmentSubstA环境变量(内容,长度)分析包含对一个或多个环境变量的字符串,并将其替换为其完全扩展的值。
初始网址InitNetworkAddressControl初始网址控制任务栏右下角图标,方式0是添加,1是更新,2是删除
查找程序FindExecutableA实例=查找程序(名称,目录,路径)检索与特定文档文件关联的可执行文件的名称和实例句柄。目录可选
项目跟踪SHAddToRecentDocs项目跟踪(消息,数据)通知系统已访问某个项目,以便跟踪最近和最频繁使用的那些项目。数据为0清除所有使用情况。
更新通知SHChangeNotify更新通知(事件,选项,值1,值2)通知系统应用程序已执行的事件。
清回收站SHEmptyRecycleBinA清回收站(窗口,路径,选项)清空指定驱动器上的回收站。选项:1不显确认 2不显进度 4不放声音
格式化框SHFormatDrive格式化框(窗口,盘号,$FFFF,选项)打开命令行管理程序的“格式”对话框。盘号0=A: 2=C: 选项1=快格 2启动盘
文件操作SHFileOperationA文件操作(SHFILEOPSTRUCTA)复制、移动、重命名或删除文件系统对象。
释放映射SHFreeNameMappings释放映射(对象)释放由 文件操作 函数检索的文件名映射对象。
桌面接口SHGetDesktopFolder桌面接口(接口)检索桌面文件夹的IShellFolder接口,该文件夹是Shell命名空间的根。
托管实例SHGetInstanceExplorer托管实例(接口)检索允许托管Shell扩展和其他组件防止其主机进程过早关闭的IUnknown接口。
内存实例SHGetMalloc内存实例(接口)检索指向 Shell 的 IMalloc 接口的指针。
快捷名称SHGetNewLinkInfoA快捷名称(目标,目录,名称,@复制,选项)为新快捷方式创建一个名称。复制非零目标指定复制快捷方式;选项:1目标是PIDL;2不检查目录检查;4前面加"快捷方式";8不加.lnk;
框架选项SHGetSettings框架选项(设置,选项)检索当前的Shell框架界面的选项设置。

中文名字英文名称长度作用解释
文件信息类SHFILEINFOA352用来获取文件名称和时间等属性。
文件信息类——成员表
中文英文类型作用解释
图标hIcon整数表示文件的图标的句柄。
索引iIcon整数系统映像列表中的图标图像的索引。
属性dwAttributes整数一个值数组,指示文件对象的属性。
名称szDisplayName文本260字节长度的文件名称
备用名szTypeName文本80字节长度的备用文件名

中文名字英文名称长度作用解释
回收站类SHQUERYRBINFO12用来获取文件名称和时间等属性。
回收站类——成员表
中文英文类型作用解释
大小cbSize整数结构大小(以字节为单位)。
长度i64Size整数指定回收站中所有对象的总大小(以字节为单位)。
数量i64NumItems整数指定回收站中的项目总数。

文字查找、字符比较

函数名称英文名称示例作用
查找字符StrChrA查找字符(文字1,33)查找字符编码在文字1中出现的内存位置
查找字母StrChrIA查找字母(文字1,\a)查找字符编码在文字1中出现的内存位置,不区分大小写
开头比较StrCmpNA开头比较(文字1,文字2,n)文字1和文字2的前面n个字符进行比较,相等返回0
开头字串StrCmpNIA开头字母(文字1,文字2,n)文字1和文字2的前面n个字符进行比较,不区分大小写
倒查单字StrRChrIA倒查单字(文字1,截止,32)从右边查找字符码在文字1中出现的内存位置,截止地址可以为0
倒查字母StrRChrIA倒查字母(文字1,截止,\a)从右边查找字符码在文字1中出现的内存位置,不区分大小写
倒查文字StrRStrIA倒查文字(文字1,截止,文字2)从右边查找,文字2在文字1中出现的内存位置,截止地址可以为0
倒查字串StrRStrIA倒查字串(文字1,截止,文字2)从右边查找,文字2在文字1中出现的内存位置,不区分大小写
查找文本StrStrA查找文本(文字1,文字2)查找文字2在文字1中出现的内存位置
查找字串StrStrIA查找字串(文字1,文字2)查找文字2在文字1中出现的内存位置

网络编程常用函数-wsock32库
中文名字英文名称长度作用解释
地址类sockaddr_in16用来存储IP地址和端口的数据
地址类——成员表
协议sin_family正数AF_INET=2(地址族)PF_INET=2(协议族)
端口sin_port正数必须是网络数据格式,可以用htons函数转换
地址sin_addr整数网络IP地址
预留sin_zero整数未使用
备用整数未使用

中文名称英文名称示例作用
接受accept接受(接口,地址类,长度)在网络接口接受一个连接。地址和长度是可选项
绑定bind绑定(接口,地址类,长度)将一个本地IP地址类与网络接口捆绑。
关闭closesocket关闭(接口)关闭一个网络接口。
连网connect连网(接口,地址类,长度)用于建立与指定网络接口的连接。
远程地址getpeername远程地址(接口,地址类,长度)获取与网络接口相连的(对方)端口和IP地址
本机地址getsockname本机地址(接口,地址类,长度)获取网络接口的本机端口和IP地址
接口选项getsockopt接口选项(接口,层,选项,@数据,长度)获取一个网络接口的选项
设置接口setsockopt设置接口(接口,层,选项,@数据,@长度)设置一个网络接口的(高层)选项
反整数htonll=反整数(数字)将32位主机数转换成无符号长整型的网络字节顺序(高低位反转)
反转htonsi=反转(数字)将无符号短整形数转换成16位网络字节顺序(四个反转函数性质相同,端口转换用这一个就行了)
整数反转ntohl接受(数字)将一个无符号长整形数从网络字节顺序转换为主机字节顺序
整形反转ntohs整形反转(数字)将一个16位数由网络字节顺序转换为主机字节顺序
控制模式ioctlsocket接口模式(接口,命令,@模式)用于获取与网络接口相关的控制模式
转换地址inet_addr地址=转换地址("127.0.0.1")将一个点分十进制的IP字符串转换成一个长整数型数
地址转换inet_ntoaIPs=地址转换(地址)将一个长整数型数转换成一个点分十进制的IP字符串
监听listen监听(接口,队列数)监听已经"绑定"IP端口的网络接口,申请进入的连接请求排队等待"接受"
接收recv接收(接口,内容,长度,0)接收对方发来的网络数据
收取recvfrom收取(接口,内容,长度,0,地址,长度)接收一个数据报文,可同时获取对方IP端口地址,地址长度可选
轮询select轮询(接口,可用,0,0,超时)通过查询接口的状态,如果在超时限制内没有数据发送,则中断此接口,去发送其它活动接口
发送send发送(接口,内容,长度,0)向对方发送网络数据
发到sendto发到(接口,内容,长度,0,地址,长度)向指定IP端口发送一个报文数据
禁止shutdown禁止(接口,方式)方式0禁收数据,1禁发数据,2禁止收发数据
分配socket接口=分配(网络型,数据流,流协议)指定的地址族、数据类型和协议来分配一个网络接口
(网络型,数据报,报协议)用来UDP通讯
主机信息gethostbyaddr信息=主机信息(IP地址,4,网络型)通过IP地址获取主机名等信息
解析域名gethostbyname信息=解析域名(域名)通过解析域名获取主机名字和IP地址等信息
解析协议getprotobyname协议=解析协议("tcp")解析tcp可得到协议名,可选名队列和数字6,只有数字6有用
获取协议getprotobynumber信息=获取协议(协议号)通过协议号获取协议号和协议名等信息,比如通过数字6可得到一个数字6和协议名
服务信息getservbyname信息=服务信息("domain","udp")通过给定服务名和协议名来获取服务名,协议名,端口号等相关服务信息
服务端口getservbyport信息=服务端口(反转(3389),"tcp")通过给定端口号和协议名来获取服务名,协议名,端口号等相关服务信息
取主机名gethostname取主机名(名称,长度)获取本地主机的标准主机名。
异步通知WSAAsyncSelect异步通知(接口,窗口,消息,事件集)请求基于窗口消息的网络事件通知。
异步信息WSAAsyncGetServByName异步信息(窗口,消息,名称,协议,数据,大小)通过给定服务名和协议名来异步获取服务器的服务名,协议名,端口号等相关服务信息
异步域名WSAAsyncGetHostByName异步域名(窗口,消息,域名,数据,大小)是用来获取对应于一个主机名的主机名称和地址信息。
取消异步WSACancelAsyncRequest取消异步(异步)取消不完整的异步操作。
异步事件WSACreateEvent事件=异步事件创建一个新的事件对象。允许应用程序在一个或多个接口上,接收以事件为基础的网络事件通知
关闭事件WSACloseEvent关闭事件(事件)关闭打开的事件对象句柄。
事件记录WSAEnumNetworkEvents事件记录(接口,事件,数据)获取指定接口的网络事件、清除内部网络事件记录和重置事件对象(可选)。
关联事件WSAEventSelect关联事件(接口,对象,事件集)指定要与指定的网络事件集关联的事件对象。
闲置事件WSAResetEvent闲置事件(事件)将指定事件对象的状态重置为无信号。
发送数据WSASend发送数据(接口,数组,数量,号码,标志,0,0)在连接的套接字上发送数据。
接收数据WSARecv接收数据(接口,数组,数量,已收,标志,0,0)从连接的套接字或绑定的无连接套接字接收数据。
网络错误WSAGetLastError错码=网络错误返回上次发生的网络错误
设置错码WSASetLastError设置错码(错码)为当前线程设置错误代码
网络启动WSAStartup网络启动(版本,信息)完成对Winsock服务的初始化,获取网络接口的相关信息
网络终止WSACleanup网络终止获取本地主机的标准主机名。
网络编程常用常量定义
中文名英文名数值作用
接口读FD_READ1网络数据已到达,可供读取。
接口写FD_WRITE2现在可以发送其他数据。
接口读外FD_OOB4可读取带外数据。
接口请求FD_ACCEPT8远程主机正在发出连接请求。
接口连接FD_CONNECT$10已完成与远程主机或多播会话的连接。
接口关闭FD_CLOSE$20远程主机已关闭连接。
本地型AF_UNIX1主机通讯。
网络型AF_INET2互联网通讯。包含本机,局域网和广域网,23种只有这一种最常用
数据流SOCK_STREAM1TCP协议使用的方式。
数据报SOCK_DGRAM2UDP协议使用的方式
流协议IPPROTO_TCP6TCP协议
报协议IPPROTO_UDP17UDP协议
设置选项IP_OPTIONS1设置新选项将覆盖以前指定的所有选项,设置前要先获取
多播接口IP_MULTICAST_IF2确定要用于多播的接口
多播时间IP_MULTICAST_TTL3设置多播会话时间到实时控制范围
多播回送IP_MULTICAST_LOOP4设置/获取IP多播数据回送
添加多播IP_ADD_MEMBERSHIP5添加多播成员会话
删除多播IP_DROP_MEMBERSHIP6删除多播成员会话
存包时间IP_TTL7设置/获取数据包的保存时间
服务选项IP_TOS8设置/获取服务的最小时延、最大吞吐量、最高可靠性和最小费用
不要分段IP_DONTFRAGMENT9设置/获取IP不分段标志
接口调试SO_DEBUG1打开调试信息记录
是否侦听SO_ACCEPTCONN2获取是否处于侦听模式
地址重用SO_REUSEADDR4允许本地地址重用
保持连接SO_KEEPALIVE8保持连接活动
不要路由SO_DONTROUTE$10仅使用本网络接口地址
允许广播SO_BROADCAST$20允许发送广播消息
地址回送SO_USELOOPBACK$40使用本地环回地址
延迟关闭SO_LINGER$80如果有数据,则延迟关闭
边界数据SO_OOBINLINE$100超出边界的数据
发送缓冲SO_SNDBUF$1001发送缓冲区大小
接收缓冲SO_RCVBUF$1002接收缓冲区大小
最小发送SO_SNDLOWAT$1003发送最小字节数
最小接收SO_RCVLOWAT$1004接收最小字节数
发送超时SO_SNDTIMEO$1005发送超时
接收超时SO_RCVTIMEO$1006接收超时
接口错误SO_ERROR$1007获取错误状态并清除
接口类型SO_TYPE$1008获取网络接口类型

数据类型

Win32编程常用函数-odbc32库
中文名称英文名称示例作用
数据分配SQLAllocHandle数据分配(类型,输入,输出)分配环境=1、连接=2、语句=3或描述符=4句柄。
数据绑定SQLBindParameter数据绑定(语句柄,序号,参类,C类,SQL类,大小,列数,缓冲,长度,指针)将缓冲区绑定到SQL语句中的参数标记。
数据连接SQLConnectA数据连接(连接,数据源,字长,用户,字长,密码,长度)与驱动程序和数据源建立连接。
数据关闭SQLDisconnect数据关闭(连接)关闭与特定连接句柄关联的连接。
驱动连接SQLDriverConnectA驱动连接(连接,窗口,连接字符,字长,已连字符,字长,0,标志)与驱动程序和数据源建立连接。
提交执行SQLExecDirectA提交执行(语句柄,语句,长度)提交 SQL 语句以进行一次性执行。
数据执行SQLExecute数据执行(语句柄)使用参数标记变量的当前值执行已准备的语句。
数据换行SQLFetch数据换行(语句柄)从结果集中提取下一行数据集,并返回所有绑定列的数据。
数据释放SQLFreeHandle数据释放(类型,对象)释放与特定环境、连接、语句或描述符句柄关联的资源。
获取数据SQLGetData获取数据(语句柄,列,C类,缓冲,长度,已读)在结果集中检索单个列的数据
数据参数SQLNumParams数据参数(语句柄,数量)返回 SQL 语句中的参数数量。
数据列数SQLNumResultCols数据列数(语句柄,列数)返回结果集中的列数。
参数数据SQLParamData参数数据(语句柄,缓冲)返回 数据绑定 中指定的缓冲区的地址
写入数据SQLPutData写入数据(语句柄,缓冲,长度)许应用程序在语句执行时向驱动程序发送参数或列的二进制数据。
数据变数SQLRowCount数据变数(语句柄,行数)返回受 UPDATE、 INSERT 或 DELETE 语句影响的行数;
连接属性SQLGetConnectAttrA连接属性(连接,属性,缓冲,长度,已取)获取连接属性的当前设置。
设置连接SQLSetConnectAttrA设置连接(连接,属性,值,长度)设置连接方面的属性。
环境属性SQLGetEnvAttr环境属性(环境,属性,缓冲,长度,已取)获取管理环境方面的属性。
设置环境SQLSetEnvAttr设置环境(环境,属性,值,长度)设置管理环境方面的属性。
语句属性SQLGetStmtAttrA语句属性(语句,属性,缓冲,长度,已取)获取语句属性的当前设置。
设置语句SQLSetStmtAttrA设置语句(语句,属性,值,长度)设置与语句相关的属性。
数据插入SQLBulkOperations数据插入(语句,操作)执行批量插入和批量书签操作,包括通过书签进行更新、删除和提取。
数据游标SQLSetPos数据游标(语句,行号,操作,锁方式)设置行集中的游标位置,并允许应用程序刷新行集中的数据或更新或删除结果集中的数据。
ODBC中的 C 数据类型
C 类型标识符ODBC C typedefC 类型
SQL_C_CHARSQLCHAR *unsigned char *
SQL_C_WCHARSQLWCHAR *wchar_t *
SQL_C_SSHORT[j]SQLSMALLINTshort int
SQL_C_USHORT[j]SQLUSMALLINTunsigned short int
SQL_C_SLONG[j]SQLINTEGERlong int
SQL_C_ULONG[j]SQLUINTEGERunsigned long int
SQL_C_FLOATSQLREALFLOAT
SQL_C_DOUBLESQLDOUBLE、SQLFLOATdouble
SQL_C_BITSQLCHARunsigned char
SQL_C_STINYINT[j]SQLSCHARsigned char
SQL_C_UTINYINT[j]SQLCHARunsigned char
SQL_C_SBIGINTSQLBIGINT_int64[h]
SQL_C_UBIGINTSQLUBIGINTunsigned _int64[h]
SQL_C_BINARYSQLCHAR *unsigned char *
SQL_C_BOOKMARK[i]书签unsigned long int[d]
SQL_C_VARBOOKMARKSQLCHAR *unsigned char *

图形窗口

Win32编程常用函数-opengl32库
中文名称英文名称示例作用
累积缓冲glAccum累积缓冲(操作,小数值)对累积缓冲区进行操作。
透明函数glAlphaFunc透明函数(比较函数,引用值)使应用程序能够设置透明通道测试函数。
查找纹理glAreTexturesResident查找纹理(纹理数,名称,@地址)确定指定的纹理对象是否驻留在纹理内存中。
顶点元素glArrayElement顶点元素(序号)指定用于呈现顶点的数组元素。
开始分形glBegin开始分形(模式)分隔基元或一组类似基元的顶点。
结束分形glEnd结束分形结束分隔基元或一组类似基元的顶点。
绑定纹理glBindTexture绑定纹理(目标,名称)允许创建绑定到纹理目标的命名纹理。
绘制位图glBitmap绘制位图(宽,高,x,y,x偏移,y偏移,图片)结束分隔基元或一组类似基元的顶点。
像素算法glBlendFunc像素算法(源算法,目标算法)指定像素算术。
执行列表glCallList执行列表(列表)执行显示列表。
执行多表glCallLists执行多表(数量,类型,列表组)执行显示列表的列表。
清理预设glClear清理预设(掩码)将缓冲区清除为预设值。
清理累积glClearAccum清理累积(红,绿,蓝,透明)指定累积缓冲区的清除值。
清理颜色glClearColor清理颜色(红,绿,蓝,透明)指定颜色缓冲区的清除值。
清理深度glClearDepth清理深度(深度)指定深度缓冲区的清除值。
清理索引glClearIndex清理索引(索引)指定颜色索引缓冲区的清除值。
清理模具glClearStencil清理模具(序号)指定模具缓冲区的清除值。
剪切平面glClipPlane剪切平面(平面,公式)指定对所有几何图形进行剪切的平面。
三色字节glColor3b三色字节(红,绿,蓝)用字节数设置当前颜色。
三色字组glColor3bv三色字节(色组)设置现有颜色值数组中的当前颜色。
三色双精glColor3d三色双精(红,绿,蓝)用双精度浮点数设置当前颜色。
三色双组glColor3dv三色双组(色组)设置现有颜色值数组中的当前颜色。
三色小数glColor3f三色字节(红,绿,蓝)用小数设置当前颜色。
三色小组glColor3fv三色小组(色组)设置现有颜色值数组中的当前颜色。
三色整数glColor3i三色整数(红,绿,蓝)用整数设置当前颜色。
三色整组glColor3iv三色整组(色组)设置现有颜色值数组中的当前颜色。
三色短数glColor3s三色短数(红,绿,蓝)用短整数设置当前颜色。
三色短组glColor3sv三色短组(色组)设置现有颜色值数组中的当前颜色。
四色字节glColor4b四色字节(红,绿,蓝,透明)用字节数设置当前颜色。
四色字组glColor4bv四色字节(色组)设置现有颜色值数组中的当前颜色。
四色双精glColor4d四色双精(红,绿,蓝,透明)用双精度浮点数设置当前颜色。
四色双组glColor4dv四色双组(色组)设置现有颜色值数组中的当前颜色。
四色小数glColor4f四色字节(红,绿,蓝,透明)用小数设置当前颜色。
四色小组glColor4fv四色小组(色组)设置现有颜色值数组中的当前颜色。
四色整数glColor4i四色整数(红,绿,蓝,透明)用整数设置当前颜色。
四色整组glColor4iv四色整组(色组)设置现有颜色值数组中的当前颜色。
四色短数glColor4s四色短数(红,绿,蓝,透明)用短整数设置当前颜色。
四色短组glColor4sv四色短组(色组)设置现有颜色值数组中的当前颜色。
颜色掩藏glColorMask颜色掩藏(红,绿,蓝,透明)启用和禁用帧缓冲区各种颜色组件的写入。
颜色跟踪glColorMaterial颜色跟踪(面料,材料)导致材料颜色跟踪当前颜色。
颜色位组glColorPointer颜色位组(色位,类型,步幅,指针)定义颜色数组。色位只有3和4
复制像素glCopyPixels复制像素(x,y,宽,高,类型)复制帧缓冲区中的像素。
复制一维glCopyTexImage1D复制一维(目标,级别,格式,x,y,宽,边框)将帧缓冲区中的像素复制到一维纹理图像中。
复制二维glCopyTexImage2D复制二维(目标,级别,格式,x,y,宽,高,边框)将帧缓冲区中的像素复制到二维纹理图像中。
一维子图glCopyTexSubImage1D一维子图(目标,级别,偏移,x,y,宽)从框架缓存复制一维纹理图像的子图像。
二维子图glCopyTexSubImage1D二维子图(目标,级别,x偏移,y偏移,x,y,宽,高)从框架缓存复制二维纹理图像的子图像。
剔除画面glCullFace剔除画面(模式)指定是否可以剔除正面或后向面面。
删除列表glDeleteLists删除列表(列表,数量)删除一组连续的显示列表。
删除纹理glDeleteTextures删除纹理(数量,数组)删除命名纹理。
深度比值glDepthFunc深度比值(方式)指定用于深度缓冲区比较的值。
深度掩码glDepthMask深度掩码(标志)启用或禁用写入深度缓冲区。
深度范围glDepthRange深度范围(准裁,远裁)指定从规范化设备坐标到窗口坐标的 z 值的映射。
禁用图库glDisable禁用图库(方式)禁用 OpenGL 功能。
禁用组态glDisableClientState禁用组态(数组)禁用数组。
绘制组元glDrawArrays绘制组元(模式,起始,数量)指定要呈现的多个基元。
绘制缓存glDrawBuffer绘制缓存(方式)指定要绘制到哪些颜色缓冲区中。
绘制元素glDrawElements绘制缓存(模式,数量,类型,索引)从数组数据呈现基元。
绘制像素glDrawPixels绘制像素(宽,高,格式,类型,像素)将像素块写入帧缓冲区。
边界标记glEdgeFlag边界标记(标志)将边缘标记为边界或非边界(真或假)。
边界标组glEdgeFlagv边界标组(数组)将边缘标记为边界或非边界(布尔数组)。
边界元素glEdgeFlagPointer边界元素(步幅,数组)定义边缘标志数组。
启用图库glEnable启用图库(方式)启用 OpenGL 功能。
启用组态glDisableClientState启用组态(数组)启用数组。
消除列表glEndList消除列表定义边缘标志数组。
一维双精glEvalCoord1d一维双精(基数)计算已启用的一维映射。
一维双组glEvalCoord1dv一维双组(数组)评估已启用的一维映射。
一维小数glEvalCoord1f一维小数(基数)计算已启用的一维映射。
一维小组glEvalCoord1fv一维小组(数组)评估已启用的一维映射。
二维双精glEvalCoord2d二维双精(基数)计算已启用的二维映射。
二维双组glEvalCoord2dv二维双组(数组)评估已启用的二维映射。
二维小数glEvalCoord2f二维小数(基数)计算已启用的二维映射。
二维小组glEvalCoord2fv二维小组(数组)评估已启用的二维映射。
一维网格glEvalMesh1一维网格(模式,开头,结尾)计算点或线条的一维网格。
二维网格glEvalMesh2二维网格(模式,开头1,结尾1,开头2,结尾2)计算点或线条的二维网格。
一维网点glEvalPoint1一维网点(域值)生成和评估网格中的单个点。
二维网点glEvalPoint2二维网点(域值1,域值2)生成和计算网格中的单个点。
反馈缓冲glFeedbackBuffer反馈缓冲(大小,类型,缓冲)控制反馈模式。
终结图库glFinish终结图库阻止所有 OpenGL 执行完成。
执行图库glFlush执行图库在有限时间内强制执行 OpenGL 函数。
雾化小数glFogf雾化小数(效果,雾值)指定雾参数。
雾化小组glFogfv雾化小组(效果,数组)指定雾参数。
雾化整数glFogi雾化整数(效果,雾值)指定雾参数。
雾化整组glFogiv雾化整组(效果,数组)指定雾参数。
正多边形glFrontFace正多边形(方向)定义正面多边形和后向多边形。
透视矩阵glFrustum透视矩阵(左,右,底,顶,近深,远深)将当前矩阵乘以透视矩阵。
空列表组glGenLists列表=空列表组(数目)生成一组连续的空显示列表。
取布尔值glGetBooleanv取布尔值(参数,取值)获取所选参数的值
取双精值glGetDoublev取双精值(参数,取值)获取所选参数的值
取小数值glGetFloatv取小数值(参数,取值)获取所选参数的值
取整数值glGetIntegerv取整数值(参数,取值)获取所选参数的值
剪辑系数glGetClipPlane剪辑系数(平面,系数)获取指定剪辑平面的系数
图库错误glGetError错误=图库错误返回错误信息。
取调色表glGetColorTableEXT取调色表(目标,格式,类型,数据)获取当前目标纹理调色板的颜色表数据。
色表小数glGetColorTableParameterfvEXT色表小数(目标,参数,数据)从颜色表获取调色板参数。
色表整数glGetColorTableParameterivEXT色表整数(目标,参数,数据)从颜色表获取调色板参数。
光源小数glGetLightfv光源小数(光源,参数,数据)获取光源参数值。
光源整数glGetLightiv光源整数(光源,参数,数据)获取光源参数值。
地图双值glGetMapdv地图双值(目标,查询,数据)返回计算器参数。
地图小数glGetMapfv地图小数(目标,查询,数据)返回计算器参数。
地图整数glGetMapiv地图整数(目标,查询,数据)返回计算器参数。
材料小数glGetGetMaterialfv材料小数(材料,参数,数据)获取材料参数值。
材料整数glGetGetMaterialiv材料整数(材料,参数,数据)获取材料参数值。
像素小数glGetGetPixelMapfv像素小数(像素名,数据)获取像素参数值。
像素整数glGetGetPixelMapuiv像素整数(像素名,数据)获取像素参数值。
像素短数glGetGetPixelMapusv像素短数(像素名,数据)获取像素参数值。
顶点数据glGetPointerv顶点数据(类型,数据)返回顶点数据数组的地址。
多边点图glGetPolygonStipple多边点图(掩码)返回多边形存根模式。
图库字符glGetString内容=图库字符(类型)返回描述当前 OpenGL 连接的字符串。
环境小数glGetTexEnvfv环境小数(环境,参数,数据)获取纹理环境参数值。
环境整数glGetTexEnviv环境整数(环境,参数,数据)获取纹理环境参数值。
坐标双值glGetTexGendv坐标双值(坐标,名称,数据)获取纹理坐标生成参数。
坐标小数glGetTexGenfv坐标小数(坐标,名称,数据)获取纹理坐标生成参数。
坐标整数glGetTexGeniv坐标整数(坐标,名称,数据)获取纹理坐标生成参数。
纹理图像glGetTexImage纹理图像(纹理,级别,格式,类型,像素)返回纹理图像。
级别小数glGetTexLevelParameterfv级别小数(目标,级别,参数,数据)获取特定详细级别的纹理参数值。
级别整数glGetTexLevelParameteriv级别整数(目标,级别,参数,数据)获取特定详细级别的纹理参数值。
纹理小数glGetTexParameterfv纹理小数(纹理,参数,数据)获取纹理参数值。
纹理整数glGetTexParameteriv纹理整数(纹理,参数,数据)获取纹理参数值。
采样质量glHint采样质量(行为,模式)返回顶点数据数组的地址。
索引掩码glIndexMask索引掩码(掩码)控制在颜色索引缓冲区中写入单个掩码位。
索引色组glIndexPointer索引色组(类型,步幅,数组)定义颜色索引数组
索引掩码glIndexMask索引掩码(掩码)控制在颜色索引缓冲区中写入单个掩码位。
索引双精glIndexd索引双精(数值)用双精度浮点数设置当前颜色索引。
索引双组glIndexdv索引双组(数组)设置现有颜色值数组中的当前颜色索引。
索引小数glIndexf索引字节(数值)用小数设置当前颜色索引。
索引小组glIndexfv索引小组(数组)设置现有颜色值数组中的当前颜色索引。
索引整数glIndexi索引整数(数值)用整数设置当前颜色索引。
索引整组glIndexiv索引整组(数组)设置现有颜色值数组中的当前颜色索引。
索引短数glIndexs索引短数(数值)用短整数设置当前颜色索引。
索引短组glIndexsv索引短组(数组)设置现有颜色值数组中的当前颜色索引。
索引字节glIndexub索引字节(数值)用字节设置当前颜色索引。
索引字组glIndexubv索引字组(数组)设置现有颜色值数组中的当前颜色索引。
初始名称glInitNames初始名称初始化名称堆栈。
交错阵列glInterleavedArrays交错阵列(格式,步幅,数组)同时指定并启用较大的聚合数组中的多个交错数组。
启用功能glIsEnabled启用功能(功能)测试是否启用了功能。
是否列表glIsList是否列表(列表)测试显示列表是否存在。
是否纹理glIsTexture是否纹理(纹理)确定名称是否对应于纹理。
光线小数glLightf光线小数(光线,参数,数据)获取光线参数值。
光线小组glLightfv光线小组(光线,参数,数据)获取光线参数值。
光线整数glLighti光线整数(光线,参数,数据)获取光线参数值。
光线整组glLightiv光线整组(光线,参数,数据)获取光线参数值。
光模小数glLightModelf光模小数(参数,数据)设置照明模型参数值。
光模小组glLightModelfv光模小组(参数,数据)设置照明模型参数值。
光模整数glLightModeli光模整数(参数,数据)设置照明模型参数值。
光模整组glLightModeliv光模整组(参数,数据)设置照明模型参数值。
线点图案glLineStipple线点图案(乘数,图案)设定线点绘图案
光栅线宽glLineWidth光栅线宽(线宽)指定光栅化线的宽度。
列表基数glListBase列表基数(偏移量)设置显示列表基础。
本征矩阵glLoadIdentity本征矩阵将当前矩阵替换为标识矩阵。
双数矩阵glLoadMatrixd双数矩阵(阵列)将当前矩阵替换为任意矩阵。
小数矩阵glLoadMatrixf小数矩阵(阵列)将当前矩阵替换为任意矩阵。
加载名称glLoadName加载名称(名称)将名称加载到名称堆栈中。
渲染像素glLogicOp渲染像素(逻辑符)指定颜色索引呈现的逻辑像素操作。
视点转换gluLookAt视点转换(相机x,相机y,相机z,镜头x,镜头y,镜头z,面向x,面向y,面向z)定义查看转换。
一维求双glMap1d一维求双(目标,线性1,线性2,步幅,点数,数组)定义一维计算器。
一维求小glMap1f一维求小(目标,线性1,线性2,步幅,点数,数组)定义一维计算器。
二维求双glMap2d二维求双(目标,u1,u2,步幅,维度,v1,v2,步长,维数,数组)定义二维计算器。
二维求小glMap2f二维求小(目标,u1,u2,步幅,维度,v1,v2,步长,维数,数组)定义二维计算器。
一网双数glMapGrid1d一网双数(分区,始值,终值)定义一维网格。
一网小数glMapGrid1f一网小数(分区,始值,终值)定义一维网格。
二网双数glMapGrid2d二网双数(分区,始值,终值,分区,始值,终值)定义二维网格。
二网小数glMapGrid2f二网小数(分区,始值,终值,分区,始值,终值)定义二维网格。
照材小数glMaterialf照材小数(脸,材料,参数)指定照明模型的材料参数。
照材小组glMaterialfv照材小组(脸,材料,数组)指定照明模型的材料参数。
照材整数glMateriali照材整数(脸,材料,参数)指定照明模型的材料参数。
照材整组glMaterialiv照材整组(脸,材料,数组)指定照明模型的材料参数。
矩阵模式glMatrixMode矩阵模式(模式)指定哪个矩阵是当前矩阵。
乘矩阵双glMultMatrixd乘矩阵双(矩阵)将当前矩阵乘以任意矩阵。
乘矩阵小glMultMatrixf乘矩阵小(矩阵)将当前矩阵乘以任意矩阵。
缩放双数glScaled缩放双数(x,y,z)将当前矩阵乘以缩放矩阵。
缩放小数glScalef缩放小数(x,y,z)将当前矩阵乘以缩放矩阵。
转矩双数glTranslated转矩双数(x,y,z)将当前矩阵乘以转矩矩阵。
转矩小数glTranslatef转矩小数(x,y,z)将当前矩阵乘以转矩矩阵。
旋转双数glRotated旋转双数(角度,x,y,z)将当前矩阵乘以旋转矩阵。
旋转小数glRotatef旋转小数(角度,x,y,z)将当前矩阵乘以旋转矩阵。
二点双数glVertex2d二点双数(x,y)指定顶点。
二点双组glVertex2dv二点双组(x,y)指定顶点。
二点小数glVertex2f二点小数(x,y)指定顶点。
二点小组glVertex2fv二点小组(x,y)指定顶点。
二点整数glVertex2i二点整数(x,y)指定顶点。
二点整组glVertex2iv二点整组(x,y)指定顶点。
二点短数glVertex2s二点短数(x,y)指定顶点。
二点短组glVertex2sv二点短组(x,y)指定顶点。
三点双数glVertex3d三点双数(x,y,z)指定顶点。
三点双组glVertex3dv三点双组(x,y,z)指定顶点。
三点小数glVertex3f三点小数(x,y,z)指定顶点。
三点小组glVertex3fv三点小组(x,y,z)指定顶点。
三点整数glVertex3i三点整数(x,y,z)指定顶点。
三点整组glVertex3iv三点整组(x,y,z)指定顶点。
三点短数glVertex3s三点短数(x,y,z)指定顶点。
三点短组glVertex3sv三点短组(x,y,z)指定顶点。
四点双数glVertex4d四点双数(x,y,z,w)指定顶点。
四点双组glVertex4dv四点双组(x,y,z,w)指定顶点。
四点小数glVertex4f四点小数(x,y,z,w)指定顶点。
四点小组glVertex4fv四点小组(x,y,z,w)指定顶点。
四点整数glVertex4i四点整数(x,y,z,w)指定顶点。
四点整组glVertex4iv四点整组(x,y,z,w)指定顶点。
四点短数glVertex4s四点短数(x,y,z,w)指定顶点。
四点短组glVertex4sv四点短组(x,y,z,w)指定顶点。
顶点数组glVertexPointer顶点数组(大小,类型,步幅,指针)定义顶点数据的数组
设置视区glViewport设置视区(左,上,宽,高)设置视区
复制渲染wglCopyContext复制渲染(源,目标,方式)将所选的呈现状态组复制到另一个OpenGL渲染设备。
创建渲染wglCreateContext渲染=创建渲染(设备)在hdc设备上创建一个新的 OpenGL 渲染设备。呈现设备具有与hdc设备相同的像素格式。
渲染函数wglGetProcAddress渲染函数(函数名)返回用于当前OpenGL渲染设备的扩展函数地址。
新渲染层wglCreateLayerContext新渲染层(设备,层面)创建一个新的OpenGL渲染设备。用于绘制到指定层平面。
指定渲染wglMakeCurrent指定渲染(设备,渲染)将指定的OpenGL渲染作为调用线程的当前渲染。
删除渲染wglDeleteContext删除渲染(渲染)删除指定的OpenGL渲染。
层面信息wglDescribeLayerPlane层面信息(设备,层面,哪面,长度,结构)获取有关给定像素格式的层平面的信息。
当前渲染wglGetCurrentContext渲染=当前渲染返回当前OpenGL设备的渲染呈现。
当前设备wglGetCurrentDC设备=当前设备返回当前OpenGL设备的上下文。
层面色板wglGetLayerPaletteEntries层面色板(设备,哪面,色板项,色板数,色组)从指定设备的给定颜色索引层平面中检索调色板条目。
色板层面wglSetLayerPaletteEntries色板层面(设备,哪面,色板项,色板数,色组)为指定的设备设置给定颜色索引层平面中的调色板条目。
映射色板wglRealizeLayerPalette映射色板(设备,哪面,物理)将给定颜色索引层平面中的调色板条目映射到物理调色板或初始化 RGBA 层平面的调色板。
共享列表wglShareLists共享列表(渲染1,渲染2)允许多个渲染共享单个显示列表空间。
交换层面wglSwapLayerBuffers交换层面(设备,层面)交换由指定设备上下文引用的窗口覆盖层、下层和主平面中的前后缓冲区。
绘图对象库-ddraw.dll
驱动图形库-函数列表
中文名称英文名称示例作用
图驱创建DirectDrawCreate图驱创建(标识,@接口,0)创建DirectDraw对象的实例。标识用设备GUID为硬件加速,用0为仿真;1模拟硬件支持;2纯仿真无硬件;成功返回0;
图驱个例DirectDrawCreateClipper图驱个例(0,@接口,0)创建不与DirectDraw对象关联的对象实例。成功返回0;返回0x80070057参数错误;0x8007000E内存溢出
图驱例七DirectDrawCreateEx图驱例七(标识,@接口,例七,0)创建支持DirectX 7.0 中的 Direct3D 接口集的DirectDraw对象的实例。标识用设备GUID为硬件加速,用0为仿真;1模拟硬件支持;2纯仿真无硬件;成功返回0;例七必须是IID_IDirectDraw7
图驱枚举DirectDrawEnumerateA图驱枚举(@函数,传参)枚举主显示设备和一个非显示设备(如 三维加速器)
图驱列举DirectDrawEnumerateExA图驱列举(@函数,传参,标志)枚举计算机上安装的所有 DirectDraw 设备。标志:1所有桌面设备;2所有非桌面设备;4枚举主设备
枚举设备DDEnumCallback枚举设备(标识,名称,说明,传参)图驱枚举的回调函数,返回非零值继续枚举,返回零停止枚举
列举设备DDEnumCallback列举设备(标识,名称,说明,传参,设备)图驱列举的回调函数,返回非零值继续枚举,返回零停止枚举
回显模式EnumModesCallback2回显模式(结构,传参)IDirectDraw7的EnumDisplayModes方法的回调函数;提供监视器频率和可创建的模式DDSURFACEDESC2 结构。
回附加面EnumSurfacesCallback7回附加面(接口,结构,传参)IDirectDraw7的EnumAttachedSurfaces和EnumOverlayZOrders方法的回调函数;提供附加图面的IDirectDrawSurface7接口指针和描述附加图面的DDSURFACEDESC2 结构。

驱动图形库——常量数值
中文名称英文名称常量作用
独占全屏DDSCL_FULLSCREEN1独占模式所有者负责整个主图面。
按键呼出DDSCL_ALLOWREBOOT2允许 CTRL+ALT+DEL 在独占 (全屏) 模式下正常运行。
窗口不变DDSCL_NOWINDOWCHANGES4不允许 DirectDraw 在激活时最小化或还原应用程序窗口。
普通程序DDSCL_NORMAL8应用程序充当典型的 Windows 应用程序。不能用独占全屏和模版模式
独占级别DDSCL_EXCLUSIVE$10请求独占级别。必须与 独占全屏 标志一起使用。
模版模式DDSCL_ALLOWMODEX$40允许使用模式 X 显示模式。仅当独占全屏级别时,才能使用此标志。
图面功能DDSD_CAPS1图面说明类:功能成员有效。
图面高度DDSD_HEIGHT2图面说明类:高度成员有效。
图面宽度DDSD_WIDTH4图面说明类:宽度成员有效。
图面区数DDSD_BACKBUFFERCOUNT$20图面说明类:区数成员有效。
图面全开DDSD_ALL$FF9EE图面说明类:所有成员全部有效。
图面透明DDSCAPS_ALPHA2图面功能标志:此图面仅包含 alpha 信息。
图面后台DDSCAPS_BACKBUFFER4图面功能标志:此图面是表面翻转结构的后台缓冲区。
图面复合DDSCAPS_COMPLEX8图面功能标志:此图面是一个复杂的多层表面,附加表面到根图面。
图面局部DDSCAPS_FLIP$10图面功能标志:此图面是表面翻转结构的一部分。图面区数至少设置为1
图面前区DDSCAPS_FRONTBUFFER$20图面功能标志:此图面是表面翻转结构的前缓冲区。
图面内面DDSCAPS_OFFSCREENPLAIN$40图面功能标志:此图面是任何非屏幕外表面,不是覆盖、纹理、z缓冲区、前缓冲区、后缓冲区或alpha 表面。它用于识别普通表面。
图面覆盖DDSCAPS_OVERLAY$80图面功能标志:此图面是一个覆盖层。是否可见取决于它当前是否叠加到主表面。
图面色板DDSCAPS_PALETTE$100图面功能标志:此图面允许创建唯一色板对象并将其附加到此图面。
图面正面DDSCAPS_PRIMARYSURFACE$200图面功能标志:此图面是主图面。它表示目前对用户可见的内容。
图面左面DDSCAPS_PRIMARYSURFACELEFT0图面功能标志:此表面是左眼的主表面。它表示用户左眼此时可见的内容
图面系统DDSCAPS_SYSTEMMEMORY$800图面功能标志:此图面内存是从系统内存中分配。Windows 2000 或更高版本会导致禁用 DirectDraw。
图面纹理DDSCAPS_TEXTURE$1000图面功能标志:此表面可用作 3D 纹理。它并不指示表面是否用于该目的。
图面渲染DDSCAPS_3DDEVICE$2000图面功能标志:此图面可用于 3D 渲染。如果为堆设置了此标志,则不会从该堆分配图面。
图面显存DDSCAPS_VIDEOMEMORY$4000图面功能标志:此图面存在于显示内存中。
图面显现DDSCAPS_VISIBLE$8000图面功能标志:对此图面所做的更改将立即可见。它始终为主表面以及覆盖层和纹理贴图设置
图面写入DDSCAPS_WRITEONLY$10000图面功能标志:仅允许对图面进行写入访问。Win2000及以上禁用
图面纵深DDSCAPS_ZBUFFER$20000图面功能标志:此图面是z缓冲区。包含哪些像素是否可见的位深度信息。

中文名字英文名称长度作用解释
图面说明类DDSURFACEDESC108包含驱动程序要创建的图面的说明。
图面说明类——成员表
大小dwSize整数结构的大小,以字节为单位
标志dwFlags整数指定结构的哪些成员包含有效数据。全部有效:$FF9EE
高度dwHeight整数指定图面的高度(以像素为单位)。标志:2
宽度dwWidth整数指定图面的宽度(以像素为单位)。标志:4
字数lPitch/dwMipMapCount整数扫描行字数:8/指定 mipmap 级别的数目。标志:$20000
分配dwLinearSize/dwZBufferBitDepth整数指定无格式、后期分配的优化图面的大小:$80000/指定 z 缓冲区的深度(像素位):$40
区数dwBackBufferCount/dwRefreshRate整数指定与图面关联的后台缓冲区数:$20/指定在描述显示器的刷新率(赫兹),标志:$40000
透明dwAlphaBitDepth整数指定alpha缓冲区的深度(像素位)。标志:$80
预留dwReserved整数保留,应设置为零。
内存lpSurface整数指定关联 Surface 内存的地址。标志:$800
低覆盖色ddckCKDestOverlay.dwColorSpaceLowValue整数指定目标覆盖使用的颜色键。标志:$2000
高覆盖色ddckCKDestOverlay.dwColorSpaceHighValue整数指定目标覆盖使用的颜色键。
低转换色ddckCKDestBlt.dwColorSpaceLowValue整数指定目标转换操作使用的颜色键。标志:$4000
高转换色ddckCKDestBlt.dwColorSpaceHighValue整数指定目标转换操作使用的颜色键。
低覆盖源ddckCKSrcOverlay.dwColorSpaceLowValue整数指定源覆盖使用的颜色键。标志:$8000
高覆盖源ddckCKSrcOverlay.dwColorSpaceHighValue整数指定源覆盖使用的颜色键。
低转换源ddckCKSrcBlt.dwColorSpaceLowValue整数指定源转换操作使用的颜色键。标志:$10000
高转换源ddckCKSrcBlt.dwColorSpaceHighValue整数指定源转换操作使用的颜色键。
长度ddpfPixelFormat.dwSize整数结构的大小,以字节为单位。标志:$1000
选项ddpfPixelFormat.dwFlags整数指定结构的哪些成员包含有效数据。
代码ddpfPixelFormat.dwFourCC整数一个 FourCC 代码。
色位ddpfPixelFormat.dwRGBBitCount整数每个像素的 RGB 位 (4、8、16、24 或 32) 。
色码ddpfPixelFormat.dwYUVBitCount整数每个像素的 YUV 位 (4、8、16、24 或 32) 。
纵深ddpfPixelFormat.dwZBufferBitDepth整数Z 缓冲区位深度 (8、16、24 或 32) 。
位深ddpfPixelFormat.dwAlphaBitDepth整数仅限 alpha 的图面 (DDPF_ALPHA) 的 Alpha 通道位深度 (1、2、4 或 8) 。
亮位ddpfPixelFormat.dwLuminanceBitCount整数每个像素的总亮度位数。仅适用于仅亮度和亮度 alpha 图面。
功能ddsCaps.dwCaps整数定义图面对象的功能。标志:1

中文名字英文名称长度作用解释
颜色控件类DDCOLORCONTROL40定义与 Microsoft DirectDraw 视频端口扩展关联的颜色控件, (VPE) 对象。
颜色控件类——成员表
大小dwSize整数结构的大小,以字节为单位
标志dwFlags整数指定结构的哪些成员包含有效数据。
亮度lBrightness整数指定黑级别(亮度强度) 范围为0 到 10000,默认值750 (7.5 IRE) 。标志:1
对比度lContrast整数指定较高强度和较低强度亮度值之间的相对差值。范围0到20000,默认值为 10000 (100 IRE) 。标志:2
角度lHue整数指定色度组件的相位关系。有效范围为-180到180度。默认值0度。标志:4
色度lSaturation整数指定颜色强度。范围0到20000,默认值10000 (100 IRE)。标志:8
锐度lSharpness整数指定以任意单位表示的锐度。有效范围0到10,默认值为5。标志:$10
校正lGamma整数控制应用于亮度值的伽玛校正量。有效范围1到500个伽玛单位,默认值为1。标志:$20
颜色lColorEnable整数指定指示是否使用颜色的标志。0不使用颜色;1使用颜色。默认值1。标志:$40
预留dwReserved1整数保留,应忽略。

中文名字英文名称长度作用解释
伽玛渐变类DDGAMMARAMP768定义红色、绿色和蓝色渐变数据。
伽玛渐变类——成员表
red[256]整形描述红色伽玛渐变的数组。
绿green[256]整形描述红色伽玛渐变的数组。
blue[256]整形描述红色伽玛渐变的数组。

英文名字中文名称作用解释
IDirectDraw驱动绘图对象使用驱动显示接口的方法创建绘图对象并使用系统级变量。
驱动绘图对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
Compact协议目前未实现此方法。
CreateClipper裁剪(0,@接口,0)创建裁剪对象。最后参数为COM聚合功能预留接口,现在不能用
CreatePalette调色板(索引位,颜色组,@接口,0)创建调色板对象。索引位:1四位(16色);2引用8位色;4=八位(256色);
$10连正面;$20左视图;$40定义256色;$80刷新率同步;$100一位(黑白);$200=二位(四色);$400=透明通道
CreateSurface创建面(图面类,@接口,0)创建图面对象。
DuplicateSurface复制面(接口,@新接口)复制图面对象。
EnumDisplayModes枚举显示(模式,图面类,传参,@回显模式)枚举硬件提供的图面说明兼容的所有显示模式。模式:1不同刷新率;2标准VGA
EnumSurfaces枚举图面(模式,图面类,传参,@回附加面)枚举满足指定图面说明的所有现有或可能的图面。模式:1所有图面;2匹配指定;4不匹配指定;8匹配第一个(同2一起用);$10=搜索指定现有图面;
FlipToGDISurface写主图面使 GDI 写入主图面的图面。
GetCaps获取功能(@硬件,@仿真)检索硬件的设备驱动程序的功能,以及HEL(硬件仿真层)的功能。参数为0不获取
GetDisplayMode取显示(图面类)检索当前显示模式。
GetFourCCCodes取四字符(@条数,@代码数组)检索对象支持的FOURCC(四字符)的代码或代码数。
GetGDISurface图面接口(@接口)检索图面对象,该对象当前表示GDI视为主图面的图面内存。
GetMonitorFrequency频率(@数值)检索对象控制的监视器的频率(Hz) 。
GetScanLine扫描(@线)检索当前正在监视器上绘制的扫描线。
GetVerticalBlankStatus直白(@是否)检索垂直空白的状态。如果出现垂直空白为真,否则为假
Initialize初始化(类标识)使用"创建对象"需要进行初始化。
RestoreDisplayMode重置显示将主图面的显示设备硬件的模式重置为调用 "改显示"方法之前的状态。需要独占级别访问权限。
SetCooperativeLevel顶级行为(窗口,模式)确定应用程序的顶级行为。模式:1独占全屏;2按键呼出;4窗口不变;8普通程序;$10独占级别;$40模版模式
SetDisplayMode改显示(宽度,高度,位数)设置显示设备硬件的显示模式。
WaitForVerticalBlank垂直同步(间隔,0)帮助应用程序将自身与垂直空白间隔同步。间隔:1垂直空间隔开始时返回;2垂直空白开始时触发事件(不支持);4垂直空白间隔结束且显示开始时返回;
GetAvailableVidMem可用内存(功能,@总内存,@显示量)检索给定类型图面的可用显示内存总量和当前可用的显示内存量。(版本>=2.0)
GetSurfaceFromDC设备接口(设备,@接口)根据其GDI设备句柄检索图面的接口。(版本>=4.0)
RestoreAllSurfaces还原图面按创建顺序还原为对象创建的所有图面。(版本>=4.0)
TestCooperativeLevel协作状态报告窗口或全屏应用程序的驱动显示设备的当前协作级别状态。(版本>=4.0)
GetDeviceIdentifier驱动信息(信息,标志)获取有关设备驱动程序的信息。标志:0=基准信息;1=三维加速显卡(版本>=4.0)
StartModeTest显示适配(分辨率组,组数,标志)启动测试以使用当前显示适配器和监视器组合的刷新率信息更新系统注册表。标志:1不测试适配并返回是否测试标识的分辨率(版本>=7.0)
EvaluateMode测评显示(模式,@剩余秒数)在调用"自动适配"后使用,以通过或失败测试呈现的每个模式,并单步执行模式,直到测试完成。模式:1测试通过;2测试失败;(版本>=7.0)

英文名字中文名称作用解释
IDirectDraw7驱动绘图对象使用驱动显示接口的方法创建绘图对象并使用系统级变量。
驱动绘图对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
Compact协议目前未实现此方法。
CreateClipper裁剪(0,@接口,0)创建裁剪对象。最后参数为COM聚合功能预留接口,现在不能用
CreatePalette调色板(索引位,颜色组,@接口,0)创建调色板对象。索引位:1四位(16色);2引用8位色;4=八位(256色);
$10连正面;$20左视图;$40定义256色;$80刷新率同步;$100一位(黑白);$200=二位(四色);$400=透明通道
CreateSurface创建面(图面类,@接口,0)创建图面对象。
DuplicateSurface复制面(接口,@新接口)复制图面对象。
EnumDisplayModes枚举显示(模式,图面类,传参,@回显模式)枚举硬件提供的图面说明兼容的所有显示模式。模式:1不同刷新率;2标准VGA
EnumSurfaces枚举图面(模式,图面类,传参,@回附加面)枚举满足指定图面说明的所有现有或可能的图面。模式:1所有图面;2匹配指定;4不匹配指定;8匹配第一个(同2一起用);$10=搜索指定现有图面;
FlipToGDISurface写主图面使 GDI 写入主图面的图面。
GetCaps获取功能(@硬件,@仿真)检索硬件的设备驱动程序的功能,以及HEL(硬件仿真层)的功能。参数为0不获取
GetDisplayMode取显示(图面类)检索当前显示模式。
GetFourCCCodes取四字符(@条数,@代码数组)检索对象支持的FOURCC(四字符)的代码或代码数。
GetGDISurface图面接口(@接口)检索图面对象,该对象当前表示GDI视为主图面的图面内存。
GetMonitorFrequency频率(@数值)检索对象控制的监视器的频率(Hz) 。
GetScanLine扫描(@线)检索当前正在监视器上绘制的扫描线。
GetVerticalBlankStatus直白(@是否)检索垂直空白的状态。如果出现垂直空白为真,否则为假
Initialize初始化(类标识)使用"创建对象"需要进行初始化。
RestoreDisplayMode重置显示将主图面的显示设备硬件的模式重置为调用 "改显示"方法之前的状态。需要独占级别访问权限。
SetCooperativeLevel顶级行为(窗口,模式)确定应用程序的顶级行为。模式:1独占全屏;2按键呼出;4窗口不变;8普通程序;$10独占级别;$40模版模式
SetDisplayMode改显示(宽度,高度,位数,刷新率,模式)设置显示设备硬件的模式。0为默认刷新率,模式建议用0,指定为2是非标准VGA
WaitForVerticalBlank垂直同步(间隔,0)帮助应用程序将自身与垂直空白间隔同步。间隔:1垂直空间隔开始时返回;2垂直空白开始时触发事件(不支持);4垂直空白间隔结束且显示开始时返回;
GetAvailableVidMem可用内存(功能,@总内存,@显示量)检索给定类型图面的可用显示内存总量和当前可用的显示内存量。
GetSurfaceFromDC设备接口(设备,@接口)根据其GDI设备句柄检索图面的接口。
RestoreAllSurfaces还原图面按创建顺序还原为对象创建的所有图面。
TestCooperativeLevel协作状态报告窗口或全屏应用程序的驱动显示设备的当前协作级别状态。
GetDeviceIdentifier驱动信息(信息,标志)获取有关设备驱动程序的信息。标志:0=基准信息;1=三维加速显卡
StartModeTest显示适配(分辨率组,组数,标志)启动测试以使用当前显示适配器和监视器组合的刷新率信息更新系统注册表。标志:1不测试适配并返回是否测试标识的分辨率
EvaluateMode测评显示(模式,@剩余秒数)在调用"自动适配"后使用,以通过或失败测试呈现的每个模式,并单步执行模式,直到测试完成。模式:1测试通过;2测试失败;

英文名字中文名称作用解释
IDirectDrawSurface7驱动图面对象使用驱动显示面接口的方法创建图面对象并使用系统级变量。
驱动图面对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
AddAttachedSurface添加图面(接口)将指定的 z 缓冲区图面连接到此图面。
AddOverlayDirtyRect添加覆盖(矩形)此方法当前未实现。
Blt位传(目标矩形,图面,源矩形,标志,光栅)执行位块传输。标志:$200=顺序异步;$400=填充颜色;$800指定光栅类型;$1000丢弃光栅;$2000使用目标颜色键;$4000指定目标颜色键;$8000使用源颜色键;
$10000指定源颜色键;$20000指定光栅操作功能;$40000指定旋转角度;$8000000=返回传输状态
BltBatch批传(位块组,操作数,0)此方法当前未实现。
BltFast快传(x,y,图面,矩形,标志)使用源颜色键或目标颜色键执行源复制位块或透明位块。标志:0=普通复制;1按源透明色;2用目标透明;$10等待忙完
DeleteAttachedSurface分离(0,图面)分离一个或多个附加表面。
EnumAttachedSurfaces枚举图面(传参,@回附加面)枚举连接到此图面的所有图面。
EnumOverlayZOrders枚举覆面(模式,传参,@回附加面)枚举指定目标上的覆盖图面。模式:0=从后到前;1=从前到后;
Flip翻转(图面,标志)使与后台缓冲区图面关联的表面内存与前缓冲区表面相关联。标志:1=尝试等待;2=偶数场视频;4奇数视频;8不同步;$10=立体声;$20=不需等待;
$2000000=每秒垂直同步翻转;$3000000=隔三同步;$4000000=隔四同步
GetAttachedSurface取附加图(功能,@图面)获取具有指定功能的附加图面,并递增检索到的接口的引用计数
GetBltStatus取块传(标志)获取位块传输 (bitblt) 操作的状态。标志:1=传输开始;2=传输完成;返回:0成功;0x88760082=无效对象;0x8876023F=无问题;0x887601AE=线程锁定被拒;
0x887601C2=图面不存在;0x8876021C=正在传输或图面不完整;0x80070057=错误参数;0x80004001=不支持操作。
GetCaps获取功能(@功能)检索图面的功能。
GetClipper取剪辑(剪辑器)索与此图面关联的剪辑器对象,并递增返回的剪辑器的引用计数。
GetColorKey取颜色键(标志,色键)检索此图面的颜色键值。标志:2=块传目标色键;4=覆盖目标色键;8=块传源键;$10覆盖源键
GetDC取设备(@设备)为此图面创建设备上下文的 GDI 兼容句柄。
GetFlipStatus取翻转(标志)检索有关此图面是否已完成翻转过程的状态。标志:1=传输开始;2=传输完成;返回:0成功;0x88760082=无效对象;0x8876023F=无问题;
0x887601AE=线程锁定被拒;0x887601C2=图面不存在;0x8876021C=正在传输或图面不完整;0x80070057=错误参数;0x80004001=不支持操作。
GetOverlayPosition取坐标(@x,@y)检索可见的活动覆盖图面的显示坐标。
GetPalette取调色板(@色板)检索与此图面关联的调色板对象,并递增返回的调色板的引用计数。
GetPixelFormat像素格式(格式)检索此图面的颜色和像素格式。
GetSurfaceDesc图面说明(图面说明类)检索此图面在其当前条件下的说明。调用前只需初始化结构大小
Initialize初始化(对象,图面说明类)初始化图面对象。
IsLost丢弃确定是否释放了与图面对象关联的表面内存。返回:0=尚未释放;0x88760082=无效对象;0x80070057=错误参数;0x887601C2=图面不存在;
Lock锁定(矩形,图面类,标志,0)获取指向表面内存的指针。矩形为0是整个画面,标志:1=尝试等待;$10=只读画面;$20=启用写入;$800=不互斥锁;$1000=不写引用顶点;$2000=重写顶点;$4000=不需等待;
ReleaseDC释放设备(设备)释放以前使用"取设备"方法获取的设备上下文的句柄。
Restore还原图面还原已丢失的图面。当与图面对象关联的面内存已释放时,将发生这种情况。
SetClipper改剪辑(剪辑器)将剪辑器对象附加到此图面或从中删除一个对象(参数为0)。
SetColorKey顶级行为(模式,颜色键)设置图面对象的颜色键值。模式:1=含颜色空间;2=位传目标颜色;4=覆盖目标颜色;8=位传源颜色;$10=覆盖源颜色
SetOverlayPosition改坐标(x,y)设更改覆盖图面的显示坐标。
SetPalette改调色板(色板)将调色板对象附加到图面或从图面分离一个对象。
Unlock解锁(矩形)通知绘图对象直接图面操作已完成。矩形为0是整个图面
UpdateOverlay更新覆盖(源矩形,图面,目标矩形,标志,DDFX)重新定位或修改覆盖图面的视觉属性。 标志:2=覆盖目标透明通道数值;4=指定目标透明度;8=覆盖目标透明通道地址;$10=边框透明通道;$20=附加像素格式透明;
$40=源透明通道数值;$80=指定源透明度;$100=源透明通道地址;$200=关闭覆盖面;$400=目标关联颜色键;$800=目标覆盖颜色键;$1000=源关联颜色键;$2000=源覆盖颜色键;
$4000=显示覆盖面;$8000=添加矩形到覆盖面;$10000=重绘覆盖面矩形;$20000=重绘整个覆盖面;$80000=用FX定义特效;$100000=垂直同步自动翻转;$200000=隔行扫描无断帧;
$400000=隔行编码持久有效;$800000=交错内存数据;$1000000=硬件隔行扫描编码;$2000000=包含ARGB缩放因子;$4000000=ARGB缩放因子可降级
UpdateOverlayDisplay更新显示(预留)方法当前未实现。
UpdateOverlayZOrder更新层序(标志,图面)设置覆盖的z顺序。标志:0=移到前面;1移到后面;2=前移一层;3=后移一层;4插到前面;5插到后面;4和5插入时需要指定图面
GetDDInterface取接口(@接口)检索用于创建此图面的绘图对象的接口。(版本>=2.0)
PageLock锁定分页(0)防止系统内存图面在位块传输时分页,直接使用内存访问 (DMA) 传输。(版本>=2.0)
PageUnlock解锁分页(0)解锁系统内存图面,然后允许将其分页。(版本>=2.0)
SetSurfaceDesc设置图面(图面说明类,0)设置现有图面的特征。(版本>=3.0)
GetPrivateData图面数据(类标识,@缓冲,@大小)将与此图面关联的专用数据复制到提供的缓冲区。(版本>=4.0)
FreePrivateData释放数据(类标识)释放与此图面关联的指定私有数据。(版本>=4.0)
GetUniquenessValue图面键值(@键值)检索此图面的当前唯一性值。(版本>=4.0)
ChangeUniquenessValue更换键值手动更新此图面的唯一性值。(版本>=4.0)
SetPriority改优先(级)为此托管纹理分配纹理管理优先级。(版本>=7.0)
GetPriority取优先(@级)获取此托管纹理的纹理管理优先级。(版本>=7.0)
SetLOD改细节(级)设置托管纹理mipmap图面的最大细节级别LOD。(版本>=7.0)
GetLOD取细节(@级)获取托管纹理mipmap图面的最大细节级别LOD。(版本>=7.0)

英文名字中文名称作用解释
IDirectDrawPalette驱动调色对象应用程序使用调色板接口的方法来创建调色板对象,并使用系统级变量。
驱动调色对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetCaps功能(@标志)检索调色板对象的功能。标志:1四位(16色);2引用8位色;4=八位(256色);
$10连正面;$20左视图;$40定义256色;$80刷新率同步;$100一位(黑白);$200=二位(四色);$400=透明通道
GetEntries取色板(0,开头,数目,色板组)从调色板对象检索调色板值。
Initialize初始化(对象,0,0)初始化调色板对象。
SetEntries改色板(0,开头,数目,色板组)立即更改调色板对象中的条目。

英文名字中文名称作用解释
IDirectDrawClipper驱动剪辑对象应用程序使用剪辑器接口的方法来管理剪辑列表。
驱动剪辑对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetClipList取副本(矩形,@区块组,@大小)检索剪辑器对象关联的剪辑列表的副本。矩形为0取整个画面,区块为0取数据大小
GetHWnd取窗口(@窗口)检索与剪辑器对象关联的窗口句柄。
Initialize初始化(对象,0)初始化调色板对象。
IsClipListChanged列表状态(@真假)如果窗口句柄与剪辑器对象关联,则检索剪辑列表的状态是否更改。
SetClipList改副本(区块组,0)设置或删除剪辑器父对象所附加到的图面上使用的剪辑列表。
SetHWnd改窗口(@真假)设置剪辑器对象用于获取剪辑信息的窗口句柄。

英文名字中文名称作用解释
IDirectDrawColorControl驱动颜色对象应用程序使用颜色控件接口的方法获取和设置颜色控件。
驱动颜色对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetColorControls取色控(@颜色控制)检索与覆盖或主图面关联的当前颜色控制设置。
SetColorControls改色控(颜色控制)设置覆盖或主图面的颜色控制选项。

英文名字中文名称作用解释
IDirectDrawGammaControl驱动渐变对象应用程序使用伽玛渐变控件接口的方法来调整主图面的红色、绿色和蓝色伽玛渐变级别。
驱动渐变对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetGammaRamp取渐变(0,@色素)检索主图面的红色、绿色和蓝色伽玛渐变
SetGammaRamp改渐变(标志,色素)设置主图面的红色、绿色和蓝色伽玛渐变。标志:1=物理校准;0不校准

三维对象库-d3d9.dll
英文名字中文名称作用解释
IDirect3D9三维图形对象应用程序使用三维图形接口的方法创建三维图形对象并设置环境。包括枚举和检索设备功能的方法。
三维图形对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
RegisterSoftwareDevice软件光栅(@函数)注册可插入软件设备。提供软件光栅化,使应用程序能够访问各种软件光栅器。
GetAdapterCount显卡数返回系统上的适配器数。显卡序号0到数量减一
GetAdapterIdentifier显卡描述(序号,标志,显卡标识类)描述指定物理显示适配器信息:显卡标识类。标志:0=默认;2=下载驱动证书;
GetAdapterModeCount模式数(序号,图面格式)返回此适配器上可用的显示模式数。图面格式
EnumAdapterModes枚举模式(序号,设备类型,索引,显示模式类)枚举指定的适配器是否支持请求的格式和显示模式。索引是模式数的序号;
GetAdapterDisplayMode显示模式(序号,显示模式类)检索适配器的当前显示模式信息。
CheckDeviceType设备类型(序号,设备类型,显示模式,缓冲格式,全屏)验证硬件加速设备类型是否可以在此适配器上使用。设备类型
CheckDeviceFormat设备格式(序号,设备类型,选项,资源类型,图面格式)确定表面格式是否可用作指定资源类型常数,纹理、深度模具缓冲区、呈现目标或三者的任何组合。选项:
CheckDeviceMultiSampleType多重采样(序号,设备类型,图面格式,小窗,采样率,@数量)确定此设备上是否提供多重采样技术。小窗为假=全屏采样;采样率:(0-16)
CheckDepthStencilMatch模具匹配(序号,设备类型,显示模式,呈现格式,模具格式)确定深度模具格式是否与特定显示模式下的呈现目标格式兼容。
CheckDeviceFormatConversion可转格式(序号,设备类型,源格式,目标格式)测试设备是否支持从一种显示格式转换为另一种显示格式。
GetDeviceCaps设备功能(序号,设备类型,功能)检索有关设备的特定于设备的信息。功能:三维功能类
GetAdapterMonitor监视器(序号)返回对象关联的监视器的句柄。
CreateDevice创建设备(序号,设备类型,焦点窗口,选项,参数,@接口)创建表示显示适配器的设备接口 IDirect3DDevice9。参数:显示参数类

英文名称常量作用解释
D3DFORMAT数值定义各种类型的图面格式。
D3DFMT_UNKNOWN0未知格式
无符号格式——使用红(R)绿(G)蓝(B)透明(A)亮度(L)和调色板(P)数据的组合。
D3DFMT_R8G8B82024 位 RGB 像素格式,每个通道 8 位。
D3DFMT_A8R8G8B821具有 alpha 的 32 位 ARGB 像素格式,每个通道使用 8 位。
D3DFMT_X8R8G8B82232 位 RGB 像素格式,其中为每个颜色保留 8 位。
D3DFMT_R5G6B52316 位 RGB 像素格式,红色为 5 位,绿色为 6 位,蓝色为 5 位。
D3DFMT_X1R5G5B52416 位像素格式,其中为每个颜色保留 5 位。
D3DFMT_A1R5G5B52516 位像素格式,其中为每个颜色保留 5 位,为 alpha 保留 1 位。
D3DFMT_A4R4G4B42616 位 ARGB 像素格式,每个通道 4 位。
D3DFMT_R3G3B2278位 RGB 纹理格式,红色为 3 位,绿色为 3 位,蓝色为 2 位。
D3DFMT_A828仅限 8 位 alpha。
D3DFMT_A8R3G3B22916 位ARGB 纹理格式,alpha 使用 8 位,红色和绿色各 3 位,蓝色各 2 位。
D3DFMT_X4R4G4B43016 位 RGB 像素格式,每种颜色使用 4 位。
D3DFMT_A2B10G10R103132 位像素格式,每种颜色使用 10 位,alpha 使用 2 位。
D3DFMT_A8B8G8R832具有 alpha 的 32 位 ARGB 像素格式,每个通道使用 8 位。
D3DFMT_X8B8G8R83332 位 RGB 像素格式,其中为每个颜色保留 8 位。
D3DFMT_G16R163432 位像素格式,绿色和红色各使用 16 位。
D3DFMT_A2R10G10B103532 位像素格式,红色、绿色和蓝色各使用 10 位,alpha 为 2 位。
D3DFMT_A16B16G16R1636每个组件使用 16 位的 64 位像素格式。
D3DFMT_A8P840使用 8 位 alpha 索引的 8 位颜色。
D3DFMT_P841已编制索引的 8 位颜色。
D3DFMT_L850仅 8 位亮度。
D3DFMT_L1681仅 16 位亮度。
D3DFMT_A8L85116 位,分别使用 8 位的 alpha 和亮度。
D3DFMT_A4L4528 位,使用 4 位分别用于 alpha 和亮度。
D3DFMT_A11181 位单色。仅在 Direct3D9Ex 中可用。
D3DFMT_A2B10G10R10_XR_BIAS1192.8 偏置定点。仅在 Direct3D9Ex 中可用。
D3DFMT_BINARYBUFFER199指示数据没有固有类型的二进制格式。仅在 Direct3D 9Ex 中可用。
缓冲区格式——深度、模具、顶点和索引缓冲区都有唯一的格式。
D3DFMT_D16_LOCKABLE7016 位 z 缓冲区位深度。
D3DFMT_D327132 位 z 缓冲区位深度。
D3DFMT_D15S17316 位 z 缓冲区位深度,其中为深度通道保留 15 位,为模具通道保留 1 位。
D3DFMT_D24S87532 位 z 缓冲区位深度,深度通道使用 24 位,模具通道使用 8 位。
D3DFMT_D24X877使用 24 位作为深度通道的 32 位 z 缓冲区位深度。
D3DFMT_D24X4S47932 位 z 缓冲区位深度,深度通道使用 24 位,模具通道使用 4 位。
D3DFMT_D32F_LOCKABLE82一种可锁定的格式,其中深度值表示为标准 IEEE 浮点数。
D3DFMT_D24FS883一种不可锁定的格式,包含24位浮点格式深度(-20e4)和8模具。
D3DFMT_D32_LOCKABLE84可锁定的 32 位深度缓冲区。仅在 Direct3D 9Ex 中可用。
D3DFMT_S8_LOCKABLE85可锁定的 8 位模具缓冲区。仅在 Direct3D 9Ex 中可用。
D3DFMT_D168016 位 z 缓冲区位深度。
D3DFMT_VERTEXDATA100描述顶点缓冲区图面。
D3DFMT_INDEX1610116 位索引缓冲区位深度。
D3DFMT_INDEX3210232 位索引缓冲区位深度。
DXTn压缩纹理格式——图面尺寸必须4的倍数,适用于屏幕外普通表面、呈现目标、2D 纹理、立方体纹理和体积纹理。
D3DFMT_DXT10$DXT1DXT1 压缩纹理格式
D3DFMT_DXT20$DXT2DXT2 压缩纹理格式
D3DFMT_DXT30$DXT3DXT3 压缩纹理格式
D3DFMT_DXT40$DXT4DXT4 压缩纹理格式
D3DFMT_DXT50$DXT5DXT5 压缩纹理格式
浮点格式——用于浮点图面格式。这些16位每通道格式也称为s10e5格式。
D3DFMT_R16F111对红色通道使用 16 位的 16 位浮点格式。
D3DFMT_G16R16F11232 位浮点格式,红色通道使用 16 位,绿色通道使用 16 位。
D3DFMT_A16B16G16R16F113对于每个通道使用 16 位的 64 位浮点格式, (alpha、蓝色、绿色、红色) 。
四字符格式——FOURCC格式的数据是压缩数据。极语言里使用0$开头,后面加4个字符。
D3DFMT_MULTI2_ARGB80$MET1多元素纹理 (未压缩)
D3DFMT_G8R8_G8B80$GRGB16位打包RGB格式。绿红和绿蓝两个像素对来表示颜色值。共享红蓝分量
D3DFMT_R8G8_B8G80$RGBG16位打包RGB格式。红绿和蓝绿两个像素对来表示颜色值。共享红蓝分量
D3DFMT_UYVY0$UYVYUYVY 格式(PC98 合规性)
D3DFMT_YUY20$YUY2YUY2 格式(PC98 合规性)
IEEE格式——用于浮点图面格式。 这些 32 位每通道格式也称为 s23e8 格式。
D3DFMT_R32F114对红色通道使用32位浮点格式。
D3DFMT_G32R32F11564位浮点格式,红色和绿色通道使用 32 位。
D3DFMT_A32B32G32R32F116每个通道使用32位的128位浮点格式, (alpha、蓝色、绿色、红色) 。
混合格式——数据可以包含无符号数据和有符号数据的组合。
D3DFMT_L6V5U561亮度为6位的16位凹凸图格式,v和u各使用5位。
D3DFMT_X8L8V8U862具有亮度的 32 位凹凸映射格式,每个通道使用 8 位。
D3DFMT_A2W10V10U106732位凹凸映射格式,其中alpha使用2位,w、v和u各使用10位。
签名格式——带符号格式的数据可以是正数和负数。使用(U)、(V)、(W)和(Q)数据的组合。
D3DFMT_V8U86016位凹凸映射格式,其中u和v数据各使用8位。
D3DFMT_Q8W8V8U86332位凹凸贴图格式,每个通道使用8位。
D3DFMT_V16U166432位凹凸映射格式,每个通道使用16位。
D3DFMT_Q16W16V16U1611064位凹凸映射格式,每个通道使用16位。
D3DFMT_CxV8U811716位标准压缩格式。纹理采样器根据C=平方根(1-U2-V2)计算C通道。
————————————
D3DFMT_FORCE_DWORD0x7fffffff此数值强制常数为32位,表示四字符要小于这个值。

英文名称常量作用解释
D3DRESOURCETYPE——定义资源类型常数。
D3DRTYPE_SURFACE1图面资源
D3DRTYPE_VOLUME2卷资源。
D3DRTYPE_TEXTURE3纹理资源。
D3DRTYPE_VOLUMETEXTURE4卷纹理资源。
D3DRTYPE_CUBETEXTURE5立方体纹理资源。
D3DRTYPE_VERTEXBUFFER6顶点缓冲区资源。
D3DRTYPE_INDEXBUFFER7索引缓冲区资源。

英文名称常量作用解释
D3DMULTISAMPLE_TYPE——定义设备可以应用的全场景多重采样级别。
D3DMULTISAMPLE_NONE0没有可用的全场景多重采样级别。
D3DMULTISAMPLE_NONMASKABLE1启用多重采样质量值。
D3DMULTISAMPLE_2_SAMPLES2可用的全场景多采样级别。
D3DMULTISAMPLE_3_SAMPLES3可用的全场景多采样级别。
D3DMULTISAMPLE_4_SAMPLES4可用的全场景多采样级别。
D3DMULTISAMPLE_5_SAMPLES5可用的全场景多采样级别。
D3DMULTISAMPLE_6_SAMPLES6可用的全场景多采样级别。
D3DMULTISAMPLE_7_SAMPLES7可用的全场景多采样级别。
D3DMULTISAMPLE_8_SAMPLES8可用的全场景多采样级别。
D3DMULTISAMPLE_9_SAMPLES9可用的全场景多采样级别。
D3DMULTISAMPLE_10_SAMPLES10可用的全场景多采样级别。
D3DMULTISAMPLE_11_SAMPLES11可用的全场景多采样级别。
D3DMULTISAMPLE_12_SAMPLES12可用的全场景多采样级别。
D3DMULTISAMPLE_13_SAMPLES13可用的全场景多采样级别。
D3DMULTISAMPLE_14_SAMPLES14可用的全场景多采样级别。
D3DMULTISAMPLE_15_SAMPLES15可用的全场景多采样级别。
D3DMULTISAMPLE_16_SAMPLES16可用的全场景多采样级别。

中文名字英文名称常量作用解释
显示类型D3DDEVTYPE数值定义设备类型。多用于三维图形类方法的第二参数
显示模式类——常量表
硬件光栅D3DDEVTYPE_HAL1硬件光栅化。着色是通过软件、硬件或混合转换和照明完成的。
软件光栅D3DDEVTYPE_REF2Direct3D功能在软件中实现;但是参考光栅器会随时使用特殊的 CPU 指令。
注册光栅D3DDEVTYPE_SW3已注册到 三维图形类.软件光栅 的可插入软件设备。
无软硬件D3DDEVTYPE_NULLREF4在硬件和引用光栅化均不可用的计算机上初始化Direct3D,并启用3D内容创建的资源。

英文名称常量作用解释
D3DCREATE——控制设备创建行为的一个或多个标志的组合。
D3DCREATE_FPU_PRESERVE2将3D浮点计算的精度设置为调用线程使用的精度。默认为单精度舍入到最近模式
D3DCREATE_MULTITHREADED4使用安全多线程的。频繁获取全局关键部分的所有权,可能会降低性能。在卸载d3d9.dll之前销毁此窗口。
D3DCREATE_PUREDEVICE$10不支持对可存储状态块内容进行获取调用。不提供任何仿真服务。如果设备不支持顶点处理,则只能使用转换后的顶点。
D3DCREATE_SOFTWARE_VERTEXPROCESSING$20指定软件顶点处理。Win10(1607)及以上版本不建议使用
D3DCREATE_HARDWARE_VERTEXPROCESSING$40指定硬件顶点处理。
D3DCREATE_MIXED_VERTEXPROCESSING$80指定软件和硬件顶点混合处理。Win10(1607)及以上版本不建议使用
D3DCREATE_DISABLE_DRIVER_MANAGEMENT$100Direct3D将使用资源而不是驱动程序。不会因资源错误(如视频内存不足)而失败。
D3DCREATE_ADAPTERGROUP_DEVICE$200要求设备驱动此主适配器拥有的所有分配头。在非主机适配器上是非法的。
D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX$400Direct3D将管理资源而不是驱动程序。对于视频内存不足等情况将返回错误。
D3DCREATE_NOWINDOWCHANGES$800指示 Direct3D 不得以任何方式更改焦点窗口。
D3DCREATE_DISABLE_PSGP_THREADING$2000将计算限制为应用程序主线程。 否则会在工作线程中执行进行计算(XP及下不可用)
D3DCREATE_ENABLE_PRESENTSTATS$4000启用在设备上收集现有统计信息。 仅在 Direct3D 9Ex 中可用。
D3DCREATE_DISABLE_PRINTSCREEN$800导致运行时不为"Printscreen"注册热键,不能截屏。仅在 Direct3D 9Ex 中可用
D3DCREATE_SCREENSAVER$10000000在全屏应用程序期间允许屏幕保护。仅在 Direct3D 9Ex 中可用

英文名称常量作用解释
D3DSWAPEFFECT——定义交换效果。
D3DSWAPEFFECT_DISCARD1丢弃缓存从而减少大量视频内存或处理开销,可能包含多个后台缓冲区
D3DSWAPEFFECT_FLIP2(n-1)翻转缓冲,交换链可能包含多个后台缓冲区,最好设想为包含前缓冲区的循环队列
D3DSWAPEFFECT_COPY3后台缓冲区直接复制到前缓冲区,只能为包含单个后台缓冲区的交换链指定此交换效果。将后台缓冲区数设置为1。
D3DSWAPEFFECT_OVERLAY4使用可在主图面上覆盖的专用视频内存区域。硬件执行无需复制,仅支持Win7及以上的Direct3D9Ex
D3DSWAPEFFECT_FLIPEX$20指定应用程序何时采用翻转模式,不影响窗口模式显示进行合成和全屏显示统计信息。仅支持Win7及以上的Direct3D9Ex

英文名称常量作用解释
D3DPRESENTFLAG——显示模式类.演播间隔 使用的常量。
D3DPRESENTFLAG_LOCKABLE_BACKBUFFER1应用程序需要直接锁定后台缓冲区时设置,在某些图形硬件配置上会降低性能。
D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL2创建设备或交换链启用丢弃z缓冲区数据,可以提高性能,深度模具缓冲区的内容将无效。
D3DPRESENTFLAG_DEVICECLIP4在显视器屏幕区域中,将窗口化 Present 位块传送剪辑到窗口工作区。
D3DPRESENTFLAG_VIDEO$10这是驱动程序的提示,即后台缓冲区将包含视频数据。
D3DPRESENTFLAG_NOAUTOROTATE$20监视器显示画面自动使用旋转副本进行处理,即程序自行显示旋转。仅在 Direct3D 9Ex 中可用
D3DPRESENTFLAG_UNPRUNEDMODE$40指定显示适配器的所有可显示模式,仅在 Direct3D 9Ex 中可用
D3DPRESENTFLAG_OVERLAY_LIMITEDRGB$80指定覆盖是有限范围压缩的RGB。16:16:16 为黑色,235:235:235 为白色。
D3DPRESENTFLAG_OVERLAY_YCbCr_BT709$100对于高清电视 (HDTV),设置此标志表示 BT.709。不设置是BT.601;仅在 Direct3D 9Ex 中可用
D3DPRESENTFLAG_OVERLAY_YCbCr_xvYCC$200指定覆盖是是扩展的YCbCr(xvYCC)。仅在 Direct3D 9Ex 中可用
D3DPRESENTFLAG_RESTRICTED_CONTENT$400表示交换链包含受保护的内容,只有桌面窗口管理器(DWM)可以使用交换链。仅在 Direct3D 9Ex 中可用
D3DPRESENTFLAG_RESTRICT_SHARED_RESOURCE_DRIVER$800表示驱动程序应限制对为 DWM 交互创建的任何共享资源的访问。仅在 Direct3D 9Ex 中可用

英文名称常量作用解释
D3DCAPS2——驱动程序功能标志。
D3DCAPS2_FULLSCREENGAMMA0x00020000驱动程序支持全屏模式下的动态伽玛渐变调整。
D3DCAPS2_CANCALIBRATEGAMMA0x00100000系统安装了一个校准器,该校准器可以自动调整伽玛斜率
D3DCAPS2_CANMANAGERESOURCE0x10000000驱动程序能够管理资源。
D3DCAPS2_DYNAMICTEXTURES0x20000000驱动程序支持动态纹理。
D3DCAPS2_CANAUTOGENMIPMAP0x40000000驱动程序能够自动生成 mipmap。纹理映射表
D3DCAPS2_CANSHARERESOURCE0x80000000设备可以创建可共享的资源。仅在 Direct3D 9Ex 中可用

英文名称常量作用解释
D3DCAPS3——驱动程序功能标志。
D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD0x20指示设备在使用 丢弃缓存 或 翻转缓冲 交换效果时,可以在全屏模式下遵循混合透明度呈现状态。
D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION0x80指示设备可以从窗口式后台缓冲区执行伽玛校正, (包含) 到 sRGB 桌面的线性内容。
D3DCAPS3_COPY_TO_VIDMEM0x100设备可以加速从系统内存到本地视频内存的内存复制。本地硬件加速
D3DCAPS3_COPY_TO_SYSTEMMEM0x200设备可以加速从本地视频内存到系统内存的内存复制。系统硬件加速
D3DCAPS3_DXVAHD0x400显示驱动程序支持 DXVA-HD DDI。
D3DCAPS3_DXVAHD_LIMITED0x800显示驱动程序支持限制的 DXVA-HD DDI。

英文名称常量作用解释
D3DPRESENT——描述适配器刷新率与完成 “当前” 或“ 演示 ”操作的速率之间的关系。
D3DPRESENT_DONOTWAIT1不能由 hal 设备安排演示文稿。
D3DPRESENT_LINEAR_CONTENT2要显示的后台缓冲区的内容位于线性颜色空间中。
D3DPRESENT_DONOTFLIP4显示期间使用前缓冲区作为源图面和目标图面。已计划帧同步但显示的图面不会更改。仅在 Direct3D 9Ex 中可用
D3DPRESENT_FLIPRESTART8保留。仅在 Direct3D 9Ex 中可用
D3DPRESENT_VIDEO_RESTRICT_TO_MONITOR0x10将呈现的内容显示缩略图,并在其他监视器上显示任务栏缩略图。仅在 Direct3D 9Ex 中可用。
D3DPRESENT_UPDATEOVERLAYONLY0x20汇报覆盖位置或色键数据而不翻转,也不更改图像的显示持续时间。仅在 Direct3D 9Ex 中可用。
D3DPRESENT_HIDEOVERLAY0x40关闭覆盖硬件。仅在 Direct3D 9Ex 中可用。
D3DPRESENT_UPDATECOLORKEY0x20重绘色键数据。仅在 Direct3D 9Ex 中可用。
D3DPRESENT_FORCEIMMEDIATE0x80 窗口和全屏演示行为是相同的。仅在 Direct3D 9Ex 中可用。

英文名称常量作用解释
D3DDEVCAPS——三维功能类.设备功能的标志。
D3DDEVCAPS_EXECUTESYSTEMMEMORY0x000010设备可以使用系统内存中的执行缓冲区
D3DDEVCAPS_EXECUTEVIDEOMEMORY0x000020设备可以使用视频内存中的执行缓冲区。
D3DDEVCAPS_TLVERTEXSYSTEMMEMORY0x000040设备可以将系统内存中的缓冲区用于转换的顶点和点亮顶点。
D3DDEVCAPS_TLVERTEXVIDEOMEMORY0x000080设备可以将视频内存中的缓冲区用于转换和点亮顶点。
D3DDEVCAPS_TEXTURESYSTEMMEMORY0x000100设备可以从系统内存中检索纹理。
D3DDEVCAPS_TEXTUREVIDEOMEMORY0x000200设备可以从设备内存中检索纹理。
D3DDEVCAPS_DRAWPRIMTLVERTEX0x000400设备可以绘制几何基元的顶点数组
D3DDEVCAPS_CANRENDERAFTERFLIP0x000800设备可以在翻页后将呈现命令排队。此功能意味着设备速度相对较快
D3DDEVCAPS_TEXTURENONLOCALVIDMEM0x001000设备可以从非本地视频内存中检索纹理。
D3DDEVCAPS_DRAWPRIMITIVES20x002000设备至少可以支持符合 DirectX 5 的驱动程序。
D3DDEVCAPS_SEPARATETEXTUREMEMORIES0x004000设备正在从单独的内存池进行纹理处理。
D3DDEVCAPS_DRAWPRIMITIVES2EX0x008000设备至少可以支持符合 DirectX 7 的驱动程序。
D3DDEVCAPS_HWTRANSFORMANDLIGHT0x010000设备可以支持硬件中的转换和照明。
D3DDEVCAPS_CANBLTSYSTONONLOCAL0x020000设备支持从系统内存纹理到非局部视频内存纹理的 blit。
D3DDEVCAPS_HWRASTERIZATION0x080000设备具有用于场景光栅化的硬件加速。
D3DDEVCAPS_PUREDEVICE0x100000设备可以在硬件中支持光栅化、转换、照明和着色。
D3DDEVCAPS_QUINTICRTPATCHES0x200000设备支持五次贝塞尔曲线和B样条曲线。
D3DDEVCAPS_RTPATCHES0x400000设备支持矩形和三角补丁。
D3DDEVCAPS_RTPATCHHANDLEZERO0x800000指示硬件不需要缓存也能将像绘制缓存的修补程序一样高效。
D3DDEVCAPS_NPATCHES0x01000000设备支持N个修补程序。

英文名称常量作用解释
D3DPMISCCAPS——其他驱动程序基元功能标志。
D3DPMISCCAPS_MASKZ0x00000002L设备可以启用和禁用对像素操作的深度缓冲区的修改。
D3DPMISCCAPS_CULLNONE0x00000010L驱动程序不执行三角形剔除。 这对应于 D3DCULL 枚举类型的 D3DCULL_NONE 成员。
D3DPMISCCAPS_CULLCW0x00000020L驱动程序支持顺时针三角形剔除D3DRS_CULLMODE状态。 (这仅适用于三角形基元。) 此标志对应于 D3DCULL 枚举类型的D3DCULL_CW成员。
D3DPMISCCAPS_CULLCCW0x00000040L驱动程序支持通过D3DRS_CULLMODE状态逆时针剔除。 (这仅适用于三角形基元。) 此标志对应于 D3DCULL 枚举类型的 D3DCULL_CCW 成员。
D3DPMISCCAPS_COLORWRITEENABLE0x00000100L设备支持通过D3DRS_COLORWRITEENABLE状态对呈现目标颜色缓冲区进行每通道写入。
D3DPMISCCAPS_CLIPPLANESCALEDPOINTS0x00000200L设备将大于 1.0 的缩放点正确剪辑到用户定义的剪裁平面。
D3DPMISCCAPS_CLIPTLVERTS0x00000200L设备剪辑转换后的顶点基元。要求顶点缓冲区位于系统内存中。
D3DPMISCCAPS_TSSARGTEMP0x00000400L设备支持用于临时寄存器 的 D3DTA 。
D3DPMISCCAPS_BLENDOP0x00000800L设备支持除D3DBLENDOP_ADD以外的 alpha 混合操作。
D3DPMISCCAPS_NULLREFERENCE0x00000100L不呈现的引用设备。
D3DPMISCCAPS_INDEPENDENTWRITEMASKS0x00004000L设备支持多个元素纹理或多个呈现目标的独立写入掩码。
D3DPMISCCAPS_PERSTAGECONSTANT0x00008000L设备支持每个阶段的常量。 请参阅 D3DTEXTURESTAGESTATETYPE 中的D3DTSS_CONSTANT。
D3DPMISCCAPS_POSTBLENDSRGBCONVERT0x00200000L设备支持在混合后转换为 sRGB。仅在 Direct3D 9Ex 中可用。
D3DPMISCCAPS_FOGANDSPECULARALPHA0x00010000L设备支持单独的雾和反射 alpha。 许多设备使用反射 alpha 通道来存储雾因子。
D3DPMISCCAPS_SEPARATEALPHABLEND0x00020000L设备支持 alpha 通道的单独混合设置。
D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS0x00040000L设备支持多个呈现目标的不同位深度。
D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING0x00080000L设备支持多个呈现目标的后像素着色器操作。
D3DPMISCCAPS_FOGVERTEXCLAMPED0x00100000L设备固定每个顶点的雾混合因子。
英文名称常量作用解释
D3DPMISCCAPS——三维功能类.光栅:有关光栅绘制功能的信息。
D3DPRASTERCAPS_DITHER0x0000001设备可以抖改以提高颜色分辨率。
D3DPRASTERCAPS_ZTEST0x0000010设备可以执行 z 测试操作。这会有效地呈现基元和z像素。
D3DPRASTERCAPS_FOGVERTEX0x0000080设备在照明操作期间计算雾值,并在光栅化期间内插雾值。
D3DPRASTERCAPS_FOGTABLE0x0000100设备通过引用查找表来计算雾值,该表包含已根据给定像素深度编制索引的迷雾值。
D3DPRASTERCAPS_MIPMAPLODBIAS0x0002000设备支持详细程度偏差调整。能够使 mipmap 看起来比平常更清晰。
D3DPRASTERCAPS_ZBUFFERLESSHSR0x0008000设备可以执行Z无缓冲区(HSR) 隐藏表面,依赖于硬件无需程序对多边形进行排序和分配深度缓冲区。会为纹理留下更多的视频内存,并且程序是透明的。
D3DPRASTERCAPS_FOGRANGE0x0010000设备支持基于范围的雾。对象与查看器的距离计算雾效果,而不是对象的深度(场景z坐标)。
D3DPRASTERCAPS_ANISOTROPY0x0020000设备支持各向异性筛选。
D3DPRASTERCAPS_WBUFFER0x0040000设备支持使用 w 进行深度缓冲。
D3DPRASTERCAPS_WFOG0x0100000指定透视投影矩阵时,使用基于 W 的雾,但仿射投影仍使用基于 z 的雾。将[3][4]元素中包含非零值的投影矩阵视为透视投影矩阵。
D3DPRASTERCAPS_ZFOG0x0200000设备支持基于 z 的雾。
D3DPRASTERCAPS_COLORPERSPECTIVE0x0400000设备正确迭代颜色透视。
D3DPRASTERCAPS_SCISSORTEST0x1000000设备支持剪辑测试。
D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS0x2000000说明。
D3DPRASTERCAPS_DEPTHBIAS0x4000000设备支持旧式深度偏差。
D3DPRASTERCAPS_MULTISAMPLE_TOGGLE0x8000000设备支持使用切换打开和关闭多重采样。

英文名称常量作用解释
D3DPCMPCAPS——三维功能类.Z 缓冲区比较功能。
D3DPCMPCAPS_NEVER0x0000001始终未通过 z 测试。
D3DPCMPCAPS_LESS0x0000002如果新的 z 小于当前 z,则通过 z-test。
D3DPCMPCAPS_EQUAL0x0000004如果新 z 等于当前 z,则通过 z-test。
D3DPCMPCAPS_LESSEQUAL0x0000008如果新的 z 小于或等于当前 z,则通过 z-test。
D3DPCMPCAPS_GREATER0x0000010如果新的 z 大于当前 z,则通过 z-test。
D3DPCMPCAPS_NOTEQUAL0x0000020如果新的 z 不等于当前 z,则通过 z-test。
D3DPCMPCAPS_GREATEREQUAL0x0000040如果新的 z 大于或等于当前 z,则通过 z-test。
D3DPCMPCAPS_ALWAYS0x0000080始终通过 z 测试。

英文名称常量作用解释
D3DPBLENDCAPS——三维功能类.混合功能。
D3DPBLENDCAPS_ZERO0x0000001混合因子 (0、0、0、0) 。
D3DPBLENDCAPS_ONE0x0000002混合因子 (为 1、1、1、1) 。
D3DPBLENDCAPS_SRCCOLOR0x0000004混合因子为 (Rs、Gs、Bs、As) 。
D3DPBLENDCAPS_INVSRCCOLOR0x0000008混合因子 (为 1 - Rs、1 - Gs、1 - Bs、1 - as) 。
D3DPBLENDCAPS_SRCALPHA0x0000010混合因子 (As、As、As、As) 。
D3DPBLENDCAPS_INVSRCALPHA0x0000020混合因子 (1 - As、1 - As、1 - As、1 - As、1 - As) 。
D3DPBLENDCAPS_DESTALPHA0x0000040混合因子为 (Ad、Ad、Ad、Ad) 。
D3DPBLENDCAPS_INVDESTALPHA0x0000080混合因子为 (1 - Ad、1 - Ad、1 - Ad、1 - Ad) 。
D3DPBLENDCAPS_DESTCOLOR0x0000100混合因子 (Rd、Gd、Bd、Ad) 。
D3DPBLENDCAPS_INVDESTCOLOR0x0000200混合因子 (为 1 - Rs、1 - Gs、1 - Bs、1 - as) 。
D3DPBLENDCAPS_SRCALPHASAT0x0000400混合因子为 (f、f、f、1) ;f = min (As,1 - Ad) 。
D3DPBLENDCAPS_BOTHSRCALPHA0x0000800驱动程序支持源混合模式。已过时。
D3DPBLENDCAPS_BOTHINVSRCALPHA0x0001000源混合因子为 (1 - As、1 - As、1 - As、1 - As) 和目标混合因子 (As、As、As) ;将重写目标混合选择。
D3DPBLENDCAPS_BLENDFACTOR0x0002000驱动程序同时支持常量颜色混合因子和反常量颜色混合因子。
D3DPBLENDCAPS_SRCCOLOR20x0004000混合因子 (PSOutColor[1]r、PSOutColor[1]g、PSOutColor[1]b) ,未使用。
D3DPBLENDCAPS_INVSRCCOLOR20x0008000混合因子 (1 - PSOutColor[1]r,1 - PSOutColor[1]g,1 - PSOutColor[1]b,not used) ) 。仅在 Direct3D 9Ex 中可用。

英文名称常量作用解释
D3DPSHADECAPS——三维功能类.着色操作功能标志。
D3DPSHADECAPS_COLORGOURAUDRGB0x0000008设备可以支持彩色 Gouraud 着色,每个顶点的颜色分量 (红色、绿色和蓝色) 内插在三角形面
D3DPSHADECAPS_SPECULARGOURAUDRGB0x0000200设备支持高光点的 Gouraud 着色。
D3DPSHADECAPS_ALPHAGOURAUDBLEND0x0004000设备可以支持 Gouraud 混合透明度的 alpha 分量。内插到人脸
D3DPSHADECAPS_FOGGOURAUD0x0080000设备可以在 Gouraud 着色模式下支持雾。

英文名称常量作用解释
D3DPTEXTURECAPS——三维功能类.其他纹理映射功能。
D3DPTEXTURECAPS_PERSPECTIVE0x0000001支持透视更正纹理。
D3DPTEXTURECAPS_POW20x0000002所有纹理的宽度和高度都必须指定为 2 的幂。不适用于立方体纹理或体积纹理。
D3DPTEXTURECAPS_ALPHA0x0000004支持以纹理像素表示的 Alpha。
D3DPTEXTURECAPS_SQUAREONLY0x0000020所有纹理都必须是正方形的。
D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE0x0000040纹理索引在内插之前不会按纹理大小进行缩放。
D3DPTEXTURECAPS_ALPHAPALETTE0x0000080设备可以从纹理调色板绘制 alpha。
D3DPTEXTURECAPS_NONPOW2CONDITIONAL0x0000100有条件地支持使用维度不是2的2D纹理。和POW2都未设置则无条件支持不是2的2D纹理。
D3DPTEXTURECAPS_PROJECTED0x0000400纹理转换标志。应用后设备会将转换后的纹理坐标除以最后一个纹理坐标,按像素进行投影除法。
D3DPTEXTURECAPS_CUBEMAP0x0000800支持立方体纹理。
D3DPTEXTURECAPS_VOLUMEMAP0x0002000设备支持卷纹理。
D3DPTEXTURECAPS_MIPMAP0x0004000设备支持错误覆盖的纹理。
D3DPTEXTURECAPS_MIPVOLUMEMAP0x0008000设备支持未覆盖的卷纹理。
D3DPTEXTURECAPS_MIPCUBEMAP0x0010000设备支持多维数据集立方体纹理。
D3DPTEXTURECAPS_CUBEMAP_POW20x0020000设备要求多维数据集纹理贴图的维度指定为 2 的幂。
D3DPTEXTURECAPS_VOLUMEMAP_POW20x0040000设备要求体积纹理贴图的维度指定为 2 的幂。
D3DPTEXTURECAPS_NOPROJECTEDBUMPENV0x0200000设备不支持可编程和固定函数着色器中的投影凹凸环境查找操作。

英文名称常量作用解释
D3DPTFILTERCAPS——三维功能类.纹理筛选常量。按阶段筛选功能反映了执行多纹理混合时纹理阶段支持的筛选模式。
D3DPTFILTERCAPS_MINFPOINT0x0000100设备支持按阶段点样本筛选,以缩小纹理。
D3DPTFILTERCAPS_MINFLINEAR0x0000200设备支持用于缩小纹理的每阶段线性筛选。
D3DPTFILTERCAPS_MINFANISOTROPIC0x0000400设备支持用于缩小纹理的每阶段各向异性筛选。
D3DPTFILTERCAPS_MINFPYRAMIDALQUAD0x0000800设备支持按阶段的棱锥样本筛选,以缩小纹理。
D3DPTFILTERCAPS_MINFGAUSSIANQUAD0x0001000设备支持用于缩小纹理的每阶段高斯四边形筛选。
D3DPTFILTERCAPS_MIPFPOINT0x0010000设备支持 mipmap 的每阶段点样本筛选。
D3DPTFILTERCAPS_MIPFLINEAR0x0020000设备支持 mipmap 的每阶段双线性内插筛选。
D3DPTFILTERCAPS_CONVOLUTIONMONO0x0040000设备支持单色卷积筛选。仅在 Direct3D 9Ex 中可用。
D3DPTFILTERCAPS_MAGFPOINT0x1000000设备支持用于放大纹理的每阶段点样本筛选。
D3DPTFILTERCAPS_MAGFLINEAR0x2000000设备支持用于放大 mipmap 的每阶段双线性内插筛选。
D3DPTFILTERCAPS_MAGFANISOTROPIC0x4000000设备支持用于放大纹理的每阶段各向异性筛选。
D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD0x8000000设备支持用于放大纹理的每阶段棱锥样本筛选。
D3DPTFILTERCAPS_MAGFGAUSSIANQUAD0x10000000设备支持用于放大纹理的每阶段高斯象限筛选。

英文名称常量作用解释
D3DPTADDRESSCAPS——三维功能类.纹理对象的纹理寻址功能。
D3DPTADDRESSCAPS_WRAP0x0000001设备可以将纹理包装到地址。
D3DPTADDRESSCAPS_MIRROR0x0000002设备可以将纹理镜像地址。
D3DPTADDRESSCAPS_CLAMP0x0000004设备可以将纹理固定到地址。
D3DPTADDRESSCAPS_BORDER0x0000008设备支持将[0.0,1.0]范围之外的坐标设置为指定的边框颜色。
D3DPTADDRESSCAPS_INDEPENDENTUV0x0000010设备可以分离纹理的u和 v 坐标的纹理寻址模式。
D3DPTADDRESSCAPS_MIRRORONCE0x0000020设备可以将纹理坐标的绝对值 (镜像约 0) ,然后固定到最大值。

英文名称常量作用解释
D3DLINECAPS——三维功能类.定义线条绘制基元的功能。
D3DLINECAPS_TEXTURE0x0000001支持纹理映射。
D3DLINECAPS_ZTEST0x0000002支持 z 缓冲区比较。
D3DLINECAPS_BLEND0x0000004支持源混合。
D3DLINECAPS_ALPHACMP0x0000008支持 alpha 测试比较。
D3DLINECAPS_FOG0x0000010支持迷雾。
D3DLINECAPS_ANTIALIAS0x0000020支持抗锯齿线。

英文名称常量作用解释
D3DSTENCILCAPS——三维功能类.驱动程序模具功能标志。模具缓冲区条目是介于 0 到 2的n次方 - 1 的整数值,n 是模具缓冲区的位深度。
D3DSTENCILCAPS_KEEP0x0000001不要更新模具缓冲区中的条目。这是默认值。
D3DSTENCILCAPS_ZERO0x0000002将模具缓冲区条目设置为 0。
D3DSTENCILCAPS_REPLACE0x0000004将模具缓冲区条目替换为引用值。
D3DSTENCILCAPS_INCRSAT0x0000008递增模具缓冲区条目,固定到最大值。
D3DSTENCILCAPS_DECRSAT0x0000010递减模具缓冲区条目,固定为零。
D3DSTENCILCAPS_INVERT0x0000020反转模具缓冲区条目中的位。
D3DSTENCILCAPS_INCR0x0000040递增模具缓冲区条目,如果新值超过最大值,则换行为零。
D3DSTENCILCAPS_DECR0x0000080递减模具缓冲区条目,如果新值小于零,则包装到最大值。
D3DSTENCILCAPS_TWOSIDED0x0000100设备支持双面模具。

英文名称常量作用解释
D3DTEXOPCAPS——三维功能类.描述此设备支持的纹理操作的标志的组合。
D3DTEXOPCAPS_DISABLE0x0000001禁用纹理混合操作。
D3DTEXOPCAPS_SELECTARG10x0000002支持 选择参数1 纹理混合操作。
D3DTEXOPCAPS_SELECTARG20x0000004支持 选择参数2 纹理混合操作。
D3DTEXOPCAPS_MODULATE0x0000008支持 控制 纹理混合操作。
D3DTEXOPCAPS_MODULATE2X0x0000010支持 控制2X 纹理混合操作。
D3DTEXOPCAPS_MODULATE4X0x0000020支持 控制4X 纹理混合操作。
D3DTEXOPCAPS_ADD0x0000040支持 增加 纹理混合操作。
D3DTEXOPCAPS_ADDSIGNED0x0000080支持添加符号 纹理混合操作。
D3DTEXOPCAPS_ADDSIGNED2X0x0000100支持添加符号2 纹理混合操作。
D3DTEXOPCAPS_SUBTRACT0x0000200支持减法 纹理混合操作。
D3DTEXOPCAPS_ADDSMOOTH0x0000400支持添加平滑 纹理混合操作。
D3DTEXOPCAPS_BLENDDIFFUSEALPHA0x0000800支持混合扩散相位 纹理混合操作。
D3DTEXOPCAPS_BLENDTEXTUREALPHA0x0001000支持混合纹理相位 纹理混合操作。
D3DTEXOPCAPS_BLENDFACTORALPHA0x0002000支持混合因子相位 纹理混合操作。
D3DTEXOPCAPS_BLENDTEXTUREALPHAPM0x0004000支持混合纹理相位 纹理混合操作。
D3DTEXOPCAPS_BLENDCURRENTALPHA0x0008000支持混合当前相位 纹理混合操作。
D3DTEXOPCAPS_PREMODULATE0x0010000支持细节 纹理混合操作。
D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR0x0020000支持调制相位颜色 纹理混合操作。
D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA0x0040000支持调制色度
D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR0x0080000支持调制反相颜色
D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA0x0100000支持调制反相色度
D3DTEXOPCAPS_BUMPENVMAP0x0200000支持凹凸环境贴图
D3DTEXOPCAPS_BUMPENVMAPLUMINANCE0x0400000支持凹凸贴图亮度
D3DTEXOPCAPS_DOTPRODUCT30x0800000支持网络产品
D3DTEXOPCAPS_MULTIPLYADD0x1000000支持多维数据集纹理
D3DTEXOPCAPS_LERP0x2000000说明。

英文名称常量作用解释
D3DFVFCAPS——三维功能类.灵活的顶点格式功能。
D3DFVFCAPS_TEXCOORDCOUNTMASK0x000ffff屏蔽 FVFCaps 的低字。使设备可以同时用于多个纹理混合的纹理坐标集进行混合。
D3DFVFCAPS_DONOTSTRIPELEMENTS0x0080000不要去除顶点元素。如果不设置则从顶点格式中去除无关元素可提供更好的性能。
D3DFVFCAPS_PSIZE0x0100000点大小由呈现状态或顶点数据决定。如果应用程序提供点大小,则顶点数据将替代呈现状态数据。

英文名称常量作用解释
D3DVTXPCAPS——三维功能类.顶点处理功能标志组合。
D3DVTXPCAPS_TEXGEN0x0000001设备可以执行 texgen。
D3DVTXPCAPS_MATERIALSOURCE70x0000002设置设备支持颜色材料状态的上限
D3DVTXPCAPS_DIRECTIONALLIGHTS0x0000008设备可以执行定向光。
D3DVTXPCAPS_POSITIONALLIGHTS0x0000010设备可以执行位置光 (包括点和顶点) 。
D3DVTXPCAPS_LOCALVIEWER0x0000020设备可以执行本地查看器。
D3DVTXPCAPS_TWEENING0x0000040设备可以执行顶点补间。
D3DVTXPCAPS_TEXGEN_SPHEREMAP0x0000100设备支持TCI球形映射。
D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER0x0000200设备不支持在非本地查看器模式下生成纹理。

英文名称常量作用解释
D3DDEVCAPS2——三维功能类.自适应分割的设备驱动程序功能标志。
D3DDEVCAPS2_STREAMOFFSET0x0000001设备支持流偏移量。
D3DDEVCAPS2_DMAPNPATCH0x0000002设备支持 N 补丁的位移映射。
D3DDEVCAPS2_ADAPTIVETESSRTPATCH0x0000004设备支持 RT 补丁的自适应分割
D3DDEVCAPS2_ADAPTIVETESSNPATCH0x0000008设备支持 N 补丁的自适应分割。
D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES0x0000010设备支持使用纹理作为源的矩形拉伸。
D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH0x0000020设备支持 N 补丁的预采样位移映射。
D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET0x0000040多个顶点元素可以在流中共享相同的偏移量。

英文名称常量作用解释
D3DDTCAPS——三维功能类.描述设备支持的顶点数据类型的常量。
D3DDTCAPS_UBYTE40x00000014D 无符号字节。
D3DDTCAPS_UBYTE4N0x0000002规范化、4D 无符号字节。 四个字节中的每一个都通过除以 255.0 进行规范化。
D3DDTCAPS_SHORT2N0x0000004规范化,2D 签名短,扩展到 (第一个字节/32767.0,第二个字节/32767.0,0,1) 。
D3DDTCAPS_SHORT4N0x0000008规范化,4D 签名短,扩展到 (第一个字节/32767.0,第二个字节/32767.0,第三个字节/32767.0,第四个字节/32767.0) 。
D3DDTCAPS_USHORT2N0x0000010规范化,2D 无符号短,扩展到 (第一个字节/65535.0,第二个字节/65535.0,0,1) 。
D3DDTCAPS_USHORT4N0x0000020规范化的 4D 无符号短,扩展到 (第一个字节/65535.0、第二个字节/65535.0、第三个字节/65535.0、第四个字节/65535.0) 。
D3DDTCAPS_UDEC30x00000403D 无符号 10 10 10 格式扩展为 (值、值、值、1) 。
D3DDTCAPS_DEC3N0x00000803D 签名 10 10 10 格式规范化并扩展为 (v[0]/511.0、v[1]/511.0、v[2]/511.0、1) 。
D3DDTCAPS_FLOAT16_20x00001002D 16 位浮点数。
D3DDTCAPS_FLOAT16_40x00002004D 16 位浮点数。

中文名字英文名称长度作用解释
显卡标识类D3DADAPTER_IDENTIFIER91100包含标识适配器的信息。应用于三维图形类.显卡描述
显卡标识类——成员表
驱动Driver[512]文本驱动程序供应商相关展示内容。
说明Description[512]文本驱动程序相关说明内容。
名称DeviceName[32]文本GDI 的设备名称。
版本DriverVersionLowPart整数标识 Direct3D 驱动程序的版本。
版号DriverVersionHighPart整数标识 Direct3D 驱动程序的版本。
制造商VendorId整数可用于帮助识别特定芯片集。查询此成员以标识制造商。
芯片DeviceId整数可用于帮助识别特定芯片集。查询此成员以标识芯片集的类型。
子集SubSysId整数可用于帮助识别特定芯片集。查询此成员以标识子系统,通常是特定板。
修订Revision整数可用于帮助识别特定芯片集。查询此成员以识别芯片集的修订级别。
标识DeviceIdentifier[16]文本此 GUID 是驱动程序和芯片集对的唯一标识符。
验证WHQLLevel整数此驱动程序和设备对的验证级别。0未认证;1无认证日期;或者是日期类型(日月各8位,年份高16位)

中文名字英文名称长度作用解释
显示模式类D3DDISPLAYMODE16描述显示模式。应用于三维图形类.枚举模式
显示模式类——成员表
宽度Width整数屏幕宽度(以像素为单位)。
高度Height整数屏幕高度(以像素为单位)。
刷新率RefreshRate整数刷新速率。 值 0 表示适配器默认值。
格式Format整数D3D格式枚举类型,描述显示模式的图面格式。

中文名字英文名称长度作用解释
显示参数类D3DPRESENT_PARAMETERS56描述演示文稿参数。应用于三维图形类.创建设备
显示参数类——成员表
宽度BackBufferWidth整数新交换链的后部缓冲区的宽度(像素)。
高度BackBufferHeight整数新交换链的后台缓冲区的高度(像素)。
格式BackBufferFormat整数后台缓冲区格式。详见D3DFORMAT。
数量BackBufferCount整数后台缓冲区数量,若失败可用相同参数调用两次
多重采样MultiSampleType整数未设置D3DSWAPEFFECT_DISCARD请使用0;
采样质量MultiSampleQuality整数质量级别。 有效范围介于 0 到 1 之间
交换效果SwapEffect整数有关缓冲区交换行为详见D3DSWAPEFFECT
设备窗口hDeviceWindow整数设备窗口确定屏幕上后台缓冲区的位置和大小。演播窗口
窗口模式Windowed整数如果应用程序以窗口方式运行,则为真;如果应用程序全屏运行,则为假。
深度模具EnableAutoDepthStencil整数此值为真程序则具备深度缓冲区。需要指定有效的深度模具格式
深度格式AutoDepthStencilFormat整数设备将创建的自动深度模具图面的格式。参见D3DFORMAT
标志Flags整数D3DPRESENTFLAG 常量之一。
刷新率FullScreen_RefreshRateInHz整数显示适配器刷新屏幕的速率。对于窗口模式,刷新率必须为0。
演播间隔PresentationInterval整数交换链的后台缓冲区可以呈现给前缓冲区的最大速率。详见:D3DPRESENT

长度英文名称中文名字作用解释
300D3DCAPS9三维功能类表示通过 Direct3D 对象公开的硬件的功能。应用于三维图形类
三维功能类——成员表
整数DeviceType种类标识用于处理顶点的资源类型。详见:D3DDEVTYPE
整数AdapterOrdinal序号创建此 Direct3D 设备的适配器。 此序号仅对传递给创建此设备的接口的方法有效。
整数Caps功能特定于驱动程序的功能。$20000=返回当前扫描行;$800=支持覆盖 DDI(9Ex)
整数Caps2功能2特定于驱动程序的功能。详见:D3DCAPS2
整数Caps3功能3特定于驱动程序的功能。
整数PresentationIntervals间隔表示可用的演示交换间隔的值的位掩码。1=每秒刷新;2=每秒刷新;4=三次刷新;8=四次刷新;$80000000=即时刷新
整数CursorCaps光标指示可用于游标的硬件支持的位掩码。1=高分辨率模式下支持硬件全色光标;2=高和低分辨率模式下都支持硬件全色光标
整数DevCaps设备标识设备功能的标志。
整数PrimitiveMiscCaps基元其他驱动程序基元功能。请参阅 D3DPMISCCAPS。
整数RasterCaps光栅有关光栅绘制功能的信息。
整数ZCmpCaps纵深比较Z 缓冲区比较功能。详见:D3DPCMPCAPS
整数SrcBlendCaps源混合源混合功能。详见:D3DPBLENDCAPS
整数DestBlendCaps目标混合目标混合功能。详见:D3DPBLENDCAPS
整数AlphaCmpCaps透明比较Alpha 测试比较功能。详见:D3DPCMPCAPS
整数ShadeCaps着色着色操作功能。详见:D3DPSHADECAPS
整数TextureCaps纹理映射其他纹理映射功能。 详见:D3DPTEXTURECAPS
整数TextureFilterCaps纹理筛选纹理的纹理筛选功能标志的任意组合。详见:D3DPTFILTERCAPS
整数CubeTextureFilterCaps多维纹理多维数据集纹理的纹理筛选功能。详见:D3DPTFILTERCAPS
整数VolumeTextureFilterCaps体积纹理体积纹理的纹理筛选功能。详见:D3DPTFILTERCAPS
整数TextureAddressCaps纹理寻址纹理对象的纹理寻址功能。详见:D3DPTADDRESSCAPS
整数VolumeTextureAddressCaps卷纹寻址卷纹理的纹理寻址功能。详见:D3DPTADDRESSCAPS
整数LineCaps线条定义线条绘制基元的功能。详见:D3DLINECAPS
整数MaxTextureWidth最大宽度此设备的最大纹理宽度。
整数MaxTextureHeight最大高度此设备的最大纹理高度。
整数MaxVolumeExtent最大限度三个维度中的任何一个的最大值 (体积纹理的宽度、高度和深度) 。
整数MaxTextureRepeat最大范围此数字表示规范化纹理坐标后整数位的最大范围。
整数MaxTextureAspectRatio最大比例硬件支持的最大纹理纵横比,通常为 2 次幂。
整数MaxAnisotropy最大异向最大各向异性纹理阶段状态的最大有效值。
小数MaxVertexW最大深度设备支持的基于 W 的最大深度值。
小数GuardBandLeft防护带左防护带剪辑区域的屏幕空间坐标。 此矩形内、视区矩形外部的坐标会自动剪切。
小数GuardBandTop防护带顶防护带剪辑区域的屏幕空间坐标。 此矩形内、视区矩形外部的坐标会自动剪切。
小数GuardBandRight防护带右防护带剪辑区域的屏幕空间坐标。 此矩形内、视区矩形外部的坐标会自动剪切。
小数GuardBandBottom防护带底防护带剪辑区域的屏幕空间坐标。 此矩形内、视区矩形外部的坐标会自动剪切。
小数ExtentsAdjust范围调整将盘区矩形向外调整以适应抗锯齿内核的像素数。
整数StencilCaps模具操作指定支持的模具缓冲区操作的标志。参见:D3DSTENCILCAPS
整数FVFCaps顶点格式灵活的顶点格式功能。
整数TextureOpCaps纹理操作描述此设备支持的纹理操作的标志的组合。
整数MaxTextureBlendStages混合器数固定函数管道中支持的最大纹理混合阶段数。
整数MaxSimultaneousTextures纹理数量可同时绑定到固定函数管道采样器阶段的最大纹理数。
整数VertexProcessingCaps中文顶点处理功能。参见:D3DVTXPCAPS
整数MaxActiveLights最大光数可以同时处于活动状态的最大光数。
整数MaxUserClipPlanes最大面数支持的最大用户定义剪裁平面数。 此成员可以为 0。
整数MaxVertexBlendMatrices最大矩阵此设备在执行多矩阵顶点混合时可以应用的最大矩阵数。
整数MaxVertexBlendMatrixIndex最大索引该值指定可以使用每个顶点索引编制索引到的最大矩阵索引。
小数MaxPointSize最大尺寸点基元的最大大小。 如果设置为 1.0f,则设备不支持点大小控制。 范围大于或等于 1.0f。
整数MaxPrimitiveCount最大其元每个 DrawPrimitive 调用的最大基元数。
整数MaxVertexIndex最大顶点硬件顶点处理支持的索引的最大大小。此值大于 0x0000FFFF
整数MaxStreams最大并发SetStreamSource 的最大并发数据流数。 有效范围是 1 到 16。
整数MaxStreamStride最大步长SetStreamSource 的最大步长。
整数VertexShaderVersion顶点版本表示顶点着色器main和子版本的两个数字。
整数MaxVertexShaderConst着色器数为常量保留的 顶点着色器顶点着色器寄存器 的数目。
整数PixelShaderVersion像素版本表示像素着色器main和子版本的两个数字。
小数PixelShader1xMaxValue最大分量像素着色器算术分量最大值。
整数DevCaps2适应设备自适应分割的设备驱动程序功能。 有关详细信息,请参阅 D3DDEVCAPS2
小数MaxNpatchTessellationLevel最大细分最大Npatch细分级别
整数Reserved5预留预留5
整数MasterAdapterOrdinal主显卡号此数字指示哪个设备是此从属设备的主机。
整数AdapterOrdinalInGroup显卡组号此数字指示 API 引用头的顺序。主适配器的值始终为0。这些值不对应于适配器序号。它们仅适用于组中的头部。
整数NumberOfAdaptersInGroup显卡组数默认1,多个主显卡则大于1。对于多显卡的从属适配器,该值将为 0。
整数DeclTypes顶点声明顶点声明中包含的一个或多个数据类型的组合。 请参阅 D3DDTCAPS。
整数NumSimultaneousRTs显示数目同时呈现目标的数目。 此数字至少为1。
整数StretchRectFilterCaps拉伸矩形描述 拉伸矩形 支持的操作的常量的组合。0x100点缩小;0x200线性缩小;0x1000000点放大;0x2000000线性放大
整数D3DVSHADERCAPS2_0.Caps指令谓词如果此值为非零值,则支持指令谓词。 setp_comp dst、src0、src1
整数D3DVSHADERCAPS2_0.DynamicFlowControlDepth指令深度0 或 24,表示动态流控制指令嵌套的深度。 请参阅 D3DVS20CAPS。
整数D3DVSHADERCAPS2_0.NumTemps寄存器数支持的临时寄存器数。 请参阅 D3DVS20CAPS。
整数D3DVSHADERCAPS2_0.StaticFlowControlDepth循环深度循环的嵌套深度 - vs/rep - vs 和 call - vs/callnz bool - vs instructions。 请参阅 D3DVS20CAPS。
整数D3DPSHADERCAPS2_0.Caps支持指令如果此值为非零值,则支持指令谓词。 setp_comp dst、src0、src1
整数D3DPSHADERCAPS2_0.DynamicFlowControlDepth指令嵌套0 或 24,表示动态流控制指令嵌套的深度。 请参阅 D3DPSHADERCAPS2_0。
整数D3DPSHADERCAPS2_0.NumTemps临时寄存支持的临时寄存器数。 请参阅 D3DPSHADERCAPS2_0。
整数D3DPSHADERCAPS2_0.StaticFlowControlDepth循环嵌套循环的嵌套深度 - vs/rep - vs 和 call - vs/callnz bool - vs instructions。 请参阅 D3DPSHADERCAPS2_0。
整数D3DPSHADERCAPS2_0.NumInstructionSlots指令槽数支持的指令槽数。 请参阅 D3DPSHADERCAPS2_0。
整数VertexTextureFilterCaps顶点筛选设备支持顶点着色器纹理筛选器功能。 请参阅 D3DPTFILTERCAPS。
整数MaxVShaderInstructionsExecuted顶点指令使用流控制时可以运行的最大顶点着色器指令数。
整数MaxPShaderInstructionsExecuted像素指令使用流控制时可以运行的最大像素着色器指令数。
整数MaxVertexShader30InstructionSlots顶点槽数支持的最大顶点着色器指令槽数。可对此上限设置的最大值为 32768。
整数MaxPixelShader30InstructionSlots像素槽数支持的最大像素着色器指令槽数。可对此上限设置的最大值为 32768。

英文名字中文名称作用解释
IDirect3D9Ex三维图形类应用程序使用三维图形接口的方法创建三维图形对象并设置环境。包括枚举和检索设备功能的方法。
三维图形类——方法表,在原对象上增加了五个方法,共用同一个调用表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
RegisterSoftwareDevice软件光栅(@函数)注册可插入软件设备。提供软件光栅化,使应用程序能够访问各种软件光栅器。
GetAdapterCount显卡数返回系统上的适配器数。显卡序号0到数量减一
GetAdapterIdentifier显卡描述(序号,标志,显卡标识类)描述指定物理显示适配器信息:显卡标识类。标志:0=默认;2=下载驱动证书;
GetAdapterModeCount模式数(序号,图面格式)返回此适配器上可用的显示模式数。图面格式
EnumAdapterModes枚举模式(序号,设备类型,索引,显示模式类)枚举指定的适配器是否支持请求的格式和显示模式。索引是模式数的序号;
GetAdapterDisplayMode显示模式(序号,显示模式类)检索适配器的当前显示模式信息。
CheckDeviceType设备类型(序号,设备类型,显示模式,缓冲格式,全屏)验证硬件加速设备类型是否可以在此适配器上使用。设备类型
CheckDeviceFormat设备格式(序号,设备类型,选项,资源类型,图面格式)确定表面格式是否可用作指定资源类型常数,纹理、深度模具缓冲区、呈现目标或三者的任何组合。选项:
CheckDeviceMultiSampleType多重采样(序号,设备类型,图面格式,小窗,采样率,@数量)确定此设备上是否提供多重采样技术。小窗为假=全屏采样;采样率:(0-16)
CheckDepthStencilMatch模具匹配(序号,设备类型,显示模式,呈现格式,模具格式)确定深度模具格式是否与特定显示模式下的呈现目标格式兼容。
CheckDeviceFormatConversion可转格式(序号,设备类型,源格式,目标格式)测试设备是否支持从一种显示格式转换为另一种显示格式。
GetDeviceCaps设备功能(序号,设备类型,功能)检索有关设备的特定于设备的信息。功能:三维功能类
GetAdapterMonitor监视器(序号)返回对象关联的监视器的句柄。
CreateDevice创建设备(序号,设备类型,焦点窗口,选项,参数,@接口)创建表示显示适配器的设备接口。参数:显示参数类
GetAdapterModeCountEx模式数量(序号,特征)返回可用显示模式的数目。特征=显示格式类
EnumAdapterModesEx列举模式(序号,特征,索引,模式)指定模式索引获取实际显示模式信息。特征=显示格式类,模式=显示模版类
GetAdapterDisplayModeEx显示设置(序号,特征,模式)检索适配器的当前显示模式和旋转设置。特征=显示格式类,模式=显示模版类
CreateDeviceEx新建设备(序号,设备类型,焦点窗口,选项,参数,模式,@接口)创建表示显示适配器的设备接口。参数:显示参数类;,模式=显示模版类
GetAdapterLUID取标识(序号,标识)此方法返回特定于适配器硬件的适配器的唯一标识符。显卡标识类
中文名字英文名称长度作用解释
显卡标识类LUID8它指定保证在本地计算机上唯一的标识符。
显卡标识类——成员表
低位LowPart整数标识符的低位数据。
高位HighPart整数标识符的高位数据。

中文名字英文名称长度作用解释
显示格式类D3DDISPLAYMODEFILTER24指定要筛选出的显示模式的类型。应用于三维图形类
显示格式类——成员表
大小Size整数此结构的大小。固定为24
格式Format整数D3DFORMAT格式枚举类型,描述显示模式的图面格式。
扫描ScanLineOrdering整数指示扫描线顺序是渐进式还是隔行扫描。1=逐行扫描;2=隔行扫描

中文名字英文名称长度作用解释
显示模版类D3DDISPLAYMODEEX24描述显示模式。应用于三维图形类
显示模版类——成员表
大小Size整数此结构的大小。固定为24
宽度Width整数屏幕宽度(以像素为单位)。
高度Height整数屏幕高度(以像素为单位)。
刷新率RefreshRate整数刷新速率。 值 0 表示适配器默认值。
格式Format整数D3D格式枚举类型,描述显示模式的图面格式。请参阅 D3DFORMAT
扫描ScanLineOrdering整数指示扫描线顺序是渐进式还是隔行扫描。1=逐行扫描;2=隔行扫描

英文名称常量作用解释
D3DDISPLAYROTATION——三维功能类.显示设置,指定如何旋转用于显示全屏应用程序的监视器。
D3DDISPLAYROTATION_IDENTITY1显示未旋转。
D3DDISPLAYROTATION_902显示器旋转 90 度。
D3DDISPLAYROTATION_1803显示器旋转 180 度。
D3DDISPLAYROTATION_2704显示器旋转 270 度。

英文名称常量作用解释
D3DUSAGE——三维图形类,标识资源的使用方式的用法选项。
D3DUSAGE_RENDERTARGET0x00000001资源将是呈现目标。只能与 D3DPOOL_DEFAULT 一起使用。
D3DUSAGE_DEPTHSTENCI0x00000002资源将是深度模具缓冲区。只能与 D3DPOOL_DEFAULT 一起使用。
D3DUSAGE_DYNAMIC0x00000200设置为指示顶点缓冲区需要使用动态内存。
D3DUSAGE_AUTOGENMIPMAP0x00000400资源将自动生成 mipmap。体积纹理和深度模具表面/纹理不支持,对系统内存中的资源无效。
D3DUSAGE_DMAP0x00004000资源将是位移映射。
D3DUSAGE_QUERY_LEGACYBUMPMAP0x00008000查询有关旧版凹凸图的资源。
D3DUSAGE_QUERY_SRGBREAD0x00010000说明。
D3DUSAGE_QUERY_FILTER0x00020000查询资源格式以查看它是否支持的纹理筛选器类型。
D3DUSAGE_QUERY_SRGBWRITE0x00040000查询资源以验证纹理在读取操作期间是否支持伽玛校正。
D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING0x00080000查询资源以验证是否支持后像素着色器混合支持。
D3DUSAGE_QUERY_VERTEXTEXTURE0x00100000查询资源以验证是否支持顶点着色器纹理采样。
D3DUSAGE_WRITEONLY0x00000008通知系统应用程序仅写入顶点缓冲区。
D3DUSAGE_SOFTWAREPROCESSING0x00000010如果使用此标志顶点处理在软件中完成。
D3DUSAGE_DONOTCLIP0x00000020设置为指示顶点缓冲区内容将永远不需要剪辑。
D3DUSAGE_POINTS0x00000040设置为指示顶点或索引缓冲区将用于绘制点子画面。
D3DUSAGE_RTPATCHES0x00000080设置为指示顶点缓冲区用于绘制高阶基元。
D3DUSAGE_NPATCHES0x00000100设置为指示顶点缓冲区用于绘制 N 个补丁。

英文名称常量作用解释
D3DTEXTUREFILTERTYPE——三维纹理类.筛选类型,定义纹理阶段的纹理筛选模式。
D3DTEXF_NONE0与 D3DSAMP_MIPFILTER 一起使用时,禁用误应用。
D3DTEXF_POINT1与 D3DSAMP_ MAGFILTER 或 D3DSAMP_MINFILTER 一起使用时,指定点筛选将分别用作纹理放大或缩小筛选器。
与 D3DSAMP_MIPFILTER 一起使用时,启用 mipmapping 并指定光栅器从最接近 mip 级别的纹素中选择颜色。
D3DTEXF_LINEAR2与 D3DSAMP_ MAGFILTER 或 D3DSAMP_MINFILTER 一起使用时,指定线性筛选将分别用作纹理放大或缩小筛选器。
与 D3DSAMP_MIPFILTER一起使用时,启用 mipming 和三线性筛选;它指定光栅器在两个最接近的 mip 级别之间内插。
D3DTEXF_ANISOTROPIC3与 D3DSAMP_ MAGFILTER 或 D3DSAMP_MINFILTER 一起使用时,分别指定用作纹理放大或缩小筛选器的各向异性纹理筛选
补偿由纹理多边形与屏幕平面之间的角度差异导致的失真。 与 D3DSAMP_MIPFILTER 一起使用未定义。
D3DTEXF_PYRAMIDALQUAD6用作纹理放大或缩小筛选器的 4 样本帐篷筛选器。 与 D3DSAMP_MIPFILTER 一起使用未定义。
D3DTEXF_GAUSSIANQUAD7用作纹理放大或缩小筛选器的 4 样本高斯筛选器。 与 D3DSAMP_MIPFILTER 一起使用未定义。
D3DTEXF_CONVOLUTIONMONO8单色纹理的卷积筛选器。仅在 Direct3D 9Ex 中可用。

英文名字中文名称作用解释
IDirect3DResource9三维纹理类应用程序使用对象接口的方法来查询和准备资源。
三维图形类——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetDevice取设备(@接口)检索与资源关联的设备。
SetPrivateData改数据(标识,数据,大小,标志)将数据与程序使用的资源相关联。标志:0=自动分配内存;1=数据为空接口指针(大小为4)
GetPrivateData取数据(标识,数据,大小)将与资源关联的专用数据复制到提供的缓冲区。
FreePrivateData释放数据(标识)释放与此资源关联的指定私有数据。
SetPriority改优先级(值)分配用于计划的资源的优先级。
GetPriority取优先级获取此资源的优先级。
PreLoad预加载预加载托管资源。
GetType取类型返回资源的类型

英文名字中文名称作用解释
IDirect3DBaseTexture9三维纹理类应用程序使用对象接口的方法操作纹理资源,包括立方体纹理和体积纹理。
三维图形类——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetDevice取设备(@接口)检索与资源关联的设备。
SetPrivateData改数据(标识,数据,大小,标志)将数据与程序使用的资源相关联。标志:0=自动分配内存;1=数据为空接口指针(大小为4)
GetPrivateData取数据(标识,数据,大小)将与资源关联的专用数据复制到提供的缓冲区。
FreePrivateData释放数据(标识)释放与此资源关联的指定私有数据。
SetPriority改优先级(值)分配用于计划的资源的优先级。
GetPriority取优先级获取此资源的优先级。
PreLoad预加载预加载托管资源。
GetType取类型返回资源的类型
SetLOD改详细(值)为托管纹理设置最详细的详细级别。
GetLOD取详细返回固定到托管纹理的最大详细程度集,非托管纹理不支持此方法。
GetLevelCount取级数返回多级纹理中的纹理级别数。
SetAutoGenFilterType改筛选(筛选)设置用于自动生成的 mipmap 子层的筛选器类型
GetAutoGenFilterType取筛选获取用于自动生成的 mipmap 子层的筛选器类型
GenerateMipSubLevels生成子级生成 mipmap 子级别。

英文名字中文名称作用解释
IDirect3DCubeTexture9/IDirect3DTexture9三维纹理类应用程序使用对象接口的方法操作多维数据集纹理资源。
三维图形类——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetDevice取设备(@接口)检索与资源关联的设备。
SetPrivateData改数据(标识,数据,大小,标志)将数据与程序使用的资源相关联。标志:0=自动分配内存;1=数据为空接口指针(大小为4)
GetPrivateData取数据(标识,数据,大小)将与资源关联的专用数据复制到提供的缓冲区。
FreePrivateData释放数据(标识)释放与此资源关联的指定私有数据。
SetPriority改优先级(值)分配用于计划的资源的优先级。
GetPriority取优先级获取此资源的优先级。
PreLoad预加载预加载托管资源。
GetType取类型返回资源的类型
SetLOD改详细(值)为托管纹理设置最详细的详细级别。
GetLOD取详细返回固定到托管纹理的最大详细程度集,非托管纹理不支持此方法。
GetLevelCount取级数返回多级纹理中的纹理级别数。
SetAutoGenFilterType改筛选(筛选)设置用于自动生成的 mipmap 子层的筛选器类型
GetAutoGenFilterType取筛选获取用于自动生成的 mipmap 子层的筛选器类型
GenerateMipSubLevels生成子级生成 mipmap 子级别。
GetLevelDesc级别信息(级别,信息)检索指定多维数据集纹理级别的一张人脸的说明。信息:图面描述类
GetCubeMapSurface取图面(方面,级别,@接口)检索立方体纹理映射图面。方面
LockRect锁定矩形(方面,级别,区域,矩形,标志)锁定立方体纹理资源上的矩形。区域;标志:
UnlockRect锁定矩形(方面,级别)解锁立方体纹理资源上的矩形。方面
AddDirtyRect添加区域(方面,矩形)将脏区域添加到多维数据集纹理资源。

英文名称常量作用解释
D3DPOOL——用于三维图面类.内存池,定义用于保存资源缓冲区的内存类。
D3DPOOL_DEFAULT0资源放置在内存池中,最适合为给定资源请求的一组用法。 这通常是视频内存,包括本地视频内存和 AGP 内存。
D3DPOOL_MANAGED1资源会根据需要自动复制到设备可访问的内存中。 托管资源由系统内存提供支持,设备丢失时无需重新创建。
D3DPOOL_SYSTEMMEM2资源放置在通常不能由 Direct3D 设备访问的内存中。 此内存分配消耗系统 RAM,但不会减少可分页 RAM。
D3DPOOL_SCRATCH3资源放置在系统 RAM 中,设备丢失时无需重新创建。不受设备大小或格式限制的约束。Direct3D设备无法访问这些资源,但是可以创建、锁定和复制这些资源。

英文名称常量作用解释
D3DCUBEMAP_FACES——用于三维纹理类.取图面,定义立方体地图的面。
D3DCUBEMAP_FACE_POSITIVE_X0立方体图的正 x 面。
D3DCUBEMAP_FACE_NEGATIVE_X1立方体图的负 x 面。
D3DCUBEMAP_FACE_POSITIVE_Y2立方体图的正 y 面。
D3DCUBEMAP_FACE_NEGATIVE_Y3立方体图的负 y 面。
D3DCUBEMAP_FACE_POSITIVE_Z4立方体图的正 z 面。
D3DCUBEMAP_FACE_NEGATIVE_Z5立方体图的负 z 面。

英文名称常量作用解释
D3DLOCK——用于三维纹理类.锁定矩形,描述要执行的锁类型的零个或多个锁定选项的组合。
D3DLOCK_READONLY$10应用程序不会写入缓冲区。 这样,以非本机格式存储的资源就可以在解锁时保存重新压缩步骤。
D3DLOCK_NOSYSLOCK$800视频内存锁的默认行为是保留系统范围的关键部分,保证在锁定期间不会发生显示模式更改。
D3DLOCK_DISCARD$2000应用程序放弃锁定区域中的所有内存。对于顶点缓冲区和索引缓冲区,将放弃整个缓冲区。
D3DLOCK_NO_DIRTY_UPDATE$8000默认情况下资源上的锁会将脏区域添加到该资源。此选项可防止对资源的脏状态进行任何更改。
D3DLOCK_NOOVERWRITE$1000指示自上一个不带此标志的锁以来在绘图调用中引用的内存在锁定期间不会被修改。
D3DLOCK_DONOTWAIT$4000如果驱动程序无法立即锁定表面,则允许应用程序返回 CPU 周期。

D3DFVF——灵活顶点格式常量或 FVF 代码用于描述交错在将由固定函数管道处理的单个数据流中的顶点内容。
英文名称常量作用解释
顶点数据标志
D3DFVF_XYZ 0x002顶点格式包括未转换顶点的位置。不能与 D3DFVF_XYZRHW 一起使用。float、float、float。
D3DFVF_XYZRHW 0x004顶点格式包括已转换顶点的位置。不能与D3DFVF_XYZ或D3DFVF_NORMAL标志一起使用。float、float、float、float、float。
D3DFVF_XYZB1 0x006顶点格式包含位置数据,以及用于多matrix顶点混合操作的相应权重值。最多可与三个加权值和四个混合矩阵混合。1到3个小数和一个整数
D3DFVF_XYZB2 0x008顶点格式包含位置数据,以及用于多matrix顶点混合操作的相应权重值。最多可与三个加权值和四个混合矩阵混合。1到3个小数和一个整数
D3DFVF_XYZB3 0x00a顶点格式包含位置数据,以及用于多matrix顶点混合操作的相应权重值。最多可与三个加权值和四个混合矩阵混合。1到3个小数和一个整数
D3DFVF_XYZB4 0x00c顶点格式包含位置数据,以及用于多matrix顶点混合操作的相应权重值。最多可与三个加权值和四个混合矩阵混合。1到3个小数和一个整数
D3DFVF_XYZB5 0x00e顶点格式包含位置数据,以及用于多matrix顶点混合操作的相应权重值。最多可与三个加权值和四个混合矩阵混合。1到3个小数和一个整数
D3DFVF_XYZW 0x4002顶点格式包含转换和剪切(x、y、z、w)数据。专为可编程顶点管道而设计,只能与它一起使用。float、float、float、float
D3DFVF_NORMAL 0x010顶点格式包括顶点法线向量。不能与 D3DFVF_XYZRHW 一起使用。float、float、float
D3DFVF_PSIZE 0x020以点大小指定的顶点格式。FLOAT未转换和点亮的顶点,大小以相机空间单位,否则以设备空间单位表示。
D3DFVF_DIFFUSE 0x040顶点格式包括漫射颜色分量。按 ARGB 顺序排列
D3DFVF_SPECULAR 0x080顶点格式包括反射颜色分量。按 ARGB 顺序排列
纹理标志
D3DFVF_TEX0 0x000此顶点的纹理坐标集的数目。
D3DFVF_TEX1 0x100此顶点的纹理坐标集的数目。
D3DFVF_TEX2 0x200此顶点的纹理坐标集的数目。
D3DFVF_TEX3 0x300此顶点的纹理坐标集的数目。
D3DFVF_TEX4 0x400此顶点的纹理坐标集的数目。
D3DFVF_TEX5 0x500此顶点的纹理坐标集的数目。
D3DFVF_TEX6 0x600此顶点的纹理坐标集的数目。
D3DFVF_TEX7 0x700此顶点的纹理坐标集的数目。
D3DFVF_TEX8 0x800此顶点的纹理坐标集的数目。
杂项标志
D3DFVF_TEXCOUNT_SHIFT 8移动整数值所依据的位数,该整数值标识顶点的纹理坐标数。如: dwFVF = 1 << 8
D3DFVF_LASTBETA_UBYTE4 0x1000顶点位置数据中的最后一个 beta 字段的类型为 UBYTE4。
D3DFVF_LASTBETA_D3DCOLOR 0x8000顶点位置数据中的最后一个 beta 字段的类型为 D3DCOLOR。
掩码标志
D3DFVF_TEXCOUNT_MASK 0xf00纹理标志位的掩码值。
D3DFVF_POSITION_MASK 0x400E位置位的掩码。
D3DFVF_RESERVED0 0x001保留位的掩码值。 请勿使用。
D3DFVF_RESERVED2 0x6000保留位的掩码值。 请勿使用。

中文名字英文名称长度作用解释
图面描述类D3DSURFACE_DESC32描述显示模式。应用于三维图形类
图面描述类——成员表
格式Format整数描述图面格式的枚举类型的成员。
资源Type整数D3DRESOURCETYPE枚举类型的成员,将此资源标识为图面。
使用Usage整数1=呈现目标;2=深度缓冲; 有关详细信息,请参阅 D3DUSAGE
内存池Pool整数D3DPOOL枚举类型的成员,指定为此图面分配的内存类。
采样MultiSampleType整数D3DMULTISAMPLE_TYPE枚举类型,指定图面支持的全场景多重采样级别。
质量MultiSampleQuality整数质量级别。有效范围介于 0 和 1 之间
宽度Width图面的宽度(以像素为单位)。
高度Height图面的高度(以像素为单位)。

中文名字英文名称长度作用解释
定位矩形类D3DLOCKED_RECT8描述锁定的矩形区域。
定位矩形类——成员表
行字Pitch整数图面一行中的字节数。
指针pBits整数指向锁定位的指针。如果提供了矩形,则从图面的开头适当偏移。

中文名字英文名称长度作用解释
索引缓冲类D3DINDEXBUFFER_DESC20描述索引缓冲区。
图面描述类——成员表
格式Format整数描述图面格式的枚举类型的成员。
资源Type整数D3DRESOURCETYPE枚举类型的成员,将此资源标识为图面。
使用Usage整数指定此资源的使用情况。有关详细信息,请参阅 D3DUSAGE
内存池Pool整数D3DPOOL枚举类型的成员,指定为此图面分配的内存类。
大小Size整数索引缓冲区的大小(以字节为单位)。

中文名字英文名称长度作用解释
顶点缓冲类D3DVERTEXBUFFER_DESC24描述顶点缓冲区。
顶点缓冲类——成员表
格式Format整数描述图面格式的枚举类型的成员。
资源Type整数D3DRESOURCETYPE枚举类型的成员,将此资源标识为图面。
使用Usage整数指定此资源的使用情况。有关详细信息,请参阅 D3DUSAGE
内存池Pool整数D3DPOOL枚举类型的成员,指定为此图面分配的内存类。
大小Size整数顶点缓冲区的大小(以字节为单位)。
顶格FVF整数描述此缓冲区中顶点的顶点格式的 D3DFVF 的组合。

英文名字中文名称作用解释
IDirect3DSurface9三维图面对象应用程序使用对象接口的方法查询和准备图面
三维图面对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetDevice取设备(@接口)检索与资源关联的设备。
SetPrivateData改数据(标识,数据,大小,标志)将数据与程序使用的资源相关联。标志:0=自动分配内存;1=数据为空接口指针(大小为4)
GetPrivateData取数据(标识,数据,大小)将与资源关联的专用数据复制到提供的缓冲区。
FreePrivateData释放数据(标识)释放与此资源关联的指定私有数据。
SetPriority改优先级(值)分配用于计划的资源的优先级。
GetPriority取优先级获取此资源的优先级。
PreLoad预加载预加载托管资源。
GetType取类型返回资源的类型
GetContainer取容器(标识,@接口)提供纹理对象的父多维数据集纹理或后台缓冲区父交换链的访问权限。
GetDesc取说明(说明)检索图面的说明
LockRect锁定矩形(区域,矩形,标志)锁定图面上的矩形。区域;标志:
UnlockRect解锁矩形解解锁图面上的矩形。
GetDC取设备(@设备)检索设备上下文。
ReleaseDC释放设备(设备)释放设备上下文句柄。

英文名字中文名称作用解释
IDirect3DIndexBuffer9三维缓冲对象应用程序使用对象接口的方法操作索引缓冲区资源。
三维图面对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetDevice取设备(@接口)检索与资源关联的设备。
SetPrivateData改数据(标识,数据,大小,标志)将数据与程序使用的资源相关联。标志:0=自动分配内存;1=数据为空接口指针(大小为4)
GetPrivateData取数据(标识,数据,大小)将与资源关联的专用数据复制到提供的缓冲区。
FreePrivateData释放数据(标识)释放与此资源关联的指定私有数据。
SetPriority改优先级(值)分配用于计划的资源的优先级。
GetPriority取优先级获取此资源的优先级。
PreLoad预加载预加载托管资源。
GetType取类型返回资源的类型
Lock锁定(偏移,大小,@内存,标志)锁定索引数据范围并获取指向索引缓冲区内存的指针。标志:
Unlock解锁解锁索引数据。
GetDesc取说明(说明)检索索引缓冲区资源的说明

英文名字中文名称作用解释
IDirect3DVertexBuffer9三维缓冲对象应用程序使用对象接口的方法查询和准备图面
三维图面对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetDevice取设备(@接口)检索与资源关联的设备。
SetPrivateData改数据(标识,数据,大小,标志)将数据与程序使用的资源相关联。标志:0=自动分配内存;1=数据为空接口指针(大小为4)
GetPrivateData取数据(标识,数据,大小)将与资源关联的专用数据复制到提供的缓冲区。
FreePrivateData释放数据(标识)释放与此资源关联的指定私有数据。
SetPriority改优先级(值)分配用于计划的资源的优先级。
GetPriority取优先级获取此资源的优先级。
PreLoad预加载预加载托管资源。
GetType取类型返回资源的类型
Lock锁定(偏移,大小,@内存,标志)锁定顶点数据范围并获取指向顶点缓冲区内存的指针。标志:
Unlock解锁解锁顶点数据。
GetDesc取说明(说明)检索顶点缓冲区资源的说明

C运行时库-msvcrt.dll
符号数据类型写格式/格式化/组合式读格式/拆分式
%d %ld %i %li十进制有符号整数变量数值转文字文字转数值到变量
%u %lu十进制无符号整数变量数值转文字文字转数值到变量
%f浮点数变量数值转文字文字转数值到变量
%s字符串变量文字到文字文字输出到变量
%c单个字符字符数值转文字文字转数值到变量
%x小写十六进制变量数值转十六进制文字十六进制文字转数值到变量
%X大写十六进制变量数值转十六进制文字十六进制文字转数值到变量
%p十六进制指针变量数值转十六进制文字十六进制文字转数值到变量
%o八进制变量数值转八进制文字八进制文字转数值到变量
%e指数形式浮点数变量数值转指数文字指数文字转数值到变量
百分号后面加"-"是左对齐,加数字是占位长度
加0是占位填充为0,如:格式化(内容,"%08d",36),显示内容为:00000036
加.是小数点位数,如:格式化(内容,"%.2f",36.389247#),显示内容为: 36.38
加.也是字符的位数,如:格式化(内容,"%.4s","36.389247#"),显示内容为: 36.3
点后面加*号是变量指定长度,如:格式化(内容,"%.*s",4,"36.389247"),显示内容为: 36.3
加#是增加0x前缀,如:格式化(内容,"%#x",36),显示内容为: 0x24
读格式和拆分式,加*号是跳过不读,例如:拆分式("asdf 123","%*s %d",@数) 结果数=123
加[]是集合操作,如: %[0-9] 是只取数字.^是不包含,如: %[^abc]是除abc外所有字符
也可以配合长度使用,如: %12[a-zA-Z0-9_] 是读取不超过12位,英文字母加数字及下划线的字符
中文名字英文名称长度作用解释
日期类tm36用来存储日期时间的一种结构数据,对应函数:gmtime、localtime
日期类——成员表
tm_sec整数每分钟的第几秒,取值[0-59]
tm_min整数每小时的第几分,取值[0-59]
tm_hour整数每天的第几小时,取值[0-23]
tm_mday整数每月的第几天,取值[1-31]
tm_mon整数每年的月份,取值[0-11]
tm_year整数1900年起距今的年数
星期tm_wday整数每周的第几天,取值[0-6]
tm_yday整数每年的第几天,取值[0-365]
tm_isdst整数夏令时标志

C运行时库——函数列表
中文名称英文名称示例作用
绝对值absa=绝对值(-36)返回32位整数的绝对值。
取正数labs大数=取绝对值(大数)返回64位整数的绝对值。
反余弦acosy=反余弦(x)返回以弧度表示的 x 的反余弦。均为浮点数
反正弦asiny=反正弦(x)返回以弧度表示的 x 的反正弦。均为浮点数
反正切atany=反正切(x)返回以弧度表示的 x 的反正切。均为浮点数
反正切2atan2z=反正切2(x,y)返回以弧度表示的 y/x 的反正切。均为浮点数
上取整ceily=上取整(x)返回大于或者等于 x 的数值(进位取整)。均为浮点数
余弦cosy=余弦(x)返回以弧度表示的 x 的余弦。均为浮点数
双曲余弦coshy=余弦(x)返回以弧度表示的 x 的双曲余弦。均为浮点数
除法divd=除法(a,b)a除以b,返回d的前4字节为商,后4字节为余数
取绝对值fabsy=取绝对值(x)返回 x 的绝对值。均为浮点数
下取整floory=下取整(x)返回大于或者等于 x 的数值(舍去取整)。均为浮点数
求余fmodz=求余(x,y)返回 x/y 的余数。均为浮点数
自然对数logy=log(x)返回 x 的自然对数。均为浮点数
常用对数log10y=常用对数(x)返回 x 的自然对数。(基数为 e 的对数)
指数expy=指数(x)返回以自然常数e为底的 x 次幂
乘进位ldexpy=乘进位(x,n)返回 x 乘以2的n次幂 ,相当于浮点左移运算
正弦siny=反正弦(x)返回以弧度表示的 x 的反正弦。(基数为 10 的对数)
双曲正弦sinhy=双曲正弦(x)返回以弧度表示的 x 的双曲正弦。均为浮点数
双曲正切tanhy=双曲正切(x)返回以弧度表示的 x 的双曲正切。均为浮点数
平方根sqrty=平方根(x)返回 x 的平方根。均为浮点数
powz=幂(x,y)返回 x 的 y 次幂。均为浮点数
分解小数modfz=分解小数(x,y)分解x,以得到x的整数和小数部分,y是x的整数部分,z是x的小数部分,xyz均为double
显示错误perror显示错误("错误原因:")将上一个函数发生错误的原因输出到标准设备(控制台窗口)
先显示参数提交的文字,再显示错误原因的描述
打开管道popenpp=打开管道(命令,"r")用命令运行一个进程,可以使用文件读写函数操控该控制台界面的输入输出
关闭管道pclose关闭管道(pp)打开管道必须使用此函数关闭,不能用关闭文件
产生信号raise产生信号(2)产生一个信号,2程序终止 4非法指令 8运算错误
11非法访问内存 15请求终止程序 22程序异常终止
检测信号signal检测信号(信号,@处理函数)检测到相应信号,把信号发给处理函数
转宽字符mbstowcs字数=转宽字符(新字,原文,长度)把多字符转换成宽字符
转多字符wcstombs字数=转多字符(新字,原文,长度)将宽字符转换成多字符
本地配置setlocale本地配置(选项,格式)用来配置地域的信息,设置当前程序使用的本地化信息
读取变量getenv路径=读取变量("PATH")从环境中取字符串,获取环境变量的值
终止abort终止异常终止当前程序。
退出时atexit退出时(@退出事件)当程序正常终止时,调用指定的函数。
退出exit退出(状态)使程序正常终止。
转换时间asctime文字=转换时间(日期时间)把日期时间结构体转成文本格式时间
转时间ctime文字=转时间(@时间)把整数时间数据转成文本格式时间
取时间差difftimex=取时间差(时间1,时间2)计算两个时刻之间的时间差
国际时间gmtimet=国际时间(@时间)把日期时间数值转换为格林威治(GMT)时间,返回日期时间结构体
本地时间localtimet=本地时间(@sj)把日期时间数值转换为本地时间,返回日期时间结构体
取时间time取时间(@时间)获得系统当前时间到一个整数变量
格式时间strftime格式时间(文字,文字长,"%H点%M分",时间)把日期时间类型转换为指定格式文字,%H为24小时制,12小时制用%I
转小数atof转小数("12.34")把字符串转换为小数或浮点。
转整数atoi转整数("1235")把字符串转换为整数。
转小字tolowera=转小字(文字(i))大写字母转为小写字母,输入和返回都是ASCII码(0-127)
转大字touppers=转大字(文字(i))小写字母转为大写字母,输入和返回都是ASCII码(0-127)
查数组bsearch查数组(内容,数组指针,数量,大小,@比较函数)可以在固定长度数组中查找数值或字符串
开启线程_beginthread开启线程(@函数,堆栈大小,参数)开启一个在调用进程的地址空间内执行的线程
线束线程_endthread结束线程结束已开启的线程(无需参数)
申请内存malloc缓冲=申请内存(长度)申请指定长度的内存空间,数据并未清零
申零内存calloc申零内存(长度,数量)申请长度乘数量的内存空间,并清零数据
保留内存realloc保留内存(原址,大小)重新分配内存,新空间大于原空间大小时,保留原数据
释放内存freefree(缓冲)释放之前分配的内存空间
查找字节memchr查找字节(内容,66,n)在字符串/内存的前 n 个字节中搜索字节码出现的位置
内存比较memcmp内存比较(内容1,内容2,n)把内容1和内容2的前 n 个字节进行比较
内存复制memcpy内存复制(目的,原址,n)在原址复制 n 个字节到目的地址中,两者不能有重叠
内存传送memmove内存传送(目的,原址,n)在原址复制 n 个字节到目的地址中,两者可以有重叠
填充内存memset填充内存(内容,0,n)把指定内存的前 n 个字节填充为指定的数值
文件打开fopen文件=文件打开(文件名,"rb+")模式可以是r/w/b/t/a/+
文件输出freopen文件输出(文件名,"w",@文件)指定模式打开文件并把屏幕上(控制台)内容输出到文件中
文件刷新fflush文件刷新(文件)写入文件后,文件不会立即更新,需要关闭或者使用刷新文件函数才会更改
到尾feof是否=到尾(文件)判断是否已到文件结尾
读字fgetc字=读字(文件)从文件中读取一个字符(英文)
读行fgets读行(内容,长度,文件)从文件中读取一行文本
写字fputc写字(字,文件)写入一个英文字符到文件中
写句fputs写句(内容,文件)写入一个字符串到文件中
文件读取fread文件读取(数据,长度,数量,文件)从文件中读取指定数量个指定长度的数据,实际读取是长度和数量相乘
文件写入fwrite文件写入(数据,长度,数量,文件)向文件中写入指定数量个指定长度的数据,实际写入是长度和数量相乘
读取格式fscanf读取格式(文件,"%d",@id)读取文件中内容并转换为指定格式到变量中
写入格式fprintf写入格式(文件,"%d",id)把变量转换为指定格式内容写入到文件中
定位文件fseek定位文件(文件,位置,方向)方向0从开头,1从当前位置,2文件结尾
文件位置ftell长度=文件位置(文件)得到文件位置指针(当前位置相对于文件首的偏移字节数)
文件开头rewind文件开头(文件)将文件内部的指针重新指向开头位置
文件关闭fclose文件关闭(文件)文件操作完成后,需要关闭文件
文件删除remove文件删除(文件名)用于删除指定的文件
文件改名rename文件改名(旧名,新名)旧名文件不存在,新名文件存在,则移动文件,反之则改名.不能都存在或都不存在,也不能是目录
临时文件tmpfilefp=临时文件以wb+形式创建一个临时二进制文件
临时名tmpnam临时名(名称)产生一个唯一的文件名
读字符getchara=读字符控制台读取一个输入的英文字符
读文字gets读文字(内容)控制台读取一行输入的字符串
写字符putchar写字符(\a)把ASCII码在控制台上显示出英文字符在控制台窗口上
写文字puts写文字("hello")把一串文字显示在控制台窗口上
写格式printf写格式("你好%s",名字)把多个变量转换格式化后显示在屏幕上(控制台)
命令行system命令行("pause")控制台中执行系统命令
排序qsort排序(数组指针,数量,大小,@比较函数)可以实现数组,字符串,结构体内容排序等。
随机数randa=随机数产生一个随机数
随机种子srand随机种子(8848)随机数发生器的初始化函数
读格式scanf读格式("%d",@id)读取控制台输入文字并转换为指定格式的变量中
拆分式sscanf拆分式(文字1,"%s %d",str,@id)把文字1的内容按照指定表达式,拆分成多个变量
加文字strcat加文字(文字1,"很好")给文字1的字符串末尾增加相应的文字
加多字strncat加多字(文字1,"很好",长度)给文字1的字符串末尾增加指定长度的文字
查字符strchr查字符(文字1,33)查找英文字符的ASCII码在文字1中出现的内存位置
英文比较strcmp英文比较(文字1,文字2)文字1和文字2进行比较,区分大小写
前字比较strncmp前字比较(文字1,文字2,n)文字1和文字2的前面n个字符进行比较,相等返回0
字母比较strcmpi字母比较(文字1,文字2)文字1和文字2进行比较,不区分大小写
文字比较strcoll文字比较(文字1,文字2)默认按英文比较,本地配置LC_COLLATE语言环境后,如汉字可以按拼音比较
检索下标strcspn检索下标(文字1,文字2)检查文字2出现在文字1中的下标位置
错误描述strerror描述=错误描述(错误号)获得错误号对应的描述文字
文字长度strlen文字长度(文字1)计算字符串的长度,到0结束
文字复制strcpy文字复制(文字1,文字2)把文字2复制到文字1的内存位置
前字复制strncpy前字复制(文字1,文字2,n)把文字2的前n个字节复制到文字1的内存位置
检查包含strpbrk检查包含(文字1,文字2)检查文字1是否包含文字2的任意字,未包含返回空
倒查字符strrchr倒查字符(文字1,\c)从右边查找ASCII码在文字1中出现的内存位置
检查不含strspn检查不含(文字1,文字2)返回字符串中第一个不在指定字符串中出现的字符下标,0表示不包含
查找文字strstr查找文字(文字1,文字2)查找文字2在文字1中出现的内存位置
转浮点strtodfd=转浮点(文字1,文字2)把文字1转换成浮点数,若文字中包含非数字,会将其写到文字2中.参数2写0则无视
分割文本strtok分割文本(文字1,文字2)以文字2为分割符,把文字1分割成两个字符串
转数值strtold=转数值(文字1,文字2,进制)把文字1按进制转换成整数值,若文字中包含非数字会写到文字2中.进制为2-36的数字
转数字strtould=转数字(文字1,文字2,进制)把文字1按进制转换成无符号长整形,文字中包含非数字会写到文字2中.进制为2-36的数字
转码复制strxfrmd=转码复制(文字1,文字2,n)根据程序本地语言转换文字2,复制前 n 个字符到文字1中
格式组vsprintf格式组(文字,"%d",id)把变量格式化输出到字符串,多个变量需用格式化函数
格式化sprintf格式化(文字,"%d",id)把变量格式化输出到字符串
活动模板库——atl.dll
ATL 引用记录了活动模板库,这是一组基于模板的类,用于简化组件对象模型对象的编程。COM 是用于在 Windows 上创建和使用软件组件的二进制规范。 若要充分利用 ATL,强烈建议熟悉 COM。
活动模板库可用于创建小型、便捷的组件对象模型 (COM) 对象。 它对关键 COM 功能提供特殊支持,包括常用实现、双重接口、标准 COM 枚举器接口、连接点、分离式接口和 ActiveX 控件。
ATL 代码可用于创建单线程对象、单元模型对象、自由线程模型对象或自由线程和单元模型对象。它支持基于传递为参数的类型创建新的类。实现类型安全的方式来执行模板代码中表示的操作。

ATL COM 对象的基础知识

下图描述了用于定义 ATL COM 对象的类和接口之间的关系。

此关系图显示 CComObject 派生自 CYourClass,而 CComAggObject 和 CComPolyObject 包含 CYourClass 作为成员变量。
有三种方法来定义 ATL COM 对象。 标准选项是使用派生自 CYourClass 的 CComObject 类。 第二个选项是使用 CComAggObject 类创建聚合对象。
第三个选项是使用 CComPolyObject 类。 CComPolyObject 充当混合选项:它可以作为 CComObject 类或 CComAggObject 类运行,具体取决于首次创建它的方式。
使用标准 ATL COM 时,请使用两个对象:一个外部对象和一个内部对象。 外部客户端通过外部对象中定义的包装函数访问内部对象的功能。 外部对象的类型为 CComObject。
使用聚合对象时,外部对象不提供内部对象功能的包装器。 相反,外部对象提供由外部客户端直接访问的指针。在此场景中,外部对象的类型为 CComAggObject。 内部对象的类型为 CYourClass。
由于客户端不必通过外部对象与内部对象交互,因此聚合对象通常更高效。 此外,鉴于聚合对象的接口直接可用于客户端,外部对象不必知道聚合对象的功能。 但是,并非所有对象都可以聚合。 对于要聚合的对象,在设计时需要考虑到聚合。
ATL 分两个阶段实现 IUnknown:
CComObject、CComAggObject 或 CComPolyObject 实现 IUnknown 方法。
CComObjectRoot 或 CComObjectRootEx 管理 IUnknown 的引用计数和外部指针。

ATL COM 对象的其他方面由其他类处理:
CComCoClass 定义对象的默认类工厂和聚合模型。
IDispatchImpl 提供对象上任何双接口的 IDispatch Interface 部分的默认实现。
SupportErrorInfoImpl 实现 ISupportErrorInfo 接口,确保错误信息能够正确地沿调用链向上传播。

实现 CComObjectRootEx

所有 ATL 对象必须在其继承中有一个 CComObjectRootEx 或 CComObjectRoot 的实例。 CComObjectRootEx 提供基于 COM 映射项的默认 QueryInterface 机制。
通过其 COM 映射,对象的接口将在客户端查询接口时向该客户端公开。 该查询通过 CComObjectRootEx::InternalQueryInterface 执行。 InternalQueryInterface 仅处理 COM 映射表中的接口。
实现 CComObject、CComAggObject 和 CComPolyObject CComObject、CComAggObject 和 CComPolyObject 的模板类始终是继承链中派生最多的类。 他们负责处理 IUnknown 中的所有方法:QueryInterface、AddRef 和 Release。 此外,CComAggObject 和 CComPolyObject(用于聚合对象)提供内部未知所需的特殊引用计数和 QueryInterface 语义。 使用 CComAggObject 和 CComObject 的优点是实现 IUnknown 针对所创建对象的类型进行了优化。 例如,非聚合对象只需要引用计数,而聚合对象需要内部未知的引用计数和指向外部未知的指针。 使用 CComPolyObject 的优点是,避免在模块中同时使用 CComAggObject 和 CComObject 处理聚合和非聚合情况。 单个 CComPolyObject 对象处理这两种情况。 这意味着模块中只有一个 vtable 副本和一个函数副本。 如果 vtable 很大,这可以大大减小模块大小。 但是,如果 vtable 较小,则使用 CComPolyObject 可能会导致模块大小略大,因为它未针对聚合或非聚合对象进行优化,如 CComAggObject 和 CComObject 所示。

支持 IDispatch 和 IErrorInfo 可以使用模板类 IDispatchImpl 提供对象上任何双重接口 IDispatch Interface 部分的默认实现。
如果对象使用 IErrorInfo 接口向客户端报告错误,则对象必须支持 ISupportErrorInfo 接口。 如果对象上只有单个接口可生成错误,则模板类 ISupportErrorInfoImpl 提供了一种简单方法可实现此目的。

支持 IDispEventImpl 模板类 IDispEventImpl 可用于为 ATL 类中的连接点接收器提供支持。 连接点接收器允许你的类处理从外部 COM 对象触发的事件。 这些连接点接收器使用你的类提供的事件接收器映射进行映射。
若要正确实现类的连接点接收器,必须完成以下步骤:

导入每个外部对象的类型库

声明 IDispEventImpl 接口

声明事件接收器映射

建议和取消建议连接点
实现连接点接收器所涉及的步骤都是通过仅修改类的头文件来完成的。

更改默认类工厂和聚合模型

ATL 使用 CComCoClass 为对象定义默认类工厂和聚合模型。 CComCoClass 指定以下两个宏:
DECLARE_CLASSFACTORY 将类工厂声明为 CComClassFactory。
DECLARE_AGGREGATABLE 声明对象可以聚合。

可以通过在类定义中指定另一个宏来替代这些默认值中的任何一个。
定义类工厂的其他两个宏是 DECLARE_CLASSFACTORY_AUTO_THREAD 和 DECLARE_CLASSFACTORY_SINGLETON。

ATL 还使用 typedef 机制来实现默认行为。 例如,DECLARE_AGGREGATABLE 宏使用 typedef 定义调用 _CreatorClass 的类型,然后在整个 ATL 中引用该类型。
请注意,在派生类中,使用与基类的 typedef 同名的 typedef 会导致 ATL 使用定义并且重写默认行为。

创建聚合对象

聚合委托 IUnknown 调用,提供指向外部对象的指向内部对象的 IUnknown 指针。

创建聚合对象
将 IUnknown 指针添加到类对象,并将其初始化为构造函数中的 NULL。

重写 FinalConstruct 以创建聚合。

使用步骤 1 中定义的 IUnknown 指针作为 COM_INTERFACE_ENTRY_AGGREGATE 宏的第二个参数。

重写 FinalRelease 以释放 IUnknown 指针。
如果在 FinalConstruct 期间使用和释放聚合对象的接口,则应将 DECLARE_PROTECT_FINAL_CONSTRUCT 宏添加到类对象的定义中。
中文名字英文名称参数作用解释
创建控件AtlAxCreateControl4创建ActiveX控件,初始化它并在指定窗口中承载它。
创建控件——参数表
中文英文类型作用解释
名称lpszName整数对象名ProgID;对象标识CLSID;网址URL;Active文档;HTML片段
窗口hWnd整数控件将附加到的窗口的句柄。
属性pStream整数指向用于初始化控件属性的流的指针。可为0
容器ppUnkContainer整数接收容器的指针地址。可为0

中文名字英文名称参数作用解释
附加控件AtlAxAttachControl3将以前创建的控件附加到指定窗口。
附加控件——参数表
中文英文类型作用解释
实例pControl整数指向控件的指针。
窗口hWnd整数将托管控件的窗口的句柄。
容器ppUnkContainer整数接收容器对象的指针。

中文名字英文名称参数作用解释
容器接口AtlAxGetHost3将以前创建的控件附加到指定窗口。
容器接口——参数表
中文英文类型作用解释
窗口hWnd整数托管控件的窗口的句柄。
容器ppUnkContainer整数接收容器对象的指针。

中文名字英文名称参数作用解释
托管控件AtlAxGetControl2获取指向包含在指定窗口内控件的接口指针
托管控件——参数表
中文英文类型作用解释
窗口hWnd整数托管控件的窗口的句柄。
接口pp整数接收托管控件的指针。

中文名字英文名称参数作用解释
对象子站AtlSetChildSite2将子对象的站点设置为父对象的指针。
对象子站——参数表
中文英文类型作用解释
子级punkChild整数指向子级的接口。
父级punkParent整数指向父级的接口。

中文名字英文名称参数作用解释
初始页框AtlAxWinInit0注册窗口类及消息来初始化控件承载代码。
注销页框AtlAxWinTerm0注销窗口类来取消初始化控件承载代码。
取源接口AtlGetObjectSourceInterface5检索有关对象的默认源接口的信息。
取源接口——参数表
中文英文类型作用解释
对象punkObj整数指向要为其返回信息的对象。
库号plibid整数接收包含源接口定义的类型库的 LIBID。
接口piid整数接收对象默认源接口的接口 ID。
主版pdwMajor整数接收包含源接口定义的类型库的主要版本号。
次版pdwMinor整数接收包含源接口定义的类型库的次要版本号。

中文名字英文名称参数作用解释
内部接口AtlInternalQueryInterface4检索指向所请求的接口的指针。
对象子站——参数表
中文英文类型作用解释
对象pThis整数指向对象的指针。
数组pEntries整数访问可用接口映射的结构数组。
标识iid整数要请求的接口的GUID。
接口ppvObject整数接收指定的接口指针的指针;
组件对象模型-(COM) COM 是一个独立于平台的分布式面向对象的系统,用于创建可以交互的二进制软件组件。 COM 是 微软 的 OLE (复合文档的基础技术) 和 ActiveX (支持 互联网 的组件) 技术。

组件对象模型

若要了解 COM (以及所有基于 COM 的技术) ,必须了解它不是面向对象的语言,而是一种标准。 COM 也不指定应如何构建应用程序;语言、结构和实现详细信息留给应用程序开发人员。
相反,COM 指定对象模型和编程要求,使 COM 对象 (也称为 COM 组件, 有时只是对象) 与其他对象交互。 这些对象可以在单个进程中、在其他进程中,甚至可以位于远程计算机上。
它们可以用不同的语言编写,而且在结构上可能非常不同,这就是为什么 COM 被称为 二进制标准:在程序转换为二进制计算机代码后应用的标准。
COM 的唯一语言要求是,代码以一种语言生成,该语言可以创建指针的结构,并通过指针显式或隐式调用函数。 
COM 定义 COM 对象的基本性质。 通常,软件对象由一组数据和操作数据的函数组成。 COM 对象是一个对象,在该对象中,只能通过一组或多组相关函数访问对象的数据。
这些函数集称为 接口,接口的函数称为 方法。 此外,COM 要求访问接口方法的唯一方法是通过指向 接口的指针。
除了指定基本二进制对象标准外,COM 还定义了某些基本接口,这些接口提供所有基于 COM 的技术通用的函数,并且它提供所有组件所需的少量函数。
COM 还定义了对象如何在分布式环境中协同工作,并添加了安全功能来帮助提供系统和组件的完整性。

COM 简介

Microsoft 组件对象模型 (COM) 定义了一个二进制互操作性标准,用于创建在运行时交互的可重用软件库。 可以使用 COM 库,而无需将它们编译到应用程序中。 COM 是许多 Microsoft 产品和技术的基础,例如 Windows 媒体播放器 和 Windows Server。 COM 定义了适用于许多操作系统和硬件平台的二进制标准。 对于网络计算,COM 定义了标准线路格式和协议,用于在不同硬件平台上运行的对象之间进行交互。 COM 独立于实现语言,这意味着可以通过使用不同的编程语言(如 C++ 和 .NET Framework中的编程语言)创建 COM 库。 COM 规范提供了支持跨平台软件重用的所有基本概念: 组件之间函数调用的二进制标准。 将函数强类型分组到接口中的预配。 提供多态性、特征发现和对象生存期跟踪的基接口。 唯一标识组件及其接口的机制。 从部署创建组件实例的组件加载程序。 COM 具有许多协同工作的部件,用于创建基于可重用组件构建的应用程序: 提供符合 COM 规范的运行时环境的 主机系统 。 定义功能协定的接口,以及实现接口的组件。 向系统提供组件的服务器以及使用组件提供的功能的客户端。 跟踪组件在本地和远程主机上的部署位置的 注册表 。 一个 服务控制管理器 ,用于定位本地和远程主机上的组件并将服务器连接到客户端。 一种 结构化存储 协议,用于定义如何在主机文件系统上导航文件的内容。 启用代码跨主机和平台重复使用是 COM 的核心。 可重用接口实现称为 组件、 组件对象或 COM 对象。 组件实现一个或多个 COM 接口。 通过设计库实现的接口来定义自定义 COM 库。 库的使用者可以在不了解库的部署和实现详细信息的情况下发现和使用其功能。

对象和接口

COM 对象通过 接口公开其功能,接口是成员函数的集合。 COM 接口定义组件的预期行为和职责,并指定提供一小部分相关操作的强类型协定。 COM 组件之间的所有通信都通过接口进行,组件提供的所有服务都通过其接口公开。 调用方只能访问接口成员函数。 内部状态对调用方不可用,除非它在接口中公开。 接口是强类型。 每个接口都有其自己唯一的接口标识符(名为 IID),这可以消除与人类可读名称可能发生的冲突。 IID 是 GUID) (全局唯一标识符,它与 Open Software Foundation (OSF) 分布式计算环境 (DCE) 定义的通用唯一 ID (UUID) 相同。 创建新接口时,必须为该接口创建新的标识符。 当调用方使用接口时,它必须使用唯一标识符。 此显式标识通过消除会导致运行时失败的命名冲突来提高可靠性。 定义新接口时,可以使用接口定义语言 (IDL) 来创建接口定义。 从此接口定义中,Microsoft IDL 编译器生成头文件供使用 接口的应用程序使用,并生成源代码来处理远程过程调用。 Microsoft 提供的 IDL 基于 DCE IDL 的简单扩展,DCE IDL 是远程过程调用 (RPC) 分布式计算的行业标准。 IDL 是一种方便接口设计器的工具,不是 COM 互操作性的核心。 使用 IDL 时,无需为每个编程环境手动创建头文件。 有关详细信息,请参阅 定义 COM 接口。 继承在 COM 接口中谨慎使用。 COM 仅支持重用与基接口关联的协定的接口继承。 COM 不支持选择性继承;因此,如果一个接口继承自另一个接口,则它包括基接口定义的所有函数。 此外,接口仅使用单个继承(而不是多个继承)从基接口获取函数。

接口实现

不能自行创建 COM 接口的实例。 而是创建实现 接口的类的实例。 在 C++ 中,COM 接口建模为 抽象基类,这意味着该接口是仅包含纯虚拟成员函数的 C++ 类。 C++ 库通过从一个或多个接口继承成员函数签名、重写每个成员函数并为每个函数提供实现来实现 COM 对象。 可以使用支持函数指针概念的任何编程语言来实现 COM 接口。 例如,在 C 中,接口是一个结构,其中包含指向函数指针表的指针,接口中的每个方法对应一个指针。 实现接口时,类必须为接口中的每个函数提供实现。 如果类在接口函数中没有工作要做,则实现可能是单个返回语句。 COM 类通过使用唯一的 128 位类 ID (CLSID) 来标识,该类将类与文件系统中的特定部署相关联,对于 Windows 而言,该部署是 DLL 或 EXE。 CLSID 是 GUID,这意味着没有其他类具有相同的 CLSID。 使用唯一类标识符可防止类之间的名称冲突。 例如,两个不同的供应商可以编写名为 CStack 的类,但两个类都具有唯一的 CLSID,因此避免了发生冲突的可能性。 通过使用 CoCreateGuid 函数或 COM 创作工具(例如在内部调用此函数的 Visual Studio)获取新的 CLSID。

IUnknown 接口

所有 COM 接口都继承自 IUnknown 接口。 IUnknown 接口包含用于多态性和实例生存期管理的基本 COM 操作。 IUnknown 接口有三个成员函数,名为 QueryInterface、AddRef 和 Release。 实现 IUnknown 接口需要所有 COM 对象。 QueryInterface 成员函数为 COM 提供多态性。 调用 QueryInterface 以在运行时确定 COM 对象是否支持特定接口。 如果 COM 对象实现请求的接口, ppvObject 则它将返回 参数中的接口指针,否则返回 NULL。 QueryInterface 成员函数允许在 COM 对象支持的所有接口之间导航。 COM 对象实例的生存期由其 引用计数控制。 IUnknown 成员函数 AddRef 和 Release 控制计数。 AddRef 递增计数, 发布 递减计数。 当引用计数达到零时, Release 成员函数可能会释放实例,因为没有调用方使用它。

客户端/服务器模型

COM 类实现许多 COM 接口。 实现由调用方与 COM 类实例交互时运行的二进制文件组成。 COM 允许在不同的应用程序中使用类,包括在不了解特定类的情况下编写的应用程序。 在 Windows 平台上,类存在于动态链接库 (DLL) 或另一个应用程序 (EXE) 中。 在其主机系统上,COM 维护系统上安装的 COM 对象的所有 CLSID 的注册数据库。 注册数据库是每个 CLSID 与包含相应类的 DLL 或 EXE 位置之间的映射。 每当调用方想要创建 COM 类的实例时,COM 将查询此数据库。 调用方只需知道 CLSID 即可请求类的新实例。 COM 对象与其调用方之间的交互建模为客户端/服务器关系。 客户端是从系统请求 COM 对象的调用方,服务器是包含向客户端提供服务的 COM 对象的模块。 COM 客户端是将 CLSID 传递给系统以请求 COM 对象的实例的任何调用方。 创建实例的最简单方法是调用 COM 函数 CoCreateInstance。 CoCreateInstance 函数创建指定的 CLSID 的一个实例,并返回客户端请求的类型的接口指针。 客户端负责在客户端完成使用后通过调用其 Release 函数来管理实例的生存期。 若要基于单个 CLSID 创建多个对象,请调用 CoGetClassObject 函数。 若要连接到已创建并正在运行的对象,请调用 GetActiveObject 函数。 COM 服务器为系统提供 COM 实现。 服务器将 CLSID 与 COM 类相关联,包含 类的实现,实现类工厂以创建 类的实例,并提供卸载服务器。 若要启用 COM 对象的创建,COM 服务器必须提供 IClassFactory 接口的实现。 客户端可以调用 CreateInstance 方法来请求 COM 对象的新实例,但通常此类请求封装在 CoCreateInstance 函数中。 可以将 COM 服务器部署为在运行时加载到客户端进程中的共享库 (Windows 平台上的 DLL) ,也可以部署为 Windows 平台上 (EXE) 的可执行模块。 有关详细信息,请参阅 注册 COM 应用程序。

服务控制管理器

服务控制管理器 (SCM) 处理 COM 对象实例的客户端请求。 以下列表显示了事件序列: 客户端通过使用 COM 对象的 CLSID 调用一个函数(例如 CoCreateInstance ),从 COM 库请求指向 COM 对象的接口指针。 COM 库查询 SCM 以查找与请求的 CLSID 相对应的服务器。 SCM 查找服务器,并从服务器提供的类工厂请求创建 COM 对象。 如果成功,COM 库将返回指向客户端的接口指针。 COM 系统将服务器对象连接到客户端后,客户端和对象直接通信。 通过中间运行时调用不会增加开销。 向主机系统注册 COM 服务器时,可以指定要激活该服务器的不同方式。 以下列表显示了 SCM 激活 COM 服务器的三种方法: 进程内:SCM 返回包含对象服务器实现的 DLL 的文件路径。 COM 库加载 DLL 并查询其类工厂接口指针。 本地:SCM 启动本地可执行文件,该可执行文件在启动时注册类工厂,其接口指针可用于系统和客户端。 远程:本地 SCM 从远程计算机上运行的 SCM 获取类工厂接口指针。 当客户端请求 COM 对象时,COM 库会联系本地主机上的 SCM。 SCM 查找相应的 COM 服务器(可以是本地服务器或远程服务器),服务器返回指向服务器的类工厂的接口指针。 当类工厂可用时,COM 库或客户端可以使用类工厂创建请求的对象。 有关详细信息,请参阅 实现 IClassFactory。

可重用性

COM 支持 黑盒可重用性,这意味着不会向客户端公开可重用组件的实现详细信息。 为了实现黑盒可重用性,COM 支持两种机制,一个对象可以通过这两种机制重用另一个对象。 两种重用形式称为 “包含 ”和 “聚合”。 按照约定,重用的对象名为 内部对象,使用内部对象的对象名为 外部对象。 在包含中,外部对象的行为就像内部对象的客户端一样。 外部对象是内部对象的逻辑容器,当外部对象使用内部对象的服务时,外部对象会将实现委托给内部对象的接口。 这意味着外部对象是按照内部对象的服务实现的。 外部对象可能不支持与内部对象相同的接口,外部对象可以使用内部对象的接口来帮助在外部对象上实现不同接口的一部分。 在聚合中,外部对象公开来自内部对象的接口,就像它们在外部对象上实现一样。 当外部对象始终将对其某个接口上的每次调用委托给内部对象的同一接口时,这非常有用。 聚合是一种方便,使外部对象能够避免额外的实现开销。 有关详细信息,请参阅 重用对象。

存储和流对象

COM 对象使用 结构化存储将状态保存到文件,这是一种持久存储形式,它允许使用文件系统语义来导航文件的内容。 以这种方式处理文件的内容可实现增量访问、事务和进程间共享等功能。 COM 永久性存储规范提供两种类型的存储元素:存储对象和流对象。 这些对象由 COM 库实现,用户应用程序很少实现这些存储元素。 存储对象实现 IStorage 接口,流对象实现 IStream 接口。 流对象包含数据,在概念上类似于文件系统中的单个文件。 每个流都具有访问权限和单个查找指针。 通过 IStream 接口,可以对流的基础数据进行读取、写入、查找和执行其他操作。 流是使用文本字符串命名的。 它可以包含任何内部结构,因为它是一个平面字节流。 此外, IStream 接口中的函数类似于基于文件句柄的标准函数,例如 ANSI C 运行时库中的函数。 存储对象在概念上类似于文件系统中的目录。 每个存储可以包含任意数量的子存储对象和任意数量的流。 每个存储都有自己的访问权限。 通过 IStorage 接口,可以执行枚举、移动、复制、重命名、创建和删除元素等操作。 存储对象不存储应用程序定义的数据,但它隐式存储其包含 (存储和流) 元素的名称。 根据主机平台上的 COM 规范实现存储和流对象时,可在进程之间共享它们。 这样,进程内或进程外运行的对象就可以对其文件存储具有同等的增量访问权限。 由于 COM 是单独加载到每个进程中的,因此它使用操作系统支持的共享内存机制来传达打开的元素的状态及其在进程之间的访问模式。 结构化文件中的每个存储和流对象都有一个用于标识它的名称。 名称是遵循特定约定的字符串。 有关详细信息,请参阅 存储对象命名约定。 该名称将传递给 IStorage 函数,以指定要在存储中操作的元素。 根存储对象的名称与基础文件系统中的文件名相同,并且这些名称必须遵循文件系统的约定和限制。 传递给存储相关函数的字符串,这些函数的名称文件无需解释或更改即可传递到文件系统。 存储对象中包含的元素的名称通过特定存储对象的实现进行管理。 存储对象的所有实现都必须支持长度为 32 个字符的元素名称,并且某些实现可能支持更长的名称。 名称存储时会保留大小写,但它们被比较为不区分大小写。 定义存储元素名称的应用程序必须选择在任一情况下均可使用的名称。 可以使用 COM 实现的函数和接口访问结构化存储文件中的每个元素。 这意味着其他应用程序可以通过使用提供类似目录的服务的 IStorage 接口函数进行导航来浏览文件。 此外,其他应用程序可以使用文件的数据,而无需运行编写文件的应用程序。 当 COM 应用程序访问另一个应用程序的结构化存储文件时,将应用标准 Windows 访问权限,并且应用程序必须具有足够的权限。 COM 对象可以读取和写入永久性存储。 客户端根据操作的上下文查询 COM 对象上与持久性相关的接口之一。 COM 对象可以实现以下接口的任意组合: IPersistStorage:COM 对象读取其持久状态并将其写入存储对象。 客户端通过此接口为 对象提供 IStorage 指针。 这是唯一包含增量访问语义的持久性接口。 IPersistStream:COM 对象读取其持久状态并将其写入流对象。 客户端通过此接口为 对象提供 IStream 指针。 IPersistFile:COM 对象将其持久状态直接读取并写入基础系统上的某个文件。 除非通过这些接口访问基础文件,否则此接口不涉及 IStorage 或 IStream ,但 IPersistFile 接口没有存储和流的语义。 客户端为 对象提供文件名,并调用 Save 或 Load 函数。

数据传输

结构化存储为 COM 对象和进程之间的数据交换提供了基础,称为 统一数据传输。 在 OLE 2 中实现 COM 之前,Windows 上的数据传输是由 传输协议(如剪贴板和拖放协议)指定的。 每个传输协议都有其自己的一组函数,用于将协议绑定到查询,并且需要特定代码来处理每个不同的协议和交换过程。 统一数据传输使用 IDataObject 接口表示所有数据传输,该接口将常见的数据交换操作与传输协议分开。 IDataObject 接口封装了对数据、查询和枚举以及检测对象中的数据更改时间的通知的标准获取和设置操作。 统一数据传输支持对数据格式的丰富描述,以及使用不同的存储媒体进行数据传输。 在统一数据传输期间,所有协议都会交换指向 IDataObject 接口的指针。 服务器是数据源,并实现一个数据对象,该对象在任何数据交换协议中都可用。 当客户端从任何协议接收 IDataObject 指针时,会使用数据并从数据对象请求数据。 指针交换发生后,双方通过 IDataObject 接口以统一方式处理数据交换。 COM 定义了两个支持统一数据传输的数据结构。 FORMATETC 结构表示通用化剪贴板格式,STGMEDIUM 结构将传输介质表示为内存句柄。 客户端创建 FORMATETC 结构以指示它从数据源请求的数据类型,数据源使用该结构来描述它提供的格式。 客户端通过请求其 IEnumFORMATETC 接口来查询数据源的可用格式。 有关详细信息,请参阅 FORMATETC 结构。 客户端创建 STGMEDIUM 结构并将其传递给 GetData 方法,数据对象返回所提供的 STGMEDIUM 结构中的数据。 STGMEDIUM 结构使客户端和数据源能够选择最高效的交换介质。 例如,如果要交换的数据非常大,则数据源可以指示基于磁盘的媒体作为其首选格式,而不是main内存。 这种灵活性可实现高效的数据交换,速度与将指针传递到 IStorage 或 IStream 一样快。 有关详细信息,请参阅 STGMEDIUM 结构。 当数据发生更改时,数据源的客户端可能需要通知。 COM 使用实现 IAdviseSink 接口的建议接收器对象来处理数据更改通知。 建议接收器对象和 IAdviseSink 接口由客户端实现,客户端将 IAdviseSink 指针传递到数据源。 当数据源检测到基础数据中的更改时,它会调用 IAdviseSink 方法来通知客户端。 有关详细信息,请参阅 数据通知。

远程处理

COM 支持远程和分布式计算。 接口远程处理 使成员函数能够返回指向位于不同进程或不同主计算机上的 COM 对象的接口指针。 执行接口远程处理的基础结构对客户端和对象服务器都是透明的。 客户端和服务器都不需要彼此的部署详细信息来通过远程接口进行通信。 客户端在同一接口上调用成员函数,以与本地主机上的进程内、进程外或远程计算机上的 COM 对象通信。 同一接口上的本地和远程调用与客户端无法区分。 若要与 COM 对象通信,客户端始终调用进程内实现。 如果 COM 对象在进程内,则调用是直接的。 如果 COM 对象是进程外或远程的,则 COM 提供一个代理实现,该 实现 使用远程过程调用 (RPC) 协议将调用转发到对象。 COM 对象始终通过进程内实现接收来自客户端的调用。 如果调用方在进程内,则调用是直接调用。 如果调用方是进程外或远程调用方,则 COM 提供一个 存根 实现,用于从客户端进程中的代理接收远程过程调用。 封送 处理是打包调用堆栈以便从代理传输到存根的过程。 取消封送 是在接收端发生的解压缩。 从存根到代理的返回值已封送和取消封送。 这种通信也称为 通过网络发送呼叫。 每种不同的数据类型都有封送规则。 接口指针还具有封送处理协议,该协议封装在 CoMarshalInterface 函数中。 在大多数情况下,系统提供 的标准接口封送处理已足够,但 COM 对象可以选择实现 自定义接口封送处理 ,以控制远程对象代理本身的创建。 有关详细信息,请参阅 对象间通信。

安全性

COM 提供两种形式的应用程序安全性。 一个是 激活安全性,它指定如何创建新对象、客户端如何连接到新对象和现有对象,以及保护某些公共服务(如类表和运行对象表)的方式。 另一个是 调用安全性,它指定安全性如何在客户端与 COM 对象之间建立的连接中运行。 激活安全性由服务控制管理器 (SCM) 自动应用。 当 SCM 收到检索 COM 对象的请求时,它会根据存储在注册表中的安全信息检查请求。 SCM 实现通常提供注册表驱动的配置,用于管理已部署的类和主机上的特定用户帐户。 有关详细信息,请参阅 激活安全性。 调用安全性会自动应用或由应用程序强制执行。 如果应用程序提供设置信息,COM 将执行必要的检查来保护应用程序。 自动机制检查进程的安全性,但不检查单个对象或方法的安全性。 如果应用程序需要更精细的安全性,则 COM 提供应用程序可以使用这些功能进行自己的安全检查。 自动机制和自定义机制可以一起使用,因此应用程序可能会要求 COM 执行自动安全检查,然后执行自己的安全检查。 COM 呼叫安全服务分为以下类别: 客户端和服务器调用的常规函数,可初始化自动安全机制并注册自动身份验证服务。 常规调用安全 API 是 CoInitializeSecurity 和 CoQueryAuthenticationServices 函数。 客户端代理上的接口,使客户端能够控制对单个接口的调用的安全性。 IClientSecurity 接口和 CoQueryProxyBlanket、CoSetProxyBlanket 和 CoCopyProxy 函数为远程对象提供呼叫安全性。 服务器端函数和调用上下文接口,使服务器能够检索有关调用的安全信息并模拟调用方。 IServerSecurity 接口和 CoGetCallContext、CoImpersonateClient 和 CoRevertToSelf 函数提供服务器端调用安全性。 通常,客户端查询由远程处理层在本地实现的 IClientSecurity 接口的 COM 对象。 客户端使用此接口控制 COM 对象上各个接口代理的安全性,然后再对其中一个接口进行调用。 当调用到达服务器时,服务器可能会调用 CoGetCallContext 函数来检索 IServerSecurity 接口,该接口允许服务器检查客户端的身份验证,并在必要时模拟客户端。 IServerSecurity 对象在调用期间有效。 调用 CoInitializeSecurity 函数以初始化安全层,并将指定的值设置为安全默认值。 如果进程不调用 CoInitializeSecurity,则 COM 会在首次封送或取消封送接口时自动调用它,注册系统默认安全性。 CoInitializeSecurity 函数允许客户端为进程建立默认调用安全性,从而避免在单个代理上使用 IClientSecurity。 CoInitializeSecurity 函数允许服务器为进程注册自动身份验证服务。 有关详细信息,请参阅 使用 CoInitializeSecurity 设置Process-Wide安全性。
中文名称英文名称示例作用
创建接口CoCreateGuid创建接口(数据)创建 GUID,这是用于 CLSID 和接口标识符的唯一 128 位整数。
创建实例CoCreateInstance创建实例(接口,0,1,标识,指针)创建并默认初始化与指定 CLSID 关联的类的单个对象。
容器实例CoCreateInstanceFromApp容器实例(接口,0,1,0,组数,结构组)从应用容器内在特定计算机上创建特定类的实例。
标准时间CoFileTimeNow标准时间(@时间)以64位值结构返回当前时间,1601年1月1日以来的100 纳秒间隔数。
释放全库CoFreeAllLibraries释放全库释放使用 CoLoadLibrary 函数加载的所有 DLL (CoGetClassObject) 内部调用。
释放类库CoFreeLibrary释放类库(模块)释放一个库,该库在加载时被指定为显式释放。
文件对象CoGetInstanceFromFile文件对象(0,类,0,1,0,路径,组数,结构组)创建一个新的 对象,并从文件初始化它。
托管对象CoGetInstanceFromIStorage托管对象(0,类,0,1,对象,组数,结构组)创建新对象,并通过内部调用从存储对象初始化它。
获取对象CoGetObject获取对象(名称,0,标识,指针)提供指向与指定 CLSID 关联的类对象上的接口的指针。
获取类库CoGetClassObject获取类库(接口,1,0,标识,指针)提供指向与指定 CLSID 关联的类对象上的接口的指针。
获取内存CoGetMalloc获取内存(1,@内存对象)检索指向默认OLE任务内存分配对象的指针,以便应用程序可以调用其方法来管理内存。
初始化库CoInitialize初始化库(0)初始化当前线程上的 COM 库,并将并发模型标识为单线程单元 。
是否类库CoIsOle1Class是否类库(接口)确定指定的 CLSID 关联是否表示 OLE 1 对象。
加载类库CoLoadLibrary加载类库(库名,0)将特定 DLL 加载到调用方进程中。
锁定对象CoLockObjectExternal锁定对象(指针,锁定,全解)调用 以锁定对象以确保它保留在内存中,或释放此类锁。
注册存管CoRegisterMallocSpy注册存管(接口)注册 内存管理 接口的实现,然后要求OLE围绕对相应内存对象方法的每次调用调用其包装器方法。
注销存管CoRevokeMallocSpy注销存管撤销已注册的内存管理对象。
任务分配CoTaskMemAlloc任务分配(大小)分配任务内存块
任务释放CoTaskMemFree任务释放(内存)释放已经分配的任务内存块。
任务重置CoTaskMemRealloc任务重置(内存,大小)更改以前分配的任务内存块的大小。
卸载类库CoUninitialize卸载类库关闭当前线程上的 COM 库,卸载线程加载的所有 DLL,释放线程维护的任何其他资源
等多事件CoWaitForMultipleHandles等多事件(选项,超时,句柄数,句柄组,@事件)等待指定句柄发出信号,或等待指定的超时期限过。
等对象组CoWaitForMultipleObjects等对象组(选项,超时,对象数,对象组,@事件)等待指定对象发出信号,或等待指定的超时期限过。
类名对象CreateClassMoniker类名对象(接口,指针)创建引用指定类的类名字对象。
文件类值GetClassFile文件类值(文件名,@类标识)返回与指定文件名关联的 CLSID。
对象列表GetRunningObjectTable对象列表(0,@对象表)返回指向本地运行对象表上的接口的指针。
类名接口CLSIDFromProgID类名接口(类名,接口)通过指定对象类名查找接口定义标识CLSID。
类字接口CLSIDFromString类字接口(类字,接口)把对象类标识文字转换成原始的标识数据CLSID。
字转标识IIDFromString字转标识(标识字,标识)将类接口标识字符串转换回原始接口标识符 (IID) 。
接口名字ProgIDFromCLSID接口名称(接口,类名)检索给定类接口 CLSID 的 ProgID名称字符串,含大括号。
接口转字StringFromCLSID接口转字(接口,类字)将类接口 CLSID 转换为可打印字符的字符串。
标识转字StringFromIID标识转字(标识,字串)将接口标识符转换为可打印字符的字符串。
名称激活BindMoniker名称激活(名字对象,0,接口标识,@接口指针)通过对象的名字对象查找对象,如果对象处于非活动状态,则激活该对象,并检索指向该对象上指定接口的指针。
创建反名CreateAntiMoniker创建反名(@名称对象)创建并返回新的反名字对象。
创建绑定CreateBindCtx创建绑定(0,@绑定对象)创建并返回指向 绑定对象 实现的指针。此对象存储有关特定名字对象绑定操作的信息。
创建类名CreateClassMoniker创建类名(类标识,@名称对象)创建引用指定类的类名字对象。
数据通知CreateDataAdviseHolder数据通知(@数据通知对象)检索指向数据建议持有者对象上 数据通知对象 的 OLE 实现的指针。
数据缓存CreateDataCache数据缓存(空对象,空类,接口标识,@接口对象)检索指向 OLE 提供的数据缓存实现的新实例的指针。
建文件名CreateFileMoniker建文件名(路径,@名称对象)基于指定路径创建文件名字对象。
名称组合CreateGenericComposite名称组合(左名,右名,@名称对象)执行两个名字对象的泛型组合,并提供指向生成的复合名字对象的指针。
创建项名CreateItemMoniker创建项名(宽字符,项名称,@名称对象)创建一个项名字对象,用于标识包含对象中的对象 (通常为复合文档) 。宽字符用!分割
创建序名CreateObjrefMoniker创建序名(空对象,@名称对象)基于指向 对象的指针创建 扩展 (MBR)对象的可序列化形式 名字对象。
创建指名CreatePointerMoniker创建指名(指针对象,@名称对象)基于指向对象的指针创建指针名字对象。
模拟异类CoTreatAsClass模拟异类(类标识,模拟类)建立或删除模拟,第一个类的对象被视为不同类的对象。模拟类为空类时删除现有仿真
内存建流CreateStreamOnHGlobal内存建流(内存,自动释放,@流)从全局分配的内存创建一个流对象。自动释放为真或假
内存字节CreateILockBytesOnHGlobal内存字节(内存,自动释放,@接口)从全局分配的内存创建一个字节数组对象。
取流内存GetHGlobalFromStream取流内存(流,@内存)获取内存建流创建的流的全局内存句柄。
字节内存GetHGlobalFromILockBytes字节内存(流,@内存)获取内存字节创建的字节数组对象的全局内存句柄。
反显示名MkParseDisplayName反显示名(绑定对象,显示名,@大小,@名称对象)将字符串转换为标识由字符串命名的对象的名字对象。是 名称对象.显示 的反函数
前缀新名MonikerCommonPrefixWith前缀新名(名称对象,名字对象,@新名对象)基于此名字对象 (包含此名字对象对象数据) 与其他名字对象共享的前缀的公共前缀创建新的名字对象。
相对新名MonikerRelativePathTo相对新名(名称对象,名字对象,@新名对象,0)提供一个名字对象,当组合到第一个指定名字对象 (或具有类似结构) 的名字对象末尾时,生成第二个指定名字对象。
复合存储StgCreateDocfile复合存储(宽文件名,访问,0,@存储)使用复合文件实现创建新的复合文件存储对象。访问模式
打开存储StgOpenStorage打开存储(宽文件名,空接口,访问,排除,0,@存储)打开文件系统中的现有根存储对象。访问模式
指定存储StgIsStorageFile指定存储(宽文件名)指示特定磁盘文件是否包含存储对象。
存储改时StgSetTimes存储改时(宽文件名,创建,访问,修改)设置所指示文件的创建、访问和修改时间(如果基础文件系统支持)。
存储字节StgOpenStorageOnILockBytes存储字节(字节对象,空接口,访问,排除,0,@存储)打开一个现有的存储对象,该对象不驻留在磁盘文件中,而是具有调用方提供的基础字节数组。
释放存储ReleaseStgMedium释放存储(流传输类)释放指定的存储介质。
内存对象——功能方法
英文名字中文名称作用解释
IMalloc内存对象分配、释放和管理内存。
内存对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
Alloc分配(大小)分配内存块。
Realloc更改(内存,大小)更改以前分配的内存块的大小。
Free销毁(内存)释放以前分配的内存块。
GetSize大小(内存)检索以前分配的内存块的大小。
DidAlloc确定(内存)确定此分配器是否用于分配指定的内存块。返回:0未分配,1已分配,-1无法确定
HeapMinimize合并通过将未使用的内存释放到操作系统、合并相邻的可用块并提交可用页面,尽可能最大程度地减少堆。

英文名字中文名称作用解释
IMallocSpy内存管理对象使应用程序开发人员能够监视内存分配、检测内存泄漏,并在调用 内存对象 方法时模拟内存故障。
内存管理对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
PreAlloc预分配(大小)在调用 内存对象.分配 之前执行所需的操作。实现可以扩展和/或修改分配,以使用分配存储特定于调试的信息。
PostAlloc已分配(内存,大小)执行调用 内存对象.分配 后所需的操作。此方法返回 内存对象.分配 的内存块的指针。
PreFree预销毁(内存,是否分配)在调用 内存对象.销毁 之前执行所需的操作。 此方法确保传递给 销毁 的指针指向实际分配的开头。
PostFree已销毁(是否分配)在调用 内存对象.销毁 之后执行所需的操作。
PreRealloc预更改(内存,大小,@新内存,是否分配)在调用 内存对象.更改 之前执行所需的操作。
PostRealloc已更改(内存,是否分配)在调用 内存对象.更改 之前执行所需的操作。此方法返回 内存对象.更改 的内存块的指针。
PreGetSize预取大小(内存,是否分配)在调用 内存对象.大小 之前执行所需的操作。
PostGetSize已取大小(大小,是否分配)在调用 内存对象.大小 之后执行所需的操作。此方法返回 内存对象.大小 返回的大小。同时也是第一参数提交的大小
PreDidAlloc预确定(内存,是否分配)在调用 内存对象.确定 之前执行所需的操作。
PostDidAlloc已确定(内存,是否分配,确定结果)在调用 内存对象.确定 之后执行所需的操作。
PreHeapMinimize预合并在调用 内存对象.合并 之前执行所需的操作。
PostHeapMinimize已合并在调用 内存对象.合并 之后执行所需的操作。

英文名字中文名称作用解释
IMarshal封送对象使 COM 对象能够定义和管理其接口指针的封送处理。
封送对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetUnmarshalClass未配置类(接口标识,封送接口,目标,0,标志,@代理标识)检索未配置代码的 CLSID。
GetMarshalSizeMax最大缓冲(接口标识,封送接口,目标,0,标志,@大小)检索封送处理期间所需的缓冲区的最大大小。
MarshalInterface封送接口(流,接口标识,封送接口,目标,0,标志)封送接口指针。
UnmarshalInterface取消封送(流,接口标识,封送接口,@接口)取消对接口指针的封送。成功后接口包含要取消封送的接口的请求接口指针。
ReleaseMarshalData销毁封送(流)销毁封送数据包。
DisconnectObject断开连接(0)释放与对象的所有连接。对象的服务器在关闭之前调用对象的此方法实现。
未配置类-目标——常量数值
英文名称常量数值作用解释
MSHCTX_LOCAL0取消封送进程是本地的,并且具有与封送处理进程的共享内存访问。
MSHCTX_NOSHAREDMEM1取消封送进程不具有与封送处理进程的共享内存访问权限。
MSHCTX_DIFFERENTMACHINE2取消封送过程位于不同的计算机上。 封送处理代码不能假定在该计算机上安装了特定的应用程序代码段。
MSHCTX_INPROC3取消封杀将在同一过程中在另一个公寓进行。
MSHCTX_CROSSCTX4在当前单元中创建新上下文。
未配置类-标志——常量数值
英文名称常量数值作用解释
MSHLFLAGS_NORMAL0发生封送处理是因为接口指针从一个进程传递到另一个进程。 这是正常情况。 封送处理过程生成的数据包将在目标进程中取消封送。 封送数据包只能取消封送一次,也可以完全取消封送。 如果接收方成功取消数据包的封存,则作为取消封送过程的一部分,会自动对数据包调用 CoReleaseMarshalData 函数。 如果接收方未或无法取消数据包的封存,则发送方必须对数据包调用 CoReleaseMarshalData 。
MSHLFLAGS_TABLESTRONG1之所以发生封送处理,是因为数据包将存储在全局可访问的表中,该表可以从该表中取消封送一次或多次,或者根本不可以取消封送。 表中是否存在数据包算作对要封送的接口的强引用,这意味着足以使对象保持活动状态。 从表中删除数据包时,表实现者必须对数据包调用 CoReleaseMarshalData 函数。MSHLFLAGS_TABLESTRONG由 RegisterDragDrop 函数在将窗口注册为放置目标时使用。 无论最终用户在窗口中拖动多少次,这都会使窗口注册为放置目标。 RevokeDragDrop 函数调用 CoReleaseMarshalData。
MSHLFLAGS_TABLEWEAK2之所以发生封送处理,是因为数据包将存储在全局可访问的表中,该表可以从该表中取消封送一次或多次,或者根本不可以取消封送。 但是,表中存在的数据包充当对要封送的接口的弱引用,这意味着不足以使对象保持活动状态。 从表中删除数据包时,表实现者必须对数据包调用 CoReleaseMarshalData 函数。MSHLFLAGS_TABLEWEAK通常在运行的对象表中注册对象 (ROT) 时使用。 这可以防止 ROT 中的对象条目在没有任何其他连接的情况下使对象保持活动状态。 有关详细信息 ,请参阅 IRunningObjectTable::Register 。
MSHLFLAGS_NOPING4将此标志添加到原始对象封送处理 (而不是封送代理) 将禁用该对象的 ping 协议。
MSHLFLAGS_RESERVED18预留标志。
MSHLFLAGS_RESERVED216预留标志。
MSHLFLAGS_RESERVED332预留标志。
MSHLFLAGS_RESERVED464预留标志。

英文名字中文名称作用解释
IDropSource拖放源对象用于在应用程序中提供拖放操作。包含在拖放操作期间用作数据源与程序响应的方法。
拖放源对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
QueryContinueDrag继续(是否Esc,组合键)确定是应继续、取消还是完成拖放操作。请勿直接调用
GiveFeedback反馈(效果)提供指定视觉效果源程序能够在拖放操作期间向最终用户提供视觉反馈。

英文名字中文名称作用解释
IDropSourceNotify拖放源通知对象在用户将鼠标拖入或拖出潜在放置目标窗口时接收来自 OLE 的通知。
拖放源通知对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
DragEnterTarget拖到(窗口)当用户将鼠标光标拖动到潜在的放置目标窗口中时,OLE 将调用此方法。
DragLeaveTarget拖离当用户将鼠标光标拖出潜在的放置目标窗口时,OLE 调用此方法。

英文名字中文名称作用解释
IDropTarget拖放目标对象用于在应用程序中提供拖放操作。包含在拖放操作期间用作数据目标与程序响应的方法。
拖放目标对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
DragEnter接受(接口,组合键,坐标,效果)指示是否可以接受放置,如果可以接受,则表示放置的效果。
DragOver完成(组合键,坐标,效果)向用户提供目标反馈,并将放置效果传达给回调函数。
DragLeave删除删除目标反馈并释放数据对象。
Drop放置(接口,组合键,坐标,效果)将源数据合并到目标窗口中,删除目标反馈,并释放数据对象。

常量数值英文名称作用解释
拖曳目标对象——放置效果
0DROPEFFECT_NONE放置目标不能接受数据。
1DROPEFFECT_COPY复制副本,原始数据不受拖动源影响。
2DROPEFFECT_MOVE拖动源应删除数据。
4DROPEFFECT_LINK拖动源应创建指向原始数据的链接。
0x80000000DROPEFFECT_SCROLL滚动即将开始或当前正在目标中发生。与其他值组合。
咨询对象
英文名字中文名称作用解释
IEnumSTATDAT咨询对象枚举数据对象的咨询连接信息。
咨询对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
Next下个(数量,数组,@项数)检索枚举序列中指定数量的项。
Skip跳过(项数)跳过枚举序列中指定数量的项。
Reset重置将枚举序列重置到开头。
Clone克隆(@接口)创建与当前枚举数包含相同枚举状态的一个新枚举接口。
枚举器
英文名字中文名称作用解释
IEnumOLEVERB枚举器按谓词编号升序枚举对象可用的不同谓词。
枚举器——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
Next下个(数量,数组,@项数)检索枚举序列中指定数量的项。
Skip跳过(项数)跳过枚举序列中指定数量的项。
Reset重置将枚举序列重置到开头。
Clone克隆(@接口)创建与当前枚举数包含相同枚举状态的一个新枚举接口。
数据对象
英文名字中文名称作用解释
IDataObject数据对象启用数据传输和数据更改通知。 数据传输方法指定已传输数据的格式以及要通过其传输数据的介质。
数据对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetData取数据(剪贴板类,流传输类)从源数据对象获取数据。调用方负责释放 流传输类 结构。
GetDataHere获取数据(剪贴板类,流传输类)从源数据对象获取数据。调用方必须分配和释放指定的存储介质。
QueryGetData查数据(剪贴板类)确定数据对象是否能够按指定呈现数据。取数据之前使用,成功返回0
GetCanonicalFormatEtc类比(剪贴板类,剪贴板类)比较两个 剪贴板类 结构是否相同或逻辑上等效的,从而消除了重复呈现的需要。返回0结构不同
SetData传数据(剪贴板类,流传输类,是否有存储介质)将数据传输到实现此方法的对象。
EnumFormatEtc枚举(方向,@接口)创建对象以枚举数据对象支持的格式。
DAdvise连接(剪贴板类,咨询,接收器,@令牌)在数据对象与建议接收器之间创建连接。
DUnadvise断开(令牌)销毁以前设置的通知连接。
EnumDAdvise连接器(@接口)创建可用于对当前的通知连接进行枚举的对象。

英文名字中文名称作用解释
ITaskbarList任务栏对象公开控制任务栏的方法。它允许动态添加、删除和激活任务栏上的项。
任务栏对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
HrInit初始化初始化任务栏列表对象。先调用此方法
AddTab添加(窗口)将窗口添加到任务栏。
DeleteTab删除(窗口)从任务栏中删除窗口项。
ActivateTab激活(窗口)激活任务栏上的项。
SetActiveAlt活动(窗口)将任务栏项标记为活动,但不会直观地激活它。

英文名字中文名称作用解释
IShellLinkA链接对象公开用于创建、修改和解析 Shell 链接的方法。
链接对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetPath取路径(路径,长度,查文件结构,标志)获取 Shell 链接对象的目标的路径和文件名。标志:1短路径;4原始路径;
GetIDList取列表(@标识表)递获取 Shell 链接对象目标的项标识符列表。
SetIDList改列表(标识表)设置指向 Shell 链接对象的项标识符列表 (PIDL) 的指针。
GetDescription取备注(内容,长度)获取 Shell 链接对象的说明字符串。
SetDescription改备注(内容)设置 Shell 链接对象的说明。 说明可以是任何应用程序定义的字符串。
GetWorkingDirectory取目录(目录,长度)获取 Shell 链接对象的工作目录的名称。
SetWorkingDirectory改目录(目录)设置 Shell 链接对象的工作目录的名称。
GetArguments取命令(内容,长度)获取与 Shell 链接对象关联的命令行参数。
SetArguments改命令(内容)设置与 Shell 链接对象关联的命令行参数。
GetHotkey取热键(@键)获取 shell 链接对象的 (热键) 键盘快捷方式。
SetHotkey改热键(键)设置 shell 链接对象的 (热键) 键盘快捷方式。
GetShowCmd取显示(@方式)获取 Shell 链接对象的显示方式。
SetShowCmd改显示(@方式)设置 Shell 链接对象的显示方式。1复原;2最小化;3最大化
GetIconLocation取图标(路径,长度,@索引)获取 Shell 链接对象的图标的位置 (路径和索引) 。
SetIconLocation改图标(路径,索引)设置 Shell 链接对象的图标的位置 (路径和索引) 。
SetRelativePath改文件(名称,0)设置 Shell 链接对象的相对路径。
Resolve找目标(窗口,标志)尝试查找 Shell 链接的目标,即使它已被移动或重命名。标志:1不显示异常;4更新路径;8不更新链接;$10不搜索启发;$20不跟踪;$40禁用跟踪;$80调用安装
SetPath改路径(路径)设置 Shell 链接对象的目标的路径和文件名。

英文名字中文名称作用解释
ILockBytes字节对象在由某些物理存储(例如磁盘文件、全局内存或数据库)支持的字节数组对象上实现。
字节对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
ReadAt读(起点,缓冲区,大小,@已读)从字节数组对象开头的指定偏移量开始读取指定数量的字节。
WriteAt写(起点,缓冲区,大小,@已写)从字节数组开头的指定偏移量开始写入指定的字节数。
Flush刷新可确保对象实现维护的任何内部缓冲区都写出到基础物理存储。
SetSize大小(长度)更改字节数组的大小。
LockRegion锁定(位置,长度,方式)限制对字节数组中指定字节范围的访问。方式:1禁止写,2独占禁写,4只读写此处
UnlockRegion解锁(位置,长度,方式)删除以前使用锁定限制的字节范围的访问限制。方式:1禁止写,2独占禁写,4只读写此处
Stat统计(统计类,方式)检索此字节数组的统计类结构数据。方式=1统计类不含名称

英文名字中文名称作用解释
IStorage存储对象支持创建和管理结构化存储对象。结构化存储允许在单个文件中分层存储信息,通常称为“文件中的文件系统”。
存储对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
CreateStream创建流(名称,访问,0,0,@流)创建指定名称的流对象。名称不超过31个宽字符;访问模式
OpenStream打开流(名称,0,访问,0,@流)以指定的访问模式打开此存储对象中的现有流对象。
CreateStorage创建库(名称,访问,0,0,@存储)在指定的访问模式下使用指定名称创建并打开嵌套在此存储对象中的新存储对象。
OpenStorage打开库(名称,0,访问,0,0,@存储)在指定的访问模式下打开具有指定名称的现有存储对象。
CopyTo复制(接口数,接口组,名称块,存储)将打开的存储对象的整个内容复制到另一个存储对象。名称块指定不复制到目标的存储或流对象块。接口组为0复制对象上的所有接口
MoveElementTo传送(名称,存储,新名,方式)将子存储或流从此存储对象复制或移动到另一个存储对象。方式:0移动,1复制
Commit反映(方式)可确保打开的流对象所做的任何更改都反映在父存储中。方式:1可以覆盖,2防止覆盖,4写后磁盘缓存,8合并存储
Revert恢复放弃自上次提交操作以来对存储对象所做的所有更改。
EnumElements枚举(0,0,0,@枚举器)检索指向枚举器对象的指针,该对象可用于枚举此存储对象中包含的存储和流对象。
DestroyElement删除(名称)从此存储对象中删除指定的存储或流。
RenameElement改名(原名,新名)重命名此存储对象中的指定子存储或流。
SetElementTimes改时间(名称,创建,访问,修改)设置指定存储元素的修改、访问和创建时间。时间参数为0不修改
SetClass改类(类标识)将指定的类标识符 (CLSID) 分配给此存储对象。
SetStateBits状态(状态位,掩码)在此存储对象中存储最多 32 位的状态信息。 此方法保留供将来使用。
Stat统计(统计类,方式)检索此流的统计类结构数据。方式=1统计类不含名称
存储对象访问模式
指示创建和删除对象的条件以及对象的访问模式的标志。
英文名字数值作用解释
STGM_DIRECT0x00000000指示在直接模式下,每次对存储或流元素的更改都会在发生时写入。这是默认值。
STGM_TRANSACTED0x00010000指示在事务处理模式下,仅当调用显式提交操作时,才会缓冲和写入更改。
STGM_SIMPLE0x08000000在有限但经常使用的情况下,提供复合文件的更快实现。
STGM_READ0x00000000指示对象为只读,这意味着无法进行修改。
STGM_WRITE0x00000001允许您保存对对象的更改,但不允许访问其数据。
STGM_READWRITE0x00000002启用对对象数据的访问和修改。
STGM_SHARE_DENY_NONE0x00000040指定不拒绝对象的后续打开读取或写入访问。
STGM_SHARE_DENY_READ0x00000030阻止其他人随后在 STGM_READ 模式下打开对象。 它通常用于根存储对象。
STGM_SHARE_DENY_WRITE0x00000020防止其他人随后打开对象进行写或读写访问。在事务处理模式下,共享可以显著提高性能。
STGM_SHARE_EXCLUSIVE0x00000010防止其他人随后以任何模式打开对象。
STGM_PRIORITY0x00040000打开具有对最近提交的版本的独占访问权限的存储对象。
STGM_DELETEONRELEASE0x04000000指示释放根存储对象时,基础文件将被自动销毁。 此功能最适用于创建临时文件。
STGM_NOSCRATCH0x00100000指示在事务处理模式下,通常使用临时暂存文件来保存修改,直到调用 Commit 方法。
STGM_CREATE0x00001000指示应在新对象替换现有存储对象或流之前删除它。
STGM_CONVERT0x00020000创建新对象,同时保留名为“Contents”的流中的现有数据。
STGM_FAILIFTHERE0x00000000如果存在具有指定名称的现有对象,则会导致创建操作失败。
STGM_NOSNAPSHOT0x00200000可防止系统提供的实现创建文件快照副本。否则对文件的更改将写入文件的末尾。
STGM_DIRECT_SWMR0x00400000支持单编写器、多读取程序文件操作的直接模式。

英文名字中文名称作用解释
IStream流对象允许读取和写入数据流对象。 流对象包含结构化存储对象中的数据,其中存储提供 结构。
流对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
Read读(缓冲区,大小,@已读))从当前查找指针开始,将流对象中的指定字节数读取到内存中。
Write写(缓冲区,大小,@已写)从当前搜寻指针处开始,将指定数量的字节写入流对象。
Seek定位(位置,方向,@指针)将查找指针更改为新位置。方向:0开头,1当前,2末尾;指针可以写0,不用新的搜寻指针
SetSize大小(长度)更改流对象的大小。
CopyTo复制(流,长度,@已读,@已写)将指定数量的字节从流中的当前搜寻指针复制到另一个流中的当前查找指针。
Commit反映(方式)可确保打开的流对象所做的任何更改都反映在父存储中。方式:1可以覆盖,2防止覆盖,4写后磁盘缓存,8合并存储
Revert恢复放弃自上次 反映(方式) 调用以来对事务处理流所做的所有更改。
LockRegion锁定(位置,长度,方式)限制对流中指定字节范围的访问。方式:1禁止写,2独占禁写,4只读写此处
UnlockRegion解锁(位置,长度,方式)删除以前使用锁定限制的字节范围的访问限制。方式:1禁止写,2独占禁写,4只读写此处
Stat统计(统计类,方式)检索此流的统计类结构数据。方式=1统计类不含名称
Clone克隆(@流)使用自己的定位指针创建新的流对象,该对象引用与原始流相同的字节。
统计类
中文名字英文名称长度作用解释
统计类STATSTG52包含有关开放存储、流或字节数组对象的统计数据。
统计类——成员表
名称pwcsName整数包含名称的宽字符串的指针。
分类type整数指示存储对象的类型。1存储对象,2流对象,3字节数组,4属性存储
大小cbSize整数指定流或字节数组的大小(以字节为单位)。
上次修改mtime.dwLowDateTime整数指示此存储、流或字节数组的上次修改时间。
修改时间mtime.dwHighDateTime整数指示此存储、流或字节数组的上次修改时间。
最初创建ctime.dwLowDateTime整数指示此存储、流或字节数组的创建时间。
创建时间ctime.dwHighDateTime整数指示此存储、流或字节数组的创建时间。
最后访问atime.dwLowDateTime整数指示此存储、流或字节数组的最后访问时间。
访问时间atime.dwHighDateTime整数指示此存储、流或字节数组的最后访问时间。
模式grfMode整数指示打开对象时指定的访问模式。 此成员仅在调用 Stat 方法时有效。
锁型grfLocksSupported整数指示受该流或字节数组支持的区域锁定的类型。
clsid整数指示存储对象的类标识符;设置为新存储对象的空指针。不用于流或字节数组。
预留reserved整数保留供将来使用。

英文名字中文名称作用解释
IPersist存储类对象提供可以永久存储在系统中的 对象的 CLSID。
存储类对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetClassID类(标识)检索对象的 CLSID的类标识符。

英文名字中文名称作用解释
IPersistStream存储流对象允许保存和加载使用简单串行流的对象以满足其存储需求。
存储流对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetClassID类(标识)检索对象的 CLSID的类标识符。
IsDirty已改确定对象自上次保存到流以来是否已更改。更改返回0,否则返回1
Load加载(流)从先前保存的流中初始化对象。
Save保存(流,模式)将对象保存到指定流。模式为真保存后清除更新标志
GetSizeMax大小(@长度)检索保存对象所需的流的大小。

英文名字中文名称作用解释
IPersistStorage存储库对象使容器应用程序能够将存储对象传递给其包含的对象之一,并加载和保存存储对象。
存储库对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetClassID类(标识)检索对象的 CLSID的类标识符。
IsDirty已改确定对象自上次保存到其当前存储以来是否发生了更改。更改返回0,否则返回1
InitNew初始化(存储)初始化新的存储对象。
Load加载(存储)从其现有存储加载对象。
Save保存(存储,模式)将对象及其包含的任何嵌套对象保存到指定的存储对象中。模式为真当前存储,为假另存为
SaveCompleted存储(存储)通知对象可以写入其存储对象。
HandsOffStorage关存储指示对象释放其容器传递给它的所有存储对象,并进入 HandsOff 模式。

英文名字中文名称作用解释
IPersistFile存储文件对象允许从磁盘文件(而不是存储对象或流)加载对象或将其保存到磁盘文件。
存储文件对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetClassID类(标识)检索对象的 CLSID的类标识符。
IsDirty已改确定对象自上次保存到其当前文件以来是否发生了更改。更改返回0,否则返回1
Load加载(路径,模式)打开指定文件并从文件内容初始化对象。模式:0读;1写;2读写;$10独享;$20拒绝写;$30拒绝读
Save保存(路径,模式)将对象的副本保存到指定的文件中。模块为真,保存当前文件,为假是副本另存为
SaveCompleted存储(路径)通知该对象它可以写入它的文件。
GetCurFile文件(路径)检索与对象关联的文件的当前名称。如果没有当前工作文件,此方法将检索对象的默认保存提示。

英文名字中文名称作用解释
IDispatch自动化对象向支持自动化的编程工具和其他应用程序公开对象、方法和属性。
自动化对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetTypeInfoCount接口数(@是否)检索对象是否提供的类型信息接口数(0不提供 1提供)。
GetTypeInfo类信息(类型,区域,对象)检索对象的类型信息,然后可以使用该信息获取接口的类型信息。
GetIDsOfNames映射(IID_NULL,名称,名数,区域,@标号)将单个成员和一组可选的参数名称映射到一组相应的数组指针.区域:1033美国;2052中国;2048系统默认;
Invoke调用(标号,IID_NULL,区域,标志,参数,结果,0,0)提供对对象公开的属性和方法的访问。标志:1方法;2属性读;3属性写;4参照赋值
英文名字中文名称作用解释
INewShortcutHookA新快捷对象公开用于创建新的 Internet 快捷方式的方法。
新快捷对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
SetReferent改引用(文字,窗口)设置快捷方式对象的引用。(ANSI)
GetReferent取引用(字符,大小)获取快捷方式对象的引用。(ANSI)
SetFolder改目录(路径)设置快捷方式对象的文件夹名称。(ANSI)
GetFolder取目录(路径,大小)获取快捷方式对象的文件夹名称。(ANSI)
GetName名称(内容,大小)获取快捷方式对象的文件名,而不带扩展名。(ANSI)
GetExtension扩展名(内容,大小)获取快捷方式对象的文件扩展名。(ANSI)

对象库-常数
中文名称常量英文名称作用
无呼叫调度0CWMO_DEFAULT无呼叫调度
调度调用1CWMO_DISPATCH_CALLS从"等对象组"调度调用(默认值为无呼叫调度)
调度消息2CWMO_DISPATCH_WINDOW_MESSAGES在 ASTA 或 STA 中启用从"等对象组"调度窗口消息
同步调度1COWAIT_WAITALL仅当与同步对象关联的所有句柄都已发出信号且已收到输入事件时调用才会从"等多事件"返回
异步调度2COWAIT_ALERTABLE如果异步过程调用(APC)已使用对QueueUserAPC函数的调用将排队到调用线程则从"等多事件"返回
输入调度4COWAIT_INPUTAVAILABLE如果队列存在输入,即使输入已删除,调用从"等多事件"返回。
调度呼叫8COWAIT_DISPATCH_CALLS在 ASTA 中从"等多事件"调度调用。
调度窗口16COWAIT_DISPATCH_WINDOW_MESSAGES允许从 ASTA 或 STA 中的"等多事件"调度窗口消息。
单个连接0REGCLS_SINGLEUSE使用"获取类库"将应用程序连接到类对象后,将从公共视图中删除该类对象
多个连接1REGCLS_MULTIPLEUSE多个应用程序可以通过调用"获取类库"连接到类对象。
多个独立2REGCLS_MULTI_SEPARATE用于通过调用"获取类库"注册单独的类工厂。
暂停连接4REGCLS_SUSPENDED暂停指定 CLSID 的注册和激活请求,直到调用"获取类库"为止。
服务代理8REGCLS_SURROGATE类对象是用来运行 DLL 服务器的代理项进程。
聚合封送16REGCLS_AGILE类对象聚合自由线程封送处理器和将对所有项目内公寓可见。

文字组类——数据结构:

中文名字英文名称长度作用解释
文字组类CALPOLESTR8指定用于指定属性可以接受的预定义字符串的字符串的计数数组。
文字组类——成员表
中文英文类型作用解释
大小cElems整数数组的大小。
数组pElems整数指向 宽字符串 值数组的指针,每个值对应于特定属性可以接受的允许值。使用任务分配和任务释放

加速器信息类——数据结构:

中文名字英文名称长度作用解释
加速器信息类OLEINPLACEFRAMEINFO20包含有关容器在就地会话期间支持的加速器的信息。
加速器信息类——成员表
中文英文类型作用解释
大小cb整数此结构的大小(以字节为单位)。
多窗fMDIApp整数指示容器是否为 MDI 应用程序。
框架hwndFrame整数容器的顶级框架窗口的句柄。
键表haccel整数容器希望在就地编辑会话期间使用的快捷键表的句柄。
键数cAccelEntries整数快捷键表的中的加速键数。

谓词类——数据结构:

中文名字英文名称长度作用解释
谓词类OLEVERB16定义对象支持的谓词。 嵌入对象.枚举 方法创建一个枚举器,该枚举器可以枚举对象的这些结构,并提供指向枚举器的 枚举器 的指针。
谓词类——成员表
中文英文类型作用解释
标识lVerb整数与此谓词关联的整数标识符。
名称lpszVerbName整数指向包含谓词名称的字符串的指针。
标志fuFlags整数在 Windows 中,从标志常量中提取的一组标志。除MF_BITMAP、MF_OWNERDRAW和MF_POPUP外,支持 AppendMenu 中定义的所有标志。
属性grfAttribs整数枚举谓词属性的组合。

流传输类——数据结构:

中文名字英文名称长度作用解释
流传输类STGMEDIUM12表示 IAdviseSink、 IDataObject 和 IOleCache 接口用于数据传输操作的通用全局内存句柄。
流传输类——成员表
中文英文类型作用解释
介质tymed整数存储介质的类型。封送和取消封送例程使用此值来确定所使用的联合成员。
数据DUMMYUNIONNAME整数接收进程可用于访问正在传输的数据的句柄、字符串或接口指针。 如果 tymed 为TYMED_NULL,则未定义联合成员;否则,它是以下值之一。 DUMMYUNIONNAME.hBitmap 位图句柄。 tymed 成员是TYMED_GDI。DUMMYUNIONNAME.hMetaFilePict 图元文件句柄。 tymed 成员是TYMED_MFPICT。
DUMMYUNIONNAME.hEnhMetaFile 增强的图元文件句柄。 tymed 成员是TYMED_ENHMF。
DUMMYUNIONNAME.hGlobal全局内存句柄。 tymed 成员TYMED_HGLOBAL。
DUMMYUNIONNAME.lpszFileName指向包含数据的磁盘文件路径的指针。 tymed 成员是TYMED_FILE。
DUMMYUNIONNAME.pstm指向 IStream 接口的指针。 tymed 成员是TYMED_ISTREAM。DUMMYUNIONNAME.pstg指向 IStorage 接口的 指针。 tymed 成员是TYMED_ISTORAGE。
接口pUnkForRelease整数 指向接口实例的指针,该接口实例允许发送进程在接收进程调用 ReleaseStgMedium 函数时控制存储的释放方式。

剪贴板类——数据结构:

中文名字英文名称长度作用解释
剪贴板类FORMATETC20表示通用剪贴板格式。 它已增强为包含目标设备、数据的各个方面或视图以及存储介质指示器。
剪贴板类——成员表
中文英文类型作用解释
格式cfFormat整数感兴趣的剪贴板格式
目标ptd整数指向 目标设备类 结构的指针,该结构包含有关要为其构成数据的目标设备的信息。
方位dwAspect整数指示呈现中应包含的详细信息量。 此参数应为 视图方位 枚举值之一。
拆分lindex整数必须跨页面边界拆分数据的一部分。最常见的值为-1,用于标识所有数据。对于缩略图和图标方面,将忽略。
介质tymed整数用于传输对象数据的存储介质的类型。

目标设备类——数据结构:

中文名字英文名称长度作用解释
目标设备类DVTARGETDEVICE16+指定有关要为其编写数据的目标设备的信息。
目标设备类——成员表
中文英文类型作用解释
大小tdSize整数 结构的大小(以字节为单位)。
驱动tdDriverNameOffset整数从结构开头到设备驱动程序名称的偏移量(以字节为单位)
设备tdDeviceNameOffset整数从结构开头到设备名称的偏移量(以字节为单位)
端口tdPortNameOffset整数从结构开头到端口名称的偏移量(以字节为单位)
模型tdExtDevmodeOffset整数从结构开头到通过调用 DocumentProperties 检索的 DEVMODE 结构的偏移量(以字节为单位)。
数据tdData字节包含目标设备数据的字节数组。(自定义长度)对于偏移值为零 的名称,无需在 tdData 中包含空字符串。

存储介质——指示在数据传输中使用的存储介质的类型。TYMED

英文名称数值作用解释
TYMED_NULL0当前没有传递任何数据。
TYMED_HGLOBAL1存储介质是 HGLOBAL(全局内存句柄) 。 使用 GMEM_MOVEABLE 标志分配全局句柄。 如果 STGMEDIUM 的punkForRelease 成员为 NULL,则目标进程应使用 GlobalFree 释放内存。
TYMED_FILE2该存储介质是由路径标识的磁盘文件。 如果 STGMEDIUMpunkForRelease 成员为 NULL,则目标进程应使用 OpenFile 删除该文件。
TYMED_ISTREAM4存储介质是由 IStream 指针标识的流对象。 使用 ISequentialStream::Read 读取数据。 如果 STGMEDIUMpunkForRelease 成员不是 NULL,则目标进程应使用 Release 释放流组件。
TYMED_ISTORAGE8存储介质是由 IStorage 指针标识的存储组件。 数据位于此 IStorage 实例包含的流和存储中。 如果 STGMEDIUMpunkForRelease 成员不是 NULL,则目标进程应使用 Release 释放存储组件。
TYMED_GDI16存储介质是 HBITMAP) (GDI 组件。 如果 STGMEDIUMpunkForRelease 成员为 NULL,则目标进程应使用DeleteObject 删除位图。
TYMED_MFPICT32存储介质是 METAFILEPICT) (图元文件。 使用 GDI 函数访问图元文件的数据。 如果 STGMEDIUMpunkForRelease 成员为 NULL,则目标进程应使用 DeleteMetaFile 删除位图。
TYMED_ENHMF64存储介质是 HENHMETAFILE) (增强的图元文件。 如果 STGMEDIUMpunkForRelease 成员为 NULL,则目标进程应使用 DeleteEnhMetaFile 删除位图。

嵌入对象——功能模型:

英文名称中文名字作用解释
嵌入对象IOleObject作为嵌入对象向其容器提供基本功能并与容器通信的主要方式。
嵌入对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
SetClientSite改站点(接口)通知嵌入对象在其容器中的显示位置(称为“客户端站点”)。
GetClientSite取站点(@接口)检索指向嵌入对象的客户端站点的指针。
SetHostNames改文档(程序名,文档名)提供对象及其容器应用程序的名称以及嵌入它的复合文档。
Close断开(状态)将嵌入对象从 运行 状态更改为已加载状态。 断开链接对象与其链接源的连接。
SetMoniker改名称(形式,名称对象)通知对象其容器的名称对象、相对于容器的对象自己的名字对象或对象的完整名字对象。名称对象形式
GetMoniker取名称(方法,形式,@名称对象)通知对象其容器的名称对象、相对于容器的对象自己的名字对象或对象的完整名字对象。
InitFromData初始化(数据对象,真,0)使用指定数据对象中的数据初始化新创建的对象,该对象可以驻留在同一容器中,也可以驻留在剪贴板上。
真表示容器在自身内部插入新对象,并使用当前所选内容中的数据初始化该对象; 假 表示更常规的编程数据传输,最有可能来自当前所选内容以外的源。
GetClipboardData剪切板(0,数据对象)检索包含调用此方法的嵌入对象的当前内容的数据对象。 使用指向此数据对象的指针,可以使用与原始对象相同的数据创建新的嵌入对象。
DoVerb执行(谓词标识,消息类,站点,0,窗口,矩形类)为了响应最终用户的操作而请求对象执行某个操作。为 谓词 中的对象枚举可能的操作。
EnumVerbs谓词(@枚举器)公开一个下拉菜单,按谓词编号按升序列出枚举器可用的谓词。
Update更新汇报对象处理程序或链接对象的数据或视图缓存。
IsUpToDate最新检查对象是否为最新版本。返回0是最新,1不确定
GetUserClassID取类(标识类)检索对象的类标识符,即对应于向最终用户标识对象的字符串的 CLSID。
GetUserType类名(形式,@名称)检索对象的用户类型名称,以便在用户界面元素中显示。形式:1完整名,2短类名,3程序名
SetExtent改面(方位,尺寸类)修改对象其容器为其分配了多少显示空间。视图方位常量
GetExtent取面(方位,尺寸类)检索正在运行的对象的当前显示大小。视图方位常量支持新方面
Advise通知(对象,@令牌)在复合文档对象与调用对象的建议接收器之间建立咨询连接,调用对象通过该接收器在复合文档对象重命名、保存或关闭时接收通知。
Unadvise删除通知(令牌)删除以前建立的咨询连接。
EnumAdvise咨询(@枚举器)检索指向枚举器的指针,该枚举器可用于枚举为 对象注册的咨询连接,以便容器可以在关闭之前知道要释放的内容。
GetMiscStatus状态(方位,@状态)检索对象在创建和加载时的状态。视图方位常量
SetColorScheme色板(调色类)指定对象应用程序在编辑指定对象时应使用的调色板。

名称对象——功能模型:

英文名称中文名字作用解释
名称对象IMoniker允许您使用名字对象,该对象包含唯一标识 COM 对象的信息。接口指针的对象可以定位、激活和访问标识的对象,而无需提供有关该对象在分布式系统中实际位置的任何其他特定信息。
名字对象用作 COM 中链接的基础。 链接对象包含标识其源的名字对象。 当用户激活链接对象以对其进行编辑时,将绑定名字对象;这会将链接源加载到内存中。
名称对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
GetClassID类(标识)检索对象的 CLSID的类标识符。
IsDirty已改确定对象自上次保存到流以来是否已更改。更改返回0,否则返回1
Load加载(流)从先前保存的流中初始化对象。
Save保存(流,模式)将对象保存到指定流。模式为真保存后清除更新标志
GetSizeMax大小(@长度)检索保存对象所需的流的大小。
BindToObject绑对象(绑定,名称,接口标识,@接口)绑定到指定的 对象。涉及查找对象,在必要时将其置于运行状态,并为调用方提供指向所标识对象上指定接口的指针。
BindToStorage绑存储(绑定,名称,存储标识,@存储)绑定到指定对象的存储。不会激活由名字对象标识的对象。
Reduce缩减(绑定,简化,名称,@新名)名字对象缩减为最简单的形式。名称对象简化程度
ComposeWith组合(名称,真,@新名)通过将当前名字对象与指定的名字对象组合在一起,创建新的复合名字对象。真代表需要非泛型复合,假为创建泛型泛型复合
Enum枚举(真,@枚举器)检索指向复合名字对象的组件的枚举器的指针。真=从左到右枚举名字对象,假=从右到左。
IsEqual相等(名称对象)确定此名字对象是否与指定的名字对象相同。
Hash哈希(@值)使用名字对象的内部状态创建哈希值。
IsRunning运行(绑定,名称,@新名)确定此名字对象标识的对象当前是否已加载并正在运行。
GetTimeOfLastChange更改(绑定,名称,文件时间类)检索此名字对象标识的对象上次更改的时间。
Inverse反向(@名称)创建一个名字对象,该名字对象是此名字对象的反数。 在此名字对象或类似结构之一的右侧组合时,名字对象将一无所获。
CommonPrefixWith前缀(名称,@新名)基于此名字对象与指定名字对象共有的前缀创建新的名字对象。
RelativePathTo相对(名称,@新名)在此名字对象和指定的名字对象之间创建相对名字对象。
GetDisplayName显示(绑定,名称,缓冲区)检索名字对象的显示名称。
ParseDisplayName转换(绑定,名称,剩余名,@字数,@新名)将显示名称转换为名字对象。
IsSystemMoniker系统(@种类)确定此名字对象是否是系统提供的名字对象类之一。

通知对象——功能模型:

英文名称中文名字作用解释
通知对象IAdviseSink使容器和其他对象能够接收相关对象中发生的数据更改、查看更改和复合文档更改的通知。
例如,容器应用程序需要此类通知,以使其链接和嵌入对象的缓存演示文稿保持最新。
对 IAdviseSink 方法的调用是异步的,因此发送调用,然后执行下一个指令,而无需等待调用的返回。
具有指向名字对象 名称对象 接口的指针的对象可以定位、激活和访问标识的对象,
而无需提供有关该对象在分布式系统中实际位置的任何其他特定信息。
通知对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
OnDataChange数据更改(剪贴板类,流传输类)由服务器调用以通知数据对象的当前注册通知接收器对象中的数据已更改。
OnViewChange视图更改(方位,-1)通知对象的已注册建议接收器其视图已更改。
OnRename改名(名称对象)由服务器调用,以通知所有已注册的通知接收器对象已重命名。
OnSave保存由服务器调用,以通知所有已注册的咨询接收器对象已保存。
OnClose关闭由服务器调用,以通知所有已注册的咨询接收器对象已从运行状态更改为加载状态。

运行对象——功能模型:

英文名称中文名字作用解释
运行对象IRunningObjectTable管理对正在运行的对象表的访问 (ROT) ,这是每个工作站上可全局访问的查找表。 工作站的 ROT 跟踪可由名字对象标识且当前在工作站上运行的对象。
当客户端尝试将名字对象绑定到对象时,名字对象会检查 ROT 以查看对象是否已在运行;这允许名字对象绑定到当前实例,而不是加载新的实例。
运行对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
Register注册(强弱,注册对象,名称对象,@ROT条目)在运行的对象表中注册对象及其标识名字对象, (ROT) 。强弱:1=弱,2=强
Revoke删除(条目)从运行的对象表中删除一个条目。
IsRunning运行(名称对象)确定由指定名字对象标识的对象当前是否正在运行。
GetObject获取(名称对象,@对象)确定由指定名字对象标识的对象是否正在运行,如果正在运行,则检索指向该对象的指针。
NoteChangeTime记录(条目,文件时间类)记录上次修改正在运行的对象的时间。
GetTimeOfLastChange上次(名称对象,文件时间类)检索上次修改对象的时间。
EnumRunning枚举(@枚举器)创建并返回指向枚举器的指针,该枚举器可以列出当前在运行的对象表中注册的所有对象的名字对象 (ROT) 。

绑定对象——功能模型:

英文名称中文名字作用解释
绑定对象IBindCtx提供对绑定上下文的访问,绑定上下文是一个存储有关特定名字对象绑定操作的信息的对象。
绑定对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
RegisterObjectBound注册对象(接口)向绑定上下文注册对象,以确保该对象在释放绑定上下文之前保持活动状态。
RevokeObjectBound注销对象(接口)从绑定上下文中删除 对象,撤消对 注册对象 的先前调用。
ReleaseBoundObjects释放对象释放指向以前通过调用 注册对象 注册的所有对象的指针。
SetBindOptions改选项(绑定选项三)为绑定上下文中存储的绑定参数设置新值。
GetBindOptions取选项(绑定选项三)检索存储在此绑定上下文中的绑定选项。
GetRunningObjectTable对象表(@运行对象)检索指向运行此绑定上下文的计算机 (ROT) 正在运行的对象表的接口指针。
RegisterObjectParam注册字键(键,对象)将 对象与绑定上下文的字符串键型指针表中的字符串键相关联。
GetObjectParam获取字键(键,@对象)检索指向与绑定上下文的字符串键型指针表中的指定键关联的对象的接口指针。
EnumObjectParam枚举字键(@枚举器)检索指向接口的指针,该接口可用于枚举绑定上下文的字符串键型指针表的键。
RevokeObjectParam注销字键(键)从绑定上下文的字符串键化对象表中删除指定的键及其关联的指针。

服务器类——数据结构:

中文名字英文名称长度作用解释
服务器类COSERVERINFO16向激活函数标识远程计算机资源。
服务器类——成员表
中文英文类型作用解释
预留dwReserved1整数 此成员为保留成员,必须为 0。
名称pwszName整数计算机的名称。
身份pAuthInfo整数指向 身份验证类 结构的指针,用于替代计算机远程激活的默认激活安全性。
备用dwReserved2整数此成员为保留成员,必须为 0。

身份验证类——数据结构:

中文名字英文名称长度作用解释
身份验证类COAUTHINFO28包含从客户端计算机向服务器计算机发出远程激活请求时使用的身份验证设置。
身份验证类——成员表
中文英文类型作用解释
服务dwAuthnSvc整数 要使用的身份验证服务。 有关值的列表,请参阅 身份验证服务常量
授权dwAuthzSvc整数要使用的授权服务。 有关值列表,请参阅 授权常量。 若要使用 NT 身份验证服务,请指定RPC_C_AUTHZ_NONE。
主名pwszServerPrincName整数要与身份验证服务一起使用的服务器主体名称。 如果使用RPC_C_AUTHN_WINNT,则主体名称必须为 NULL。
级别dwAuthnLevel整数要使用的身份验证级别。 有关值的列表,请参阅 身份验证级别常量
模拟dwImpersonationLevel整数要使用的模拟级别。 有关值列表,请参阅 模拟级别常量。 此值必须RPC_C_IMP_LEVEL_IMPERSONATE或更高版本。
数据pAuthIdentityData整数指向建立非默认客户端标识的 用户密码类 结构的指针。 如果此参数为 NULL,则使用客户端的实际标识。
能力dwCapabilities整数指示此代理的其他功能。 目前,此成员必须是EOAC_NONE (0x0) 或RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH (0x1) 。

用户密码类——数据结构:

中文名字英文名称长度作用解释
用户密码类COAUTHIDENTITY28包含用户名和密码。
用户密码类——成员表
中文英文类型作用解释
用户User整数 用户名。
名长UserLength整数不终止 0 的 用户 字符串的长度。
域名Domain整数域或工作组名称。
域长DomainLength整数域字符串的长度,不包括终止 0。
密码Password整数域或工作组中的用户密码。
类文PasswordLength整数密码字符串的长度,不终止 0。
标志Flags整数指示字符串是否为宽字符串。1=ANSI,2=UNICODE

绑定参数三——数据结构:

中文名字英文名称长度作用解释
绑定参数三BIND_OPTS336包含名字对象绑定操作期间使用的参数。
绑定参数三——成员表
中文英文类型作用解释
大小cbStruct整数 结构的大小(以字节为单位)。
操作grfFlags整数控制名字对象绑定操作方面的标志。1交互,2无兴趣 绑定操作标志的任意组合。
模式grfMode整数当打开包含由该名字对象标识的对象的文件时应使用的标志。 可能的值为 视图方位 常量。
时间dwTickCountDeadline整数调用方希望完成绑定操作的时钟时间(以毫秒为单位)。
跟踪dwTrackFlags整数名字对象可以在链接跟踪期间使用此值。可以通过一些适当的机制搜索原始数据来尝试重新建立链接。参考 链接对象.找目标
类文dwClassContext整数类上下文,取自类上下文枚举,用于实例化对象。
区域locale整数LCID 值,该值指示客户端对要由它们绑定到的对象使用的区域设置的首选项。
时间pServerInfo整数指向 服务器类 结构的指针。 此成员允许调用 名称对象.绑对象 的客户端指定服务器信息。
窗口hwnd整数成为提升 UI 所有者的窗口的句柄(如果适用)。

字符串键标志——与 绑定对象.注册字键 方法一起使用的一组字符串键,用于指定绑定上下文。

英文名称字符串键作用解释
STR_AVOID_DRIVE_RESTRICTION_POLICY"Avoid Drive Restriction Policy"在 Windows XP SP2 中引入。 指定此绑定上下文以允许数据源的客户端替代隐藏的驱动器号策略,并启用对被阻止驱动器上的数据源的视图对象的访问。与 IShellFolder::BindToObject 或 IShellItem::BindToHandler 一起使用。系统支持管理员控制的策略,这些策略可隐藏指定的驱动器号,以阻止用户通过 Windows 资源管理器访问这些驱动器。 当此策略处于活动状态时,结果是在被策略阻止的驱动器上调用时,使用 IShellFolder::CreateViewObject 方法创建的视图对象和其他处理程序将失败。
STR_BIND_DELEGATE_CREATE_OBJECT"Delegate Object Creation"在 Windows Vista 中引入。 指定此绑定上下文,使 IShellFolder::BindToObject 方法使用由pbc 参数指定的对象来创建目标对象;在这种情况下,由 IBindCtx::RegisterObjectParam 调用中的 punk 参数指定的对象必须实现 ICreateObject 接口。与 IShellFolder::BindToObject 或 IShellItem::BindToHandler 一起使用。
STR_BIND_FOLDER_ENUM_MODE"Folder Enum Mode"在 Windows 7 中引入。 传递给 IShellFolder::P arseDisplayName ,具有 FOLDER_ENUM_MODE 值来控制已分析项的枚举模式。 FOLDER_ENUM_MODE值通过实现 IObjectWithFolderEnumMode 的对象在绑定上下文中传递。具有不同枚举模式的项在 canonic 上比较 (SHCIDS_CANONICALONLY) 不同,因为它们枚举不同的项集。如果某个项不支持枚举模式 (,因为它不是文件夹,或者它不提供枚举模式) 则它是在默认枚举模式下创建的。
STR_BIND_FOLDERS_READ_ONLY"Folders As Read Only"在 Windows 7 中引入。 传递给 IShellFolder::P arseDisplayName 以及 STR_FILE_SYS_BIND_DATA。 这会强制进行简单的分析,同时沿从中获取本地化名称字符串的路径探测 Desktop.ini 文件。 这可以避免探测路径上的文件夹,在表示服务器或共享的文件夹的情况下,这些文件夹可能需要大量时间和资源。 Desktop.ini 文件缓存在某些位置,因此它至少与探测文件夹属性和探测 Desktop.ini(如果该文件夹应变为只读)一样高效。
STR_BIND_FORCE_FOLDER_SHORTCUT_RESOLVE"Force Folder Shortcut Resolve"在 Windows XP SP2 中引入。 指定此绑定上下文以强制文件夹快捷方式解析指向其目标的链接。文件夹快捷方式是指向同一命名空间中另一个文件夹项的文件夹项,使用链接 (快捷方式) 保存目标的 IDList。 链接解析为跟踪目标,以防其被移动或重命名。 例如,Windows XP “我的网络位置” 文件夹和 Windows Vista 计算机 文件夹可以包含使用 “添加网络位置” 向导创建的文件夹快捷方式。 为了提高性能, IShellFolder::BindToObject 方法默认不解析指向网络文件夹的链接。与 IShellFolder::BindToObject 或 IShellItem::BindToHandler 一起使用。
STR_DONT_PARSE_RELATIVE"Don't Parse Relative"在 Windows XP 中引入。 指定此绑定上下文以防止对桌面文件夹上的 IShellFolder::P arseDisplayName 方法的调用将相对路径视为相对于桌面;在这种情况下,如果指定了此绑定上下文,则分析会失败。
STR_DONT_RESOLVE_LINK"Don't Resolve Link"在 Windows Vista 中引入。 指定此绑定上下文以指示 IShellItem 不解析在 IShellItem::BindToHandler 中使用 BHID_LinkTargetItem GUID 时获取的链接目标。
STR_FILE_SYS_BIND_DATA"File System Bind Data"在 Windows XP 中引入。 指定此绑定上下文以向 IShellFolder::P arseDisplayName 方法提供文件元数据,该方法使用此方法,而不是尝试检索实际文件元数据。 关联的对象必须实现 IFileSystemBindData ,并且可以选择性地实现 IFileSystemBindData2。 默认情况下, IShellFolder::P arseDisplayName 方法验证文件是否存在,并使用文件的实际元数据填充 ID 列表。
STR_FILE_SYS_BIND_DATA_WIN7_FORMAT"Win7FileSystemIdList"在 Windows 8.1 中引入。 指定此绑定上下文以指示应在 STR_FILE_SYS_BIND_DATA 绑定上下文中提供的数据来创建 Windows 7 格式的 ItemID 列表。”
STR_GET_ASYNC_HANDLER"GetAsyncHandler"在 Windows 7 中引入。 在与 UI 相同的线程上检索处理程序时,请指定此绑定上下文。 应避免任何内存密集型活动,例如涉及磁盘或网络访问的活动。
STR_GPS_BESTEFFORT"GPS_BESTEFFORT"在 Windows Vista 中引入。 在请求 IPropertySetStorage 或 IPropertyStore 处理程序时指定此绑定上下文。 此值与 IShellFolder::BindToObject 一起使用。 有关详细信息,请参阅 GPS_BESTEFFORT 标志。
STR_GPS_DELAYCREATION"GPS_DELAYCREATION"在 Windows Vista 中引入。 在请求 IPropertySetStorage 或 IPropertyStore 处理程序时指定此绑定上下文。 此值与 IShellFolder::BindToObject 一起使用。 有关详细信息,请参阅 GPS_DELAYCREATION 标志。
STR_GPS_FASTPROPERTIESONLY"GPS_FASTPROPERTIESONLY"在 Windows Vista 中引入。 在请求 IPropertySetStorage 或 IPropertyStore 处理程序时指定此绑定上下文。 此值与 IShellFolder::BindToObject 一起使用。 有关详细信息,请参阅 GPS_FASTPROPERTIESONLY 标志。
STR_GPS_HANDLERPROPERTIESONLY"GPS_HANDLERPROPERTIESONLY"在 Windows Vista 中引入。 在请求 IPropertySetStorage 或 IPropertyStore 处理程序时指定此绑定上下文。 此值与 IShellFolder::BindToObject 一起使用。 有关详细信息,请参阅 GPS_HANDLERPROPERTIESONLY 标志。
STR_GPS_NO_OPLOCK"GPS_NO_OPLOCK"在 Windows 7 中引入。 在请求 IPropertySetStorage 或 IPropertyStore 处理程序时指定此绑定上下文。 此值与 IShellFolder::BindToObject 一起使用。 有关详细信息,请参阅 GPS_NO_OPLOCK 标志。
STR_GPS_OPENSLOWITEM"GPS_OPENSLOWITEM"在 Windows Vista 中引入。 在请求 IPropertySetStorage 或 IPropertyStore 处理程序时指定此绑定上下文。 此值与 IShellFolder::BindToObject 一起使用。 有关详细信息,请参阅 GPS_OPENSLOWITEM 标志。
STR_IFILTER_FORCE_TEXT_FILTER_FALLBACK仅限 Windows Vista。 指定此绑定上下文会导致调用 IShellFolder::BindToObject 方法,该方法请求文件系统对象的 IFilter 接口返回文本筛选器(如果没有其他筛选器可用)。 此值未定义为 Windows 7。
STR_IFILTER_LOAD_DEFINED_FILTER仅限 Windows Vista。 指定此绑定上下文会导致调用 IShellFolder::BindToObject 方法,该方法请求文件系统对象的 IFilter 接口在找不到已注册的筛选器时不返回回退筛选器。
STR_INTERNAL_NAVIGATE"Internal Navigation"在 Windows Vista 中引入。 指定此绑定上下文,以便在调用 IPersistHistory::LoadHistory 方法时从内部导航流加载历史记录。 内部导航是同一视图中的导航。
STR_INTERNETFOLDER_PARSE_ONLY_URLMON_BINDABLE"Validate URL"在 Windows 7 中引入。 如果客户端希望 Internet Shell 文件夹处理程序为任何有效 URL 生成 IDList(如果无法为该 URL 创建 DAV 类型文件夹),请使用 STR_PARSE_PREFER_FOLDER_BROWSING 指定此绑定上下文。 未验证 URL 是否存在;仅检查其语法,并且具有已注册的协议处理程序。
STR_ITEM_CACHE_CONTEXT"ItemCacheContext"在 Windows 7 中引入。 指定此绑定上下文以指示 IShellFolder::P arseDisplayName 和 IPersistFolder3::InitializeEx 的实现,以缓存可在 Shell 项实例化中存在的内存密集型帮助程序对象,而不是在每次创建 Shell 项时重新创建这些对象。 关联的对象是另一个绑定上下文对象,最初为空。 这应生成单独的绑定上下文对象,该对象可通过 IBindCtx::GetObjectParam 或 IBindCtx::Register.ObjectParam 进行访问。调用方必须在调用 SHCreateItemFromParsingName 时通过提供此绑定上下文参数来选择加入此行为。 通过这样做,可以优化连续绑定到多个分析名称的行为。 绑定上下文对象的生存期应跨 Shell 项的多个实例及其各个绑定上下文。
STR_NO_VALIDATE_FILENAME_CHARS"NoValidateFilenameChars"在 Windows Vista 中引入。 指定此绑定上下文以允许文件名中显示无效的文件名字符。 默认情况下,对 IShellFolder::P arseDisplayName 方法的调用会拒绝文件名中非法的字符。 此绑定上下文仅与STR_FILE_SYS_BIND_DATA绑定上下文结合使用才有意义。
STR_PARSE_ALLOW_INTERNET_SHELL_FOLDERS"Allow binding to Internet shell folder handlers and negate STR_PARSE_PREFER_WEB_BROWSING"在 Windows Vista 中引入。 指定此绑定上下文以允许调用 Desktop 文件夹中的 IShellFolder::P arseDisplayName 方法以分析 URL。 如果指定了此绑定上下文,它将替代 STR_PARSE_PREFER_WEB_BROWSING。
STR_PARSE_AND_CREATE_ITEM在 Windows 7 中引入。 指定此绑定上下文以指示数据源实现 IShellFolder::P arseDisplayName 以优化 SHCreateItemFromParsingName 的行为。通常, SHCreateItemFromParsingName 对要分析的名称执行两个绑定操作:一个通过,一个到 IShellFolder::P arseDisplayName ,另一个用于创建 Shell 项。 如果支持 STR_PARSE_AND_CREATE_ITEM 绑定上下文,则通过在 IShellFolder::P arseDisplayName 绑定期间创建 Shell 项并通过 IParseAndCreateItem::SetItem 存储 Shell 项,可以避免第二个绑定。 SHCreateItemFromParsingName 然后使用存储的 Shell 项,而不是创建一个。此参数适用于所分析的名称的最后一个元素。 例如,在名称“C:\Folder1\File.txt”中,数据应用于 File.txt。
STR_PARSE_DONT_REQUIRE_VALIDATED_URLS"Do not require validated URLs"仅限 Windows Vista。 指定在分析 URL 时,此绑定上下文在生成 IDList 之前不应要求 URL 存在。 如果无法为给定 URL 创建 DAV 文件夹,则当客户端需要 Internet Shell 文件夹处理程序为 URL 生成 IDList 时,请指定此绑定上下文和STR_PARSE_PREFER_FOLDER_BROWSING。
STR_PARSE_PARTIAL_IDLIST数值在 Windows Vista 中引入。 指定此绑定上下文以传递正在重新分析的原始项,当该项存储为 IShellItem 对象时,该对象也实现 IParentAndItem 接口。 在 Windows 7 之前,此值未在头文件中定义。 它可以由调用方定义,也可以作为其字符串值 L“ParseOriginalItem”传递。 从 Windows 7 起,该值在 Shlobj.h 中定义。 请注意,此标头与其他 STR 常量不同。
STR_PARSE_PREFER_FOLDER_BROWSING"Parse Prefer Folder Browsing"在 Windows XP 中引入。 指定此绑定上下文以启用对 Desktop 文件夹上的 IShellFolder::P arseDisplayName 方法的调用,以像分析文件夹一样分析 URL。 使用此绑定上下文绑定到 WebDAV 服务器。
STR_PARSE_PREFER_WEB_BROWSING"Do not bind to Internet shell folder handlers"在 Windows Vista 中引入。 指定此绑定上下文可阻止调用 Desktop 文件夹窗体分析 URL 上的 IShellFolder::P arseDisplayName 方法。 此绑定上下文可以通过 STR_PARSE_ALLOW_INTERNET_SHELL_FOLDERS重写。
STR_PARSE_PROPERTYSTORE"DelegateNamedProperties"在 Windows Vista 中引入。 指定此绑定上下文以替代 IShellFolder::P arseDisplayName 方法使用的默认属性存储区,并改用指定为 bind 参数的属性存储。 适用于委托文件夹。
STR_PARSE_SHELL_PROTOCOL_TO_FILE_OBJECTS"Parse Shell Protocol To File Objects"在 Windows XP SP2 中引入。 指定此绑定上下文以允许调用 Desktop 文件夹中的 IShellFolder::P arseDisplayName 方法,以使用“shell:”前缀表示法访问文件。
STR_PARSE_SHOW_NET_DIAGNOSTICS_UI"Show network diagnostics UI"在 Windows Vista 中引入。 指定此绑定上下文会导致调用 IShellFolder::P arseDisplayName 方法,以在网络路径分析失败时显示网络诊断对话框。
STR_PARSE_SKIP_NET_CACHE"Skip Net Resource Cache"在 Windows Vista 中引入。 指定此绑定上下文会导致调用 IShellFolder::P arseDisplayName 方法,以跳过检查网络共享缓存并直接与网络服务器联系。 缓存有关网络共享的信息以提高性能, 默认情况下,IShellFolder::P arseDisplayName 会检查此缓存。
STR_PARSE_TRANSLATE_ALIASES"Parse Translate Aliases"在 Windows XP 中引入。 指定此绑定上下文以将分析的属性传递给委托命名空间的 IShellFolder::P arseDisplayName 方法。 命名空间可以使用传递的属性,而不是尝试分析名称本身。
STR_PARSE_WITH_PROPERTIES仅限 Windows Vista。 一个分析绑定上下文,用于在调用 IShellFolder::P arseDisplayName 时传递一组属性和项的名称。 绑定上下文中的 对象实现 IPropertyStore ,并通过调用 IBindCtx::GetObjectParam 进行检索。DBFolder 是一个 Shell 数据源,表示搜索结果和基于查询的视图中的项。 DBFolder 通过查询 Windows 搜索系统来检索这些项目。 搜索结果中的项通过协议方案(例如“file:”或“mapi:”)进行标识。 DBFolder 通过委托给为这些协议创建的 Shell 数据源来提供这些项的行为。 有关详细信息 ,请参阅开发协议处理程序加载项 。当 DBFolder 将其分析操作委托给支持 Windows 搜索协议的 Shell 数据源时,此绑定上下文提供对该项查询结果中返回的值的访问权限。 这包括:System.ItemType (PKEY_ItemType)System.ParsingPath (PKEY_ParsingPath)System.ItemPathDisplay (PKEY_ItemPathDisplay)System.ItemNameDisplay (PKEY_ItemNameDisplay)如果客户端具有定义该项的一组属性,则此绑定上下文还可用于分析 DBFolder 项。 在这种情况下,应将空名称传递给 IShellFolder::P arseDisplayName。在 Windows 7 之前,此值未在头文件中定义。 它可以由调用方定义,也可以作为其字符串值传递: L"ParseWithProperties"。 从 Windows 7 起,该值在 Shlobj.h 中定义。 请注意,这是一个不同于定义其他 STR 常量的标头。
STR_PROPERTYBAG_PARAM"SHBindCtxPropertyBag"在 Windows 8 中引入。 指定此绑定上下文以指示绑定上下文参数是用于在绑定上下文中传递 VARIANT 值的属性包 (IPropertyBag) 。 有关更多详细信息,请参阅“备注”部分。
STR_SKIP_BINDING_CLSID"Skip Binding CLSID"在 Windows XP 中引入。 指定此绑定上下文可导致调用 IShellFolder::P arseDisplayName 或 IShellFolder::BindToObject 方法,以在分析或绑定时忽略特定的 Shell 命名空间扩展。 要忽略的命名空间的 CLSID 由 bind 参数的 IPersist::GetClassID 方法提供。注意: 此值在 Windows 2000 SP3 中引入,在 Shlobj.h 中定义,直到 Windows XP 移动到 Shobjidl.h。
STR_TRACK_CLSID"Track the CLSID"未使用。

绑定操作标志——控制名字对象绑定操作的各个方面。BIND_FLAGS

英文名称数值作用解释
BIND_MAYBOTHERUSER1如果指定了此标志,则名字对象实现可以与最终用户交互。 否则,名字对象实现不应以任何方式与用户交互,例如通过请求需要装载的网络卷的密码。 如果禁止在否则的情况下与用户交互,则名字对象实现可以使用不需要用户交互的其他算法,或者可能会失败并MK_E_MUSTBOTHERUSER错误。
BIND_JUSTTESTEXISTENCE2如果指定了此标志,则调用方对执行操作不感兴趣,而只是要了解在未指定此标志的情况下是否可以执行该操作。 例如,此标志允许调用方仅通过在 名称对象.绑对象 调用中使用此标志来指示是否确实存在对象的兴趣。 但是,名字对象实现可以忽略此可能的优化,并完全执行操作。 调用方必须能够处理这两种情况。

类上下文枚举——激活调用中使用的值,用于指示要在其中运行对象的执行上下文。CLSCTX

英文名称数值作用解释
CLSCTX_INPROC_SERVER0x1创建和管理此类的对象的代码是一个 DLL,它与指定类上下文的函数的调用方在同一个进程中运行。
CLSCTX_INPROC_HANDLER0x2管理此类的对象的代码是一个进程内处理程序。 这是一个 DLL,在客户端进程中运行,并在远程访问类的实例时实现此类的客户端结构。
CLSCTX_LOCAL_SERVER0x4创建和管理此类的对象的 EXE 代码在同一台计算机上运行,但在一个单独的进程空间中加载。
CLSCTX_INPROC_SERVER160x8已过时。
CLSCTX_REMOTE_SERVER0x10远程上下文。 用于创建和管理此类对象的 LocalServer32 或 LocalService 代码在不同的计算机上运行。
CLSCTX_INPROC_HANDLER160x20已过时。
CLSCTX_RESERVED10x40保留。
CLSCTX_RESERVED20x80保留。
CLSCTX_RESERVED30x100保留。
CLSCTX_RESERVED40x200保留。
CLSCTX_NO_CODE_DOWNLOAD0x400禁止从目录服务或 Internet 下载代码。 此标志不能与CLSCTX_ENABLE_CODE_DOWNLOAD同时设置。
CLSCTX_RESERVED50x800保留。
CLSCTX_NO_CUSTOM_MARSHAL0x1000如果激活使用自定义封送,则指定是否希望激活失败。
CLSCTX_ENABLE_CODE_DOWNLOAD0x2000允许从目录服务或 Internet 下载代码。 此标志不能与CLSCTX_NO_CODE_DOWNLOAD同时设置。
CLSCTX_NO_FAILURE_LOG0x4000CLSCTX_NO_FAILURE_LOG可用于替代 CoCreateInstanceEx 中失败的日志记录。0 = 自由日志记录。1 = 无论客户端指定什么,始终记录所有故障。2 = 无论指定了哪个客户端,都从不记录任何故障。如果缺少注册表项,则默认值为 0。
CLSCTX_DISABLE_AAA0x8000仅对此激活禁用“作为激活者激活”(AAA)。 此标志替代 EOLE_AUTHENTICATION_CAPABILITIES 枚举中EOAC_DISABLE_AAA标志的设置。 此标志不能与CLSCTX_ENABLE_AAA同时设置。 将在调用方标识下启动服务器进程的任何激活称为激活即激活器 (AAA) 激活。 禁用 AAA 激活允许在特权帐户 ((例如 LocalSystem) )下运行的应用程序,以帮助防止其标识用于启动不受信任的组件。 在这些调用期间,使用激活调用的库应用程序应始终设置此标志。 这有助于防止在特权提升安全攻击中使用库应用程序。 这是在库应用程序中禁用 AAA 激活的唯一方法,因为EOLE_AUTHENTICATION_CAPABILITIES枚举中的EOAC_DISABLE_AAA标志仅应用于服务器进程,而不适用于库应用程序。Windows 2000: 不支持此标志。
CLSCTX_ENABLE_AAA0x10000仅对此激活启用“作为激活者激活”(AAA)。 此标志替代 EOLE_AUTHENTICATION_CAPABILITIES 枚举中EOAC_DISABLE_AAA标志的设置。 此标志不能与 CLSCTX_DISABLE_AAA 同时设置。 将在调用方标识下启动服务器进程的任何激活称为激活即激活器 (AAA) 激活。 启用此标志允许应用程序将其标识传输到已激活的组件。Windows 2000: 不支持此标志。
CLSCTX_FROM_DEFAULT_CONTEXT0x20000从当前单元的默认上下文开始此激活。
CLSCTX_ACTIVATE_X86_SERVER0x40000活动X86服务器
CLSCTX_ACTIVATE_32_BIT_SERVER0x40000激活或连接到 32 位版本的服务器;如果未注册,则失败。
CLSCTX_ACTIVATE_64_BIT_SERVER0x80000激活或连接到 64 位版本的服务器;如果未注册,则失败。
CLSCTX_ENABLE_CLOAKING0x100000指定此标志后,COM 将线程的模拟令牌(如果存在)用于线程发出的激活请求。 如果未指定此标志,或者如果线程没有模拟令牌,COM 会将线程进程的进程令牌用于线程发出的激活请求。Windows Vista 或更高版本: 支持此标志。
CLSCTX_APPCONTAINER0x400000指示激活适用于应用容器。注意 此标志保留供内部使用,不应在代码中直接使用。
CLSCTX_ACTIVATE_AAA_AS_IU0x800000为 As-Activator 服务器的交互式用户激活行为指定此标志。 具有强名称的中等 IL Windows 应用商店应用可以使用此标志启动没有强名称的“As Activator”COM 服务器。 此外,还可以使用此标志绑定到由桌面应用程序启动的 COM 服务器正在运行的实例。
CLSCTX_RESERVED60x1000000预留
CLSCTX_ACTIVATE_ARM32_SERVER0x2000000活动ARM32位服务器
CLSCTX_PS_DLL0x80000000用于加载代理/存根 DLL。

身份验证服务常量——通过标识提供服务的安全包(例如 NTLMSSP、Kerberos 或 Schannel)来定义身份验证服务。

英文名称数值作用解释
RPC_C_AUTHN_NONE0无身份验证。
RPC_C_AUTHN_DCE_PRIVATE1DCE 私钥身份验证。
RPC_C_AUTHN_DCE_PUBLIC2DCE 公钥身份验证。
RPC_C_AUTHN_DEC_PUBLIC4DEC 公钥身份验证。 保留供将来使用。
RPC_C_AUTHN_GSS_NEGOTIATE9Snego 安全支持提供程序。
RPC_C_AUTHN_WINNT10NTLMSSP
RPC_C_AUTHN_GSS_SCHANNEL14Schannel 安全支持提供程序。 此身份验证服务支持 SSL 2.0、SSL 3.0、TLS 和 PCT。
RPC_C_AUTHN_GSS_KERBEROS16Kerberos 安全支持提供程序。
RPC_C_AUTHN_DPA17DPA 安全支持提供程序。
RPC_C_AUTHN_MSN18MSN 安全支持提供程序。
RPC_C_AUTHN_KERNEL20内核安全支持提供程序。
RPC_C_AUTHN_DIGEST21摘要安全支持提供程序。
RPC_C_AUTHN_NEGO_EXTENDER30NEGO 扩展程序安全支持提供程序。
RPC_C_AUTHN_PKU2U31PKU2U 安全支持提供程序。
RPC_C_AUTHN_MQ100MQ 安全支持提供程序。
RPC_C_AUTHN_DEFAULT0xFFFFFFFFL系统默认身份验证服务。 指定此值后,COM 会使用其常规安全一揽子协商算法来选取身份验证服务。 有关详细信息,请参阅 安全一揽子协商。

授权常量——定义服务器授权的内容。

英文名称数值作用解释
RPC_C_AUTHZ_NONE0服务器不执行任何授权。 目前,RPC_C_AUTHN_WINNT、RPC_C_AUTHN_GSS_SCHANNEL和RPC_C_AUTHN_GSS_KERBEROS都仅使用RPC_C_AUTHZ_NONE。
RPC_C_AUTHZ_NAME1服务器根据客户端的主体名称执行授权。
RPC_C_AUTHZ_DCE2服务器使用客户端的 DCE 特权属性证书 (PAC) 信息执行授权检查,这些信息会随使用绑定句柄进行的每个远程过程调用一起发送到服务器。 通常,根据 DCE 访问控制列表 (ACL) 检查访问。
RPC_C_AUTHZ_DEFAULT0xffffffffDCOM 可以使用其正常的安全一揽子协商算法选择授权级别。 有关详细信息,请参阅 安全一揽子协商。

身份验证级别常量——指定身份验证级别,指示为帮助保护数据完整性而提供的身份验证量。 每个级别都包含以前级别提供的保护。

英文名称数值作用解释
RPC_C_AUTHN_LEVEL_DEFAULT0告知 DCOM 使用其常规安全一揽子协商算法选择身份验证级别。 有关详细信息,请参阅 安全一揽子协商。
RPC_C_AUTHN_LEVEL_NONE1不执行身份验证。
RPC_C_AUTHN_LEVEL_CONNECT2仅当客户端与服务器建立关系时,才对客户端的凭据进行身份验证。 数据报传输始终改用RPC_AUTHN_LEVEL_PKT。
RPC_C_AUTHN_LEVEL_CALL3仅在服务器收到请求时在每个远程过程调用开始时进行身份验证。 数据报传输改用RPC_C_AUTHN_LEVEL_PKT。
RPC_C_AUTHN_LEVEL_PKT4验证接收的所有数据是否来自预期的客户端。
RPC_C_AUTHN_LEVEL_PKT_INTEGRITY5验证并验证客户端和服务器之间传输的任何数据均未修改。
RPC_C_AUTHN_LEVEL_PKT_PRIVACY6对之前的所有级别进行身份验证,并加密每个远程过程调用的参数值。

模拟级别常量——指定模拟级别,指示在模拟客户端时服务器授予的权限量。

英文名称数值作用解释
RPC_C_IMP_LEVEL_DEFAULT0DCOM 可以使用其常规安全一揽子协商算法选择模拟级别。 有关详细信息,请参阅 安全一揽子协商。
RPC_C_IMP_LEVEL_ANONYMOUS1客户端对服务器而言是匿名的。 服务器进程可以模拟客户端,但模拟令牌将不包含任何信息,并且无法使用。
RPC_C_IMP_LEVEL_IDENTIFY2服务器可以获取客户端的标识。 服务器可以模拟客户端进行 ACL 检查,但它不能作为客户端访问系统对象。
RPC_C_IMP_LEVEL_IMPERSONATE3服务器进程可以在代表客户端执行操作时模拟客户端的安全上下文。 此模拟级别可用于访问本地资源(如文件)。 在此级别模拟时,模拟令牌只能跨一个计算机边界传递。 Schannel 身份验证服务仅支持此级别的模拟。
RPC_C_IMP_LEVEL_DELEGATE4服务器进程可以在代表客户端执行操作时模拟客户端的安全上下文。 服务器进程还可以在代表客户端使用隐藏操作时向其他服务器发出传出调用。 服务器可以在其他计算机上使用客户端的安全上下文来访问本地和远程资源作为客户端。 在此级别模拟时,模拟令牌可以跨任意数量的计算机边界传递。

嵌入框架对象——功能模型:

英文名称中文名字作用解释
嵌入框架对象IOleInPlaceFrame控制容器的顶级框架窗口。此控件涉及允许容器将其菜单组插入复合菜单、将复合菜单安装到相应的窗口框架中,
以及从复合菜单中删除容器的菜单元素。它设置并显示与就地对象相关的状态文本。 它还启用或禁用框架的无模式对话框,并转换适用于容器帧的加速器击键。
嵌入框架对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
SetClientSite改站点(接口)通知嵌入对象在其容器中的显示位置(称为“客户端站点”)。
GetClientSite取站点(@接口)检索指向嵌入对象的客户端站点的指针。
SetHostNames改文档(程序名,文档名)提供对象及其容器应用程序的名称以及嵌入它的复合文档。
Close断开(状态)将嵌入对象从 运行 状态更改为已加载状态。 断开链接对象与其链接源的连接。
SetMoniker改名称(形式,名称对象)通知对象其容器的名称对象、相对于容器的对象自己的名字对象或对象的完整名字对象。名称对象形式

嵌入窗口对象——功能模型:

英文名称中文名字作用解释
嵌入窗口对象IOleInPlaceUIWindow由容器应用程序实现,并由对象应用程序用来协商文档或框架窗口中的边框空间。容器提供了一个 RECT 结构,
对象可以在其中放置工具栏和其他类似控件,确定工具实际上是否可以安装在对象的窗口框架周围,
为边框分配空间,并在对象与每个框架和文档窗口之间建立通信通道。
嵌入窗口对象——方法表
QueryInterface接口(标识,@指针)检索指向对象上支持的接口的指针。
AddRef计数递增对象上接口的引用计数。 对于指向对象上接口的指针的每个新副本,应调用此方法。
Release释放递减对象上接口的引用计数。前三项COM对象通用
SetClientSite改站点(接口)通知嵌入对象在其容器中的显示位置(称为“客户端站点”)。
GetClientSite取站点(@接口)检索指向嵌入对象的客户端站点的指针。
SetHostNames改文档(程序名,文档名)提供对象及其容器应用程序的名称以及嵌入它的复合文档。
Close断开(状态)将嵌入对象从 运行 状态更改为已加载状态。 断开链接对象与其链接源的连接。
SetMoniker改名称(形式,名称对象)通知对象其容器的名称对象、相对于容器的对象自己的名字对象或对象的完整名字对象。名称对象形式

名称对象分类——指示名字对象的类。

英文名字数值注释
MKSYS_NONE0指示自定义名字对象实现。
MKSYS_GENERICCOMPOSITE1指示系统的泛型复合名字对象类。
MKSYS_FILEMONIKER2指示系统的文件名字对象类。
MKSYS_ANTIMONIKER3指示系统的反名字对象类。
MKSYS_ITEMMONIKER4指示系统的项名字对象类。
MKSYS_POINTERMONIKER5指示系统的指针名字对象类。
MKSYS_CLASSMONIKER7指示系统的类名字对象类。
MKSYS_OBJREFMONIKER8指示系统的 OBJREF 名字对象类。
MKSYS_SESSIONMONIKER9指示系统的终端服务器会话名字对象类。
MKSYS_LUAMONIKER10指示系统的提升名字对象类。

名称对象缩减——指定名字对象应减少的距离。

中文名字英文名字数值注释
一次缩减MKRREDUCE_ONE0xC00000仅执行一个步骤来减少名字对象。 通常,调用方必须对特定类型的名字对象有特定了解才能利用此选项。
减为永久MKRREDUCE_TOUSER0x800000将名字对象减少为用户标识为永久性对象的窗体。如果不存在此类点,则应将此选项视为MKRREDUCE_ALL。
即将永久MKRREDUCE_THROUGHUSER0x400000将名字对象缩减为进一步缩减会将其缩减为用户不标识为永久性对象的窗体。 通常,这是与MKRREDUCE_TOUSER相同的阶段。
最简缩减MKRREDUCE_ALL0减少名字对象,直到它采用最简单的形式,即将其缩减为自身。

名称对象方法——指示正在设置或检索对象的名字对象的哪个部分。

中文名字英文名字数值注释
已有名称OLEGETMONIKER_ONLYIFTHERE1如果对象或容器的名字对象不存在,取名称 应返回失败0x80004005且不分配名字对象。
强制分配OLEGETMONIKER_FORCEASSIGN2如果对象或容器的名字对象不存在, 取名称 应创建一个。
释放名字OLEGETMONIKER_UNASSIGN3可以释放对象的名字对象 (但不需要) 执行此操作。
临时名字OLEGETMONIKER_TEMPFORUSER4如果对象的名字对象不存在, 取名称 可以创建一个临时名字对象,该名字对象可用于显示 (IMoniker::GetDisplayName) ,但不能用于绑定。 这使对象服务器能够返回对象的描述性名称,而不会产生创建和维护名字对象的开销,直到实际创建链接。

名称对象形式——指示正在设置或检索对象的名字对象的哪个部分。

中文名字英文名字数值注释
文件名OLEWHICHMK_CONTAINER1对象的容器的名字对象。 通常,这是一个文件名字对象。 此名字对象不会永久存储在 对象内,因为即使未加载对象,也可以重命名容器。
项名称OLEWHICHMK_OBJREL2对象相对于其容器的名字对象。 通常,这是一个项名字对象,它是对象的持久状态的一部分。 如果此名字对象构成到容器名字对象的末尾,则生成的名字对象是对象的完整名字对象。
完整名OLEWHICHMK_OBJFULL3对象的完整名字对象。 绑定到此名字对象会导致与 对象建立连接。 此名字对象不会永久存储在 对象内,因为即使未加载对象,也可以重命名容器。

保存对象状态——指示是否应在关闭前保存对象。

英文名字数值注释
OLECLOSE_SAVEIFDIRTY0如果对象脏,则应保存该对象。
OLECLOSE_NOSAVE1即使对象脏,也不应保存该对象。 此标志通常在删除对象时使用。
OLECLOSE_PROMPTSAVE2如果对象脏,则 连接嵌入对象.断开 实现应显示一个对话框,让最终用户确定是否保存对象。
但是,如果对象处于运行状态,但其用户界面不可见,则不应提示最终用户,并且应像指定OLECLOSE_SAVEIFDIRTY一样处理关闭。

枚举谓词属性——描述对象的指定谓词的属性。

英文名字数值注释
OLEVERBATTRIB_NEVERDIRTIES1执行此谓词不会导致对象成为脏,因此需要保存到永久性存储。
OLEVERBATTRIB_ONCONTAINERMENU2指示应出现在此对象的容器谓词菜单中的谓词。 OLEIVERB_HIDE、OLEIVERB_SHOW和OLEIVERB_OPEN从未设置过此值。

类名形式——指示与对象类关联的显示名称的不同变体。

英文名字数值注释
USERCLASSTYPE_FULL1类的完整类型名称。
USERCLASSTYPE_SHORT2短名称 (用于弹出菜单和 “链接 ”对话框) 最多 15 个字符。
USERCLASSTYPE_APPNAME3为 类提供服务的应用程序的名称,用于对话框中的结果文本。

多媒体库——音频和视频

微软提供的组件旨在使应用程序开发人员、Web 开发人员和系统管理员能够开发音频和视频程序,以及创建与 Windows Media 兼容的应用程序和网站。
主题说明
核心音频 API
用于音频捕获和音频呈现的低级别 API,可用于实现最低延迟或实现可能并非完全受更高级别媒体 API 支持的功能。
DirectShow
端到端媒体管道,支持播放、音频/视频捕获、编码、DVD 导航和播放、模拟电视和 MPEG-2。
微软媒体基础
端到端媒体管道,支持播放、音频/视频捕获和编码 (DirectShow) 的后续版本。
微软 TV Technologies
支持数字电视、录制的电视 (.wtv) 文件和 OpenCable 单向电缆接收器 (OCUR) 设备。
多媒体 Center 软件开发工具包
使用 Windows Media Center 软件开发工具包 (SDK) ,开发人员可以创建富媒体应用程序和服务,以便在 Media Center 电脑上与鼠标、键盘和遥控器配合使用。
多媒体 Format 11 SDK
支持读取和写入 ASF 文件、解码和编码 Windows Media 音频和视频,以及通过网络流式传输 ASF。
媒体库共享服务
使应用程序能够发现家庭网络上的媒体设备,并在家庭网络和 Internet 上共享媒体库。
媒体播放器 SDK
扩展 Windows 媒体播放器 和 Windows 媒体播放器 Mobile 的功能。
多媒体 Rights Manager 10.1.2 SDK
支持用于保护 Windows Media 文件的数字版权管理 (DRM) 。
多媒体 Services 9 系列
提供基于自动化的 API,用于管理 Windows Server 中的Windows Media 服务。
媒体流式处理 API
根据 DLNA 准则的定义, (DMR) 和数字媒体服务器 (DMS) 设备建模,以便以编程方式使用。
媒体传输控件
提供一个内置界面,用于显示有关当前正在播放的媒体的用户信息,例如歌曲或视频的标题。 此外,还为用户提供了一种常见且熟悉的方式来控制媒体播放。
Windows 影音制作 6.0 和 Windows DVD Maker 1.0 SDK
启用 Windows 影音制作 6.0 和 微软 DVD Maker 1.0 的自定义。
旧版音频和视频
已过时且不应在新应用程序中使用的技术。

核心音频 API——机器学习

本文档提供有关核心音频应用程序编程接口的信息。它为软件开发人员提供了在开发使用核心音频 API 的应用程序时要遵循的指南。
核心音频 API 为音频应用程序提供了访问音频终结点设备(如耳机和麦克风)的方式。 核心音频 API 是更高级别的音频 API 的基础。
大多数应用程序与更高级别的 API 通信,但某些具有特殊要求的应用程序可能需要直接与核心音频 API 通信。
从 Windows 7 开始,现有 API 已得到改进,并添加了新的流和会话管理 API 以支持新方案。现在可以枚举和获取对音频会话的扩展控制。
通过使用新 API,应用程序可以实现自定义流衰减体验。 新的与设备相关的 API 提供对终结点设备的驱动程序属性的访问。

关于核心音频 API

核心音频 API 是在 Vista 中引入的。这组新的用户模式音频组件为客户端应用程序提供了改进的音频功能。这些功能包括:

低延迟、可复原故障的音频流式处理。
提高了可靠性, (许多音频函数已从内核模式迁移到用户模式) 。
受保护的音频内容的安全性 (处理在安全、特权较低的进程中) 进行。
将特定系统范围角色 (控制台、多媒体和通信) 分配给单个音频设备。
音频终结点设备的软件抽象 (例如,扬声器、耳机和麦克风) 用户直接操作。
核心音频 API 在 Windows 7 中得到了改进。这些 API 充当以下更高级别的 API 的基础:

DirectSound
DirectMusic
Windows 多媒体 waveXxx 和 mixerXxx 函数
媒体基础

这些更高级别的 API 使用核心音频 API 共享对音频设备的访问权限。

大多数音频应用程序与更高级别的 API 通信,而不是直接与核心音频 API 通信。 使用更高级别的 API 的应用程序的一些示例如下:

媒体播放器
DVD 播放器
游戏
播放声音文件的业务应用程序,如 Microsoft Office PowerPoint

通常,这些应用程序与 DirectSound 或 Media Foundation API 通信。与核心音频 API 的直接通信可能不适用于许多常规用途音频应用程序。
例如,核心音频 API 要求音频流使用音频设备的本机数据格式。 但是,开发以下类型的产品的第三方软件开发人员可能需要核心音频 API 的特殊功能:

专业音频 (“pro audio”) 应用程序
RTC) 应用程序的实时通信 (
第三方音频 API

“专业音频”或 RTC 应用程序可能需要直接访问核心音频 API 的低级别功能,以便通过获取对音频硬件的独占访问权限来最大程度地降低延迟。
第三方音频 API 可能需要直接访问核心音频 API 才能实现一组功能,这些功能可能并非完全受 Windows 随附的任何高级音频 API 支持。
使用旧音频 API 播放或录制音频的应用程序可能需要旧音频 API 不支持但受核心音频 API 支持的其他功能。
在许多情况下,应用程序可以直接通过核心音频 API 访问这些功能,这些 API 可与旧音频 API 结合使用。

核心音频 API 包括:

多媒体设备 (MMDevice) API。 客户端使用此 API 枚举系统中的音频终结点设备。
Windows 音频会话 API (WASAPI) 。 客户端使用此 API 创建和管理音频终结点设备的音频流。
DeviceTopology API。 客户端使用此 API 直接访问拓扑功能, (例如,音量控制和多路复用器) 位于音频适配器的硬件设备内的数据路径上。
EndpointVolume API。 客户端使用此 API 直接访问音频终结点设备上的音量控件。 此 API 主要由管理独占模式音频流的应用程序使用。
这些 API 支持终结点设备的用户友好概念,如 音频终结点设备中所述。

Microsoft 不打算将此处所述的核心音频 API 用于早期版本的 Windows,包括 Windows 2003、XP、ME、2000 和 98。

核心音频编程指南

本指南部分介绍 Windows Vista 的核心音频 API 的概念和功能,并介绍如何在应用程序编程中使用它们。
主题说明
用户模式音频组件 通过核心音频 API 中的低级别接口,客户端可以访问管理和混合音频流的系统组件。
受保护的用户模式音频 (PUMA) 介绍受保护用户模式音频 (PUMA) 的更新,PUMA) 受保护环境中的用户模式音频引擎 (PE) ,它为音频处理和呈现提供了更安全的环境。
音频终结点设备 音频终结点设备是一种软件抽象,可实现与音频设备(如麦克风和扬声器)的用户友好交互。
音频会话 音频会话是一种软件抽象,使客户端能够将相关音频流的集合作为单个单元进行管理。
音量控件 该系统以逻辑且一致的方式将其基于策略的卷设置与用户的卷设置集成。
流管理 Windows 音频会话 API (WASAPI) 为客户端提供了一组用于创建和管理音频流的完整方法。
设备拓扑 DeviceTopology API 使客户端能够发现音频硬件中各种数据路径上的音频控件。
使用 IKsControl 接口访问音频属性 专用音频应用程序可能需要使用 IKsControl 接口来访问音频适配器的属性。
与旧版音频 API 的互操作性 Windows Vista 中核心音频 API 的主要功能可以合并到使用 DirectSound、DirectShow 以及 Windows 多媒体 waveOutXxxwaveInXxx 函数的现有应用程序中。
空间音效 提供有关使用 Windows Sonic 的指导,Windows Sonic 是 Microsoft 在 Xbox 和 Windows 上用于空间音效支持的平台级解决方案,使环绕声和高程 (高于或低于侦听器) 音频提示。

直接显示——DirectShow

Microsoft DirectShow 应用程序编程接口是媒体流式处理体系结构。使用 DirectShow,应用程序可以执行高质量的视频和音频播放或捕获。
Microsoft? DirectShow? 是 Microsoft Windows? 平台上流媒体的体系结构。 DirectShow 提供多媒体流的高质量捕获和播放。
它支持多种格式,包括高级系统格式 (ASF) 、电影专家组 (MPEG) 、Audio-Video交错 (AVI) 、MPEG 音频层 3 (MP3) 和 WAV 声音文件。
它支持基于 Windows 驱动程序模型 (WDM) 或视频从数字和模拟设备捕获。 它会自动检测并使用视频和音频加速硬件(如果可用),但也支持没有加速硬件的系统。

DirectShow 基于组件对象模型 (COM) 。 若要编写 DirectShow 应用程序或组件,必须了解 COM 客户端编程。 对于大多数应用程序,无需实现自己的 COM 对象。
DirectShow 提供所需的组件。 但是,如果要通过编写自己的组件来扩展 DirectShow,则必须将它们作为 COM 对象实现。

Microsoft 不提供 DirectShow 的托管 API。DirectShow 简化了媒体播放、格式转换和捕获任务。

同时,它为需要自定义解决方案的应用程序提供对基础流控制体系结构的访问。 还可以创建自己的 DirectShow 组件以支持新格式或自定义效果。
可以使用 DirectShow 编写的应用程序类型的示例包括文件播放器、电视和 DVD 播放器、视频编辑应用程序、文件格式转换器、音频-视频捕获应用程序、编码器和解码器、数字信号处理器等。

DirectShow 系统概述

多媒体的挑战
使用多媒体带来了几个重大挑战:
多媒体流包含大量数据,必须非常快速地处理这些数据。
音频和视频必须同步,以便同时启动和停止,并按相同的速率播放。
数据可能来自许多来源,包括本地文件、计算机网络、电视广播和摄像机。
数据有多种格式,例如Audio-Video交错 (AVI) 、高级流式处理格式 (ASF) 、电影专家组 (MPEG) 和数字视频 (DV) 。
程序员事先不知道最终用户的系统上将存在哪些硬件设备。
DirectShow 解决方案
设计目标是通过将应用程序与数据传输、硬件差异和同步的复杂性隔离开来简化在系统平台上创建数字媒体应用程序的任务。
为了达到流式传输视频和音频所需的吞吐量,尽可能使用 Direct3D 和 DirectSound。 这些技术有效地将数据呈现给用户的声音和图形卡。
通过将媒体数据封装在带时间戳的示例中来同步播放。 为了处理各种可能的源、格式和硬件设备,使用模块化体系结构的筛选器(混合和匹配)。
提供支持基于系统驱动程序模型 (WDM) 捕获和优化设备的筛选器,以及支持 (VfW) 捕获卡的较旧视频的筛选器,
以及为音频压缩管理器 (ACM) 和视频压缩管理器 (VCM) 接口编写的编解码器。
下图显示了应用程序、DirectShow 组件以及 DirectShow 支持的一些硬件和软件组件之间的关系。
高级体系结构
如此处所示,DirectShow 筛选器与各种设备通信和控制,包括本地文件系统、电视调谐器和视频捕获卡、VfW 编解码器、
通过 DirectDraw 或 GDI的视频显示,以及通过 DirectSound (声音卡)。使程序免受这些设备的许多复杂性。还为某些文件格式提供本机压缩和解压缩筛选器。

媒体基础——Foundation

Microsoft Media Foundation 支持开发应用程序和组件,以便在 Windows Vista 及更高版本上使用数字媒体。
适用于下一代多媒体平台,它使开发人员、消费者和内容提供商能够接受新一波高级内容,同时增强可靠性、无与伦比的质量和无缝互操作性。 Media Foundation 需要 Windows Vista 或更高版本。 它使用组件对象模型 (COM) 。不提供适用于 Media Foundation 的托管 API。 音频和视频质量 Media Foundation 旨在应对高清内容带来的挑战。 在整个平台中改进的音频和视频质量,现在可以为下一代高清内容提供出色的体验。 与 DXVA 1.0 相比,DirectX 视频加速 (DXVA) 2.0 提供更高效的视频加速,视频解码更可靠、更精简,在视频处理中扩展了硬件的使用。 使用 DXVA 2.0,Windows 可以处理一些要求最苛刻的高清内容,并提供高质量和改进的故障复原能力。 在整个视频管道中保留颜色空间信息。 用户可以以完全保真度欣赏视频内容。 颜色信息和交错图像现在传递到硬件进行单通道合成。 保留颜色空间信息还可以减少不必要的颜色空间转换,从而释放更多周期来处理要求苛刻的 HD 内容。 增强的视频呈现器(EVR)提供更好的计时支持、增强的视频处理和改进的故障复原能力。改进了全屏播放支持,并且窗口模式下的视频撕裂已最小化。 Media Foundation 使用多媒体类计划程序服务 (MMCSS) ,这是 Windows Vista 中的一项新系统服务。 MMCSS 使多媒体应用程序能够确保其时间敏感型处理能够优先访问 CPU 资源。 内容访问 随着数字娱乐进入高清时代,内容变得更加便携和无处不在,内容保护将成为数字媒体产品不可或缺的一部分。 Media Foundation 的扩展性可确保它可以支持这些趋势。此外,扩展性使不同的内容保护系统能够一起运行。

Windows 多媒体——(MCI)

多媒体支持使应用程序能够使用声音和视频。媒体控制接口 (MCI) 提供用于播放多媒体设备和录制多媒体资源文件的标准命令。
这些命令是几乎每一种多媒体设备的通用接口。MCI 为应用程序提供与设备无关的功能,用于控制音频和视频外围设备。
应用程序可以使用 MCI 来控制任何受支持的多媒体设备,包括波形音频设备、MIDI 排序器、CD 音频设备和数字视频 (视频播放) 设备。
MCI 支持 命令字符串 和 命令消息。 可以在 MCI 应用程序中使用字符串或消息,或同时使用两者。

命令消息接口由常量和结构组成。 使用 mciSendCommand 函数将消息发送到 MCI 设备。
命令字符串接口提供命令消息的文本版本。 使用 mciSendString 函数将字符串发送到 MCI 设备。
 命令字符串复制命令消息的功能。操作系统先将命令字符串转换为命令消息,然后再将其发送到 MCI 驱动程序进行处理。
检索信息的命令消息以结构的形式执行此操作,这些结构在 C 应用程序中易于解释。 这些结构可以包含有关设备许多不同方面的信息。
检索信息的命令字符串以字符串的形式执行此操作,并且一次只能检索一个字符串。 应用程序必须分析或测试每个字符串才能解释它。
你可能会发现,在某些情况下,命令消息比命令字符串更易于使用,但命令字符串易于记住和实现。
当返回值不会被使用时,某些 MCI 应用程序使用命令字符串 (,而不是在从设备检索信息时验证成功) 和命令消息。
讨论命令时,此概述使用命令的字符串形式,后跟括号中的消息窗体。

极人工智能——机器学习

使用 人工智能(高性能的可靠 API,用于在 Windows 设备上部署硬件加速的 ML 推理)在 Windows 应用中实现机器学习。

概述

人工智能 内置于 Windows 10 和 Windows Server 2019 的最新版本中,也可作为 NuGet 包提供到更低的操作系统版本 Windows 8.1。 极人工智能 为开发人员提供以下优势:

  • 使开发变得更轻松: 使用最新版 Windows 内置的人工智能,只需把极语言应用程序一起分发的已训练 ONNX 模型即可进行开发。
    此外,如果你需要将基于 AI 的功能提供到较低版本的 Windows(低至 8.1),极人工智能 也可作为随应用程序一起分发的 NuGet 包提供。
  • 广泛的硬件支持:可以一次性编写 ML 工作负荷,并自动为不同的硬件供应商和芯片类型提供高度优化的性能。保证各种受支持硬件的行为保持一致。
  • 低延迟、实时结果: 可以使用 Windows 设备的处理能力来评估 ML 模型,以实现对图像和视频等大量数据的本地实时分析。
    可以快速高效地提供结果用于游戏引擎等性能密集型工作负荷,或搜索索引等后台任务。
  • 提高灵活性: 在 Windows 设备本地评估 ML 模型的选项可让你解决更广泛的方案。 例如,可以在设备处于脱机状态或者连接间歇性中断时运行 ML 模型的评估。
    此外,还可以让你解决因隐私或数据主权问题而无法将所有数据发送到云的情景。
  • 降低运营成本: 在云中训练机器 ML,然后在 Windows 设备本地评估这些模型可以极大地节省带宽成本(只需将持续改善 ML 模型时可能会需要的极少量数据发送到云)。
    此外,在服务器方案中部署 ML 模型时,开发人员可以利用 极人工智能 硬件加速来加快为模型提供服务的速度,减少处理工作负荷所需的计算机数量。

机器学习模型

机器学习模型是一个文件,在经过训练后可以识别特定类型的模式。 你可以用一组数据训练模型,为它提供一种算法,模型利用该算法学习这些数据并进行推理。

对模型进行训练后,可以使用它根据之前未见过的数据进行推理,并对这些数据进行预测。 例如,假设你要构建一个应用程序,该应用程序可以根据用户的面部表情识别用户的情感。
可以为模型提供具有特定情感标记的面部图像,对模型进行训练,然后即可在能够识别任何用户情感的应用程序中使用该模型。

何时使用机器学习

良好的机器学习方案通常具有以下常见特性:
涉及要自动执行且需要一致结果的重复决策或评估。
很难或不可能显式描述决策背后的解决方案或条件。
具有标记的数据,或有现有示例,在示例中可描述情况并映射到正确的结果。

机器学习对其模型使用开放神经网络交换 (ONNX) 格式。 可以下载预先训练的模型,也可以训练自己的模型。

机器学习入门

可以通过多种方法在应用中使用 Windows 机器学习。 核心在于,只需执行几个简单的步骤即可。
获取经过训练的开放神经网络交换 (ONNX) 模型,或者使用 ONNXMLTools 将其他 ML 框架中训练的模型转换为 ONNX。
将 ONNX 模型文件添加到应用程序,或者在目标设备上以其他某种方式提供该文件。
将模型集成到应用程序代码中,然后生成并部署应用程序。
内置 WinML 解决方案与 NuGet WinML 解决方案
下表突出显示了内置 Windows ML 和 Windows ML NuGet 包的可用性、分发、语言支持、维护和前向兼容性方面。
属性内置NuGet
可用性Windows 10 版本 1809 或更高版本Windows 8.1 或更高版本
分布内置到 Windows SDK作为应用程序的一部分进行打包和分发
维护Microsoft 驱动(客户自动受益)开发人员驱动
向前兼容性自动使用新功能进行前滚开发人员需要手动更新包
在使用内置解决方案的情况下运行应用程序时,人工智能 运行时(包含 ONNX 模型推理引擎)将评估 Windows 10 设备(或面向服务器部署时使用的 Windows Server 2019)上已训练的模型。
Windows ML 将处理硬件抽象,从而使开发人员可将目标定位在各种芯片上 — 包括 CPU、GPU 以及未来的 AI 加速器。 Windows ML 硬件加速构建在 DirectML 的基础之上。
DirectML 是用于运行 ML 推理的高性能低级别 API,是 DirectX 家族中的一员。
对于 NuGet 包,这些层显示为下图中所示的二进制文件。它内置于 Microsoft.ai.machinelearning.dll 中。它并不包含嵌入的 ONNX 运行时,ONNX 运行时内置于文件 onnxruntime.dll 中。
NuGet 包中包含的版本包含一个嵌入在其内部的 DirectML EP。最终的二进制文件 DirectML.dll 是 DirectML 的实际平台代码,它基于系统中内置的 Direct 3D 和计算驱动程序而构建。
这三个文件都包含在 NuGet 版本中,以便随应用程序一起分发。直接访问 onnxruntime.dll 还使你能够将目标定位于跨平台方案,同时让相同的、独立于硬件的加速扩展到所有系统设备上。

ONNX 模型

Windows 机器学习支持开放神经网络交换 (ONNX) 格式的模型。 ONNX 是用于 ML 模型的开放格式,允许在不同的 ML 框架和工具之间交换模型。
可以通过多种方式获取 ONNX 格式的模型,其中包括:

ONNX 模型库:包含针对不同类型任务的多个预先训练的 ONNX 模型。 下载 Windows ML 支持的版本,然后即可继续操作!

ML 训练框架的本机导出:多个训练框架支持针对 ONNX的本机导出功能,允许将训练的模型保存为特定版本的 ONNX 格式。

使用 ONNXMLTools 转换现有模型:允许将模型从几个训练框架格式转换为 ONNX。你可以指定要将模型转换为哪个版本的 ONNX。

Windows ML 并不支持所有 ONNX 版本。 若要了解应用程序针对的 Windows 版本中正式支持哪些 ONNX 版本,请查看 ONNX 版本和 Windows 版本。
一旦有了 ONNX 模型,即可将模型集成到应用的代码中,然后在 Windows 应用和设备中使用机器学习!

极人工智能——训练教程

机器学习可用于各种可自定义的应用解决方案。 在这里,我们提供了几个完整的教程,其中内容涵盖了如何通过各种潜在的非代码或编程服务创建机器学习模型,以及如何将其集成到基本的 Windows ML 应用中。 此外,还介绍了用于几种调整应用功能的高级方法。 如果只需大致了解现有模型的 API 用法或者想要查看示例,请查看下面的更多链接。
完整的应用教程
以下教程介绍了如何创建机器学习模型,以及如何使用 Windows ML 将其合并到 Windows 10 应用中。
无代码训练环境
想使用现有实用程序来训练机器学习模型吗? 这些教程涵盖了关于如何使用由现有服务训练的模型创建 Windows ML 应用的端到端演练。
使用自定义视觉和 Windows ML 进行图像分类
了解如何使用 Azure 自定义视觉服务来训练图像分类模型,并将该模型部署在 Windows ML 应用程序中,以便在计算机上本地运行。
使用 ML.NET 和 Windows ML 进行图像分类
了解如何使用 ML.NET Model Builder Visual Studio 扩展来创建 ONNX 模型并将该模型部署在应用程序中。

代码训练环境
这些教程介绍了如何创建自己的代码(而不是使用已有的服务)来训练 Windows ML 模型。
使用 PyTorch 和 Windows ML 进行图像分类
了解如何在计算机上安装 PyTorch、如何使用它来训练图像分类模型、如何将该模型转换为 ONNX 格式,以及如何将模型部署在应用程序中
使用 PyTorch 和 Windows ML 进行数据分析
了解如何在计算机上安装 PyTorch、如何使用它来训练数据分析模型、如何将该模型转换为 ONNX 格式,以及如何将模型部署在应用程序中。
使用 TensorFlow 和 Windows ML 进行物体检测
了解如何在计算机上安装 TensorFlow、使用 YOLO 体系结构实现迁移学习、将模型转换为 ONNX,以及如何将模型部署在应用程序中。

创建机器学习桌面应用程序

利用 Windows ML API,可以轻松地与极语言程序中的机器学习模型进行交互。 使用加载、绑定和评估这三个步骤,你的应用程序将可以利用机器学习功能。
我们将创建 GitHub 上提供的“对象检测”示例的简化版本。 如果希望查看它完成后的样子,你可以下载完整的示例。

我们将使用 WinRT 来访问 WinML API。 

本教程介绍以下操作:

加载机器学习模型
将图像加载为 VideoFrame
绑定模型的输入和输出
评估模型并打印有意义的结果

机器学习高级功能

将现有 Windows ML 应用移植到极语言应用程序
在本教程中,我们将获取现有 WinML 桌面应用程序并移植它以使用可再分发的 NuGet 包。

必备条件
一个 WinML 应用程序。 若要创建新的应用程序,请参阅教程:创建机器学习应用程序
下载 CppWinRT NuGet将 NuGet 包添加到项目
在现有应用程序的 Visual Studio 项目中,导航到“解决方案资源管理器”,然后选择“管理解决方案的 NuGet 包”。
选择 Microsoft.AI.MachineLearning NuGet 包。 确保要添加到正确的项目,然后按“安装”。

接下来,重新生成解决方案。 C++/WinRT 工具包将分析 Microsoft.AI.MachineLearning NuGet 包中新的头文件和元数据,避免在下一步中产生混淆。

包含新的头文件
为实现最佳做法,你应添加一个控制标志,以使你的应用能够在使用内置 Windows ML 和 NuGet 包之间来回切换。
引入 "lib/winai.lib" 
更改命名空间
接下来,使用控制标志允许 Windows::AI::Machinelearning 切换到 Microsoft::AI::MachineLearning 命名空间。 通过进行此更改,你的代码将自动使用 NuGet 包。
命名 Microsoft::AI::MachineLearning 
更改预处理器定义
现在,在“解决方案资源管理器”中右键单击该项目并选择“属性”。 在“属性”窗口中,选择“预处理器”页。 编辑“预处理器定义”,并将其更改为 USE_WINML_NUGET:_DEBUG。

保存生成配置
在解决方案资源管理器中右键单击解决方案并选择“属性” 。 在“属性”窗口中,选择“配置管理器” 。 打开“有效解决方案配置”的下拉菜单,然后选择“新建”。
 输入新解决方案配置的名称,并确保选中“创建新的项目配置”。 现在,可将预处理器定义保存在所需的生成配置中。

生成并运行
应用程序现已成功使用 WinML NuGet 包。