第一节 入门
1.初学者使用极语言集成开发环境
启动极语言编程,点击初级程序进入主界面。设计界面小窗口没显示图标,请关闭设计窗口重开
控件设计器可以
使用右键创建,也可以拖曳鼠标画控件。
调整控件大小是使用鼠标中键(按住滚轮不放)移动鼠标调整。
选中控件并选择左顶宽高属性,可使用
鼠标滚轮调整大小和位置。
双击属性列表可以修改控件名称、文字、左边、顶边、宽度、高度等属性,控件编号也就是唯一的标识符
控件上右键
绑定事件可自定义名称,如按钮点击,列表单击,列表双击。
设计菜单的界面,双击菜单项添加绑定事件,只能给二级四级菜单添加事件,一级三级等弹出菜单的不能绑定事件
编译生成的程序默认是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 -人物.减伤;
局部变量的申请和使用:
局部变量除文本外都是4字节,文本可以大于4字节,必须是4的整数倍。
局部变量最多可以申请空间1-2M,不使用局部变量则不申请,少量使用时(限120字节)
局部整数和小数变量30个以内,文本按申请的长度算。需要更多变量时,变量前加局部或local
并且放在程序段开头第一行,编译时候才好估算此程序段需要申请多大的堆栈空间。如:局部 文本 ss(32);
局部变量与全局变量区别是很大的,编程语法上尽量做到能兼容使用,方便程序灵活处理。
局部文本和全局文本都可以像操作数组一样,读写其中每一字节。如:文本 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运算表达式中是与运算; 2单独变量或函数前是取指针地址; 3在变量或数组后面是取四字节内存值; 4检索语句括号后是获取地址; 5循环数组的数据变量后面是每次读写四字节; |
% | 算术 | 求余,可以在除法后单独使用;在变量或数组后面是取两字节内存值。 |
++ | 算术 | 自加 |
-- | 算术 | 自减 |
! | 逻辑非 | 数值为0则为1,数值不是0则为0 |
~ | 按位取反 | 对每个二进制位进行反相,0变1,1变0 |
= | 赋值/比较 | 等于 |
!= <> | 关系比较 | 不等于 |
< | 关系比较 | 小于 |
> | 关系比较 | 大于 |
>= | 关系比较 | 大于等于 |
<= | 关系比较 | 小于等于 |
=> | 关系比较 | 等大于 |
=< | 关系比较 | 等小于 |
>> | 位运算 | 右移(支持小数) |
<< | 位运算 | 左移(支持小数) |
~ | 读写控件内容 | 内容~文本框1;窗体~"显示标题" |
? | 取结果 | 取上次赋值的结果 |
?? | 取纳秒计数 | 取纳秒计数器的低32位结果,高32位再用%获取 |
浮点运算专用符号:表达式的小括号之后使用,用法:(a+b)余;(c)正;(a*a+b*b)根;(c)cos;(n)pat;
英文 | 中文 | 释义 |
abs | 绝 | 表达式取绝对值(含整数) |
cos | 余 | 表达式取余弦 |
sin | 正 | 表达式取正弦 |
sqr | 根 | 表达式取平方根 |
tan | 切 | 表达式取正切 |
atn | 反 | 表达式取反正切 |
第五节 编程语法
编程代码里的文字部分,包括关键字和名称定义,都是用标点符号区分开的。空格 制表符 回车换行 逗号 分号它们的作用类似
整数 数一;小数 数二;也可以写成 整数 数一 小数 数二 空格 制表符 回车换行 逗号 分号 括号这些都能把文字给区分开
分号通常用于这句代码结束时,也可以用空格 制表符 回车 换行等符号代替分号;而关键字后面通常是自定义的名称,如:
整数 数一
这是要申请一个整数变量,名字叫数一,一句代码的中间是用空格而不是加分号,所以空格 换行 制表符可以代替分号,分号却不能代替空格等
而逗号通常是要连续重复操作某件事时,比如
整数 数一,数二,数三,数四 这里是要连续申请四个整数变量,使用逗号可以不用每次都写整数
再比如调用函数时,
发送消息(窗口,消息,参数,数据),小括号里也是要连续提交多个变量,就用逗号隔开;括号都是成对出现,代表一个范围
程序段 窗体消息(窗口,消息,参数,数据)
判断(消息)为 窗口关闭{停止(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 | 类型 | 类型 Form{整数 hwnd;整数 WndProc;} |
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}
}这是给五个矩形类变量初始化值的写法,五组大括号里都包含有四个变量的数值
下面是坐标类,尺寸类,矩形类的结构定义
中文名字 | 英文名称 | 长度 | 作用解释 |
坐标类 | POINT | 8 | 用来存储坐标位置的信息 |
坐标类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
左 | x | 整数 | 水平坐标位置。 |
顶 | y | 整数 | 垂直坐标位置。 |
中文名字 | 英文名称 | 长度 | 作用解释 |
尺寸类 | SIZE | 8 | 用来存储尺寸大小的信息 |
尺寸类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
宽 | cx | 整数 | 尺寸大小的宽度。 |
高 | cy | 整数 | 尺寸大小的高度。 |
中文名字 | 英文名称 | 长度 | 作用解释 |
矩形类 | RECT | 16 | 用来表示一个矩形框的四条边位置。 |
矩形类——成员表 |
左 | 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 | 日期 | DateTime | 64位整数 |
long | 大数 | BigInt | 64位整数 |
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秒之后自动关闭消息框
中文名字 | 常量数值 | 英文名称 | 释义 |
确定取消 | $000001 | MB_OKCANCEL | 弹出的信息框包含“确定”和“取消”两个按钮 |
中止重试 | $000002 | MB_ABORTRETRYIGNORE | 弹出的信息框包含“中止”、“重试”和“放弃”三个按钮 |
是否取消 | $000003 | MB_YESNOCANCEL | 弹出的信息框包含“是”、“否”和“取消”三个按钮 |
弹出是否 | $000004 | MB_YESNO | 弹出的信息框包含“是”和“否”两个按钮 |
重试取消 | $000005 | MB_RETRYCANCEL | 弹出的信息框包含“重试”和“取消”两个按钮 |
错误图标 | $000010 | MB_ICONHAND | 弹出的信息框包含红色的“错号”图标 |
问号图标 | $000020 | MB_ICONQUESTION | 弹出的信息框包含蓝色的“问号”图标 |
惊叹图标 | $000030 | MB_ICONEXCLAMATION | 弹出的信息框包含黄色三角的“惊叹”图标 |
信息图标 | $000040 | MB_ICONASTERISK | 弹出的信息框包含蓝色的“i符号”图标 |
用户图标 | $000080 | MB_USERICON | 弹出的信息框可以显示用户自定义图标 |
弹出系统 | $001000 | MB_SYSTEMMODAL | 弹出窗口会置顶,且标题栏有系统图标。 |
弹出任务 | $002000 | MB_TASKMODAL | 弹出窗口到任务栏显示 |
帮助按钮 | $004000 | MB_HELP | 弹出窗口包含“帮助”按钮。 |
弹出置前 | $010000 | MB_SETFOREGROUND | 消息框变为前景窗口。 |
默认桌面 | $020000 | MB_DEFAULT_DESKTOP_ONLY | 当前桌面为默认桌面才会返回 |
弹出置顶 | $040000 | MB_TOPMOST | 消息框置顶显示。 |
文字居右 | $080000 | MB_RIGHT | 消息框的内容文字居右显示。 |
图标居右 | $100000 | MB_RTLREADING | 内容文字在左边,图标在右边,标题文字也在右边 |
弹出服务 | $200000 | MB_SERVICE_NOTIFICATION | 弹出的消息框即使没有登陆到系统,也会显示。 |
信息框、消息框、延时框——点击按钮返回值
中文名字 | 常量数值 | 英文名称 | 释义 |
选了确定 | 1 | IDOK | 点击选中了"确定"按钮 |
选了取消 | 2 | IDCANCEL | 点击选中了"取消"按钮 |
选了中止 | 3 | IDABORT | 点击选中了"中止"按钮 |
选了重试 | 4 | IDRETRY | 点击选中了"重试"按钮 |
选了忽略 | 5 | IDIGNORE | 点击选中了"忽略"按钮 |
选了是 | 6 | IDYES | 点击选中了"是"按钮 |
选了否 | 7 | IDNO | 点击选中了"否"按钮 |
选了关闭 | 8 | IDCLOSE | 点击选中了"关闭"按钮 |
选了帮助 | 9 | IDHELP | 点击选中了"帮助"按钮 |
动态链接库——开发应用
新建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 使用调用线程的堆栈和调用进程的虚拟地址空间。
中文名字 | 常量 | 英文名称 | 释义 |
初次调用 | 1 | DLL_PROCESS_ATTACH | 当这个DLL被映射到了进程的地址空间时 |
线程创建 | 2 | DLL_THREAD_ATTACH | 一个线程正在被创建 |
线程结束 | 3 | DLL_THREAD_DETACH | 线程终结 |
结束调用 | 0 | DLL_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); //从控制台读取输入的文字内容
中文名字 | 常量 | 英文名称 | 释义 |
标准输入 | -10 | STD_INPUT_HANDLE | 标准输入设备。最初这是输入缓冲区 CONIN$ 的控制台。 |
标准输出 | -11 | STD_OUTPUT_HANDLE | 标准输出设备。最初这是活动控制台屏幕缓冲区 CONOUT$。 |
标准错误 | -12 | STD_ERROR_HANDLE | 标准错误设备。最初这是活动控制台屏幕缓冲区 CONOUT$。 |
控制台输入模式——读取字符模式组合:
中文名字 | 常量 | 英文名称 | 释义 |
系统处理 | 0x0001 | ENABLE_PROCESSED_INPUT | Ctrl+C 由系统处理,且不会放入输入缓冲区中。 |
回车读取 | 0x0002 | ENABLE_LINE_INPUT | 仅当读取回车符时,才返回读取内容。如果禁用此模式,则将在有一个或多个字符可用时返回函数。 |
读取回显 | 0x0004 | ENABLE_ECHO_INPUT | 读取的字符在键入到控制台时,将被写入到活动屏幕缓冲区。只有同时启用了 回车读取 模式时,才能使用此模式。 |
屏幕输入 | 0x0008 | ENABLE_WINDOW_INPUT | 更改控制台屏幕缓冲区大小的用户交互将记录到控制台的输入缓冲区中。 |
鼠标输入 | 0x0010 | ENABLE_MOUSE_INPUT | 通过移动鼠标和按下按钮生成的鼠标事件会放置在输入缓冲区中。可用于从输入缓冲区读取鼠标事件输入记录。 |
插入文字 | 0x0020 | ENABLE_INSERT_MODE | 如果启用,在控制台窗口中输入的文本将插入到当前光标位置,并且不会覆盖该位置后面的所有文本。禁用则将覆盖后面的所有文本。 |
鼠标选择 | 0x0040 | ENABLE_QUICK_EDIT_MODE | 用户可通过此标志使用鼠标选择和编辑文本。和输入扩展同时使用。 |
输入扩展 | 0x0080 | ENABLE_EXTENDED_FLAGS | 启用扩展标志位。注:插入文字和鼠标选择为扩展标志位;跟输入扩展同时使用。 |
虚拟输入 | 0x0200 | ENABLE_VIRTUAL_TERMINAL_INPUT | 指导虚拟终端处理引擎将控制台窗口收到的用户输入转换为可由支持的应用程序读取的控制台虚拟终端序列。 |
控制台输出模式——写入字符模式组合:
中文名字 | 常量 | 英文名称 | 释义 |
分析输出 | 0x0001 | ENABLE_PROCESSED_OUTPUT | 针对 ASCII 控制序列对写入的字符或者读取回显的字符进行分析并执行正确的操作。 |
自动换行 | 0x0002 | ENABLE_WRAP_AT_EOL_OUTPUT | 使用写入或者读取回显时,当光标到达当前行的末尾时,它将移到下一行的开头。 |
分析控制 | 0x0004 | ENABLE_VIRTUAL_TERMINAL_PROCESSING | 写入时分析字符序列可控制光标移动、颜色/字体模式以及其他也可通过现有控制台 API 执行的操作。 |
延迟换行 | 0x0008 | DISABLE_NEWLINE_AUTO_RETURN | 写入时将附加状态添加到行尾换行,从而可能导致延迟光标移动和缓冲区滚动操作。 |
允许字色 | 0x0010 | ENABLE_LVB_GRID_WORLDWIDE | 用于写入字符属性允许使用来自字符属性的标志调整文本的前景色和背景色。 |
控制台字符属性——颜色组合:
中文名字 | 常量 | 英文名称 | 释义 |
文本蓝色 | 1 | FOREGROUND_BLUE | 文本颜色包含蓝色。 |
文本绿色 | 2 | FOREGROUND_GREEN | 文本颜色包含绿色。 |
文本红色 | 4 | FOREGROUND_RED | 文本颜色包含红色。 |
文本高亮 | 8 | FOREGROUND_INTENSITY | 文本颜色增强。 |
背景蓝色 | 0x10 | BACKGROUND_BLUE | 背景色包含蓝色。 |
背景绿色 | 0x20 | BACKGROUND_GREEN | 背景色包含绿色。 |
背景红色 | 0x40 | BACKGROUND_RED | 背景色包含红色。 |
背景高亮 | 0x80 | BACKGROUND_INTENSITY | 背景色增强。 |
前导字节 | 0x100 | COMMON_LVB_LEADING_BYTE | 前导字节。 |
尾随字节 | 0x200 | COMMON_LVB_TRAILING_BYTE | 尾随字节。 |
顶部水平 | 0x400 | COMMON_LVB_GRID_HORIZONTAL | 顶部水平。 |
左边垂直 | 0x800 | COMMON_LVB_GRID_LVERTICAL | 左垂直。 |
右边垂直 | 0x1000 | COMMON_LVB_GRID_RVERTICAL | 右垂直。 |
反转显示 | 0x4000 | COMMON_LVB_REVERSE_VIDEO | 反转前景和背景属性。 |
带下划线 | 0x8000 | COMMON_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 | 写输出字(输出,文字,数量,坐标值,@已写) | 从指定位置开始,将多个字符复制到控制台屏幕缓冲区的连续单元格。 |
控制台信号回调
中文名字 | 英文名称 | 参数 | 作用解释 |
控制台信号回调 | HandlerRoutine | 1 | 控制台进程使用此函数来处理进程接收的控制信号。收到信号后,系统会在进程中创建新线程来执行函数。 |
控制台信号回调 参数表 |
中文 | 英文 | 类型 | 作用解释 |
信号 | dwCtrlType | 整数 | 处理程序接收的控制信号类型。此参数的取值可为下列值之一。 |
信号类型
英文名称 | 值 | 作用解释 |
CTRL_C_EVENT | 0 | 已从键盘输入或 控制事件 函数生成的信号中接收 CTRL+C 信号。 |
CTRL_BREAK_EVENT | 1 | 已从键盘输入或 控制事件 函数生成的信号中接收 CTRL+BREAK 信号。 |
CTRL_CLOSE_EVENT | 2 | 当用户关闭控制台时,系统向附加到控制台的所有进程发送的信号(单击控制台窗口的窗口菜单上的关闭或单击任务管理器中的结束任务按钮命令)。 |
CTRL_LOGOFF_EVENT | 5 | 系统在用户退出登录时发送到所有控制台进程的信号。 此信号不指示哪个用户正在退出登录,因此无法做出任何假设。请注意,仅由服务接收此信号。 交互式应用程序在退出登录时终止,因此当系统发送此信号时,它们不存在。 |
CTRL_SHUTDOWN_EVENT | 6 | 当系统关闭时发送的信号。 当系统发送此信号时,交互式应用程序不存在,因此这种情况下只能由服务接收它。 服务也有自己的关闭事件通知机制。 |
游标类
中文名字 | 英文名称 | 长度 | 作用解释 |
游标类 | CONSOLE_CURSOR_INFO | 8 | 包含有关控制台游标的信息。 |
游标类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
比例 | dwSize | 整数 | 由游标填充的字符单元的百分比。该值介于 1 到 100 之间。 |
可见 | bVisible | 整数 | 游标的可见性。 如果游标可见,则此成员为 真。 |
历史类
中文名字 | 英文名称 | 长度 | 作用解释 |
历史类 | CONSOLE_HISTORY_INFO | 16 | 包含有关控制台历史记录的信息。 |
历史类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | cbSize | 整数 | 结构大小(以字节为单位)。 |
条数 | HistoryBufferSize | 整数 | 每个历史记录缓冲区中保留的命令数。 |
区数 | NumberOfHistoryBuffers | 整数 | 此控制台进程保留的历史记录缓冲区数。 |
标志 | dwFlags | 整数 | 此参数可为零或1。1=重复条目不会存储在历史记录缓冲区中。 |
字体类
中文名字 | 英文名称 | 长度 | 作用解释 |
字体类 | CONSOLE_FONT_INFO | 8 | 包含控制台字体的信息。 |
字体类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
字体 | nFont | 整数 | 系统控制台字体表中字体的索引。 |
宽度 | dwFontSize.X | 整形 | 包含字体中每个字符的宽度(以逻辑单元为单位)。 |
高度 | dwFontSize.Y | 整形 | 包含字体中每个字符的高度(以逻辑单元为单位)。 |
字体扩展类
中文名字 | 英文名称 | 长度 | 作用解释 |
字体扩展类 | CONSOLE_FONT_INFOEX | 84 | 包含控制台字体的扩展信息。 |
字体扩展类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | cbSize | 整数 | 此结构的大小(以字节为单位)。 |
字体 | nFont | 整数 | 系统控制台字体表中字体的索引。 |
宽高 | dwFontSize | 整数 | 包含字体中每个字符的宽度和高度(以逻辑单元为单位)。 |
字系 | FontFamily | 整数 | 字体间距和系列。 |
粗细 | FontWeight | 整数 | 字体粗细。 粗细范围为 100 到 1000,按 100 的倍数表示。 例如,正常粗细为 400,而 700 为粗体。 |
名称 | FaceName[64] | 文本 | 字样的名称(如 Courier 或 Arial)。 |
输出类
中文名字 | 英文名称 | 长度 | 作用解释 |
输出类 | CONSOLE_SCREEN_BUFFER_INFO | 22 | 包含有关控制台屏幕缓冲区的信息。 |
输出类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
列数 | 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_INFOEX | 96 | 包含有关控制台屏幕缓冲区的扩展信息。 |
输出扩展类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | 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_INFO | 4 | 指定 Unicode 或 ANSI 字符及其属性。 控制台函数使用此结构从控制台屏幕缓冲区读取和写入数据。 |
字格类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
文字 | Char | 整形 | 由以下成员组成的联合。UnicodeChar 屏幕缓冲区字符单元的 Unicode 字符。AsciiChar 屏幕缓冲区字符单元的 ANSI 字符。 |
属性 | Attributes | 整形 | 字符属性。 |
方形类
中文名字 | 英文名称 | 长度 | 作用解释 |
方形类 | SMALL_RECT | 8 | 定义矩形左上角和右下角的坐标。 |
方形类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
左 | 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) 。
用户对象
用户界面对象仅支持每个对象一个句柄。 进程无法继承或复制用户对象的句柄。 一个会话中的进程不能引用另一个会话中的用户句柄。
理论上,每个会话有 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,数值,真)把数值转换成文字显示到窗体上第二个控件窗口
整个窗口界面可以叫它对话框,对话框里的子窗口叫它控件,设计控件时候都会有独立的编号,称之为标识
刚才读写控件内数值使用的数值编号就是标识,在控件操作中十分常用,也就是设计控件时候的编号叫做标识
中文名字 | 常量数值 | 英文名称 | 释义 |
窗口创建 | 1 | WM_CREATE | 新建一个窗口。③参数:0;④数据:创建窗口的数据结构 |
程序关闭 | 2 | WM_DESTROY | 销毁一个窗口。③参数:0;④数据:0 |
窗口移动 | 3 | WM_MOVE | 移动一个窗口。③参数:0;④数据:xy坐标(各占16位) |
窗口缩放 | 5 | WM_SIZE | 改变一个窗口的大小。③参数:0=已调整;1最小化;2最大化,3其它窗口还原;4其它窗口最大化;④数据:宽高大小(各16位) |
窗口激活 | 6 | WM_ACTIVATE | 一个窗口被激活或失去激活状态。③参数:0关闭,1非鼠标激活,2鼠标激活;④数据:参数为0是激活窗口,非0是停用的窗口 |
获得焦点 | 7 | WM_SETFOCUS | 将键盘焦点转向一个窗口。③参数:失去焦点的窗口,可为0;④数据:0 |
失去焦点 | 8 | WM_KILLFOCUS | 使一个窗口失去焦点。③参数:接收焦点的窗口,可为0;④数据:0 |
可用状态 | 10 | WM_ENABLE | 使一个窗口处于可用状态。③参数:0为禁用,非零启用;④数据:0 |
是否重绘 | 11 | WM_SETREDRAW | 设置窗口是否能重绘。③参数:0不重绘,非0重绘;④数据:0 |
窗口重绘 | 15 | WM_PAINT | 当需要绘制一部分应用窗口的时候,发送本消息给所有者程序。③参数:0;④数据:0 |
窗口关闭 | $0010 | WM_CLOSE | 用户关闭窗口时会发送本消息,紧接着会发送程序关闭消息。③参数:0;④数据:0 |
消息结束 | $0012 | WM_QUIT | 提交退出函数提交一个代码数值,程序收到此消息,用以关闭消息循环,结束程序的运行。③参数:退出码;④数据:0 |
窗口恢复 | $0013 | WM_QUERYOPEN | 最小化的窗口即将被恢复以前的大小位置。③参数:0;④数据:0 |
擦除背景 | $0014 | WM_ERASEBKGND | 当一个窗口的背景必须被擦除时本消息会被触发(如:窗口大小改变时)。③参数:设备;④数据:0 |
显示窗口 | $0018 | WM_SHOWWINDOW | 发送本消息给一个窗口,以便隐藏或显示该窗口。③参数:0隐藏,非0显示;④数据:0不变,1最小化,2最大化,3正在还原,4已被还原 |
界面激活 | $001C | WM_ACTIVATEAPP | 窗口进程激活状态改动,正被激活的窗口属于不同的应用程序。③参数:0停用,非0激活;④数据:线程标识 |
模态窗口 | $001F | WM_CANCELMODE | 发送本消息来取消某种正在进行的模态(操作)(如鼠示捕获),例如:启动一个模态窗口时,父窗会收到本消息;③参数:0;④数据:0 |
窗口改变 | $0024 | WM_GETMINMAXINFO | 当窗口将要改变大小或位置时,由系统发送本消息给窗口,用户拖动一个可重置大小的窗口时便会发出本消息。③参数:0;④数据:MINMAXINFO结构 |
拖放小窗 | $0037 | WM_QUERYDRAGICON | 本消息发送给最小化的窗口,当该窗口将被拖放而其窗口类中没有定义图标,应用程序能返回一个图标或光标的句柄。③参数:0;④数据:0 |
显存不足 | $0041 | WM_COMPACTING | 显示内存已经很少了。③参数:时间比;④数据:0。例如,0x8000表示压缩内存所用的 CPU 时间的 50%。 |
首创窗口 | $0081 | WM_NCCREATE | 当某窗口首次被创建时,本消息在WM_CREATE消息发送前发送。③参数:0;④数据:创建窗口的全部数据 |
调整大小 | $214 | WM_SIZING | 当用户正在调整窗口大小时,发送本消息给窗口;③参数:1左边缘,2右边缘,3上边缘,4左上角,5右上角,下边缘,7左下角,8右下角;④数据:矩形类 |
循环调整 | $231 | WM_ENTERSIZEMOVE | 当某窗口进入移动或调整大小的模式循环时,本消息发送到该窗口。③参数:0;④数据:0 |
退出调整 | $232 | WM_EXITSIZEMOVE | 确定用户改变窗口大小或改变窗口位置的事件是何时完成的。③参数:0;④数据:0 |
窗口绘制 | $317 | WM_PRINT | 请求窗口在指定的设备(如打印机)绘制自身。③参数:设备;④数据:1绘可见窗口,2绘非工作区,4绘工作区,8擦除背景,16绘所有可见子窗,32绘所有窗口 |
绘客户区 | $318 | WM_PRINTCLIENT | 请求窗口在指定的设备(如打印机)绘制其客户区。③参数:设备;④数据:1绘可见窗口,2绘非工作区,4绘工作区,8擦除背景,16绘所有可见子窗,32绘所有窗口 |
中文名字 | 英文名称 | 长度 | 作用解释 |
窗口类 | WNDCLASS | 40 | 用来储存某一类窗口的信息,向系统注册此信息才能创建窗体。 |
窗口类——成员表 |
风格 | style | 整数 | 窗口类的风格 |
消息 | lpfnWndProc | 整数 | 窗口消息处理函数 |
类长 | cbClsExtra | 整数 | 窗口类扩展 |
实长 | cbWndExtra | 整数 | 窗口实例扩展 |
实例 | hInstance | 整数 | 当前实例句柄,$400000 |
图标 | hIcon | 整数 | 窗口的小图标 |
光标 | hCursor | 整数 | 窗口鼠标光标 |
背景 | hbrBackground | 整数 | 窗口背景色 |
菜单 | lpszMenuName | 整数 | 窗口菜单 |
名称 | lpszClassName | 整数 | 窗口类名 |
中文名字 | 英文名称 | 长度 | 作用解释 |
消息类 | MSG | 28 | 定义了传递给应用程序的窗口过程的初始化参数,它定义了窗口外观相关特性 |
消息类——成员表 |
窗口 | 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就能激活主窗口
当用户按下热键时,系统会生成一条 系统命令 消息,交给处理窗口函数,会弹出该窗口;设置热键不能指定子窗口
中文名字 | 常量数值 | 英文名称 | 释义 |
设置文本 | 12 | WM_SETTEXT | 设置一个窗口的文本。③参数:0;④数据:内容文本 |
获取文本 | 13 | WM_GETTEXT | 复制窗口的文本到缓冲区。③参数:最大长度;④数据:文本缓冲区 |
文本长度 | 14 | WM_GETTEXTLENGTH | 得到窗口的文本长度(不含结束符)。③参数:0;④数据:0 |
指定字体 | $30 | WM_SETFONT | 指定控件所用字体。③参数:字体;④数据:0不重绘;非0立即重绘 |
获取字体 | $31 | WM_GETFONT | 得到当前控件绘制其文本所用的字体。③参数:0;④数据:0 |
设置热键 | $32 | WM_SETHOTKEY | 为某窗口关联一个热键。③参数:键码/高位1SHIFT,2CTRL,4ALT,8扩展;④数据:0 |
获取热键 | $33 | WM_GETHOTKEY | 为某窗口关联一个热键。③参数:0;④数据:0;返回值:键码/高位1SHIFT,2CTRL,4ALT,8扩展 |
系统命令 | $112 | WM_SYSCOMMAND | 当用户按下 设置热键 指定的按键。③参数:键值;④数据:窗口 |
热键消息 | $312 | WM_HOTKEY | 当用户按下由注册热键函数注册的热键时。③参数:-1窗口,-2桌面;④数据:低字=1Alt,2CTRL,4SHIFT,8WIN;高字=键码 |
窗口外观——控制消息:
整数 图标=加载图像(0,"sec.ico",图标类型,0,0,$10);从文件中加载一个图标,$10标志是从文件加载
发送消息(窗体,设置图标,0,图标);修改窗口标题栏显示的小图标,0是小图标,1是大图标
删除对象(图标);删除加载的图标对象,从而释放读取图标使用的内存
加载图标可以使用系统固有的图标,例如把图标换成
整数 图标=载入图标(0,32518)
显示的就是一个盾牌图标;32512默认图标,32513错误图标,32514问号图标,32515警告图标,32516,信息图标
中文名字 | 常量数值 | 英文名称 | 释义 |
图标重绘 | $0026 | WM_PAINTICON | 当一个最小化的窗口图标将被重绘时发送本消息。③参数:0;④数据:0 |
图标背景 | $0027 | WM_ICONERASEBKGND | 本消息发送给某个最小化的窗口,仅当它在画图标前它的背景必须被重画。③参数:0;④数据:0 |
打印变化 | $002A | WM_SPOOLERSTATUS | 每当打印管理列队增加或减少一条作业时就会发出本消息。③参数:状态;④数据:作业数 |
外观改变 | $002B | WM_DRAWITEM | 按钮、组合框、列表框、菜单的外观改变时会发送本消息给这些控件的所有者。③参数:控件号;④数据:绘制项目类 |
改变窗口 | $0046 | WM_WINDOWPOSCHANGING | 本消息会发送给那些大小和位置(Z_Order)将被改变的窗口,以调用设置窗口函数或其它窗口管理函数。③参数:0;④数据: WINDOWPOS 结构 |
窗口变化 | $0047 | WM_WINDOWPOSCHANGED | 本消息会发送给那些大小和位置(Z_Order)已被改变的窗口,以调用设置窗口函数或其它窗口管理函数。③参数:0;④数据: WINDOWPOS 结构 |
改变风格 | $007C | WM_STYLECHANGING | 将要改变一个或多个窗口的风格时,发送本消息给那个窗口。③参数:-16窗口样式,-20扩展样式;④数据:STYLESTRUCT 结构 |
风格变化 | $007D | WM_STYLECHANGED | 改变一个或多个窗口的风格后,发送本消息给那个窗口。③参数:-16窗口样式,-20扩展样式;④数据:STYLESTRUCT 结构 |
窗口图标 | $007F | WM_GETICON | 本消息发送给某个窗口,用于返回与某窗口有关联的大图标或小图标的句柄。③参数:0小图标,1大图标,2生成图标;④数据:DPI大小(16*16) |
设置图标 | $0080 | WM_SETICON | 应用程序发送本消息让一个新的大图标或小图标与某窗口相关联。③参数:0小图标,1大图标;④数据:图标;窗口标题栏是小图标,“Alt+Tab”对话框中显示大图标 |
图片类型
中文名字 | 常量 | 英文名称 | 释义 |
位图类型 | 0 | IMAGE_BITMAP | 位图类型(bmp) |
图标类型 | 1 | IMAGE_ICON | 图标类型(ico) |
光标类型 | 2 | IMAGE_CURSOR | 光标类型(cur) |
强图类型 | 3 | IMAGE_ENHMETAFILE | 强图类型(emf) |
窗口样式
中文名字 | 英文名称 | 数值 | 作用解释 |
细线边框 | WS_BORDER | 0x00800000 | 窗口具有细线边框 |
标题栏 | WS_CAPTION | 0x00C00000 | 窗口具有标题栏, (包含 WS_BORDER 样式) 。 |
是子窗口 | WS_CHILD | 0x40000000 | 窗口是子窗口。 具有此样式的窗口不能有菜单栏。 此样式不能与 WS_POPUP 样式一起使用。 |
是子窗口 | WS_CHILDWINDOW | 0x40000000 | 与 WS_CHILD 样式相同。 |
不绘子窗 | WS_CLIPCHILDREN | 0x02000000 | 排除在父窗口内进行绘制时子窗口占用的区域。 创建父窗口时使用此样式。 |
剪裁子窗 | WS_CLIPSIBLINGS | 0x04000000 | 相对于彼此剪裁子窗口;重绘时若有不绘子窗样式会将其他重叠的子窗口剪裁到子窗口的区域之外进行更新。 |
是否禁用 | WS_DISABLED | 0x08000000 | 窗口最初处于禁用状态。 已禁用的窗口无法接收用户的输入。 |
对话边框 | WS_DLGFRAME | 0x00400000 | 窗口具有通常与对话框一起使用的样式的边框。 具有此样式的窗口不能具有标题栏。 |
分组控制 | WS_GROUP | 0x00020000 | 窗口是一组控件的第一个控件。 组由第一个控件及其后定义的所有控件组成,以便用户可以在组之间移动焦点。 |
水平滚动 | WS_HSCROLL | 0x00100000 | 窗口具有水平滚动条。 |
垂直滚动 | WS_VSCROLL | 0x00200000 | 窗口具有垂直滚动条。 |
最小化 | WS_ICONIC | 0x20000000 | 窗口最初最小化。 |
最大化 | WS_MAXIMIZE | 0x01000000 | 窗口最初是最大化的。 |
最大化钮 | WS_MAXIMIZEBOX | 0x00010000 | 窗口有一个“最大化”按钮。 不能与 WS_EX_CONTEXTHELP 样式组合使用。 还必须指定 WS_SYSMENU 样式。 |
最小化 | WS_MINIMIZE | 0x20000000 | 窗口最初最小化。 |
最小化钮 | WS_MINIMIZEBOX | 0x00020000 | 窗口有一个最小化按钮。 不能与 WS_EX_CONTEXTHELP 样式组合使用。 还必须指定 WS_SYSMENU 样式。 |
重叠窗口 | WS_OVERLAPPED | 0x00000000 | 窗口是重叠的窗口。 |
重叠窗口 | WS_TILED | 0x00000000 | 该窗口是一个重叠的窗口。 |
标题边框 | WS_OVERLAPPEDWINDOW | 0xCF0000 | 重叠的窗口带有标题栏和边框。 |
标题边框 | WS_TILEDWINDOW | 0xCF0000 | 重叠的窗口带有标题栏和边框。 |
弹出窗口 | WS_POPUP | 0x80000000 | 窗口是弹出窗口。 此样式不能与子窗口样式一起使用。 |
弹出标题 | WS_POPUPWINDOW | 0x80880000 | 窗口是弹出窗口带有菜单栏和细线边框。 |
可调边框 | WS_SIZEBOX | 0x00040000 | 窗口具有大小调整边框。 |
可调边框 | WS_THICKFRAME | 0x00040000 | 窗口具有调整大小边框。 |
系统菜单 | WS_SYSMENU | 0x00080000 | 窗口的标题栏上有一个窗口菜单。 还必须指定 WS_CAPTION 样式。 |
制表选择 | WS_TABSTOP | 0x00010000 | 窗口是一个控件,当用户按下 TAB 键时,该控件可以接收键盘焦点。 |
是否可见 | WS_VISIBLE | 0x10000000 | 该窗口最初是可见的。 |
窗口扩展样式
中文名字 | 英文名称 | 数值 | 作用解释 |
双边窗口 | WS_EX_DLGMODALFRAME | 1 | 窗口有一个双边框 |
总在顶层 | WS_EX_TOPMOST | 8 | 窗口应放置在所有非最顶部窗口的上方 |
文件拖曳 | WS_EX_ACCEPTFILES | 0x10 | 窗口接受拖放文件。 |
窗口透明 | WS_EX_TRANSPARENT | 0x20 | 窗口显示为透明,因为基础同级窗口的位已被绘制。 |
MDI 窗口 | WS_EX_MDICHILD | 0x40 | 该窗口是 MDI 子窗口。 |
小标题栏 | WS_EX_TOOLWINDOW | 0x80 | 工具窗口具有短于普通标题栏的标题栏和使用较小的字体绘制的窗口标题。 |
凸起边缘 | WS_EX_WINDOWEDGE | 0x100 | 窗口的边框带有凸起的边缘。 |
阴影边界 | WS_EX_CLIENTEDGE | 0x200 | 窗口有一个带有凹陷边缘的边框。 |
问号帮助 | WS_EX_CONTEXTHELP | 0x400 | 窗口的标题栏包含问号。单击时光标将变成带指针的问号。随后单击子窗口将收到 WM_HELP 消息。 |
导航子窗 | WS_EX_CONTROLPARENT | 0x10000 | 包含参与对话框导航的子窗口。执行导航操作(例如处理 TAB 键、箭头键或键盘助记键)时,对话管理器将递归为此窗口的子级。 |
静态边框 | WS_EX_STATICEDGE | 0x20000 | 窗口具有三维边框样式,旨在用于不接受用户输入的项。 |
到任务栏 | WS_EX_APPWINDOW | 0x40000 | 在顶级窗口可见时强行将其放在任务栏上。 |
分层窗口 | WS_EX_LAYERED | 0x80000 | 该窗口是一个分层窗口。 |
不重定向 | WS_EX_NOREDIRECTIONBITMAP | 0x00200000 | 窗口不会呈现到重定向图面。这适用于没有可见内容或使用表面以外的机制提供其视觉对象的窗口。 |
后台窗口 | WS_EX_NOACTIVATE | 0x8000000 | 创建的顶级窗口不会成为前台窗口。 |
中文名字 | 英文名称 | 长度 | 作用解释 |
窗口外观类 | CREATESTRUCT | 48 | 定义了传递给应用程序的窗口过程的初始化参数,它定义了窗口外观相关特性 |
窗口外观类——成员表 |
参数 | 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人员
中文名字 | 常量数值 | 英文名称 | 释义 |
类菜单名 | -8 | GCL_MENUNAME | 获取/替换菜单名字符串的地址。 |
类背景色 | -10 | GCL_HBRBACKGROUND | 获取/替换与类有关的背景刷子的句柄。 |
窗类光标 | -12 | GCL_HCURSOR | 获取/替换与类有关的光标的句柄。 |
窗类图标 | -14 | GCL_HICON | 获取/替换与类有关的图标的句柄。 |
窗类模块 | -16 | GCL_HMODULE | 获取/替换注册类的模块的句柄。 |
窗类内存 | -18 | GCL_CBWNDEXTRA | 获得/修改与类中的每个窗口相关的额外窗口中内存空间的字节大小 |
窗类尺寸 | -20 | GCL_CBCLSEXTRA | 设置与类相关的尺寸的大小。不改变己分配的额外字节数。 |
窗类过程 | -24 | GCL_WNDPROC | 获取/替换与窗口类有关的窗口过程的地址。 |
窗类风格 | -26 | GCL_STYLE | 获取/替换窗口类的风格位。 |
窗类原子 | -32 | GCW_ATOM | 获得一个唯一标识窗口类的原子值 |
类小图标 | -34 | GCL_HICONSM | 获得与类有关的小图标句柄。 |
修改窗口属性——外观指针
改窗口值(窗体,窗口过程,@消息函数);为窗口过程设置新的函数地址。
改窗口值(窗体,窗口扩展,$200);修改窗体的扩展窗口风格为3D边框
改窗口值(窗体,窗口数值,数据);修改窗体的定义数值为指定数据
中文名字 | 常量数值 | 英文名称 | 释义 |
窗口过程 | -4 | GWL_WNDPROC | 获得/修改窗口过程的地址 |
窗口实例 | -6 | GWL_HINSTANCE | 获得/修改应用事例的句柄。 |
窗口父级 | -8 | GWL_HWNDPARENT | 获得/修改父窗口句柄。 |
窗口风格 | -16 | GWL_STYLE | 获/修改得窗口风格。 |
窗口扩展 | -20 | GWL_EXSTYLE | 获得/修改扩展窗口风格。 |
窗口数值 | -21 | GWL_USERDATA | 获得/修改与窗口有关的定义数值。 |
窗口标识 | -12 | GWL_ID | 获得/修改窗口标识。 |
对话消息 | 0 | DWL_MSGRESULT | 获得/修改在对话框过程中一个消息处理的返回值。 |
对话过程 | 4 | DWL_DLGPROC | 获得/修改对话框过程的地址 |
对话定义 | 8 | DWL_USER | 获得/修改应用程序私有的额外信息,例如一个句柄或指针。 |
修改窗口显示
显隐窗口(窗体,窗口最小);激活窗口并将其最小化。
显隐窗口(窗体,窗口隐藏);隐藏窗口并激活其他窗口
显隐窗口(窗体,窗口显示);激活窗口并恢复原来的尺寸。
中文名字 | 常量数值 | 英文名称 | 释义 |
窗口隐藏 | 0 | SW_HIDE | 隐藏窗口并激活其他窗口。常用于显隐窗口 |
恢复原来 | 1 | SW_SHOWNORMAL | 激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。 |
窗口最小 | 2 | SW_SHOWMINIMIZED | 激活窗口并将其最小化。 |
窗口最大 | 3 | SW_SHOWMAXIMIZED | 激活窗口并将其最大化 |
恢复最近 | 4 | SW_SHOWNOACTIVATE | 以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。 |
窗口显示 | 5 | SW_SHOW | 在窗口原来的位置以原来的尺寸激活和显示窗口。 |
最小切换 | 6 | SW_MINIMIZE | 最小化指定的窗口并且激活在Z序中的下一个顶层窗口。 |
最小激活 | 7 | SW_SHOWMINNOACTIVE | 窗口最小化,激活窗口仍然维持激活状态。 |
恢复激活 | 8 | SW_SHOWNA | 以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。 |
激活原来 | 9 | SW_RESTORE | 激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。 |
恢复设定 | 10 | SW_SHOWDEFAULT | 依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态 |
修改窗口大小位置和显示隐藏
设置窗口(标签1,0,0,0,0,0,$23);在窗口周围画一个边框。尺寸位置不变
设置窗口(窗口,0,左,顶,0,0,1);设置窗口的位置,忽略宽高
设置窗口(窗口,0,0,0,宽,高,2);设置窗口的宽高,忽略位置。
中文名字 | 常量数值 | 英文名称 | 释义 |
保持尺寸 | $0001 | SWP_NOSIZE | 维持当前尺寸(忽略宽高参数)。常用于设置窗口 |
保持位置 | $0002 | SWP_NOMOVE | 维持当前位置(忽略左顶参数)。 |
保持层序 | $0004 | SWP_NOZORDER | 维持当前Z序。 |
保持图像 | $0008 | SWP_NOREDRAW | 不重画改变的内容。如果设置了这个标志,则不发生任何重画动作。 |
保持状态 | $0010 | SWP_NOACTIVATE | 不激活窗口。 |
增加边框 | $0020 | SWP_DRAWFRAME | 在窗口周围画一个边框(定义在窗口类描述中)。 |
显现窗口 | $0040 | SWP_SHOWWINDOW | 显示窗口 |
隐藏窗口 | $0080 | SWP_HIDEWINDOW | 隐藏窗口 |
清空窗口 | $0100 | SWP_NOCOPYBITS | 清除客户区窗口的所有内容。 |
不变顺序 | $0200 | SWP_NOREPOSITION | 不改变z序中的所有者窗口的位置。 |
防止同步 | $2000 | SWP_DEFERERASE | 防止产生同步消息。 |
防止死锁 | $4000 | SWP_ASYNCWINDOWPOS | 如果进程没有窗口,系统会向有窗口的线程发出消息。防止在其他线程处理消息时发生死锁。 |
修改窗口层序
设置窗口(标签1,0,0,0,0,0,3);设置窗口显示在上层。尺寸位置不变
设置窗口(标签1,-1,0,0,0,0,3);设置窗口显示在最顶层。尺寸位置不变
中文名字 | 常量数值 | 英文名称 | 释义 |
移至顶序 | 0 | HWND_TOP | 将窗口置于Z序的顶部。常用于设置窗口 |
移至底层 | 1 | HWND_BOTTOM | 将窗口置于Z序的底部。顶层窗口失去顶级位置,并且被置在其他窗口的底部。 |
移至顶层 | -1 | HWND_TOPMOST | 将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。 |
移至顶后 | -2 | HWND_NOTOPMOST | 将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。 |
查找指定窗口的指定关系窗口
整数 窗口=获取窗口(窗体,同级首个);查找窗体同级别第一个窗口
整数 窗口=获取窗口(窗体,同级最后);查找窗体同级别最后一个窗口
使用更多的是查找窗口:整数 窗口=查找窗口(0,窗口名)
中文名字 | 常量数值 | 英文名称 | 释义 |
同级首个 | 0 | GW_HWNDFIRST | 同级别第一个,常用于GetWindow |
同级最后 | 1 | GW_HWNDLAST | 同级别最后一个 |
同级下个 | 2 | GW_HWNDNEXT | 同级别下一个 |
同级上个 | 3 | GW_HWNDPREV | 同级别上一个 |
从主窗口 | 4 | GW_OWNER | 属主窗口 |
属子窗口 | 5 | GW_CHILD | 查子窗口 |
属弹出窗 | 6 | GW_ENABLEDPOPUP | 查弹出窗 |
绘制控件——通知消息:
如果是指定多个或多种控件的字体,可以在绘制控件消息时指定,比如判断(消息)
为 绘制按钮{发送消息(数据,指定字体,字体,0)}
绘制不同的控件可以指定不同的字体,如果要所有控件都指定同一种字体,可以用
为 绘制弹窗 ~ 绘制静态{选择对象(参数,字体)}
使用波浪线符号是从绘制弹窗 到 绘制静态的消息,包括弹窗,编辑框,列表框,按钮,对话框,滚动条,静态标签框这些控件都指定为同一字体
在绘制控件的时候,第三参数为控件的设备,所以也可以用
选择对象(参数,字体)来修改字体,但是这个方法不支持按钮一类的控件
也可以在绘制控件时指定文字颜色和背景颜色,如:
文本改色(参数,$C0FFFF) 改背景色(参数,$C0FF30)
改背景色适合编辑框,其它控件可以使用
创建画刷($C0FFC0)来修改背景,或者使用
固有对象(5)让背景透明,这里5是空画刷
绘制弹窗 | $0132 | WM_CTLCOLORMSGBOX | 系统绘制消息框前发送本消息给消息框的所有者窗口,可用来设置消息框的文本和背景色③参数:设备;④数据:控件 |
绘制编辑 | $0133 | WM_CTLCOLOREDIT | 当一个编辑框控件将要被绘制时,发送本消息给其父窗;可用来设置编辑框的文本和背景色③参数:设备;④数据:控件 |
绘制列表 | $0134 | WM_CTLCOLORLISTBOX | 当一个列表框控件将要被绘制前,发送本消息给其父窗;可用来设置列表框的文本和背景色③参数:设备;④数据:控件 |
绘制按钮 | $0135 | WM_CTLCOLORBTN | 绘制按钮的背景色③参数:设备;④数据:控件 |
绘制对话 | $0136 | WM_CTLCOLORDLG | 绘制对话框的背景色③参数:设备;④数据:控件 |
绘制滚条 | $0137 | WM_CTLCOLORSCROLLBAR | 绘制滚动条的背景色③参数:设备;④数据:控件 |
绘制静态 | $0138 | WM_CTLCOLORSTATIC | 绘制一个静态控件的背景色③参数:设备;④数据:控件 |
控件事件——控制消息:
整数 数值=取控件数(窗体,1)获取窗体上1号控件内文字,并转换成数值
改控件数(窗体,2,数值,真)把数值转换成文字显示到窗体上2号控件窗口
文本 内容[16]=取控件字(窗体,3)获取窗体上3号控件内文字
改控件字(窗体,2,内容)把文字内容显示到窗体上2号控件窗口
判断(消息)
为 控件事件 公共事件(数据)调用公共事件这段程序代码,④数据:包含多项事件信息的数据
程序段 公共事件(数据)
整数 窗口=数据&,参数=.&4,事件=.&8
处理窗口(窗口,控件事件,参数,数据)
结束
数据地址里第一个整数是窗口,第二个整数是控件编号(对应窗体消息的参数),第三个整数是控件事件
这种事件是用负数表示,如-2是单击左键,-3是双击左键,具体参照下面:公用控件事件这个表
中文名字 | 常量数值 | 英文名称 | 释义 |
绘制控件 | $0019 | WM_CTLCOLOR | 在每个控件开始绘制之前,都会向其父窗口发送此消息,可用来设置控件显示文本的前景色、背景色以及字体。③参数:设备;④数据:控件 |
控件创建 | $002C | WM_MEASUREITEM | 按钮、组合框、列表框、列表控件、菜单项被创建时会发送本消息给这些控件的所有者。③参数:控件号;④数据:项目尺寸类 |
删除项目 | $002D | WM_DELETEITEM | 列表框或组合框被销毁或删除清空某些项时,会发送本消息给这些控件的所有者。③参数:控件号;④数据: 项目删除类 |
新项位置 | $0039 | WM_COMPAREITEM | 可发送本消息来确定组合框(CBS_SORT)或列表框(LBS_SORT)中新增项的相对位置。③参数:控件号;④数据:项目排序类 |
串口事件 | $0044 | WM_COMMNOTIFY | Win3.1中,当串口事件产生时,通讯设备驱动程序发送消息本消息给系统,指示输入输出队列的状态。 |
控件事件 | $004E | WM_NOTIFY | 当某控件的某事件已发生或该控件需得到一些信息时,发送本消息给其父窗。③参数:控件号;④数据:通知类 |
帮助按键 | $0053 | WM_HELP | 按下后,若某菜单是激活的,就发给此窗口关联的菜单;否则就发送给有焦点的窗口;若当前都没有焦点,发给当前激活的窗口。③参数:0;④数据:帮助类 |
消息判断 | $0055 | WM_NOTIFYFORMAT | 公用控件、自定义控件和其父窗通过本消息判断控件在WM_NOTIFY通知消息中是使用ANSI还是UNICODE。③参数:窗口;④数据:3控件,4父窗;返回值:1ANSi,2UNICODE |
定时事件 | $0113 | WM_TIMER | 发生了定时器事件。③参数:编号;④数据:回调函数 |
公用控件事件——通知消息:
发生控件事件时,若无特别说明④数据:传递
通知类 结构的数据
中文名字 | 常量数值 | 英文名称 | 释义 |
控件内存不足 | -1 | NM_OUTOFMEMORY | 内存不足,操作不能完成 |
控件单击左键 | -2 | NM_CLICK | 用户在控件上点击了鼠标左键 |
控件双击左键 | -3 | NM_DBLCLK | 用户在控件上双击了鼠标左键 |
控件按下回车 | -4 | NM_RETURN | 控件获得键盘焦点并按下回车键 |
控件单击右键 | -5 | NM_RCLICK | 用户在控件上点击了鼠标右键 |
控件双击右键 | -6 | NM_RDBLCLK | 用户在控件上双击了鼠标右键 |
控件得到焦点 | -7 | NM_SETFOCUS | 控件收到输入焦点 |
控件失去焦点 | -8 | NM_KILLFOCUS | 用户失去输入焦点 |
控件自行绘制 | -12 | NM_CUSTOMDRAW | 通知控件的父窗口有关自定义绘制操作的信息。 |
控件鼠标掠过 | -13 | NM_HOVER | 用户的鼠标掠过控件 |
控件命中测试 | -14 | NM_NCHITTEST | 当控件收到消息时,由 伸缩条 控件发送。④数据:NMMOUSE 结构 |
控件按下键盘 | -15 | NM_KEYDOWN | 控件获得键盘焦点并按下某键 |
控件释放鼠标 | -16 | NM_RELEASEDCAPTURE | 控件要释放鼠标捕捉 |
控件设置光标 | -17 | NM_SETCURSOR | 控件响应消息要设置光标 |
控件键入字符 | -18 | NM_CHAR | 字符键被处理后由控件发送 |
控件工具提示 | -19 | NM_TOOLTIPSCREATED | 通知控件的父窗口控件已创建工具提示控件。④数据:NMTOOLTIPSCREATED 结构 |
控件鼠标左键 | -20 | NM_LDOWN | 通知控件的父窗口已按下鼠标左键。 |
控件鼠标右键 | -21 | NM_RDOWN | 不支持此通知代码。 |
控件主题更改 | -22 | NM_THEMECHANGED | 通知控件的父窗口主题已更改。 |
控件字体更改 | -23 | NM_FONTCHANGED | 当控件更改字体时,由列表视图控件发送。 |
控件自定文本 | -24 | NM_CUSTOMTEXT | 通知控件的父窗口有关自定义文本操作的信息。④数据:NMCUSTOMTEXT 结构 |
发送消息——常数表 |
控件背景颜色 | 0x2001 | CCM_SETBKCOLOR | 此消息用于设置控件的背景颜色。③参数:0;④数据:颜色; |
控件设置配色 | 0x2002 | CCM_SETCOLORSCHEME | 此消息用于设置控件的颜色配置。③参数:0;④数据:COLORSCHEME; |
控件获取配色 | 0x2003 | CCM_GETCOLORSCHEME | 此消息用于获取控件的颜色配置。③参数:0;④数据:COLORSCHEME; |
控件拖放接口 | 0x2004 | CCM_GETDROPTARGET | 获取页码控件的 拖放目标对象 接口指针。③参数:0;④数据:@接口 |
控件设置宽字 | 0x2005 | CCM_SETUNICODEFORMAT | 设置控件的 Unicode 字符格式标志。③参数:是否宽字;④数据:0; |
控件获取宽字 | 0x2006 | CCM_GETUNICODEFORMAT | 获取控件的 Unicode 字符格式标志。③参数:0;④数据:0; |
控件设置版本 | 0x2007 | CCM_SETVERSION | 此消息用于通知控件与特定版本关联。③参数:版本;④数据:0; |
控件获取版本 | 0x2008 | CCM_GETVERSION | 获取控件设置的版本号。③参数:0;④数据:0; |
控件设置样式 | 0x200B | CCM_SETWINDOWTHEME | 此消息用于设置控件的视觉样式。③参数:0;④数据:样式(宽字符); |
控件启用缩放 | 0x200C | CCM_DPISCALE | 树表、表格、强组合框、标题、按钮、工具栏、动画和图像列表)启用dpi缩放。③参数:真;④数据:0; |
通知类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
通知类 | NMHDR | 12 | 包含有关通知消息的信息。 |
通知类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
窗口 | 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在帮助按钮中
中文名字 | 常量数值 | 英文名称 | 释义 |
区外删除 | $0082 | WM_NCDESTROY | 本消息通知某窗口,非客户区正在销毁。③参数:0;④数据:0 |
区外调整 | $0083 | WM_NCCALCSIZE | 当某窗口的客户区的大小和位置须被计算时发送本消息。③参数:0不需要指示工作区的有效部分,非0需要;④数据:参数为真NCCALCSIZE_PARAMS 结构,参数为假 矩形类 |
区外鼠标 | $0084 | WM_NCHITTEST | 当用户在在非客户区移动鼠标、按住或释放鼠标时发送本消息(击中测试);若鼠标没有被捕获,则在得到光标之后发出。③参数:0;④数据:屏幕坐标x/y |
区外重绘 | $0085 | WM_NCPAINT | 当窗口框架(非客户区)必须被被重绘时,应用程序发送本消息给该窗口。③参数:区域;④数据:0 |
区外激活 | $0086 | WM_NCACTIVATE | 本消息发送给某窗口,在窗口的非客户区被激活时重绘窗口。③参数:0绘制非活动标题栏或图标,非0活动;④数据:0活动窗口,-1不重绘,非活动窗口区域指针 |
经过区外 | $00A0 | WM_NCMOUSEMOVE | 当光标在某窗口的非客户区内移动时,发送本消息给该窗口。③参数:点击区域;④数据:坐标x/y; |
区外按左 | $00A1 | WM_NCLBUTTONDOWN | 当光标在某窗口的非客户区内的同时按下鼠标左键,会发送本消息。③参数:点击区域;④数据:坐标x/y; |
区外放左 | $00A2 | WM_NCLBUTTONUP | 当用户释放鼠标左键的同时光标在某窗口的非客户区内时,会发送本消息。③参数:点击区域;④数据:坐标x/y; |
区外双左 | $00A3 | WM_NCLBUTTONDBLCLK | 当用户双击鼠标左键的同时光标在某窗口的非客户区内时,会发送本消息。③参数:点击区域;④数据:坐标x/y; |
区外按右 | $00A4 | WM_NCRBUTTONDOWN | 当用户按下鼠标右键的同时光标在某窗口的非客户区内时,会发送本消息。③参数:点击区域;④数据:坐标x/y; |
区外放右 | $00A5 | WM_NCRBUTTONUP | 当用户释放鼠标右键的同时光标在某窗口的非客户区内时,会发送本消息。③参数:点击区域;④数据:坐标x/y; |
区外双右 | $00A6 | WM_NCRBUTTONDBLCLK | 当用户双击鼠标右键的同时光标在某窗口的非客户区内时,会发送本消息。③参数:点击区域;④数据:坐标x/y; |
区外按中 | $00A7 | WM_NCMBUTTONDOWN | 当用户按下鼠标中键的同时光标在某窗口的非客户区内时,会发送本消息。③参数:点击区域;④数据:坐标x/y; |
区外放中 | $00A8 | WM_NCMBUTTONUP | 当用户释放鼠标中键的同时光标在某窗口的非客户区内时,会发送本消息。③参数:点击区域;④数据:坐标x/y; |
区外双中 | $00A9 | WM_NCMBUTTONDBLCLK | 当用户双击鼠标中键的同时光标在某窗口的非客户区内时,会发送本消息。③参数:点击区域;④数据:坐标x/y; |
区外按向 | $00AB | WM_NCXBUTTONDOWN | 当光标位于窗口非工作区中并且用户按下鼠标前进后退按钮时发送。③参数:1后退(X1),2前进(X2);④数据:坐标类; |
区外放向 | $00AC | WM_NCXBUTTONUP | 当光标位于窗口非工作区中并且用户释放鼠标前进后退按钮时发送。③参数:1后退(X1),2前进(X2);④数据:坐标类; |
区外双向 | $00AD | WM_NCXBUTTONDBLCLK | 当光标位于窗口非工作区中并且用户双击鼠标前进后退按钮时发送。③参数:1后退(X1),2前进(X2);④数据:坐标类; |
键盘事件——通知消息:
判断(消息)
为 键盘按下 获取键值(参数)
为 键盘松开 获取键值(参数)
在键盘按下的动作事件里,把参数提交给获取键值的程序段,也就是键值
程序段 获取键值(键码)
判断(键码)为 37 左方向键
为 38 上方向键 为 65 字母A键
根据不同的键码去执行相应的功能函数(程序段),按键对应的虚拟键代码请查看下面的表
中文名字 | 常量数值 | 英文名称 | 释义 |
窗口激活 | 6 | WM_ACTIVATE | 一个窗口被激活或失去激活状态。③参数:0关闭,1非鼠标激活,2鼠标激活;④数据:参数为0是激活窗口,非0是停用的窗口 |
获得焦点 | 7 | WM_SETFOCUS | 将键盘焦点转向一个窗口。③参数:失去焦点的窗口,可为0;④数据:0 |
失去焦点 | 8 | WM_KILLFOCUS | 使一个窗口失去焦点。③参数:接收焦点的窗口,可为0;④数据:0 |
键盘起始 | $0100 | WM_KEYFIRST | 用于WinCE系统,本消息在使用获取消息和查探消息函数时,用于过滤键盘消息 |
键盘按下 | $0100 | WM_KEYDOWN | 当一个非系统按键被按下时(键没有被按下),会发送本消息给拥有键盘焦点的窗口。③参数:键码;④数据:扫描码 |
键盘松开 | $0101 | WM_KEYUP | 当一个非系统按键被释放弹起时(键没有被按下),会发送本消息给拥有键盘焦点的窗口。③参数:键码;④数据:扫描码 |
键入字符 | $0102 | WM_CHAR | 按下某按键,并已发出按下、松开消息,本消息包含被按下的按键的字符码。③参数:字码;④数据:扫描码 |
敲击按键 | $0103 | WM_DEADCHAR | \"死字符\"消息,当使用翻译消息函数翻译WM_KEYUP消息时,发送本消息给拥有键盘焦点的窗口。③参数:键码;④数据:扫描码 |
ALT键按下 | $0104 | WM_SYSKEYDOWN | 当用户按住键的同时又按下其它键时,发送本消息给拥有焦点的窗口。③参数:键码;④数据:扫描码 |
ALT键松开 | $0105 | WM_SYSKEYUP | 当用户释放一个按键的同时键还按着时,发送本消息给拥有焦点的窗口。③参数:键码;④数据:扫描码 |
ALT键字符 | $0106 | WM_SYSCHAR | 当WM_SYSKEYDOWN消息被翻译消息函数翻译后,发送本消息给拥有焦点的窗口,注:键被按下。③参数:键码;④数据:扫描码 |
ALT敲字符 | $0107 | WM_SYSDEADCHAR | \"死字符\"消息,当使用翻译消息函数翻译WM_SYSKEYDOWN消息时,发送本消息给拥有键盘焦点的窗口。③参数:键码;④数据:扫描码 |
键盘结束 | $0108 | WM_KEYLAST | 用于WinCE系统,本消息在使用获取消息和查探消息函数时,用于过滤键盘消息 |
键入宽字 | $0109 | WM_UNICHAR | 此消息包含按下的键的字符代码。类似于键入字符,但它使用宽字符转换格式UTF-32,而键入字符使用 UTF-16。③参数:键码;④数据:扫描码 |
系统命令 | $0112 | WM_SYSCOMMAND | 当用户选择一条系统菜单命令、用户最大化或最小化或还原或关闭时。③参数:命令;④数据:点菜单时鼠标位置 |
热键消息 | $312 | WM_HOTKEY | 当用户按下由注册热键函数注册的热键时。③参数:-1窗口,-2桌面;④数据:低字=1Alt,2CTRL,4SHIFT,8WIN;高字=键码 |
程序命令 | $319 | WM_APPCOMMAND | 用户点击应用程序命令按钮或键盘命令键(如导航刷新搜索)③参数:窗口;④数据:命令/设备/按键 |
输入开始 | $010D | WM_IME_STARTCOMPOSITION | 在输入法因为击键生成组合字符串之前立即发送。③参数:0;④数据:0 |
输入结束 | $010E | WM_IME_ENDCOMPOSITION | 在输入法结束组合时发送到应用程序。③参数:0;④数据:0 |
输入更改 | $010F | WM_IME_COMPOSITION | 当输入法因击键而更改组合状态时,发送到应用程序。③参数:字符;④数据:方式 |
输入启动 | $281 | WM_IME_SETCONTEXT | 应用程序的窗口激活时,系统将向应用程序发送消息。③参数:0非活动,非0活动;④数据:1显候选窗口(左移位数是索引几), 15显所有候选,0x40000000显指南窗口,0x80000000显合成窗口 |
输入改变 | $282 | WM_IME_NOTIFY | 可使用WM_IME_NOTIFY消息来通知关于IME窗口状态的常规改变。③参数:命令;④数据:相应数据 |
输入控制 | $283 | WM_IME_CONTROL | 可使用WM_IME_CONTROL消息来改变字母组合窗口的位置。③参数:命令;④数据:相应数据 |
输入超出 | $284 | WM_IME_COMPOSITIONFULL | 用户接口窗口不能增加编码窗口的尺寸时,IME用户接口窗口将发送消息。③参数:0;④数据:0 |
输入选择 | $285 | WM_IME_SELECT | 系统发此消息以便选择一个新的IME输入法。③参数:0未选,非0已选;④数据:区域 |
输入打字 | $286 | WM_IME_CHAR | 当打开输入法输入文字时发送消息。③参数:0字码;④数据:扫描码 |
输入请求 | $288 | WM_IME_REQUEST | 应用程序请求输入法时,触发发送本消息。③参数:命令;④数据:相应数据 |
输入按下 | $290 | WM_IME_KEYDOWN | 在输入法录字窗口中按下按键时,触发发送本消息。③参数:0键码;④数据:扫描码 |
输入松开 | $291 | WM_IME_KEYUP | 在输入法录字窗口中释放按键时,触发发送本消息。③参数:0键码;④数据:扫描码 |
虚拟键代码表:
0x01 | 鼠标的左键 | 0x02 | 鼠标的右键 | 0x03 | Ctrl+Break | 0x04 | 鼠标的中键 | 0x08 | Backspace键 | 0x09 | Tab键 | 0x0C | Clear键 | 0x0D | Enter键 |
0x10 | Shift键 | 0x11 | Ctrl键 | 0x12 | Alt键 | 0x13 | Pause键 | 0x14 | Caps | 0x15 | IME-朝鲜日文模式 | 0x16 | IME-打开 | 0x17 | IME-Junja模式 |
0x18 | IME-最终模式 | 0x19 | IME-汉字 | 0x1A | IME-关闭 | 0x1B | Ese键 | 0x1C | IME-转换 | 0x1D | IME-不转换 | 0x1E | IME-接受 | 0x1F | IME-模式更改请求 |
0x20 | 空格键 | 0x21 | 上页键 | 0x22 | 下页键 | 0x23 | End键 | 0x24 | Home键 | 0x25 | 左键(←) | 0x26 | 上键(↑) | 0x27 | 右键(→) |
0x28 | 下键(↓) | 0x29 | Select键 | 0x2A | PRINT键 | 0x2B | EXECUTE键 | 0x2C | (抓屏) | 0x2D | Ins键 | 0x2E | Del键 | 0x2F | Help键 |
0x30 | 0键 | 0x31 | 1键 | 0x32 | 2键 | 0x33 | 3键 | 0x34 | 4键 | 0x35 | 5键 | 0x36 | 6键 | 0x37 | 7键 |
0x38 | 8键 | 0x39 | 9键 | 0x41 | A键 | 0x42 | B键 | 0x43 | C键 | 0x44 | D键 | 0x45 | E键 | 0x46 | F键 |
0x47 | G键 | 0x48 | H键 | 0x49 | I键 | 0x4A | J键 | 0x4B | K键 | 0x4C | L键 | 0x4D | M键 | 0x4E | N键 |
0x4F | O键 | 0x50 | P键 | 0x51 | Q键 | 0x52 | R键 | 0x53 | S键 | 0x54 | T键 | 0x55 | U键 | 0x56 | V键 |
0x57 | W键 | 0x58 | X键 | 0x59 | Y键 | 0x5A | Z键 | 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 | 数字/键 |
0x70 | F1键 | 0x71 | F2键 | 0x72 | F3键 | 0x73 | F4键 | 0x74 | F5键 | 0x75 | F6键 | 0x76 | F7键 | 0x77 | F8键 |
0x78 | F9键 | 0x79 | F10键 | 0x7A | F11键 | 0x7B | F12键 | 0x7C | F13键 | 0x7D | F14键 | 0x7E | F15键 | 0x7F | F16键 |
0x80 | F17键 | 0x81 | F18键 | 0x82 | F19键 | 0x83 | F20键 | 0x84 | F21键 | 0x85 | F22键 | 0x86 | F23键 | 0x87 | F24键 |
0x90 | 数字开关键 | 0x91 | ScrollLock键 | 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 | 通用.键 | 0xE5 | IME-PROCESS | 0xF6 | Attn 键 |
0xF7 | CrSel键 | 0xF8 | ExSel键 | 0xF9 | EraseEOF键 | 0xFA | Play键 | 0xFB | Zoom键 | 0xFC | 预留 | 0xFD | PA1键 | 0xFE | Clear键 |
菜单事件——通知消息:
菜单的单击事件可以在设计菜单的时候双击菜单列表项目进行绑定
其它的菜单事件都可以交给"处理窗口"这个函数自动完成,下面演示几种常用的菜单操作:
1.控制菜单项选中或者禁用
菜单复选(菜单,1001,8) 控制编号为1001的菜单选中
第一个窗体的菜单编号是从1001开始排序,一级菜单和弹出式菜单不计编号,只算可以点击的菜单
最后参数: 0是不选,1是灰色,2是禁用,8是选中,$400相对菜单项
菜单复选(菜单,1,$408) 控制相对位置为1的菜单选中
使用相对菜单项$400加上其它功能,然后控制第几个菜单,从0开始排序
2.托盘或控件右键事件弹出菜单
展示菜单(菜单.1,0,左,顶,窗口,0) 第一个一级菜单就叫菜单.1
第二个一级菜单就叫菜单.2,设计菜单的时候主菜单名称为空就不会在窗体上显示
中文名字 | 常量数值 | 英文名称 | 释义 |
初始菜单 | $0116 | WM_INITMENU | 当一个菜单将被激活时发送本消息,它发生在用户点击了某菜单项或按下某菜单键。它允许程序在显示前更改菜单。③参数:菜单;④数据:0 |
弹出菜单 | $0117 | WM_INITMENUPOPUP | 当一个下拉菜单或子菜单将被激活时发送本消息,它允许程序在它显示前更改菜单,却不更改全部菜单。③参数:菜单;④数据:低位=序号,高位=是否菜单 |
选择菜单 | $011F | WM_MENUSELECT | 当用户选择一条菜单项时,发送本消息给菜单的所有者(一般是窗口)。③参数:低位=序号,高位=标志;④数据:菜单 |
菜单激活 | $0120 | WM_MENUCHAR | 当菜单已被激活且用户按下了某菜单字符键(括号括着、带下划线,不同于快捷键)。③参数:低位=序号,高位=标志$10弹出菜单,$2000菜单;④数据:菜单; |
菜单右键 | $0122 | WM_MENURBUTTONUP | 本消息允许程序为菜单项提供一个感知上下文的菜单(即快捷菜单)。③参数:序号;④数据:菜单 |
菜单点击 | $0123 | WM_MENUDRAG | 当用户拖动菜单项时,发送本消息给拖放菜单的拥有者,可让菜单支持拖拽,可使用OLE拖放传输协议启动拖放操作。③参数:序号;④数据:菜单;返回0保持活动,1菜单结束 |
单击菜单 | $0126 | WM_MENUCOMMAND | 当用户在一个菜单上作出选择时,会发送本消息,菜单要具有MNS_NOTIFYBYPOS风格(在MENUINFO结构体中设置)。③参数:序号;④数据:菜单 |
进入菜单循环 | $211 | WM_ENTERMENULOOP | 发送本消息通知应用程序的主窗口已进入菜单循环模式。③参数:是否显示菜单;④数据:0 |
退出菜单循环 | $212 | WM_EXITMENULOOP | 发送本消息通知应用程序的主窗口已退出菜单循环模式。③参数:是否快捷菜单;④数据:0 |
菜单切换 | $213 | WM_NEXTMENU | 当使用左箭头光标键或右箭头光标键在菜单条与系统菜单之间切换时触发本消息,③参数:键码;④数据:MDINEXTMENU |
鼠标事件——通知消息:
计算鼠标手势:
坐标值 上次;坐标值 当前; 两个结构体分别记录上次和当前鼠标位置
判断(消息)
为 按下左键,按下右键{上次=数据} 按下鼠标左键或右键时记住当前鼠标位置到上次
为 鼠标移动{当前=数据;鼠标手势(参数)上次=数据;} 移动鼠标先记住当前鼠标位置到当前
然后调用鼠标手势并提交参数,通过它可以判断是否按下了鼠标左键或者右键,计算当前鼠标位置和上次位置差值,最后再把当前坐标写入上次
程序段 鼠标手势(参数) 在这个程序段里计算上次鼠标位置和当前位置差
判断(参数)为 1{ 按下鼠标左键时移动鼠标的计算
如果(上次.左<当前.左)鼠标向右移动
如果(上次.左>当前.左)鼠标向左移动
如果(上次.顶<当前.顶)鼠标向下移动
如果(上次.顶>当前.顶)鼠标向上移动}
为 2{ 按下鼠标右键时移动鼠标的计算
如果(上次.左<当前.左)鼠标向右移动
如果(上次.左>当前.左)鼠标向左移动
如果(上次.顶<当前.顶)鼠标向下移动
如果(上次.顶>当前.顶)鼠标向上移动}
捕获光标 | $0020 | WM_SETCURSOR | 若鼠标光标在某窗口内移动且鼠标没被捕获时,就会发送本消息给某个窗口。③参数:窗口;④数据:命中消息 |
拖曳后窗 | $0021 | WM_MOUSEACTIVATE | 当鼠标光标在某个未激活窗口内,而用户正按着鼠标的某个键时,会发送本消息给当前窗口。③参数:父窗;④数据:命中消息; 返回值:1激活窗口不丢弃鼠标,2激活丢弃鼠标,3不激活不丢弃,4不激活丢弃鼠标 |
点击右键 | $007B | WM_CONTEXTMENU | 当用户在某窗口中点击右键就发送本消息给该窗口,设置右键菜单。③参数:窗口;④数据:屏幕坐标x/y |
命令事件 | $0111 | WM_COMMAND | 用户选择一条菜单命令项或某控件发送一条通知消息给其父窗,或某快捷键被翻译时,本消息被发送。③参数:低位=编号,高位=事件;④数据:控件;菜单高位0,快捷键高位1,两者数据都是0 |
系统命令 | $0112 | WM_SYSCOMMAND | 当用户选择一条系统菜单命令、用户最大化或最小化或还原或关闭时。③参数:命令;④数据:点菜单时鼠标位置 |
程序命令 | $319 | WM_APPCOMMAND | 用户点击应用程序命令按钮或键盘命令键(如导航刷新搜索)③参数:窗口;④数据:命令/设备/按键 |
鼠标起始 | $0200 | WM_MOUSEFIRST | 鼠标移动时发生(与WM_MOUSEMOVE等值),常用于判断鼠标消息的范围 |
鼠标移动 | $0200 | WM_MOUSEMOVE | 当鼠标在窗口客户区移动时。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
按下左键 | $0201 | WM_LBUTTONDOWN | 当鼠标左键在窗口客户区按下。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
释放左键 | $0202 | WM_LBUTTONUP | 当鼠标左键在窗口客户区放开。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
双击左键 | $0203 | WM_LBUTTONDBLCLK | 当鼠标左键在窗口客户区双击。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
按下右键 | $0204 | WM_RBUTTONDOWN | 当鼠标右键在窗口客户区按下。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
释放右键 | $0205 | WM_RBUTTONUP | 当鼠标右键在窗口客户区放开。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
双击右键 | $0206 | WM_RBUTTONDBLCLK | 当鼠标右键在窗口客户区双击。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
按下中键 | $0207 | WM_MBUTTONDOWN | 当鼠标中键在窗口客户区按下。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
释放中键 | $0208 | WM_MBUTTONUP | 当鼠标中键在窗口客户区放开。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
双击中键 | $0209 | WM_MBUTTONDBLCLK | 当鼠标中键在窗口客户区双击。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
滚轮转动 | $020A | WM_MOUSEWHEEL | 当滚动鼠标滚轮时。③参数:高位120向后,-120向前;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
鼠标结束 | $020A | WM_MOUSELAST | WM_MBUTTONDBLCLK的别名,通常用于判断鼠标消息的范围,对应的还有WM_MOUSEFIRST(鼠标起始) |
侧键按下 | $020B | WM_XBUTTONDOWN | 用户按下X按钮时发布。③参数:高位1第一个X按钮,2第二个X按钮;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
侧键松开 | $020C | WM_XBUTTONUP | 用户松开X按钮时发布。③参数:高位1第一个X按钮,2第二个X按钮;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
侧键双击 | $020D | WM_XBUTTONDBLCLK | 用户双击X按钮时发布。③参数:高位1第一个X按钮,2第二个X按钮;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
鼠标滚轮 | $020E | WM_MOUSEHWHEEL | 当鼠标的水平滚轮倾斜或旋转时发送。③参数:高位120向后,-120向前;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
失去鼠标 | $215 | WM_CAPTURECHANGED | 当它失去捕获的鼠标时,发送本消息给窗口。③参数:0;④数据:窗口 |
移动消息 | $216 | WM_MOVING | 当用户在移动窗口时发送本消息,通过本消息应用程序以监视窗口大小和位置,也可修改它们。③参数:0;④数据:矩形类 |
拖放文件 | $233 | WM_DROPFILES | 鼠标拖放时,放下事件产生时发送本消息,比如:文件拖放功能。③参数:文件;④数据:0 |
鼠标经外 | $2A0 | WM_NCMOUSEHOVER | 当光标悬停在窗口的非工作区上的达到指定时间发送本消息。③参数:命中值;④数据:坐标类; |
鼠标经过 | $2A1 | WM_MOUSEHOVER | 当光标悬停在窗口的工作区上的达到指定时间发送本消息。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
鼠标离外 | $2A2 | WM_NCMOUSELEAVE | 当光标离开之前调用 TrackMouseEvent 中指定的窗口的非工作区时发送本消息。③参数:0;④数据:0; |
鼠标离开 | $2A3 | WM_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,内容,"收到数据",信息图标); 弹出提示数据已接收完成
配置更新 | $001A | WM_WININICHANGE | 读写"win.ini"时会发送本消息给所有顶层窗口,通知其它进程该文件已被更改。③参数:0;④数据:名称 |
设备模式 | $001B | WM_DEVMODECHANGE | 改变设备模式设置("win.ini")时,处理本消息的应用程序可重新初始化它们的设备模式设置③参数:0;④数据:名称 |
系统关机 | $0011 | WM_QUERYENDSESSION | 关机或注销时系统会按优先级给各进程发送,告诉应用程序要关机或注销了。③参数:0;④数据:0正在关闭事件;1文件要换或资源耗尽;4强制关闭程序;8用户正在注销 |
开始关机 | $0016 | WM_ENDSESSION | 关机或注销时系统会发出消息给应用程序,通知程序会话结束。③参数:0会话结束,非0正在结束;④数据:0正在关闭事件;1文件要换或资源耗尽;4强制关闭程序;8用户正在注销 |
时间错误 | $0017 | WM_SYSTEMERROR | 系统时间错误。③参数:0;④数据:0 |
字库更新 | $001D | WM_FONTCHANGE | 当系统的字体资源库变化时发送本消息给所有顶级窗口。③参数:0;④数据:0 |
时间改变 | $001E | WM_TIMECHANGE | 当系统的时间变化时发送本消息给所有顶级窗口。③参数:0;④数据:0 |
系统暂停 | $0048 | WM_POWER | 当系统将要进入暂停状态时发送本消息(适用于16位的windows)③参数:1即将挂起,2挂起恢复,3含两种;④数据:0 |
传递数据 | $004A | WM_COPYDATA | 当一个应用程序传递数据给另一个应用程序时发送本消息。③参数:窗口;④数据:传递数据类 |
取消日志 | $004B | WM_CANCELJOURNAL | 当用户取消程序日志激活状态时,发送本消息给那个应用程序。该消息使用空窗口句柄发送。③参数:0;④数据:0 |
用户出入 | $0054 | WM_USERCHANGED | 当用户已登入或退出后发送本消息给所有窗口;当用户登入或退出时以及系统更新用户设置时,立即发送本消息。③参数:0;④数据:0; 自 Windows Vista 起,不支持此消息。 |
调分辨率 | $007E | WM_DISPLAYCHANGE | 当显示器的分辨率改变后,发送本消息给所有窗口。③参数:位深;④数据:分辨率x/y |
电源消息 | $218 | WM_POWERBROADCAST | 通知它有关电源管理事件。③参数:4正在扶起,7正在恢复,10状态更改,18自动恢复,32781设置更改;④数据:无/POWERBROADCAST_SETTING/PBT_POWERSETTINGCHANGE |
硬件修改 | $219 | WM_DEVICECHANGE | 当设备的硬件配置改变时,发送本消息给应用程序或设备驱动程序。③参数:事件;④数据:结构 |
主题更改 | $31A | WM_THEMECHANGED | 在主题更改事件后广播到每个窗口。③参数:0;④数据:0 |
消息保留 | $0000 | PM_NOREMOVE | 查探消息处理后,消息不从队列里除掉。 |
消息清除 | $0001 | PM_REMOVE | 查探消息处理后,消息从队列里除掉。 |
消息空闲 | $0002 | PM_NOYIELD | 此标志使系统不释放等待调用程序空闲的线程。 |
用户消息 | $400 | WM_USER | 用于帮助应用程序自定义私有消息,通常形式为:WM_USER + X |
程序消息 | $8000 | WM_APP | 用于帮助应用程序自定义私有消息,通常形式为:WM_APP + X |
传递数据类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
传递数据类 | COPYDATASTRUCT | 12 | 包含要通过发送消息传递给另一个应用程序的数据。 |
传递数据类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
分类 | dwData | 整数 | 要传递给接收应用程序的数据类型。 |
大小 | cbData | 整数 | 指向的数据的大小(以字节为单位)。 |
数据 | lpData | 整数 | 要传递给接收应用程序的数据。 |
子窗口事件——通知消息:
中文名字 | 常量数值 | 英文名称 | 释义 |
通知子窗 | $0022 | WM_CHILDACTIVATE | 点击窗口标题栏或当窗口被激活、移动、大小改变时,会发送本消息给MDI子窗口。③参数:0;④数据:0 |
子窗变动 | $210 | WM_PARENTNOTIFY | 当MDI子窗口被创建或被销毁,或用户按了一下鼠标键而光标在子窗口上时,发送本消息给其父窗③参数:事件;④数据:坐标x/y; |
子窗创建 | $220 | WM_MDICREATE | 发送本消息给多文档应用程序的客户窗口来创建一个MDI子窗口。③参数:0;④数据:子窗结构 |
子窗关闭 | $221 | WM_MDIDESTROY | 发送本消息给多文档应用程序的客户窗口来关闭一个MDI子窗口。③参数:子窗;④数据:0 |
子窗激活 | $222 | WM_MDIACTIVATE | 发送本消息通知客户窗口激活另一个MDI子窗口。③参数:0;④数据:0忽略,非0最大化 |
子窗恢复 | $223 | WM_MDIRESTORE | 发送本消息给MDI客户窗口,让子窗口从最大最小化恢复到原来的大小。③参数:子窗;④数据:0 |
子窗下个 | $224 | WM_MDINEXT | 发送本消息给MDI客户窗口,激活下一个或前一个窗口。③参数:子窗;④数据:0激活下个,非0激活上个 |
子窗最大 | $225 | WM_MDIMAXIMIZE | 发送本消息给MDI客户窗口来最大化一个MDI子窗口。③参数:子窗;④数据:0 |
子窗平铺 | $226 | WM_MDITILE | 发送本消息给MDI客户窗口,以平铺方式重新排列所有MDI子窗口。③参数:0垂直,1水平;④数据:0 |
子窗层叠 | $227 | WM_MDICASCADE | 发送本消息给MDI客户窗口,以层叠方式重新排列所有MDI子窗口。③参数:2不排禁用窗口,4按Z序;④数据:0 |
子窗排底 | $228 | WM_MDIICONARRANGE | 发送本消息给MDI客户窗口重新排列所有最小化的MDI子窗口。③参数:0;④数据:0 |
子窗活动 | $229 | WM_MDIGETACTIVE | 发送本消息给MDI客户窗口以找到激活的子窗口句柄。③参数:0;④数据:0忽略,非0最大化 |
子窗设置菜单 | $230 | WM_MDISETMENU | 发送本消息给MDI客户窗口,用MDI菜单代替子窗口的整个菜单和/或框架窗口菜单。③参数:框架菜单;④数据:窗口菜单 |
子窗更新菜单 | $234 | WM_MDIREFRESHMENU | 发送本消息给多文档应用程序的客户窗口,根据当前MDI子窗口更新MDI框架窗口的菜单。③参数:0;④数据:0 |
中文名字 | 英文名称 | 长度 | 作用解释 |
子窗外观类 | MDICREATESTRUCT | 36 | 定义了创建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_TEXT | 1 | 文本格式。 每行以回车符/换行符 (CR-LF) 组合结束。 null 字符表示数据结束。 将此格式用于 ANSI 文本。 |
CF_BITMAP | 2 | 位图 (HBITMAP) 的句柄。 |
CF_METAFILEPICT | 3 | METAFILEPICT 结构定义的图元文件图片格式的句柄。 通过 DDE 传递 CF_METAFILEPICT 句柄时,负责删除 hMem 的应用程序还应释放 CF_METAFILEPICT 句柄引用的图元文件。 |
CF_SYLK | 4 | Microsoft 符号链接 (SYLK) 格式。 |
CF_DIF | 5 | Software Arts 的数据交换格式。 |
CF_TIFF | 6 | 标记图像文件格式。 |
CF_OEMTEXT | 7 | 包含 OEM 字符集中字符的文本格式。 每行以回车符/换行符 (CR-LF) 组合结束。 null 字符表示数据结束。 |
CF_DIB | 8 | 包含 BITMAPINFO 结构的内存对象,后跟位图位。 |
CF_PALETTE | 9 | 调色板的句柄。 每当应用程序在依赖于或假定调色板的剪贴板中放置数据时,它也应该将调色板放在剪贴板上。 如果剪贴板包含 CF_PALETTE (逻辑调色板) 格式的数据,则应用程序应使用 SelectPalette 和 RealizePalette 函数实现 (剪贴板中) 任何其他数据与该逻辑调色板进行比较。 显示剪贴板数据时,剪贴板始终使用剪贴板上采用 CF_PALETTE 格式的任何对象作为其当前调色板。 |
CF_PENDATA | 10 | Microsoft Windows for Pen Computing 的笔扩展的数据。 |
CF_RIFF | 11 | 表示的音频数据比以 CF_WAVE 标准波形格式表示的音频数据更为复杂。 |
CF_WAVE | 12 | 表示其中一种标准波形的音频数据,例如 11 kHz 或 22 kHz PCM。 |
CF_UNICODETEXT | 13 | Unicode 文本格式。 每行以回车符/换行符 (CR-LF) 组合结束。 null 字符表示数据结束。 |
CF_ENHMETAFILE | 14 | 增强型图元文件的句柄 (HENHMETAFILE) 。 |
CF_HDROP | 15 | 类型 HDROP 的句柄,用于标识文件列表。 应用程序可以通过将句柄传递给 DragQueryFile 函数来检索有关文件的信息。 |
CF_LOCALE | 16 | 数据是 HGLOBAL () 与剪贴板中的文本关联的区域设置标识符 (LCID) 的句柄。 关闭剪贴板时,如果剪贴板包含 CF_TEXT 数据但没有 CF_LOCALE 数据,系统会自动将 CF_LOCALE 格式设置为当前输入语言。 可以使用 CF_LOCALE 格式将不同的区域设置与剪贴板文本相关联。 从剪贴板粘贴文本的应用程序可以检索此格式,以确定用于生成文本的字符集。 请注意,剪贴板不支持多个字符集中的纯文本。 若要实现此目的,请改用带格式的文本数据类型,例如 RTF。 系统使用与 CF_LOCALE 关联的代码页从 CF_TEXT 隐式转换为 CF_UNICODETEXT。 因此,使用正确的代码页表进行转换。 |
CF_DIBV5 | 17 | 包含 BITMAPV5HEADER 结构的内存对象,后跟位图颜色空间信息和位图位。 |
CF_OWNERDISPLAY | 0x0080 | 所有者显示格式。 剪贴板所有者必须显示和更新剪贴板查看器窗口,并接收 WM_ASKCBFORMATNAME、 WM_HSCROLLCLIPBOARD、 WM_PAINTCLIPBOARD、 WM_SIZECLIPBOARD和 WM_VSCROLLCLIPBOARD 消息。 hMem 参数必须为 NULL。 |
CF_DSPTEXT | 0x0081 | 与专用格式关联的文本显示格式。 hMem 参数必须是可以以文本格式显示的数据的句柄,而不是专用格式的数据。 |
CF_DSPBITMAP | 0x0082 | 与专用格式关联的位图显示格式。 hMem 参数必须是可以以位图格式显示的数据的句柄,而不是专用格式的数据。 |
CF_DSPMETAFILEPICT | 0x0083 | 与专用格式关联的图元文件图片显示格式。 hMem 参数必须是可以以图元文件图片格式显示的数据的句柄,而不是专用格式的数据。 |
CF_DSPENHMETAFILE | 0x008E | 与专用格式关联的增强型图元文件显示格式。 hMem 参数必须是可以以增强型图元文件格式显示的数据的句柄,而不是专用格式的数据。 |
CF_PRIVATEFIRST | 0x0200 | 专用剪贴板格式的整数值范围的开头。 范围以 CF_PRIVATELAST结尾。 与专用剪贴板格式关联的句柄不会自动释放;剪贴板所有者必须释放此类句柄,通常是为了响应 WM_DESTROYCLIPBOARD 消息。 |
CF_PRIVATELAST | 0x02FF | 请参阅 CF_PRIVATEFIRST。 |
CF_GDIOBJFIRST | 0x0300 | 应用程序定义的 GDI 对象剪贴板格式的整数值范围的开头。 范围的末尾为 CF_GDIOBJLAST。 清空剪贴板时,不会使用 GlobalFree 函数自动删除与此范围内剪贴板格式关联的句柄。 此外,在此范围内使用值时, hMem 参数不是 GDI 对象的句柄,而是由 GlobalAlloc 函数使用 GMEM_MOVEABLE 标志分配的句柄。 |
CF_GDIOBJLAST | 0x03FF | 请参阅 CF_GDIOBJFIRST。 |
中文名字 | 常量数值 | 英文名称 | 释义 |
内容剪切 | 0x300 | WM_CUT | 剪切删除当前选择的文本。③参数:0;④数据:0 |
内容复制 | 0x301 | WM_COPY | 复制当前选择的文本到剪贴板。③参数:0;④数据:0 |
内容粘贴 | 0x302 | WM_PASTE | 应用程序发送本消息给编辑框或组合框,以便从剪贴板中得到数据。③参数:0;④数据:0 |
内容删除 | 0x303 | WM_CLEAR | 应用程序发送本消息给编辑框或组合框,以清除当前选择的内容。③参数:0;④数据:0 |
内容撤销 | 0x304 | WM_UNDO | 应用程序发送本消息给编辑框或组合框,以撤消最后一次操作。③参数:0;④数据:0 |
剪切数据 | $305 | WM_RENDERFORMAT | 应用程序需要系统剪切板数据时,触发发送本消息。③参数:剪切格式;④数据:0 |
剪切数列 | $306 | WM_RENDERALLFORMATS | 应用程序退出时,系统会给当前程序发送该消息,要求提供所有格式的剪帖板数据,避免造成数据丢失。③参数:0;④数据:0 |
剪切清空 | $307 | WM_DESTROYCLIPBOARD | 当调用"清剪切板"函数时,发送本消息给剪贴板的所有者 |
剪切变更 | $308 | WM_DRAWCLIPBOARD | 当剪贴板的内容变化时,触发本消息;它允许用剪贴板观察窗口来显示剪贴板的新内容。③参数:0;④数据:0 |
剪切重绘 | $309 | WM_PAINTCLIPBOARD | 当剪贴板观察窗口的客户区需要重画时,触发发送本消息。③参数:窗口;④数据: PAINTSTRUCT 结构 |
剪切竖条 | $30A | WM_VSCROLLCLIPBOARD | 当剪贴板查看器的垂直滚动条被单击时。③参数:窗口;④数据:0上滚一行,1下滚一行,2上滚一页,3下滚一页,4绝对位置(高字是位置),6到左上角,7到右下角,8结束滚动; |
剪切缩放 | $30B | WM_SIZECLIPBOARD | 当剪贴板包含CF_OWNERDIPLAY格式的数据,并且剪贴板观察窗口的大小已改变。③参数:窗口;④数据:矩形类 |
剪切取名 | $30C | WM_ASKCBFORMATNAME | 通过剪贴板观察窗口发送本消息给剪贴板的所有者,以请求一个CF_OWNERDISPLAY格式的剪贴板的名字。③参数:大小;④数据:缓冲区 |
剪切移出 | $30D | WM_CHANGECBCHAIN | 当一个窗口从剪贴板观察链中移去时,发送本消息给剪贴板观察链的首个窗口。③参数:窗口;④数据:下个窗口 |
剪切平条 | $30E | WM_HSCROLLCLIPBOARD | 点击剪贴板观察窗的水平滚动条。③参数:窗口;④数据:0上滚一行,1下滚一行,2上滚一页,3下滚一页,4绝对位置(高字是位置),6到左上角,7到右下角,8结束滚动; |
剪切板改 | $31D | WM_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第三行文字到内容缓冲区,要先写入长度数值
中文名字 | 常量数值 | 英文名称 | 释义 |
编辑获得焦点 | 0x100 | EN_SETFOCUS | 在编辑控件收到键盘焦点时发送。③参数:控件号/通知码;④数据:编辑框 |
编辑失去焦点 | 0x200 | EN_KILLFOCUS | 在编辑控件失去键盘焦点时发送。③参数:控件号/通知码;④数据:编辑框 |
编辑内容更改 | 0x300 | EN_CHANGE | 已更改编辑控件中的文本时发送。③参数:控件号/通知码;④数据:编辑框 |
编辑更新重绘 | 0x400 | EN_UPDATE | 在编辑控件即将重绘自身时发送。③参数:控件号/通知码;④数据:编辑框 |
编辑内存不足 | 0x500 | EN_ERRSPACE | 当编辑控件无法分配足够的内存时发送。③参数:控件号/通知码;④数据:编辑框 |
编辑字数超出 | 0x501 | EN_MAXTEXT | 当前文本插入超过编辑控件的指定字符数时发送。③参数:控件号/通知码;④数据:编辑框 |
编辑水平滚动 | 0x601 | EN_HSCROLL | 当用户单击编辑控件的水平滚动条时发送。③参数:控件号/通知码;④数据:编辑框 |
编辑垂直滚动 | 0x602 | EN_VSCROLL | 单击垂直滚动条或滚动鼠标滚轮时发送。③参数:控件号/通知码;④数据:编辑框 |
编辑从左向右 | 0x700 | EN_ALIGN_LTR_EC | 当用户将编辑控件方向更改为从左到右时发送。③参数:控件号/通知码;④数据:编辑框 |
编辑从右向左 | 0x701 | EN_ALIGN_RTL_EC | 当用户将编辑控件方向更改为从右到左时发送。③参数:控件号/通知码;④数据:编辑框 |
绘制编辑 | $0133 | WM_CTLCOLOREDIT | 当一个编辑框控件将要被绘制时,发送本消息给其父窗;可用来设置编辑框的文本和背景色③参数:设备;④数据:控件 |
发送消息——常数表 |
编辑所选 | $B0 | EM_GETSEL | 获取光标位置(④数据)或取得编辑控件中选定内容的范围(③参数为起点,④数据为终点)。返回值中低16位为起点,高16位为终点 |
编辑选中 | $B1 | EM_SETSEL | 设置编辑控件中文本选定内容范围(或设置光标位置),③参数为起点,④数据为终点。 |
编辑矩形 | $B2 | EM_GETRECT | 获取编辑控件的格式矩形(控件在其中绘制文本的限制矩形)。在④数据中获取 |
编辑范围 | $B3 | EM_SETRECT | 设置多行编辑控件的格式矩形(绘制范围)。它与编辑控件窗口的大小无关。在④数据中指定矩形 |
编辑大小 | $B4 | EM_SETRECTNP | 设置多行编辑控件的格式矩形。与编辑范围的区别是不重绘编辑控件窗口。 |
编辑竖翻 | $B5 | EM_SCROLL | 在多行编辑控件中垂直滚动文本。③参数:0上滚一行 1下滚一行 2上滚一页 3下滚一页 |
编辑滚动 | $B6 | EM_LINESCROLL | 滚动多行编辑控件中的文本。③参数:水平滚动字数(富文本框为0),④数据:垂直滚动的行数。 |
编辑滚点 | $B7 | EM_SCROLLCARET | 将插入点(光标)滚动到编辑控件的视图中。③参数:0;④数据:0 |
编辑状态 | $B8 | EM_GETMODIFY | 获取编辑控件的修改标志的状态。③参数:0;④数据:0,返回值非零表示编辑控件的内容已修改 |
编辑修改 | $B9 | EM_SETMODIFY | 设置或清除编辑控件的修改标志。③参数用真或假指定修改标志的状态。 |
编辑行数 | $BA | EM_GETLINECOUNT | 获取多行编辑控件中的行数。③参数:0;④数据:0,返回行数。 |
编辑行位 | $BB | EM_LINEINDEX | 获取多行编辑控件中指定行的第一个字符的字符索引。也就是从开头的第几个字,③参数:行号 -1表示光标所在行 |
编辑指针 | $BC | EM_SETHANDLE | 设置多行编辑控件将使用的内存的句柄。③参数:指定新的内存缓冲区 |
编辑手柄 | $BD | EM_GETHANDLE | 获取当前为多行编辑控件的文本分配的内存的句柄。③参数:0;④数据:0,返回句子手柄 |
编辑滑块 | $BE | EM_GETTHUMB | 获取多行编辑控件垂直滚动条中滚动框 (滑块) 的位置。③参数:0;④数据:0,返回滑块位置 |
编辑行字 | $C1 | EM_LINELENGTH | 检索编辑控件中行的字符数。③参数:第几个字,-1是光标处 |
编辑替换 | $C2 | EM_REPLACESEL | 将编辑控件中的选定文本或丰富的编辑控件替换为指定的文本。③参数为真可撤销,④数据是文本指针 |
编辑取行 | $C4 | EM_GETLINE | 从编辑控件复制一行文本,并将其置于指定的缓冲区中。③参数:行号(0开始),④数据:接收内容的文本指针 |
编辑限字 | $C5 | EM_LIMITTEXT | 设置编辑控件的文本限制最大字数。③参数:限制字数 |
编辑可撤 | $C6 | EM_CANUNDO | 确定编辑控件的撤消队列中是否有任何操作。③参数:0;④数据:0,返回非0表示可以进行撤销 |
编辑撤销 | $C7 | EM_UNDO | 此消息撤消控件队列中最后一次编辑控件操作。③参数:0;④数据:0,返回真表示撤销成功 |
编辑软行 | $C8 | EM_FMTLINES | 设置一个标志,用于确定多行编辑控件是否包含软换行符(两个回车加一换行符,英文断词用)。③参数为真是可以有,为假则清除 |
编辑字行 | $C9 | EM_LINEFROMCHAR | 获取包含多行编辑控件中指定字符索引的行的索引。③参数:第几个字,-1是光标所在行 |
编辑制表 | $CB | EM_SETTABSTOPS | 设置多行编辑控件中的制表位。③参数:制表位数目,④数据:制表位数组 |
编辑密码 | $CC | EM_SETPASSWORDCHAR | 设置或删除编辑控件的密码字符。 ③参数:取代内容文字的字符,为0时恢复文字显示 |
编辑重置 | $CD | EM_EMPTYUNDOBUFFER | 重置编辑控件的撤消标志。③参数:0;④数据:0。 |
编辑上字 | $CE | EM_GETFIRSTVISIBLELINE | 获取多行编辑控件中最上端可见行的从零开始的索引。③参数:0;④数据:0 |
编辑只读 | $CF | EM_SETREADONLY | 设置或删除编辑控件的只读样式。③参数为真是只读,为假是可写;④数据:0。 |
编辑函数 | $D0 | EM_SETWORDBREAKPROC | 将编辑控件的默认 文字显示处理 函数替换为应用程序自定义的处理函数。③参数:0;④数据:编辑框断字 |
编辑地址 | $D1 | EM_GETWORDBREAKPROC | 获取编辑控件的默认 文字显示处理 函数的地址。③参数:0;④数据:0,返回地址。 |
编辑密字 | $D2 | EM_GETPASSWORDCHAR | 获取编辑控件在用户输入文本时显示的密码字符。③参数:0;④数据:0,返回字符。 |
编辑边距 | $D3 | EM_SETMARGINS | 设置编辑控件的左右边距的宽度。 ③参数:1是左边距 2右边距,④数据:低位左边距,高位右边距 |
编辑边宽 | $D4 | EM_GETMARGINS | 获取编辑控件的左右边距的宽度。③参数:0;④数据:0,返回低位是左边宽,高位是右边宽。 |
编辑字限 | $D5 | EM_GETLIMITTEXT | 获取编辑控件的当前文本限制。 ③参数:0;④数据:0,返回限制字数 |
编辑坐标 | $D6 | EM_POSFROMCHAR | 检索编辑控件中指定字符的工作区坐标。③参数:字的索引,返回低位是左,高位是顶 |
编辑点字 | $D7 | EM_CHARFROMPOS | 获取与编辑控件的工作区中指定点最接近的字符的信息。④数据:富文本框是坐标结构指针,普通框是整数。低位左,高位顶。返回指定位置字的索引,编辑框高位包含该行的字索引 |
编辑交互 | $D8 | EM_SETIMESTATUS | 设置编辑控件如何与输入法编辑器交互。③参数:1组合字符串;④数据:1返回结果字符串,2焦点取消组合字符串,3失去焦点完成组合字符串 |
编辑方式 | $D9 | EM_GETIMESTATUS | 获取编辑控件如何与输入法编辑器交互。③参数:1组合字符串;④数据:0;返回值:1立即返回结果字符串,2焦点取消组合字符串,3失去焦点完成组合字符串 |
左边编距 | $1 | EC_LEFTMARGIN | ③参数的值,设置编辑控件的左边距的宽度。 |
右边编距 | $2 | EC_RIGHTMARGIN | ③参数的值,设置编辑控件的右边距的宽度。 |
精细编距 | $0FFFF | EC_USEFONTINFO | ③参数的值,设置编辑控件的边距的精细宽度。 |
编辑框断字——回调函数:
中文名字 | 英文名称 | 参数 | 作用解释 |
编辑框断字 | Editwordbreakproca | 4 | 多行编辑控件或富编辑控件调用此函数来中断文本行 |
编辑框断字——参数表 |
中文 | 英文 | 类型 | 作用解释 |
控件 | lpch | 整数 | 指向编辑控件文本的指针。 |
断点 | ichCurrent | 整数 | 文本缓冲区中字符位置的索引,该索引标识函数应开始检查断字符的点。 |
字数 | cch | 整数 | ANSI是字节数;Unicode是字数。 |
操作 | code | 整数 | 回调函数要执行的断字操作。 |
断字操作——常量定义:
英文名称 | 数值 | 作用解释 |
WB_LEFT | 0 | 查找指定位置左侧的单词的开头。 |
WB_RIGHT | 1 | 查找指定位置右侧的单词的开头。 这在右对齐的编辑控件中很有用。 |
WB_ISDELIMITER | 2 | 检查指定位置处的字符是否为分隔符。 |
WB_CLASSIFY | 3 | 检索位于指定位置的字符的字符类和断字符标志。此值及以下用于丰富的编辑控件。 |
WB_MOVEWORDLEFT | 4 | 查找指定位置左侧的单词的开头。此值在 Ctrl+LEFT 键处理期间使用。 |
WB_MOVEWORDRIGHT | 5 | 查找指定位置右侧的单词的开头。 此值在 Ctrl+RIGHT 键处理期间使用。 |
WB_LEFTBREAK | 6 | 查找指定位置左侧的词尾分隔符。 |
WB_RIGHTBREAK | 7 | 查找指定位置右侧的词尾分隔符。 |
按钮、单选钮、复选框、分组框——控件消息:
发送消息(按钮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不可用
中文名字 | 常量数值 | 英文名称 | 释义 |
按钮单击 | 0 | BN_CLICKED | 用户单击按钮时发送。③参数:控件号/通知码;④数据:按钮 |
按钮绘制 | 1 | BN_PAINT | 绘制按钮时发送。③参数:控件号/通知码;④数据:按钮 |
按钮选择 | 2 | BN_HILITE/BN_PUSHED | 用户选择按钮/状态设置为已推送。③参数:控件号/通知码;④数据:按钮 |
按钮反选 | 3 | BN_UNHILITE/BN_UNPUSHED | 从按钮中删除突出显示时/推送状态设置为未推送。③参数:控件号/通知码;④数据:按钮 |
按钮禁用 | 4 | BN_DISABLE | 禁用按钮时发送。③参数:控件号/通知码;④数据:按钮 |
按钮双击 | 5 | BN_DOUBLECLICKED | 当用户双击按钮时发送。③参数:控件号/通知码;④数据:按钮 |
按钮焦点 | 6 | BN_SETFOCUS | 在按钮接收键盘焦点时发送。③参数:控件号/通知码;④数据:按钮 |
按钮失焦 | 7 | BN_KILLFOCUS | 当按钮失去键盘焦点时发送。③参数:控件号/通知码;④数据:按钮 |
绘制按钮 | $0135 | WM_CTLCOLORBTN | 绘制按钮的背景色③参数:设备;④数据:控件 |
控件自行绘制 | -12 | NM_CUSTOMDRAW | 通知控件的父窗口有关自定义绘制操作的信息。 |
按钮点击下拉 | -1248 | BCN_DROPDOWN | 当用户单击按钮上的下拉箭头时发送。④数据:下拉类 |
按钮热项变更 | -1249 | BCN_HOTITEMCHANGE | 鼠标正在进入或离开按钮控件的工作区。④数据:热项类 |
发送消息——常数表 |
获取选择 | $00F0 | BM_GETCHECK | 获取单选按钮或复选框的状态。 ③参数:0;④数据:0 |
设置选择 | $00F1 | BM_SETCHECK | 设置单选按钮或复选框的状态。 ③参数:0不选,1选中,2变灰不可用;④数据:0 |
获取选形 | $00F2 | BM_GETSTATE | 确定单选按钮或复选框的状态。 ③参数:0;④数据:0 |
设置选形 | $00F4 | BM_SETSTATE | 改变按钮的高亮状态。 ③参数:0不突出,非0突出显示;④数据:0 |
改变按钮 | $00F4 | BM_SETSTYLE | 改变按钮的风格。 ③参数:样式;④数据:0不重绘,非0重绘 |
模拟点击 | $00F5 | BM_CLICK | 模拟用户点击按钮。 ③参数:0;④数据:0 |
取按钮图 | $00F6 | BM_GETIMAGE | 获取与按钮相关联的图片句柄。 ③参数:0位图,1图标;④数据:0 |
换按钮图 | $00F7 | BM_SETIMAGE | 把按钮与某张图片相关联。 ③参数:0位图,1图标;④数据:图片 |
设置单击 | $00F8 | BM_SETDONTCLICK | 控制单选按钮获得焦点时单击事件的生成。 ③参数:0不点,非0点击;④数据:0 |
按钮获取大小 | 0x1601 | BCM_GETIDEALSIZE | 获取最适合其文本和图像的按钮的大小。③参数:0;④数据:尺寸类 |
按钮设置图表 | 0x1602 | BCM_SETIMAGELIST | 将图像列表分配给按钮控件。③参数:0;④数据:按钮图表类 |
按钮获取图表 | 0x1603 | BCM_GETIMAGELIST | 获取分配给按钮的图像列表。③参数:0;④数据:按钮图表类 |
按钮设置边框 | 0x1604 | BCM_SETTEXTMARGIN | 设置用于在按钮控件中绘制文本的边距。③参数:0;④数据:矩形类 |
按钮获取边框 | 0x1605 | BCM_GETTEXTMARGIN | 获取用于在按钮控件中绘制文本的边距。③参数:0;④数据:矩形类 |
按钮设置下拉 | 0x1606 | BCM_SETDROPDOWNSTATE | 设置具有下拉样式按钮的下拉状态。③参数:是否下拉;④数据:0 |
按钮设置拆分 | 0x1607 | BCM_SETSPLITINFO | 设置拆分按钮控件的信息。③参数:0;④数据:按钮拆分类 |
按钮获取拆分 | 0x1608 | BCM_GETSPLITINFO | 获取拆分按钮控件的信息。③参数:0;④数据:按钮拆分类 |
按钮设置注释 | 0x1609 | BCM_SETNOTE | 设置与命令链接按钮关联的笔记的文本。③参数:0;④数据:宽字符 |
按钮获取注释 | 0x160A | BCM_GETNOTE | 获取与命令链接按钮关联的笔记的文本。③参数:大小;④数据:缓冲区 |
按钮注释长度 | 0x160B | BCM_GETNOTELENGTH | 获取命令链接按钮中显示注释文本的长度。③参数:0;④数据:0 |
按钮设置提升 | 0x160C | BCM_SETSHIELD | 为按钮或命令链接设置提升图标所需的状态。③参数:0;④数据:是否提升 |
热项类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
热项类 | NMBCHOTITEM | 16 | 包含有关鼠标在按钮控件上移动的信息。 |
热项类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
窗口 | hwndFrom | 整数 | 发送消息的控件的窗口句柄。 |
标识 | idFrom | 整数 | 发送消息的控件的标识符。 |
事件 | code | 整数 | 控件事件通知代码。 |
方式 | dwFlags | 整数 | 鼠标的操作。0x10进入按钮,0x20离开按钮 |
下拉类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
下拉类 | NMBCDROPDOWN | 28 | 包含有关按钮点击下拉通知的信息。 |
下拉类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
窗口 | hwndFrom | 整数 | 发送消息的控件的窗口句柄。 |
标识 | idFrom | 整数 | 发送消息的控件的标识符。 |
事件 | code | 整数 | 控件事件通知代码。 |
按钮 | rcButton | 矩形类 | 包含按钮工作区的矩形结构。 |
按钮图表类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
按钮图表类 | BUTTON_IMAGELIST | 24 | 包含有关与按钮控件一起使用的图像列表的信息。 |
按钮图表类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
窗口 | himl | 整数 | 图像列表的句柄。 提供程序保留映像列表的所有权,最终负责其处置。 |
边距 | margin | 矩形类 | 一个矩形类,指定图标周围的边距。 |
对齐 | uAlign | 整数 | 指定图像要使用的对齐方式。0左对齐,1右对齐,2上对齐,3下对齐,4图像居中 |
按钮拆分类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
按钮拆分类 | BUTTON_SPLITINFO | 20 | 包含定义拆分按钮的信息。 |
按钮拆分类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
掩码 | 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里显示当前目录下所有文件
中文名字 | 常量数值 | 英文名称 | 释义 |
组合更改选择 | 1 | CBN_SELCHANGE | 更改组合框列表框中的当前选择。③参数:控件号/通知码;④数据:组合框 |
组合双击事件 | 2 | CBN_DBLCLK | 双击组合框列表框中的字符串。③参数:控件号/通知码;④数据:组合框 |
组合获得焦点 | 3 | CBN_SETFOCUS | 组合框收到键盘焦点。③参数:控件号/通知码;④数据:组合框 |
组合失去焦点 | 4 | CBN_KILLFOCUS | 组合框失去键盘焦点。③参数:控件号/通知码;④数据:组合框 |
组合编辑更改 | 5 | CBN_EDITCHANGE | 更改组合框编辑控件部分文本的操作。③参数:控件号/通知码;④数据:组合框 |
组合编辑更新 | 6 | CBN_EDITUPDATE | 组合框的编辑控件部分即将显示更改后的文本。③参数:控件号/通知码;④数据:组合框 |
组合点击下拉 | 7 | CBN_DROPDOWN | 组合框的列表框即将可见时。③参数:控件号/通知码;④数据:组合框 |
组合列表关闭 | 8 | CBN_CLOSEUP | 组合框的列表框已关闭时。③参数:控件号/通知码;④数据:组合框 |
组合选择表项 | 9 | CBN_SELENDOK | 选择列表项,或选择一个项,然后关闭列表时。③参数:控件号/通知码;④数据:组合框 |
组合正在选择 | 10 | CBN_SELENDCANCEL | 选择项时发送,随后选择另一个控件或关闭对话框。③参数:控件号/通知码;④数据:组合框 |
外观改变 | $002B | WM_DRAWITEM | 按钮、组合框、列表框、菜单的外观改变时会发送本消息给这些控件的所有者。④数据:绘制项目类 |
控件创建 | $002C | WM_MEASUREITEM | 按钮、组合框、列表框、列表控件、菜单项被创建时会发送本消息给这些控件的所有者。③参数:控件号;④数据:项目尺寸类 |
删除项目 | $002D | WM_DELETEITEM | 列表框或组合框被销毁或删除清空某些项时,会发送本消息给这些控件的所有者。③参数:控件号;④数据: 项目删除类 |
新项位置 | $0039 | WM_COMPAREITEM | 可发送本消息来确定组合框(CBS_SORT)或列表框(LBS_SORT)中新增项的相对位置。③参数:控件号;④数据:项目排序类 |
发送消息——常数表 |
组合添加 | $143 | CB_ADDSTRING | 用于向组合框控件追加一个列表项。③参数:0;④数据:文字 |
组合删除 | $144 | CB_DELETESTRING | 用于删除组合框中指定的列表项。③参数:序号;④数据:0 |
组合文件 | $145 | CB_DIR | 用于向组合框控件所包含的列表框控件中添加一个文件名列表清单。③参数:路径选项;④数据:路径 |
组合总项 | $146 | CB_GETCOUNT | 用于返回组合框控件中列表项的总项数。③参数:0;④数据:0 |
取组合项 | $147 | CB_GETCURSEL | 用于返回当前被选择项的索引。③参数:0;④数据:0 |
组合读取 | $148 | CB_GETLBTEXT | 获取组合框控件中指定列表项的字符串。③参数:序号;④数据:缓冲区 |
组合长度 | $149 | CB_GETLBTEXTLEN | 用于返回组合框控件中指定列表项的字符串的长度。③参数:序号;④数据:0 |
组合插入 | $14A | CB_INSERTSTRING | 在组合框控件所包含的列表框子控件中的指定位置插入字符串。③参数:序号,-1末尾;④数据:文字 |
组合清除 | $14B | CB_RESETCONTENT | 用于清除组合框控件所有列表项。③参数:0;④数据:0 |
组合查找 | $14C | CB_FINDSTRING | 在组合框控件中根据给定的字符串查找匹配字符串(忽略大小写)。③参数:序号,-1开头;④数据:文字 |
组合选择 | $14D | CB_SELECTSTRING | 在组合框控件中设定与指定字符串相匹配的列表项为选中项。③参数:序号,-1开头;④数据:文字 |
选组合项 | $14E | CB_SETCURSEL | 在组合框控件中设置指定的列表项为当前选择项。③参数:序号;④数据:0 |
下拉显示 | $14F | CB_SHOWDROPDOWN | 用于显示或关闭下拉式和下拉列表式组合框的列表框。③参数:0隐藏,非0显示;④数据:0 |
组合数据 | $150 | CB_GETITEMDATA | 获取组合框控件指定列表项的附加数据。③参数:序号;④数据:0 |
组合附加 | $151 | CB_SETITEMDATA | 更新组合框指定的列表项的32位附加数据。③参数:序号;④数据:新值 |
组合位置 | $152 | CB_GETDROPPEDCONTROLRECT | 用于取组合框中列表框的屏幕位置。③参数:0;④数据:矩形类 |
改下拉高 | $153 | CB_SETITEMHEIGHT | 指定组合框中列表项的显示高度。③参数:0项高度,1选字高度;④数据:框高度 |
取下拉高 | $154 | CB_GETITEMHEIGHT | 用于返回指定列表项的高度。③参数:0项高度,-1选字高度;④数据:0 |
扩展组合 | $155 | CB_SETEXTENDEDUI | 指定下拉式或下拉列表式组合框是使用默认界面还是扩展界面。③参数:0默认,非0扩展;④数据:0 |
组合扩展 | $156 | CB_GETEXTENDEDUI | 用于返回组合框是否存在扩展界面。③参数:0;④数据:0 |
下拉可见 | $157 | CB_GETDROPPEDSTATE | 用于取组合框中列表框是否可见。③参数:0;④数据:0 |
查组合项 | $158 | CB_FINDSTRINGEXACT | 在组合框中查找字符串,本消息必须整个字符串相同。③参数:序号;④数据:文字 |
组合设区 | $159 | CB_SETLOCALE | 设置组合框的当前区域。③参数:区域;④数据:0 |
组合区域 | $15A | CB_GETLOCALE | 获取组合框的当前区域设置。③参数:0;④数据:0 |
组合显项 | $15B | CB_GETTOPINDEX | 检索组合框列表框部分中第一个可见项的从零开始的索引。③参数:0;④数据:0 |
组合滚项 | $15C | CB_SETTOPINDEX | 滚动列表框让特定项在组合框的列表框中可见。③参数:序号;④数据:0 |
组合平宽 | $15D | CB_GETHORIZONTALEXTENT | 获取列表框可以水平滚动的宽度(像素)。③参数:0;④数据:0 |
组合改宽 | $15E | CB_SETHORIZONTALEXTENT | 修改列表框可以水平滚动的宽度(像素)。③参数:宽度;④数据:0 |
组合宽限 | $15F | CB_GETDROPPEDWIDTH | 获取组合框的列表框的最小允许宽度(像素)。③参数:0;④数据:0 |
组合限宽 | $160 | CB_SETDROPPEDWIDTH | 设置组合框的列表框的最小允许宽度(像素)。③参数:宽度;④数据:0 |
组合内存 | $161 | CB_INITSTORAGE | 分配组合框用于存储列表框项的内存。③参数:项数;④数据:内存大小 |
组合最少 | $163 | CB_GETMINVISIBLE | 获取组合框下拉列表中可见项的最小数目。③参数:0;④数据:0 |
组合信息 | $164 | CB_SETDROPPEDWIDTH | 获取有关指定组合框的信息。③参数:0;④数据:组合信息类 |
组合信息类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
组合信息类 | COMBOBOXINFO | 52 | 包含组合框状态信息。 |
组合信息类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | cbSize | 整数 | 结构的大小(以字节为单位)。 |
字框 | rcItem | 矩形类 | 指定编辑框坐标的矩形结构。 |
按钮 | rcButton | 矩形类 | 包含下拉箭头的按钮的坐标。 |
状态 | stateButton | 整数 | 组合框按钮状态。0=按钮未按下,8=按钮已按下,0x8000=没有按钮 |
组合 | hwndCombo | 整数 | 组合框的句柄。 |
编辑 | hwndItem | 整数 | 编辑框的句柄。 |
列表 | hwndList | 整数 | 下拉列表的句柄。 |
项目排序类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
项目排序类 | COMPAREITEMSTRUCT | 32 | 为排序的两个项提供标识符和应用程序提供的数据。 |
项目排序类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
分类 | CtlType | 整数 | 2列表框,3组合框。 |
标识 | CtlID | 整数 | 列表框或组合框的标识符。 |
按钮 | hwndItem | 整数 | 控件的句柄。 |
序号1 | itemID1 | 整数 | 要比较的列表框或组合框中第一项的索引。 |
数据1 | itemData1 | 整数 | 要比较的第一个项的数据内容。 |
序号2 | itemID2 | 整数 | 要比较的列表框或组合框中第二项的索引。 |
数据2 | itemData2 | 整数 | 正在比较的第二个项目的数据内容。 |
区域 | dwLocaleId | 整数 | 区域设置标识符。 |
绘制项目类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
绘制项目类 | DRAWITEMSTRUCT | 40 | 用于确定如何绘制所有者绘制的控件或菜单项的信息。 |
绘制项目类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
分类 | CtlType | 整数 | 1菜单项,2列表框,3组合框,4按钮,5静态框,101=Tab控件,102=表格框。 |
标识 | CtlID | 整数 | 组合框、列表框、按钮或静态控件的标识符。 |
序号 | itemID | 整数 | 菜单项的菜单项标识符或列表框或组合框中项的索引。 |
绘图 | itemAction | 整数 | 所需的绘图操作。1绘制全部,2检查新的选择状态,4失去或获得键盘焦点。 |
状态 | itemState | 整数 | 当前绘图操作发生后项的视觉状态。 |
控件 | hwndItem | 整数 | 组合框、列表框、按钮和静态控件的控件的句柄。 |
设备 | hDC | 整数 | 设备上下文的句柄;对控件执行绘图操作时,必须使用此设备上下文。 |
边界 | rcItem | 矩形类 | 定义要绘制的控件的边界的矩形。 |
数据 | itemData | 整数 | 列表框或组合框以及菜单项关联的应用程序定义值。 |
绘图视觉状态——常量值定义:
英文名称 | 数值 | 作用解释 |
ODS_SELECTED | 0x0001 | 菜单项的状态处于选中状态。 |
ODS_GRAYED | 0x0002 | 该项将灰显。 此位仅适用于菜单。 |
ODS_DISABLED | 0x0004 | 该项将被绘制为已禁用。 |
ODS_CHECKED | 0x0008 | 要检查菜单项。 此位仅适用于菜单。 |
ODS_FOCUS | 0x0010 | 该项具有键盘焦点。 |
ODS_DEFAULT | 0x0020 | 该项是默认项。 |
ODS_COMBOBOXEDIT | 0x1000 | 绘图发生在组合框编辑选择字段中。 |
ODS_HOTLIGHT | 0x0040 | 正在对项进行热跟踪,鼠标位于该项上时突出显示。 |
ODS_INACTIVE | 0x0080 | 该项处于非活动状态,与菜单关联的窗口处于非活动状态。 |
ODS_NOACCEL | 0x0100 | 控件是在没有键盘快捷键提示的情况下绘制的。 |
ODS_NOFOCUSRECT | 0x0200 | 控件是在没有焦点指示器提示的情况下绘制的。 |
项目尺寸类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
项目尺寸类 | MEASUREITEMSTRUCT | 24 | 通知系统所有者绘制的控件或菜单项的尺寸。 |
项目尺寸类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
分类 | CtlType | 整数 | 1菜单项,2列表框,3组合框,102=表格框。 |
标识 | CtlID | 整数 | 组合框或列表框的标识符。不适用于菜单。 |
序号 | itemID | 整数 | 菜单项的菜单项标识符或列表框或组合框中项的索引。 |
宽度 | itemWidth | 整数 | 菜单项的宽度(以像素为单位)。 |
高度 | itemHeight | 整数 | 列表框或菜单中单个项的高度(以像素为单位)。 |
数据 | itemData | 整数 | 列表框或组合框以及菜单项关联的应用程序定义值。 |
组合框、列表框——读取文件列表类型
中文名字 | 常量数值 | 英文名称 | 释义 |
包含只读 | 1 | DDL_READONLY | 包括只读文件 |
包含隐藏 | 2 | DDL_HIDDEN | 包括隐藏文件 |
包含系统 | 4 | DDL_SYSTEM | 包括系统文件 |
包含目录 | $10 | DDL_DIRECTORY | 包括子目录 |
包含存档 | $20 | DDL_ARCHIVE | 包括存档文件 |
只传信息 | $2000 | DDL_POSTMSGS | 只把信息传给应用消息队列,不响应列表 |
包含盘符 | $4000 | DDL_DRIVES | 包括盘符文件 |
不含读写 | $8000 | DDL_EXCLUSIVE | 不包括默认已经包含的读写文件 |
全部路径 | $4037 | DIRATTR | 包括全部路径(读写,只读,隐藏,系统,目录,存档,盘符) |
静态框——控件消息
发送消息(标签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人员
中文名字 | 常量数值 | 英文名称 | 释义 |
静态单击 | 0 | STN_CLICKED | 用户单击具有"点击事件"样式的静态控件。③参数:控件号/通知码;④数据:静态框 |
静态双击 | 1 | STN_DBLCLK | 用户双击具有"点击事件"样式的静态控件。③参数:控件号/通知码;④数据:静态框 |
静态启用 | 2 | STN_ENABLE | 启用静态控件时,发送此通知代码。③参数:控件号/通知码;④数据:静态框 |
静态禁用 | 3 | STN_DISABLE | 禁用静态控件时,发送此通知代码。③参数:控件号/通知码;④数据:静态框 |
绘制静态 | $0138 | WM_CTLCOLORSTATIC | 绘制一个静态控件的背景色③参数:设备;④数据:控件 |
发送消息——常数表 |
换静图标 | $170 | STM_SETICON | 更改静态图片框的图标。③参数:图标;④数据:0 |
取静图标 | $171 | STM_GETICON | 获取静态图片框的图标。③参数:0;④数据:0 |
换静图片 | $172 | STM_SETIMAGE | 更换静态图片框的位图。③参数:0位图,1图标,2光标,3图元;④数据:图片 |
取静图片 | $173 | STM_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里显示当前目录下所有文件
中文名字 | 常量数值 | 英文名称 | 释义 |
列表选择项目 | 1 | LBN_SELCHANGE | 通知应用程序列表框中的选择已因用户输入而更改。③参数:控件号/通知码;④数据:列表框 |
列表双击项目 | 2 | LBN_DBLCLK | 通知应用程序用户已双击列表框中的项。③参数:控件号/通知码;④数据:列表框 |
列表取消选择 | 3 | LBN_SELCANCEL | 通知应用程序用户已取消列表框中的选择。③参数:控件号/通知码;④数据:列表框 |
列表获得焦点 | 4 | LBN_SETFOCUS | 通知应用程序列表框已收到键盘焦点。③参数:控件号/通知码;④数据:列表框 |
列表失去焦点 | 5 | LBN_KILLFOCUS | 通知应用程序列表框已失去键盘焦点。③参数:控件号/通知码;④数据:列表框 |
列表内存不足 | -2 | LBN_ERRSPACE | 无法分配足够的内存来满足特定请求。③参数:控件号/通知码;④数据:列表框 |
列表拖动按下 | 0x485 | DL_BEGINDRAG | 通知用户已单击项上的鼠标左键。③参数:控件号;④数据:拖动类 |
列表拖动按下 | 0x486 | DL_DRAGGING | 指示用户在拖动项时移动了鼠标。③参数:控件号;④数据:拖动类 |
列表拖动完成 | 0x487 | DL_DROPPED | 指示用户释放鼠标左键已完成拖动操作。③参数:控件号;④数据:拖动类 |
列表拖动取消 | 0x488 | DL_CANCELDRAG | 用户单击鼠标右键或按ESC键,取消拖动操作。③参数:控件号;④数据:拖动类 |
删除项目 | $002D | WM_DELETEITEM | 列表框或组合框被销毁或删除清空某些项时,会发送本消息给这些控件的所有者。③参数:控件号;④数据: 项目删除类 |
列表按键 | $002E | WM_VKEYTOITEM | 响应按键风格的列表框会发出本消息给其所有者,以便响应键盘按下消息。③参数:键码/位置;④数据:列表框 |
列表字符 | $002F | WM_CHARTOITEM | 响应按键风格的列表框会发送本消息给其所有者,以便响应键入字符消息。③参数:键码/位置;④数据:列表框 |
绘制列表 | $0134 | WM_CTLCOLORLISTBOX | 当一个列表框控件将要被绘制前,发送本消息给其父窗;可用来设置列表框的文本和背景色③参数:设备;④数据:控件 |
发送消息——常数表 |
列表添加 | $180 | LB_ADDSTRING | 向列表框中添加字符串。③参数:序号;④数据:文字 |
列表插入 | $181 | LB_INSERTSTRING | 向列表框中插入一个条目数据或字符串(不排序)。③参数:序号,-1末尾;④数据:文字 |
列表删除 | $182 | LB_DELETESTRING | 删除列表框中的一个字符串。③参数:序号;④数据:0 |
列表选多 | $183 | LB_SELITEMRANGEEX | 在多选状态下的列表框中选择一个或多个连续的条目。③参数:首序号;④数据:末序号 |
列表清除 | $184 | LB_RESETCONTENT | 清除列表框中所有列表项。③参数:0;④数据:0 |
列表选择 | $185 | LB_SETSEL | 在多选状态下的列表框中选择一个字符串。③参数:0不选,非0选中;④数据:序号,-1所选 |
列表选中 | $186 | LB_SETCURSEL | 在列表框中选择一个字符串,并高亮新选中的字符串。③参数:序号,-1不选;④数据:0 |
列表状态 | $187 | LB_GETSEL | 获得列表框中一个条目的选择状态。③参数:序号;④数据:0 |
列表选项 | $188 | LB_GETCURSEL | 获得列表框中当前被选条目的索引。仅在单选状态的列表框有效。③参数:0;④数据:0 |
列表读取 | $189 | LB_GETTEXT | 从列表框中获得一个字符串。③参数:序号;④数据:文字 |
列表长度 | $18A | LB_GETTEXTLEN | 获得一个列表框中字符串的长度。③参数:序号;④数据:0 |
列表数量 | $18B | LB_GETCOUNT | 获得列表框中条目的数量。③参数:0;④数据:0 |
选列表项 | $18C | LB_SELECTSTRING | 仅适用于单选择列表框,设定与指定字符串相匹配的列表项为选中项,会滚动列表框以使选择项可见。③参数:序号,-1开头;④数据:文字 |
列表文件 | $18D | LB_DIR | 在列表框中列出文件名。③参数:路径选项;④数据:路径 |
列表查找 | $18F | LB_FINDSTRING | 在列表框中查找匹配字符串(忽略大小写)。③参数:序号,-1开头;④数据:文字 |
列表选数 | $190 | LB_GETSELCOUNT | 本消息用于返回选择项的数目。③参数:0;④数据:0 |
列表选位 | $191 | LB_GETSELITEMS | 本消息用于获得选中项的数目及位置。③参数:数量;④数据:缓冲区 |
取列表宽 | $193 | LB_GETHORIZONTALEXTENT | 返回列表框的可滚动的宽度。③参数:0;④数据:0 |
改列表宽 | $194 | LB_SETHORIZONTALEXTENT | 本消息设置列表框的滚动宽度。③参数:像素;④数据:0 |
列表列数 | $195 | LB_SETCOLUMNWIDTH | 设置多列列表框中所有列的宽度。③参数:像素;④数据:0 |
列文件名 | $196 | LB_ADDFILE | 为列表框增加文件名。③参数:0;④数据:文字 |
列表区域 | $198 | LB_GETITEMRECT | 用于列表框中获得列表项的客户区的矩形。③参数:序号;④数据:矩形类 |
列表数据 | $199 | LB_GETITEMDATA | 本消息用于返回指定列表项的附加数据。③参数:序号;④数据:0 |
列表附加 | $19A | LB_SETITEMDATA | 用于更新列表框中指定列表项的32位附加数据。③参数:序号;④数据:新值 |
列表非选 | $19B | LB_SELITEMRANGE | 用来使指定范围内的列表项选中或落选。③参数:0不选,非0选择;④数据:开始-最后项 |
列表指定 | $19C | LB_SETANCHORINDEX | 用于列表框中设置鼠标最后选中的表项成指定表项。③参数:序号;④数据:0 |
列表选取 | $19D | LB_GETANCHORINDEX | 用于列表框中鼠标最后选中的项的索引。③参数:0;④数据:0 |
列表键选 | $19E | LB_SETCARETINDEX | 用于列表框中设置键盘输入焦点到指定表项。③参数:序号;④数据:0完全可见,非0部分可见 |
列表键取 | $19F | LB_GETCARETINDEX | 用于列表框中返回具有矩形焦点的项目索引。③参数:0;④数据:0 |
改列表高 | $1A0 | LB_SETITEMHEIGHT | 用于列表框中指定列表项显示高度。③参数:序号;④数据:像素数 |
取列表高 | $1A1 | LB_GETITEMHEIGHT | 用于列表框中返回列表框中某一项的高度。③参数:序号;④数据:0 |
查列表项 | $1A2 | LB_FINDSTRINGEXACT | 用于列表框中查找字符串(忽略大小写),本消息必须整个字符串相同。③参数:序号,-1开头;④数据:文字 |
改列表数 | $1A7 | LB_SETCOUNT | 用于列表框中设置表项数目。③参数:项数量;④数据:0 |
列表内存 | $1A8 | LB_INITSTORAGE | 分配用于存储列表框项的内存。③参数:项数量;④数据:内存大小 |
列表点项 | $1A9 | LB_ITEMFROMPOINT | 获取最接近列表框中指定点的项的从零开始的索引。③参数:0;④数据:坐标x/y |
拖动类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
拖动类 | DRAGLISTINFO | 16 | 包含有关拖动事件的信息。 |
拖动类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
通知 | uNotification | 整数 | 指定拖动事件的类型的通知代码。拖动按下$485到拖动取消$488 |
控件 | hWnd | 整数 | 拖动列表框的句柄。 |
左 | ptCursor.x | 整数 | 包含鼠标光标的x坐标。 |
顶 | ptCursor.y | 整数 | 包含鼠标光标的y坐标。 |
项目删除类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
项目删除类 | DELETEITEMSTRUCT | 20 | 描述已删除的列表框或组合框项。 |
项目删除类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
分类 | CtlType | 整数 | 2列表框,3组合框 |
标识 | CtlID | 整数 | 组合框或列表框的标识符。 |
序号 | itemID | 整数 | 要删除的列表框或组合框中项的索引。 |
控件 | hwndItem | 整数 | 控件的句柄。 |
数据 | itemData | 整数 | 项的应用程序定义数据。 |
滚动条——控件消息:
发送消息(滚动条1,滚动位置,50,真);控制滚动条1的滑动块到指定位置
位置=发送消息(滚动条1,滚动取值,0,0);获取滚动条1的滑动块当前所在位置
发送消息(滚动条1,滚动限定,0,100);设置滚动条1的最小到最大滚动范围
发送消息(滚动条1,滚动取限,@最小,@最大);获取滚动条1的最小到最大滚动范围
发送消息(滚动条1,滚动箭头,2,0);设置滚动条1的右边(垂直滚动为下边)箭头禁止使用
中文名字 | 常量数值 | 英文名称 | 释义 |
绘制滚条 | $0137 | WM_CTLCOLORSCROLLBAR | 绘制滚动条的背景色③参数:设备;④数据:控件 |
水平滚动 | $0114 | WM_HSCROLL | 当窗口的标准水平滚动条产生一个滚动事件时,发送本消息给该窗口。③参数:低位=0点左键,1点右/下键,2点滑块左,3点滑块右,4按住滑块, 5拖动滑块,6按home,7按END,8释放按键;高位=按住拖动位置;④数据:控件 |
垂直滚动 | $0115 | WM_VSCROLL | 当窗口的标准垂直滚动条产生一个滚动事件时,发送本消息给该窗口。③参数:低位=0点上键,1点下键,2点滑块上方,3点滑块下方,4按住滑块, 5拖动滑块,6按home,7按END,8释放按键;高位=按住拖动位置;④数据:控件 |
发送消息——常数表 |
滚动位置 | $E0 | SBM_SETPOS | 设置滚动框的位置 ,并根据需要重绘滚动条来反映新位置;③参数:位置;④数据:是否重绘; |
滚动取值 | $E1 | SBM_GETPOS | 检索滚动条控件的滚动框的当前位置;③参数:0;④数据:0; |
滚动限定 | $E2 | SBM_SETRANGE | 设置滚动条控件的最小和最大位置值。③参数:最小值;④数据:最大值; |
滚动取限 | $E3 | SBM_GETRANGE | 获取滚动条控件的最小和最大位置值。③参数:@最小值;④数据:@最大值; |
滚动箭头 | $E4 | SBM_ENABLE_ARROWS | 启用或禁用滚动条控件的一个或两个箭头。③参数:0都启用,1禁左/上,2禁右/下,3都禁用;④数据:0; |
滚动范围 | $E6 | SBM_SETRANGEREDRAW | 设置滚动条最小和最大位置并重绘控件。③参数:最小值;④数据:最大值; |
滚动设置 | $E9 | SBM_SETSCROLLINFO | 设置滚动条的位置范围等参数。③参数:是否重绘;④数据:滚动信息类; |
滚动参数 | $EA | SBM_GETSCROLLINFO | 获取滚动条控件的位置范围等参数。③参数:0;④数据:滚动信息类; |
滚动信息 | $EB | SBM_GETSCROLLBARINFO | 获取滚动条控件的位置范围等信息。③参数:0;④数据:滚动条类; |
中文名字 | 英文名称 | 长度 | 作用解释 |
滚动信息类 | SCROLLINFO | 28 | 用来储存滚动条信息 |
滚动信息类——成员表 |
长度 | cbSize | 整数 | 结构长度字节数,该值在设置和查询参数时都必须填写。 |
标志 | fMask | 整数 | 指定结构中的哪些成员是有效,0x17全部有效,8禁止滚动 |
最小 | nMin | 整数 | 滚动范围最小值;标志:1 |
最大 | nMax | 整数 | 滚动范围最大值;标志:1 |
页码 | nPage | 整数 | 页尺寸,用来确定比例滚动框的大小;标志:2 |
位置 | nPos | 整数 | 滚动框的位置;标志:4 |
跟踪 | nTrackPos | 整数 | 拖动时滚动框的位置,标志:$10 |
中文名字 | 英文名称 | 长度 | 作用解释 |
滚动条类 | SCROLLBARINFO | 40 | 定义了包含滚动条信息 |
滚动条类——成员表 |
长度 | 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_OPEN | 1 | 打开地址 |
OLECMDID_NEW | 2 | 新建页面 |
OLECMDID_SAVE | 3 | 保存 |
OLECMDID_SAVEAS | 4 | 另存为 |
OLECMDID_SAVECOPYAS | 5 | 另存复制内容 |
OLECMDID_PRINT | 6 | 打印页面 |
OLECMDID_PRINTPREVIEW | 7 | 打印预览 |
OLECMDID_PAGESETUP | 8 | 页面设置 |
OLECMDID_SPELL | 9 | 拼写 |
OLECMDID_PROPERTIES | 10 | 查看页面属性 |
OLECMDID_CUT | 11 | 剪切 |
OLECMDID_COPY | 12 | 复制 |
OLECMDID_PASTE | 13 | 粘贴 |
OLECMDID_PASTESPECIAL | 14 | 粘贴特殊 |
OLECMDID_UNDO | 15 | 撤消 |
OLECMDID_REDO | 16 | 重做 |
OLECMDID_SELECTALL | 17 | 全选 |
OLECMDID_CLEARSELECTION | 18 | 清除选择 |
OLECMDID_ZOOM | 19 | 缩放 |
OLECMDID_GETZOOMRANGE | 20 | 获取的缩放范围 |
OLECMDID_UPDATECOMMANDS | 21 | 更新命令 |
OLECMDID_REFRESH | 22 | 刷新 |
OLECMDID_STOP | 23 | 停止 |
OLECMDID_HIDETOOLBARS | 24 | 隐藏工具栏 |
OLECMDID_SETPROGRESSMAX | 25 | 设置进度条最大值 |
OLECMDID_SETPROGRESSPOS | 26 | 设置进度条位置 |
OLECMDID_SETPROGRESSTEXT | 27 | 设置进度条文本 |
OLECMDID_SETTITLE | 28 | 设置标题 |
OLECMDID_SETDOWNLOADSTATE | 29 | 设置下载状态 |
OLECMDID_STOPDOWNLOAD | 30 | 停止下载 |
OLECMDID_ONTOOLBARACTIVATED | 31 | 激活工具栏 |
OLECMDID_FIND | 32 | 查找 |
OLECMDID_DELETE | 33 | 删除 |
OLECMDID_HTTPEQUIV | 34 | http信息头 |
OLECMDID_HTTPEQUIV_DONE | 35 | http信息头结束 |
OLECMDID_ENABLE_INTERACTION | 36 | 允许相互协作 |
OLECMDID_ONUNLOAD | 37 | 激活卸载 |
OLECMDID_PROPERTYBAG2 | 38 | 连续数据对象 |
OLECMDID_PREREFRESH | 39 | 预刷新 |
OLECMDID_SHOWSCRIPTERROR | 40 | 显示脚本错误 |
OLECMDID_SHOWMESSAGE | 41 | 显示消息 |
OLECMDID_SHOWFIND | 42 | 显示查找 |
OLECMDID_SHOWPAGESETUP | 43 | 显示页面设置 |
OLECMDID_SHOWPRINT | 44 | 显示打印 |
OLECMDID_CLOSE | 45 | 关闭窗体 |
OLECMDID_ALLOWUILESSSAVEAS | 46 | 另存为 |
OLECMDID_DONTDOWNLOADCSS | 47 | 不加载CSS |
OLECMDID_UPDATEPAGESTATUS | 48 | 更新页面状态 |
OLECMDID_PRINT2 | 49 | 打印2 |
OLECMDID_PRINTPREVIEW2 | 50 | 打印预览2 |
OLECMDID_SETPRINTTEMPLATE | 51 | 设置打印模板 |
OLECMDID_GETPRINTTEMPLATE | 52 | 获取打印模板 |
OLECMDID_PAGEACTIONBLOCKED | 55 | 页面动作锁定 |
OLECMDID_PAGEACTIONUIQUERY | 56 | 页面操作界面查询 |
OLECMDID_FOCUSVIEWCONTROLS | 57 | 焦点视图控件 |
OLECMDID_FOCUSVIEWCONTROLSQUERY | 58 | 焦点视图控件查询 |
OLECMDID_SHOWPAGEACTIONMENU | 59 | 显示页面操作菜单 |
OLECMDID_ADDTRAVELENTRY | 60 | 增加入口 |
OLECMDID_UPDATETRAVELENTRY | 61 | 更新入口 |
OLECMDID_UPDATEBACKFORWARDSTATE | 62 | 更新放进后退状态 |
OLECMDID_OPTICAL_ZOOM | 63 | 视窗缩放 |
OLECMDID_OPTICAL_GETZOOMRANGE | 64 | 视角缩放范围 |
OLECMDID_WINDOWSTATECHANGED | 65 | 窗口状态改变 |
OLECMDID_ACTIVEXINSTALLSCOPE | 66 | 安装ActiveX控件 |
OLECMDID_UPDATETRAVELENTRY_DATARECOVERY | 67 | 更新恢复数据 |
OLECMDID_SHOWTASKDLG | 68 | 显示任务对话 |
进度条——控件消息:
发送消息(进度条1,进度限定,0,300);设置进度条1上下限范围是0-300
发送消息(进度条1,进度位置,50,0);设置进度条1的当前位置到50
发送消息(进度条1,进度步长,20,0);设置进度条1每次步进的值为20
发送消息(进度条1,进度步进,0,0);控制进度条1位置增加指定的步长
位置=发送消息(进度条1,进度取值,0,0);获取进度条1的当前位置
中文名字 | 常量数值 | 英文名称 | 释义 |
进度范围 | $401 | PBM_SETRANGE | 设置进度条控件范围的上下限,并重绘进度条来反映新范围;③参数:0;④数据:低位最小值,高位最大值;默认0-100 |
进度位置 | $402 | PBM_SETPOS | 以指定位置来设置进度条的当前位置,并重绘进度条来反映新位置;③参数:位置;④数据:0 |
进度增量 | $403 | PBM_DELTAPOS | 以指定的增量来增加进度条控件的当前位置;③参数:增量;④数据:0 |
进度步长 | $404 | PBM_SETSTEP | 为进度条控件指定步长(缺省为10);③参数:步长;④数据:0 |
进度步进 | $405 | PBM_STEPIT | 用步进值来增加一个进度条控件的当前位置;③参数:0;④数据:0 |
进度限定 | $406 | PBM_SETRANGE32 | 为进度条设置32位的上下限范围;③参数:最小值;④数据:最大值 |
进度取限 | $407 | PBM_GETRANGE | 获取当前进度条控件的上下限范围;③参数:真=低限,假=高限;④数据:双数类或者0 |
进度取值 | $408 | PBM_GETPOS | 检取进度条的当前位置;③参数:0;④数据:0;返回当前位置 |
进度块色 | $409 | PBM_SETBARCOLOR | 设置进度条控件上滑块的颜色(COLORREF值);③参数:0;④数据:颜色;返回之前颜色 |
进度动画 | $40A | PBM_SETMARQUEE | 将进度栏设置为选框模式(多彩流动)。③参数:打开/关闭;④数据:动画时间,0=30毫秒; |
进度步增 | $40D | PBM_GETSTEP | 从进度栏中检索步骤增量。③参数:0;④数据:0 |
进度取背 | $40E | PBM_GETBKCOLOR | 获取进度栏的背景色。③参数:0;④数据:0 |
进度取色 | $40F | PBM_GETBARCOLOR | 获取进度栏的颜色。③参数:0;④数据:0 |
进度变态 | $410 | PBM_SETSTATE | 设置进度栏的状态。③参数:1正常,2错误,3暂停;④数据:0 |
进度状态 | $411 | PBM_GETSTATE | 获取进度栏的状态。③参数:0;④数据:0;返回:1正常,2错误,3暂停 |
进度背色 | $2001 | PBM_SETBKCOLOR | 设置进度条控件的背景色;③参数:0;④数据:新颜色;返回之前颜色 |
双数类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
双数类 | PBRANGE | 8 | 包含有关进度栏控件的高低限制的信息。 |
双数类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
低 | 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}
为 表项插入新项{有个新项目被插入了}
处理窗口(窗口,控件事件,参数,数据)
结束
中文名字 | 常量数值 | 英文名称 | 释义 |
控件单击左键 | -2 | NM_CLICK | 用户在控件上点击了鼠标左键 |
控件双击左键 | -3 | NM_DBLCLK | 用户在控件上双击了鼠标左键 |
控件按下回车 | -4 | NM_RETURN | 控件获得键盘焦点并按下回车键 |
控件单击右键 | -5 | NM_RCLICK | 用户在控件上点击了鼠标右键 |
控件双击右键 | -6 | NM_RDBLCLK | 用户在控件上双击了鼠标右键 |
控件得到焦点 | -7 | NM_SETFOCUS | 控件收到输入焦点 |
控件失去焦点 | -8 | NM_KILLFOCUS | 用户失去输入焦点 |
控件自行绘制 | -12 | NM_CUSTOMDRAW | 通知控件的父窗口有关自定义绘制操作的信息。 |
控件鼠标掠过 | -13 | NM_HOVER | 用户的鼠标掠过控件 |
控件释放鼠标 | -16 | NM_RELEASEDCAPTURE | 控件要释放鼠标捕捉 |
表项正在改变 | -100 | LVN_ITEMCHANGING | 有个项目正被改变 |
表项已被改变 | -101 | LVN_ITEMCHANGED | 有个项目已经被改变 |
表项插入新项 | -101 | LVN_INSERTITEM | 有个新项目被插入了 |
表项删除单项 | -103 | LVN_DELETEITEM | 有个项目要被删除 |
表项删除全项 | -104 | LVN_DELETEALLITEMS | 所有项目要被删除 |
表项编辑起点 | -105 | LVN_BEGINLABELEDITA | 一个项目的文本标签编辑的起点 |
表项编辑终点 | -106 | LVN_ENDLABELEDITA | 一个项目的文本标签编辑的终点 |
表项列被点击 | -108 | LVN_COLUMNCLICK | 一个列被点击了 |
表项左键拖放 | -109 | LVN_BEGINDRAG | 鼠标左键的拖放操作开始了 |
表项右键拖放 | -111 | LVN_BEGINRDRAG | 鼠标右键的拖放操作开始了 |
表项内容改变 | -113 | LVN_ODCACHEHINT | 由虚列表控件在其可视区域的内容被改变时发送 |
表项用户激活 | -114 | LVN_ITEMACTIVATE | 由虚列表控件在用户激活了某个项目时发送 |
表项状态改变 | -115 | LVN_ODSTATECHANGED | 由虚列表控件在一个项目的状态或排列已被改变时发送 |
表项鼠标掠过 | -121 | LVN_HOTTRACK | 由虚列表控件在用户的鼠标掠过某个项目时发送 |
表项请求显示 | -150 | LVN_GETDISPINFOA | 请求父窗提供显示项目或对某个项目排序所需的信息 |
表项更新显示 | -151 | LVN_SETDISPINFOA | 需要更新某个项目的信息 |
表项查找回调 | -152 | LVN_ODFINDITEMA | 由虚列表控件在需要其所有者查找特定的回调项目时发送 |
表项键盘按下 | -155 | LVN_KEYDOWN | 通知列表视图控件的父窗口已按下某键。 |
表项选择边框 | -156 | LVN_MARQUEEBEGIN | 某个边框选择已开始 |
表项附加文本 | -157 | LVN_GETINFOTIPA | 请求附加的文本信息(显示于工具提示控件中)时发送 |
表项附加提示 | -158 | LVN_GETINFOTIPW | 请求附加的文本信息(显示于工具提示控件中)时发送 |
表项增量搜索 | -162 | LVN_INCREMENTALSEARCHA | 通知列表视图控件的父窗口,增量搜索已开始。 |
表项增量检索 | -163 | LVN_INCREMENTALSEARCHW | 通知列表视图控件的父窗口,增量搜索已开始。 |
表项开始滚动 | -180 | LVN_BEGINSCROLL | 滚动操作启动时,通知列表视图控件的父窗口。 |
表项结束滚动 | -181 | LVN_ENDSCROLL | 滚动操作结束时,通知列表视图控件的父窗口。 |
表项点击链接 | -184 | LVN_LINKCLICK | 通知列表视图控件的父窗口已单击链接。 |
表项标记文本 | -187 | LVN_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中间}
处理窗口(窗口,控件事件,参数,数据)
结束
中文名字 | 常量数值 | 英文名称 | 释义 |
控件单击右键 | -5 | NM_RCLICK | 用户在控件上点击了鼠标右键 |
控件自行绘制 | -12 | NM_CUSTOMDRAW | 通知控件的父窗口有关自定义绘制操作的信息。 |
控件释放鼠标 | -16 | NM_RELEASEDCAPTURE | 控件要释放鼠标捕捉 |
标头正在改变 | -300 | HDN_ITEMCHANGINGA | 有个项目正被改变 |
标头已被改变 | -301 | HDN_ITEMCHANGEDA | 有个项目已经被改变 |
标头单击项目 | -302 | HDN_ITEMCLICKA | 用户单击项目 |
标头双击项目 | -303 | HDN_ITEMDBLCLICKA | 用户双击项目 |
标头双击分割 | -305 | HDN_DIVIDERDBLCLICKA | 用户双击控件的分隔线区域。 |
标头拖起分割 | -306 | HDN_BEGINTRACKA | 用户已开始拖动控件中的分隔符 |
标头拖完分割 | -307 | HDN_ENDTRACKA | 用户已完成拖动分隔符。 |
标头拖动分割 | -308 | HDN_TRACKA | 用户正在拖动标题控件中的分隔符 |
标头显示回调 | -309 | HDN_GETDISPINFOA | 有关回调标头项的信息 |
标头开始拖动 | -310 | HDN_BEGINDRAG | 对其某个项开始拖动操作 |
标头结束拖动 | -311 | HDN_ENDDRAG | 拖动操作对其某个项结束 |
标头筛选更改 | -312 | HDN_FILTERCHANGE | 通知标头控件的父窗口正在更改或编辑标头控件筛选器的属性。 |
标头筛选点击 | -313 | HDN_FILTERBTNCLICK | 单击筛选器按钮或响应 HDM_SETITEM 消息 |
标头编辑筛选 | -314 | HDN_BEGINFILTEREDIT | 通知标头控件的父窗口,筛选器编辑已开始。 |
标头改完筛选 | -315 | HDN_ENDFILTEREDIT | 通知标头控件的父窗口筛选器编辑已结束。 |
标头单击图标 | -316 | HDN_ITEMSTATEICONCLICK | 通知标头控件的父窗口用户单击了项的状态图标。 |
标头选中项目 | -317 | HDN_ITEMKEYDOWN | 通知标头控件的父窗口,已按下某个键并选中某个项。 |
标头单击箭头 | -318 | HDN_DROPDOWN | 单击标题控件上的下拉箭头时,由标头控件发送到其父控件。 |
标头单击溢出 | -319 | HDN_OVERFLOWCLICK | 单击标头的溢出按钮时,由标头控件发送到其父级。 |
标头正在变更 | -320 | HDN_ITEMCHANGINGW | 有个项目正被改变 |
标头已被变更 | -321 | HDN_ITEMCHANGEDW | 有个项目已经被改变 |
标头项目单击 | -322 | HDN_ITEMCLICKW | 用户单击项目 |
标头项目双击 | -323 | HDN_ITEMDBLCLICKW | 用户双击项目 |
标头分割双击 | -325 | HDN_DIVIDERDBLCLICKW | 用户双击控件的分隔线区域。 |
标头分割拖起 | -326 | HDN_BEGINTRACKW | 用户已开始拖动控件中的分隔符 |
标头分割拖完 | -327 | HDN_ENDTRACKW | 用户已完成拖动分隔符。 |
标头分割拖动 | -328 | HDN_TRACKW | 用户正在拖动标题控件中的分隔符 |
标头回调显示 | -329 | HDN_GETDISPINFOW | 有关回调标头项的信息 |
树表框——通知消息:
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号
处理窗口(窗口,控件事件,参数,数据)
结束
中文名字 | 常量数值 | 英文名称 | 释义 |
控件单击左键 | -2 | NM_CLICK | 用户在控件上点击了鼠标左键 |
控件双击左键 | -3 | NM_DBLCLK | 用户在控件上双击了鼠标左键 |
控件按下回车 | -4 | NM_RETURN | 控件获得键盘焦点并按下回车键 |
控件单击右键 | -5 | NM_RCLICK | 用户在控件上点击了鼠标右键 |
控件双击右键 | -6 | NM_RDBLCLK | 用户在控件上双击了鼠标右键 |
控件得到焦点 | -7 | NM_SETFOCUS | 控件收到输入焦点 |
控件失去焦点 | -8 | NM_KILLFOCUS | 用户失去输入焦点 |
控件自行绘制 | -12 | NM_CUSTOMDRAW | 通知控件的父窗口有关自定义绘制操作的信息。 |
控件设置光标 | -17 | NM_SETCURSOR | 控件响应消息要设置光标 |
树表图像更改 | -24 | NM_TVSTATEIMAGECHANGING | 由树视图控件发送到其状态图像正在更改的父窗口。④数据:NMTVSTATEIMAGECHANGING 结构 |
树项选择正改 | -401 | TVN_SELCHANGINGA | 用户对树控件项目的选择将改变 |
树项选择已改 | -402 | TVN_SELCHANGEDA | 用户已改变树控件项目的选择 |
树项单击项目 | -403 | TVN_GETDISPINFOA | 需要得到树控件的某结点信息 |
树项双击项目 | -404 | TVN_SETDISPINFOA | 通知更新树控件项目的信息 |
树项即将开合 | -405 | TVN_ITEMEXPANDINGA | 树控件某结点将被展开或收缩 |
树项已经开合 | -406 | TVN_ITEMEXPANDEDA | 树控件某结点已被展开或收缩 |
树项左键拖起 | -407 | TVN_BEGINDRAGA | 树控件中鼠标左键拖放开始 |
树项右键拖起 | -408 | TVN_BEGINRDRAGA | 树控件中鼠标右键拖放开始 |
树项删除项目 | -409 | TVN_DELETEITEMA | 删除树控件中的项目 |
树项修改标签 | -410 | TVN_BEGINLABELEDITA | 开始编辑项目的标签 |
树项改完标签 | -411 | TVN_ENDLABELEDITA | 用户完成编辑项目的标签 |
树项键盘按下 | -412 | TVN_KEYDOWN | 用户在树控件中按下了某键盘按键 |
树项显示文字 | -413 | TVN_GETINFOTIPA | 请求显示结点信息或提示文字 |
树项请求显示 | -414 | TVN_GETINFOTIPW | 请求显示结点信息或提示文字 |
树项单击开合 | -415 | TVN_SINGLEEXPAND | 用户使用鼠标单击打开或关闭树控件项目 |
树项属性正改 | -416 | TVN_ITEMCHANGINGA | 通知树视图控件的父窗口项属性即将更改。 |
树项属性将改 | -417 | TVN_ITEMCHANGINGW | 通知树视图控件的父窗口项属性即将更改。 |
树项属性已改 | -418 | TVN_ITEMCHANGEDA | 通知树视图控件的父窗口项属性已更改。 |
树项属性改变 | -419 | TVN_ITEMCHANGEDW | 通知树视图控件的父窗口项属性已更改。 |
树项选择将改 | -450 | TVN_SELCHANGINGW | 用户对树控件项目的选择将改变 |
树项选择改变 | -451 | TVN_SELCHANGEDW | 用户已改变树控件项目的选择 |
树项项目单击 | -452 | TVN_GETDISPINFOW | 需要得到树控件的某结点信息 |
树项项目双击 | -453 | TVN_SETDISPINFOW | 通知更新树控件项目的信息 |
树项准备开合 | -454 | TVN_ITEMEXPANDINGW | 树控件某结点将被展开或收缩 |
树项完成开合 | -455 | TVN_ITEMEXPANDEDW | 树控件某结点已被展开或收缩 |
树项拖起左键 | -456 | TVN_BEGINDRAGW | 树控件中鼠标左键拖放开始 |
树项拖起右键 | -457 | TVN_BEGINRDRAGW | 树控件中鼠标右键拖放开始 |
树项条目删除 | -458 | TVN_DELETEITEMW | 删除树控件中的项目 |
树项标签修改 | -459 | TVN_BEGINLABELEDITW | 开始编辑项目的标签 |
树项标签改完 | -460 | TVN_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 | 颜色=树表记色(控件) | 获取或设置树视图插入标记的颜色。 |
工具提示——通知消息:
中文名字 | 常量数值 | 英文名称 | 释义 |
控件自行绘制 | -12 | NM_CUSTOMDRAW | 通知控件的父窗口有关自定义绘制操作的信息。 |
提示显示信息 | -520 | TTN_GETDISPINFOA | 检索显示工具提示窗口所需的信息 |
提示即将显示 | -521 | TTN_SHOW | 即将显示工具提示控件 |
提示即将隐藏 | -522 | TTN_POP | 工具提示即将隐藏。 |
提示点击链接 | -523 | TTN_LINKCLICK | 单击批注框工具提示中的文本链接时发送。 |
提示取得信息 | -530 | TTN_GETDISPINFOW | 检索显示工具提示窗口所需的信息 |
发送消息——常数表 |
提示激活控件 | 0x401 | TTM_ACTIVATE | 激活或停用工具提示控件。③参数:真=激活,假=停用;④数据:0 |
提示设置延时 | 0x403 | TTM_SETDELAYTIME | 设置初始等待时间3、弹出持续时间2和重新显示持续时间1。③参数:0默认,1间隔,2保持,3初始;④数据:毫秒 |
提示添加信息 | 0x404 | TTM_ADDTOOLA | 向工具提示控件注册工具。③参数:0;④数据:提示信息类 |
提示删除信息 | 0x405 | TTM_DELTOOLA | 从工具提示控件中删除工具。③参数:0;④数据:提示信息类 |
提示设置边界 | 0x406 | TTM_NEWTOOLRECTA | 设置工具的新边界矩形。③参数:0;④数据:提示信息类 |
提示鼠标事件 | 0x407 | TTM_RELAYEVENT | 将鼠标消息传递给工具提示控件进行处理。③参数:0;④数据:消息类 |
提示获取信息 | 0x408 | TTM_GETTOOLINFOA | 检索为工具维护的相关信息。③参数:0;④数据:提示信息类 |
提示设置信息 | 0x409 | TTM_SETTOOLINFOA | 设置为工具维护的相关信息。③参数:0;④数据:提示信息类 |
提示点框信息 | 0x40A | TTM_HITTESTA | 测试点在指定矩形内的信息。③参数:0;④数据:提示点框类 |
提示获取文本 | 0x40B | TTM_GETTEXTA | 检索为工具维护的相关信息。③参数:字数;④数据:提示信息类 |
提示设置文本 | 0x40C | TTM_UPDATETIPTEXTA | 设置工具提示文本。③参数:0;④数据:提示信息类 |
提示获取计数 | 0x40D | TTM_GETTOOLCOUNT | 检索维护的工具计数。③参数:0;④数据:0 |
提示当前显示 | 0x40E | TTM_ENUMTOOLSA | 获取当前显示文本的工具。③参数:序号;④数据:提示信息类 |
提示当前信息 | 0x40F | TTM_GETCURRENTTOOLA | 检索当前工具的信息。③参数:0;④数据:提示信息类 |
提示点外窗口 | 0x410 | TTM_WINDOWFROMPOINT | 允许光标下方窗口以外的提示。③参数:0;④数据:坐标类 |
提示激活跟踪 | 0x411 | TTM_TRACKACTIVATE | 激活或停用跟踪工具提示。③参数:真=激活,假=停用;④数据:提示信息类 |
提示跟踪位置 | 0x412 | TTM_TRACKPOSITION | 设置跟踪工具提示的位置。③参数:0;④数据:x/y |
提示改背景色 | 0x413 | TTM_SETTIPBKCOLOR | 设置提示窗口的背景色。③参数:颜色;④数据:0 |
提示改文字色 | 0x414 | TTM_SETTIPTEXTCOLOR | 设置提示窗口的文本颜色。③参数:颜色;④数据:0 |
提示获取延时 | 0x415 | TTM_GETDELAYTIME | 设置初始等待时间3、弹出持续时间2和重新显示持续时间1。③参数:0默认,1间隔,2保持,3初始;④数据:0 |
提示取背景色 | 0x416 | TTM_GETTIPBKCOLOR | 检索窗口的背景颜色。③参数:0;④数据:0 |
提示取文字色 | 0x417 | TTM_GETTIPTEXTCOLOR | 检索窗口的文本颜色。③参数:0;④数据:0 |
提示设置宽度 | 0x418 | TTM_SETMAXTIPWIDTH | 设置窗口的最大宽度。③参数:0;④数据:宽度,-1不限 |
提示获取宽度 | 0x419 | TTM_GETMAXTIPWIDTH | 获取窗口的最大宽度。③参数:0;④数据:0 |
提示设置边距 | 0x41A | TTM_SETMARGIN | 设置窗口与文本的边框距离。③参数:0;④数据:矩形类 |
提示获取边距 | 0x41B | TTM_GETMARGIN | 设置窗口与文本的边框距离。③参数:0;④数据:矩形类 |
提示移除显示 | 0x41C | TTM_POP | 从视图中移除显示的工具提示窗口。③参数:0;④数据:0 |
提示更新显示 | 0x41D | TTM_UPDATE | 强制重绘当前工具提示。③参数:0;④数据:0 |
提示控件大小 | 0x41E | TTM_GETBUBBLESIZE | 返回控件的宽度和高度。③参数:0;④数据:提示信息类 |
提示计算矩形 | 0x41F | TTM_ADJUSTRECT | 从窗口或文本矩形中计算其文本显示矩形。③参数:真=文本,假=窗口;④数据:矩形类 |
提示标题图标 | 0x420 | TTM_SETTITLEA | 向工具提示添加标准图标和标题字符串。③参数:图标;④数据:标题;0无图标,1信息,2警告,3错误,4大信息,5大警告,6大错误 |
提示图标标题 | 0x421 | TTM_SETTITLEW | 向工具提示添加标准图标和标题字符串。③参数:图标;④数据:标题;0无图标,1信息,2警告,3错误,4大信息,5大警告,6大错误 |
提示鼠标显示 | 0x422 | TTM_POPUP | 显示在最后一条鼠标消息的坐标处。③参数:0;④数据:0 |
提示获取标题 | 0x423 | TTM_GETTITLE | 检索有关工具提示控件标题的信息。③参数:0;④数据:提示标题类 |
提示添加数据 | 0x432 | TTM_ADDTOOLW | 向工具提示控件注册工具。③参数:0;④数据:提示信息类 |
提示删除数据 | 0x433 | TTM_DELTOOLW | 从工具提示控件中删除工具。③参数:0;④数据:提示信息类 |
提示设置边框 | 0x434 | TTM_NEWTOOLRECTW | 设置工具的新边界矩形。③参数:0;④数据:提示信息类 |
提示获得信息 | 0x435 | TTM_GETTOOLINFOW | 检索为工具维护的相关信息。③参数:0;④数据:提示信息类 |
提示修改信息 | 0x436 | TTM_SETTOOLINFOW | 设置为工具维护的相关信息。③参数:0;④数据:提示信息类 |
提示点内信息 | 0x437 | TTM_HITTESTW | 测试点在指定矩形内的信息。③参数:0;④数据:提示点框类 |
提示获取文字 | 0x438 | TTM_GETTEXTW | 检索为工具维护的相关信息。③参数:字数;④数据:提示信息类 |
提示设置文字 | 0x439 | TTM_UPDATETIPTEXTW | 设置工具提示文本。③参数:0;④数据:提示信息类 |
提示当前内容 | 0x43A | TTM_ENUMTOOLSW | 获取当前显示文本的工具。③参数:序号;④数据:提示信息类 |
提示现在信息 | 0x43B | TTM_GETCURRENTTOOLW | 检索当前工具的信息。③参数:0;④数据:提示信息类 |
提示信息类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
提示信息类 | TTTOOLINFOA | 48 | 包含有关工具提示控件中的工具的信息。 |
提示信息类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | 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。 |
提示点框类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
提示点框类 | TTHITTESTINFOA | 60 | 包含用于确定某个点是否位于指定工具的边框中的信息。如果在,则结构将接收有关该工具的信息。 |
提示点框类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
窗口 | hwnd | 整数 | 使用指定工具的工具或窗口的句柄。 |
左边 | pt.x | 整数 | 要测试的点的客户端坐标的水平位置。 |
顶边 | pt.y | 整数 | 要测试的点的客户端坐标的垂直位置。 |
提示 | ti | 提示信息类 | 如果指定的点位于指定窗口的工具中,则此结构接收有关该工具的信息。 |
提示标题类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
提示标题类 | TTGETTITLE | 16 | 提供有关工具提示控件标题的信息。 |
提示标题类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | dwSize | 整数 | 此结构的大小(以字节为单位)。 |
图标 | uTitleBitmap | 整数 | 指定工具提示图标的序号 |
字数 | cch | 整数 | 指定标题中的字符数的大小 |
标题 | pszTitle | 整数 | 指向包含标题的宽字符串的指针。 |
选项卡——通知消息:
程序段 公共事件(数据)
整数 窗口=数据&,参数=.&4,事件=.&8,标识=.&12,数值=.&16,左边=.&20,顶边=.&24;
判断(事件)为 控件单击左键{标题是特定于控件的项标识符}
为 控件双击左键{数值是特定于控件的项数据}
为 控件单击右键{左边和顶边是鼠标位置}
处理窗口(窗口,控件事件,参数,数据)
结束
程序段 公共事件(数据)
整数 窗口=数据&,参数=.&4,事件=.&8,键码=.&12,扫码=.&16;
判断(事件)为 选卡键盘按下{键码是虚拟密钥代码}
为 选卡键盘按下{扫码是扫描代码、扩展键标志、上下文代码}
处理窗口(窗口,控件事件,参数,数据)
结束
中文名字 | 常量数值 | 英文名称 | 释义 |
控件单击左键 | -2 | NM_CLICK | 用户在控件上点击了鼠标左键 |
控件双击左键 | -3 | NM_DBLCLK | 用户在控件上双击了鼠标左键 |
控件单击右键 | -5 | NM_RCLICK | 用户在控件上点击了鼠标右键 |
控件双击右键 | -6 | NM_RDBLCLK | 用户在控件上双击了鼠标右键 |
控件释放鼠标 | -16 | NM_RELEASEDCAPTURE | 控件要释放鼠标捕捉 |
选卡键盘按下 | -550 | TCN_KEYDOWN | 用户已按下某键 |
选卡已被改变 | -551 | TCN_SELCHANGE | 选项卡的当前选择已被改变 |
选卡将要改变 | -552 | TCN_SELCHANGING | 选项卡的当前选择将要改变 |
选卡放置目标 | -553 | TCN_GETOBJECT | 请求放置目标对象 |
选卡焦点更改 | -554 | TCN_FOCUSCHANGE | 按钮焦点已更改。 |
发送消息——常数表 |
选卡获取图表 | 0x1302 | TCM_GETIMAGELIST | 检索与选项卡控件关联的图像列表。③参数:0;④数据:0 |
选卡设置图表 | 0x1303 | TCM_SETIMAGELIST | 将图像列表分配给选项卡控件。③参数:0;④数据:图表 |
选卡获取数量 | 0x1304 | TCM_GETITEMCOUNT | 检索选项卡控件中选项卡的数目。③参数:0;④数据:0 |
选卡获取项目 | 0x1305 | TCM_GETITEMA | 检索选项卡的属性信息。③参数:序号;④数据:选卡项目类 |
选卡设置项目 | 0x1306 | TCM_SETITEMA | 设置选项卡的部分或全部属性。③参数:序号;④数据:选卡项目类 |
选卡插入项目 | 0x1307 | TCM_INSERTITEMA | 在选项卡控件中插入新选项卡。③参数:序号;④数据:选卡项目类 |
选卡删除项目 | 0x1308 | TCM_DELETEITEM | 从选项卡控件中移除项。③参数:序号;④数据:0 |
选卡清除项目 | 0x1309 | TCM_DELETEALLITEMS | 从选项卡控件中移除所有项。③参数:0;④数据:0 |
选卡获取边框 | 0x130A | TCM_GETITEMRECT | 检检索选项卡控件中选项卡的边框。③参数:序号;④数据:矩形类 |
选卡获取选项 | 0x130B | TCM_GETCURSEL | 确定选项卡控件中当前选定的选项卡。③参数:0;④数据:0 |
选卡设置选项 | 0x130C | TCM_SETCURSEL | 在选项卡控件中选择一个选项卡。③参数:序号;④数据:0 |
选卡获取点位 | 0x130D | TCM_HITTEST | 确定哪个选项卡位于指定的屏幕位置。③参数:0;④数据:选卡点框类 |
选卡定义长度 | 0x130E | TCM_SETITEMEXTRA | 设置每个选项卡定义数据保留的字节数(默认4)。③参数:数值;④数据:0 |
选卡计算边框 | 0x1328 | TCM_ADJUSTRECT | 计算选项卡控件的显示区域或窗口矩形。③参数:真=窗口,假=区域;④数据:矩形类 |
选卡设置大小 | 0x1329 | TCM_SETITEMSIZE | 设置选项卡的宽度和高度。③参数:0;④数据:宽/高 |
选卡移除图像 | 0x132A | TCM_REMOVEIMAGE | 从选项卡控件的图像列表中移除图像。③参数:序号;④数据:0 |
选卡设置边距 | 0x132B | TCM_SETPADDING | 设置每个选项卡图标和标签周围的空间大小。③参数:0;④数据:宽/高 |
选卡获取行数 | 0x132C | TCM_GETROWCOUNT | 检索选项卡控件中选项卡的当前行数。③参数:0;④数据:0 |
选卡获取控件 | 0x132D | TCM_GETTOOLTIPS | 检索与选项卡控件关联的工具提示控件的句柄。③参数:0;④数据:0 |
选卡设置控件 | 0x132E | TCM_SETTOOLTIPS | 将工具提示控件分配给选项卡控件。③参数:控件;④数据:0 |
选卡获取焦点 | 0x132F | TCM_GETCURFOCUS | 返回选项卡控件中具有焦点的项的索引。③参数:0;④数据:0 |
选卡设置焦点 | 0x1330 | TCM_SETCURFOCUS | 将焦点设置为选项卡控件中的指定选项卡。③参数:序号;④数据:0 |
选卡最小宽度 | 0x1331 | TCM_SETMINTABWIDTH | 设置选项卡控件中项的最小宽度。③参数:0;④数据:宽度,-1默认 |
选卡重置项目 | 0x1332 | TCM_DESELECTALL | 重置选项卡控件中的项。③参数:真=选中除外,假=全部;④数据:0 |
选卡突出项目 | 0x1333 | TCM_HIGHLIGHTITEM | 设置选项卡项的突出显示状态。③参数:序号;④数据:真=突出,假=不突出 |
选卡设置扩展 | 0x1334 | TCM_SETEXTENDEDSTYLE | 设置选项卡控件将使用的扩展样式。③参数:选项0=全改;④数据:样式,1绘制分隔符,2支持拖放 |
选卡获取扩展 | 0x1335 | TCM_GETEXTENDEDSTYLE | 检索当前用于选项卡控件的扩展样式。③参数:0;④数据:0 |
选卡读取项目 | 0x133C | TCM_GETITEMW | 检索选项卡的属性信息。③参数:序号;④数据:选卡项目类 |
选卡修改项目 | 0x133D | TCM_SETITEMW | 设置选项卡的部分或全部属性。③参数:序号;④数据:选卡项目类 |
选卡穿插项目 | 0x133E | TCM_INSERTITEMW | 在选项卡控件中插入新选项卡。③参数:序号;④数据:选卡项目类 |
控件设置宽字 | 0x2005 | CCM_SETUNICODEFORMAT | 设置控件的 Unicode 字符格式标志。③参数:是否宽字;④数据:0; |
控件获取宽字 | 0x2006 | CCM_GETUNICODEFORMAT | 获取控件的 Unicode 字符格式标志。③参数:0;④数据:0; |
选卡项目类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
选卡项目类 | TCITEMA | 28 | 指定或接收选项卡项的属性。 |
选卡项目类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
掩码 | mask | 整数 | 指定要检索或设置的成员的值。8=反向显示文本 |
状态 | dwState | 整数 | 指定项的当前状态。掩码:0x10 |
状态掩码 | dwStateMask | 整数 | 指定状态成员的有效信息。1=项已选定,2项已突出显示 |
文字 | pszText | 整数 | 设置或接收选项卡的文本缓冲区。掩码:1 |
字长 | cchTextMax | 整数 | 指向的缓冲区的大小(以字节为单位)。 |
图像 | iImage | 整数 | 选项卡控件的图像列表中的索引;没有则为-1。掩码:2 |
定义 | lParam | 整数 | 与选项卡控件项关联的应用程序定义数据。掩码:8 |
选卡点框类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
选卡点框类 | TCHITTESTINFO | 12 | 包含有关命中测试的信息。 |
选卡点框类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
左边 | 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 | 消息回调(帮助类) | 处理发送到模式或无模式对话框的消息。 |
模式对话框——通知消息
中文名字 | 常量 | 英文名称 | 作用解释 |
切换焦点 | $0028 | WM_NEXTDLGCTL | 发送本消息给一个对话框程序窗口过程,以便在各控件间设置键盘焦点位置。③参数:0下个控件,非0上个控件;④数据:0参数为方向,非0参数为控件对象 |
切换控件 | $0087 | WM_GETDLGCODE | 发送本消息给某个与对话框程序关联的控件,系统控制方位键和TAB键使输入进入该控件。③参数:键码;④数据:消息类 |
窗口初始 | $0110 | WM_INITDIALOG | 在某对话框程序被显示前发送本消息给该对话框程序,通常用本消息对控件进行一些初始化工作和执行其它任务。③参数:控件;④数据:其它 |
模框空载 | $0121 | WM_ENTERIDLE | 当一个模态对话框或菜单进入空闲状态时,发送本消息给它的所有者,就是在处理完先前的消息后,消息队列为空时。③参数:0对话框,2菜单;④数据:窗口对象 |
绘制对话 | $0136 | WM_CTLCOLORDLG | 绘制对话框的背景色③参数:设备;④数据:控件 |
模式对话框——发送消息
中文名字 | 常量 | 英文名称 | 作用解释 |
对话取号 | 0x400 | DM_GETDEFID | 检索对话框的默认按钮控件的标识符。③参数:0;④数据:0 |
对话改号 | 0x401 | DM_SETDEFID | 更改对话框的默认按钮的标识符。③参数:标识符;④数据:0 |
对话定位 | 0x402 | DM_GETDEFID | 重新定位顶级对话框,使其适合桌面区域。③参数:0;④数据:0 |
消息框类
中文名字 | 英文名称 | 长度 | 作用解释 |
消息框类 | MSGBOXPARAMS | 40 | 包含有显示一个消息(对话框信息)的数据结构。 |
消息框类——成员表 |
长度 | cbSize | 整数 | 这个结构的大小,以字节计算。 |
窗口 | hwndOwner | 整数 | 对话框所有者窗口的句柄。 |
实例 | hInstance | 整数 | 对话框所有者实例的句柄 |
内容 | lpszText | 整数 | 包含着消息要显示的内容。 |
标题 | lpszCaption | 整数 | 包含着消息的标题,默认用“错误”作为标题。 |
风格 | dwStyle | 整数 | 设置对话框的内容和行为。 |
图标 | lpszIcon | 整数 | 图标资源的ID。字符串或数字 |
帮助 | dwContextHelpId | 整数 | 帮助内容的ID。如果一个Help事件发生,这个值在消息框发送到所有者窗口或回调函数 |
回调 | lpfnMsgBoxCallback | 整数 | 一个处理消息框帮助信息的回调函数的指针。 |
语言 | dwLanguageId | 整数 | 包含在原先定义的按钮中的文本的语言。中文4,英文9。默认是根据系统的语言 |
对话框类
中文名字 | 英文名称 | 长度 | 作用解释 |
对话框类 | DLGTEMPLATE | 18 | 定义对话框的尺寸和样式。始终是对话框的标准模板中的第一个结构,还指定对话框中的控件数 |
对话框类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
风格 | style | 整数 | 对话框的样式。是窗口样式值和对话框样式值的组合 |
扩展 | dwExtendedStyle | 整数 | 窗口的扩展样式。不用于创建对话框,而用它来创建其他类型的窗口。 |
项目 | cdit | 整形 | 对话框中的项数。 |
左 | x | 整形 | 对话框左上角的 x 坐标 |
顶 | y | 整形 | 对话框左上角的 y 坐标 |
宽 | cx | 整形 | 对话框的宽度。 |
高 | cy | 整形 | 对话框的高度 |
对话项类
中文名字 | 英文名称 | 长度 | 作用解释 |
对话项类 | DLGITEMTEMPLATE | 18 | 定义对话框中控件的尺寸和样式。一个或多个结构与对话框类组合在一起,形成对话框的标准模板。 |
对话项类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
风格 | style | 整数 | 对话框的样式。是窗口样式值和对话框样式值的组合 |
扩展 | dwExtendedStyle | 整数 | 窗口的扩展样式。不用于创建对话框,而用它来创建其他类型的窗口。 |
左 | x | 整形 | 对话框左上角的 x 坐标 |
顶 | y | 整形 | 对话框左上角的 y 坐标 |
宽 | cx | 整形 | 对话框的宽度。 |
高 | cy | 整形 | 对话框的高度 |
标识 | id | 整形 | 控件标识符编号。 |
对话框样式
中文名字 | 英文名称 | 数值 | 作用解释 |
绝对坐标 | DS_ABSALIGN | 1 | 指示对话框的坐标是屏幕坐标。 如果未指定此样式,则坐标为客户端坐标。 |
对话置顶 | DS_SYSMODAL | 2 | 此样式已过时。创建具有 WS_EX_TOPMOST样式的 对话框。 此样式不会阻止用户访问桌面上的其他窗口。 |
三维外观 | DS_3DLOOK | 4 | 已过时。 系统会自动将三维外观应用于应用程序创建的对话框。 |
兼容字体 | DS_FIXEDSYS | 8 | 使对话框使用16位DOS系统兼容的单空间字体。Windows3.0 以下。 |
忽略错误 | DS_NOFAILCREATE | 0x10 | 创建对话框,即使发生错误,例如,如果无法创建子窗口或系统无法为编辑控件创建特殊数据段。 |
数据内存 | DS_LOCALEDIT | 0x20 | 用于16位程序。对话框中的编辑控件从应用程序的数据段分配内存。 |
对话字体 | DS_SETFONT | 0x40 | 指示对话框模板的标题和控件中的文本的字体数据。 |
系统字体 | DS_SHELLFONT | 0x48 | 指示对话框应使用系统字体。扩展对话框模板的 字样 成员必须设置为 MS Shell Dlg。 |
模式对话 | DS_MODALFRAME | 0x80 | 使用模式对话框框架创建一个对话框,该框可通过指定标题栏和窗口菜单结合使用。 |
不显空载 | DS_NOIDLEMSG | 0x100 | 禁止显示 模框空载 消息,否则系统将在显示对话框时发送给对话框所有者的消息。 |
对话前台 | DS_SETFOREGROUND | 0x200 | 将对话框引入前台。无论所有者窗口是否为前台窗口,此样式都是前台的模式对话框。 |
制表控制 | DS_CONTROL | 0x0400 | 允许用户在子对话框的控件窗口中按 Tab 键、使用其快捷键等。 |
显示居中 | DS_CENTER | 0x0800 | 将对话框在包含所有者窗口的监视器工作区中居中。 |
光标居中 | DS_CENTERMOUSE | 0x1000 | 鼠标光标上的对话框居中。 |
问号标题 | DS_CONTEXTHELP | 0x2000 | 在对话框的标题栏中包括问号。单击时光标变成问号。随后单击对话框中的控件将收到帮助消息。 |
帮助类
中文名字 | 英文名称 | 长度 | 作用解释 |
帮助类 | HELPINFO | 18 | 包含有关已为其请求上下文相关帮助的项的信息。 |
帮助类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | 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=标识}
结束
中文名字 | 常量数值 | 英文名称 | 释义 |
控件单击左键 | -2 | NM_CLICK | 用户在控件上点击了鼠标左键 |
控件双击左键 | -3 | NM_DBLCLK | 用户在控件上双击了鼠标左键 |
控件单击右键 | -5 | NM_RCLICK | 用户在控件上点击了鼠标右键 |
控件双击右键 | -6 | NM_RDBLCLK | 用户在控件上双击了鼠标右键 |
控件自行绘制 | -12 | NM_CUSTOMDRAW | 通知控件的父窗口有关自定义绘制操作的信息。 |
控件按下键盘 | -15 | NM_KEYDOWN | 控件获得键盘焦点并按下某键 |
控件释放鼠标 | -16 | NM_RELEASEDCAPTURE | 控件要释放鼠标捕捉 |
控件键入字符 | -18 | NM_CHAR | 字符键被处理后由控件发送 |
控件工具提示 | -19 | NM_TOOLTIPSCREATED | 通知控件的父窗口控件已创建工具提示控件。④数据:NMTOOLTIPSCREATED 结构 |
控件鼠标左键 | -20 | NM_LDOWN | 通知控件的父窗口已按下鼠标左键。 |
工具按钮信息 | -700 | TBN_GETBUTTONINFOA | 获取工具栏的自定义信息 |
工具拖起按钮 | -701 | TBN_BEGINDRAG | 用户已开始拖动工具栏的某个按钮 |
工具拖放按钮 | -702 | TBN_ENDDRAG | 用户已停止拖动工具栏的某个按钮 |
工具开始定义 | -703 | TBN_BEGINADJUST | 用户已开始自定义一个工具栏 |
工具结束定义 | -704 | TBN_ENDADJUST | 用户已停止自定义一个工具栏 |
工具已经重置 | -705 | TBN_RESET | 用户在自定义工具栏对话框中已经对工具栏进行重置了 |
工具可插左侧 | -706 | TBN_QUERYINSERT | 按钮是否可被插入到指定按钮的左侧 |
工具可被删除 | -707 | TBN_QUERYDELETE | 用户自定义工具栏时一个按钮是否可被删除 |
工具已被改变 | -708 | TBN_TOOLBARCHANGE | 用户已经定制完一个工具栏 |
工具选择帮助 | -709 | TBN_CUSTHELP | 用户已经选择了自定义工具栏对话框上的帮助按钮 |
工具单击下拉 | -710 | TBN_DROPDOWN | 当用户单击下拉按钮时,工具栏控件发送。 |
工具放置目标 | -712 | TBN_GETOBJECT | 请求放置目标对象。 |
工具热项更改 | -713 | TBN_HOTITEMCHANGE | 突出显示的热 () 项更改 |
工具拖出按钮 | -714 | TBN_DRAGOUT | 用户单击按钮,然后将光标移出按钮 |
工具按钮删除 | -715 | TBN_DELETINGBUTTON | 按钮即将被删除 |
工具显示信息 | -716 | TBN_GETDISPINFOA | 检索工具栏项的显示信息 |
工具信息显示 | -717 | TBN_GETDISPINFOW | 检索工具栏项的显示信息 |
工具提示信息 | -718 | TBN_GETINFOTIPA | 检索工具栏项的信息提示信息。 |
工具信息提示 | -719 | TBN_GETINFOTIPW | 检索工具栏项的信息提示信息。 |
工具按钮定义 | -720 | TBN_GETBUTTONINFOW | 获取工具栏的自定义信息 |
工具正在还原 | -721 | TBN_RESTORE | 通知工具栏的父窗口正在还原工具栏。 |
工具正在保存 | -722 | TBN_SAVE | 通知工具栏的父窗口正在保存工具栏。 |
工具定义开始 | -723 | TBN_INITCUSTOMIZE | 通知工具栏的父窗口自定义已开始。 |
工具热项要改 | -724 | TBN_WRAPHOTITEM | 使用两个或多个工具栏通知应用程序热项即将更改。 |
工具查快捷键 | -725 | TBN_DUPACCELERATOR | 确定加速键是否可以在两个或多个活动工具栏上使用。 |
工具快捷序号 | -726 | TBN_WRAPACCELERATORA | 请求与指定快捷键字符对应的一个或多个工具栏中的按钮索引。 |
工具拖动显示 | -727 | TBN_DRAGOVER | 确定是否应为拖动的按钮发送突出显示消息。 |
工具快捷索引 | -728 | TBN_MAPACCELERATORW | 请求工具栏中对应于指定快捷键字符的按钮的索引。 |
发送消息——常数表 |
工具启用按钮 | 0x401 | TB_ENABLEBUTTON | 启用或禁用工具栏中的指定按钮。③参数:标识;④数据:假=禁用,真=启用 |
工具选择按钮 | 0x402 | TB_CHECKBUTTON | 选中或取消选中工具栏中的给定按钮。③参数:标识;④数据:假=不检查,真=检查 |
工具按下按钮 | 0x403 | TB_PRESSBUTTON | 按下或释放工具栏中的指定按钮。③参数:标识;④数据:假=释放,真=按下 |
工具隐藏按钮 | 0x404 | TB_HIDEBUTTON | 隐藏或显示工具栏中的指定按钮。③参数:标识;④数据:假=显示,真=隐藏 |
工具不明按钮 | 0x405 | TB_INDETERMINATE | 设置或清除工具栏中指定按钮的不确定状态。③参数:标识;④数据:假=清除,真=不确定(暗灰) |
工具突出按钮 | 0x406 | TB_MARKBUTTON | 设置工具栏控件中给定按钮的突出显示状态。③参数:标识;④数据:假=平常,真=突出 |
工具按钮可用 | 0x409 | TB_ISBUTTONENABLED | 确定工具栏中的指定按钮是否已启用。③参数:标识;④数据:0 |
工具按钮已选 | 0x40A | TB_ISBUTTONCHECKED | 确定是否选中工具栏中的指定按钮。③参数:标识;④数据:0 |
工具按钮按下 | 0x40B | TB_ISBUTTONPRESSED | 确定是否按下工具栏中的指定按钮。③参数:标识;④数据:0 |
工具按钮隐藏 | 0x40C | TB_ISBUTTONHIDDEN | 确定是否隐藏工具栏中的指定按钮。③参数:标识;④数据:0 |
工具按钮不明 | 0x40D | TB_ISBUTTONINDETERMINATE | 确定工具栏中的指定按钮是否不确定。③参数:标识;④数据:0 |
工具按钮突出 | 0x40E | TB_ISBUTTONHIGHLIGHTED | 检查工具栏按钮的突出显示状态。③参数:标识;④数据:0 |
工具设置状态 | 0x411 | TB_SETSTATE | 设置工具栏中指定按钮的状态。③参数:标识;④数据:1选中,2按下,4可用,8隐藏,16灰显,32换行,64省略号,128标记 |
工具获取状态 | 0x412 | TB_GETSTATE | 检索有关工具栏中指定按钮是启用、按下还是选中。③参数:标识;④数据:0 |
工具添加图像 | 0x413 | TB_ADDBITMAP | 将一个或多个图像添加到按钮图像列表中。③参数:数量;④数据:工具图像类 |
工具添加按钮 | 0x414 | TB_ADDBUTTONSA | 将一个或多个按钮添加到工具栏。③参数:数量;④数据:工具按钮类 |
工具插入按钮 | 0x415 | TB_INSERTBUTTONA | 在工具栏中插入按钮。③参数:序号;④数据:工具按钮类 |
工具删除按钮 | 0x416 | TB_DELETEBUTTON | 从工具栏中删除按钮。③参数:序号;④数据:0 |
工具获取按钮 | 0x417 | TB_GETBUTTON | 检索有关工具栏中指定按钮的信息。③参数:序号;④数据:工具按钮类 |
工具按钮数量 | 0x418 | TB_BUTTONCOUNT | 检索工具栏中当前按钮的计数。③参数:0;④数据:0 |
工具按钮序号 | 0x419 | TB_COMMANDTOINDEX | 检索与指定命令标识符关联的按钮的序号。③参数:标识;④数据:0 |
工具保存状态 | 0x41A | TB_SAVERESTOREA | 启动保存或还原工具栏状态。③参数:真=保存,假=还原;④数据:工具保存类 |
工具自定义框 | 0x41B | TB_CUSTOMIZE | 显示“自定义工具栏”对话框。③参数:0;④数据:0 |
工具添加字符 | 0x41C | TB_ADDSTRINGA | 将新字符串添加到工具栏的字符串池。③参数:0=字符串,实例=资源;④数据:资源标识或字符数组 |
工具按钮边框 | 0x41D | TB_GETITEMRECT | 检索工具栏中按钮的边框。③参数:序号;④数据:矩形类 |
工具结构大小 | 0x41E | TB_BUTTONSTRUCTSIZE | 指定 工具按钮类的大小。③参数:大小;④数据:0 |
工具按钮大小 | 0x41F | TB_SETBUTTONSIZE | 设置工具栏上按钮的大小。③参数:0;④数据:宽高各16位 |
工具图像大小 | 0x420 | TB_SETBITMAPSIZE | 设置要添加到工具栏的位图图像的大小。③参数:0;④数据:宽高各16位 |
工具自动调整 | 0x421 | TB_AUTOSIZE | 导致调整工具栏的大小。③参数:0;④数据:0 |
工具获取提示 | 0x423 | TB_GETTOOLTIPS | 检索与工具栏关联的工具提示控件的句柄。③参数:0;④数据:0 |
工具设置提示 | 0x424 | TB_SETTOOLTIPS | 将工具提示控件与工具栏相关联。③参数:控件;④数据:0 |
工具设置父窗 | 0x425 | TB_SETPARENT | 设置工具栏控件向其发送通知消息的窗口。③参数:窗口;④数据:0 |
工具设置行数 | 0x427 | TB_SETROWS | 设置工具栏中按钮的行数。③参数:低16位行数,高位真=可超行;④数据:矩形(改后边框) |
工具获取行数 | 0x428 | TB_GETROWS | 获取工具栏中按钮的行数。③参数:0;④数据:0 |
工具设置标识 | 0x42A | TB_SETCMDID | 设置工具栏按钮的命令标识符。③参数:序号;④数据:标识 |
工具更换图像 | 0x42B | TB_CHANGEBITMAP | 更改工具栏中按钮的位图。③参数:标识;④数据:图像序号 |
工具图像序号 | 0x42C | TB_GETBITMAP | 检索与工具栏中的按钮关联的位图的索引。③参数:标识;④数据:0 |
工具按钮文本 | 0x42D | TB_GETBUTTONTEXTA | 检索工具栏上按钮的显示文本。③参数:标识;④数据:内容 |
工具替换图像 | 0x42E | TB_REPLACEBITMAP | 将现有位图替换为新位图。③参数:0;④数据:工具替换类 |
工具设置缩进 | 0x42F | TB_SETINDENT | 设置工具栏控件中第一个按钮的缩进。③参数:像素值;④数据:0 |
工具设置图表 | 0x430 | TB_SETIMAGELIST | 设置工具栏按钮的图像列表。③参数:0序号;④数据:图像列表 |
工具获取图表 | 0x431 | TB_GETIMAGELIST | 获取工具栏按钮的图像列表。③参数:0;④数据:0 |
工具加载图表 | 0x432 | TB_LOADIMAGES | 加载系统定义的图像列表。③参数:0标准小图,1标准大图,系统图像列表;④数据:-1; |
工具获取边框 | 0x433 | TB_GETRECT | 检索指定工具栏按钮的边框。③参数:标识;④数据:矩形 |
工具设置热图 | 0x434 | TB_SETHOTIMAGELIST | 设置工具栏显示热按钮的图像列表。③参数:0;④数据:图像列表 |
工具获取热图 | 0x435 | TB_GETHOTIMAGELIST | 获取工具栏显示热按钮的图像列表。③参数:0;④数据:0 |
工具设置禁图 | 0x436 | TB_SETDISABLEDIMAGELIST | 设置工具栏显示禁用按钮的图像列表。③参数:0;④数据:图表 |
工具获取禁图 | 0x437 | TB_GETDISABLEDIMAGELIST | 检索工具栏显示非活动按钮的图像列表。③参数:0;④数据:0 |
工具设置样式 | 0x438 | TB_SETSTYLE | 设置工具栏控件的样式。③参数:0;④数据:样式 |
工具获取样式 | 0x439 | TB_GETSTYLE | 获取工具栏控件的样式。③参数:0;④数据:0 |
工具按钮宽高 | 0x43A | TB_GETBUTTONSIZE | 检索工具栏按钮当前的大小。③参数:0;④数据:0 |
工具按钮宽度 | 0x43B | TB_SETBUTTONWIDTH | 设置工具栏控件中的最小和最大按钮宽度。③参数:0;④数据:最小/最大 |
工具限最多行 | 0x43C | TB_SETMAXTEXTROWS | 设置工具栏按钮上显示的文本行的最大数量。③参数:行数;④数据:0 |
工具取最多行 | 0x43D | TB_GETTEXTROWS | 检索工具栏按钮上可显示的最大文本行数。③参数:0;④数据:0 |
工具获取对象 | 0x43E | TB_GETOBJECT | 检索工具栏控件的拖放目标对象。③参数:拖放标识;④数据:@接口 |
工具获取信息 | 0x43F | TB_GETBUTTONINFOW | 检索工具栏中的现有按钮的信息。③参数:标识;④数据:工具信息类 |
工具设置信息 | 0x440 | TB_SETBUTTONINFOW | 设置工具栏中的现有按钮的信息。③参数:标识;④数据:工具信息类 |
工具读取信息 | 0x441 | TB_GETBUTTONINFOA | 检索工具栏中的现有按钮的信息。③参数:标识;④数据:工具信息类 |
工具修改信息 | 0x442 | TB_SETBUTTONINFOA | 设置工具栏中的现有按钮的信息。③参数:标识;④数据:工具信息类 |
工具按钮插入 | 0x443 | TB_INSERTBUTTONW | 在工具栏中插入按钮。③参数:序号;④数据:工具按钮类 |
工具按钮添加 | 0x444 | TB_ADDBUTTONSA | 将一个或多个按钮添加到工具栏。③参数:数量;④数据:工具按钮类 |
工具获取点位 | 0x445 | TB_HITTEST | 确定某个点在工具栏控件中的位置。③参数:0;④数据:坐标类;返回负数不在按钮内,否则是按钮索引 |
工具绘制标志 | 0x446 | TB_SETDRAWTEXTFLAGS | 设置工具栏的文本绘制标志。③参数:DT_位标志;④数据:DT_方式标志 |
工具获取热项 | 0x447 | TB_GETHOTITEM | 检索工具栏中热项的索引。③参数:0;④数据:0 |
工具设置热项 | 0x448 | TB_SETHOTITEM | 设置工具栏中的热项。③参数:序号,-1取消;④数据:0 |
工具设置突出 | 0x449 | TB_SETANCHORHIGHLIGHT | 设置工具栏的定位点突出显示设置。③参数:真=启用,假=禁用;④数据:0 |
工具获取突出 | 0x44A | TB_GETANCHORHIGHLIGHT | 检索工具栏的定位点突出显示设置。③参数:0;④数据:0 |
工具按钮文字 | 0x44B | TB_GETBUTTONTEXTW | 检索工具栏上按钮的显示文本。③参数:标识;④数据:内容 |
工具保存还原 | 0x44C | TB_SAVERESTOREW | 启动保存或还原工具栏状态。③参数:真=保存,假=还原;④数据:工具保存类 |
工具添加字组 | 0x44D | TB_ADDSTRINGW | 将新字符串添加到工具栏的字符串池。③参数:0=字符串,实例=资源;④数据:资源标识或字符数组 |
工具快捷键号 | 0x44E | TB_MAPACCELERATORA | 确定对应于指定加速键字符的按钮的编号。③参数:快捷键;④数据:@编号 |
工具获取标记 | 0x44F | TB_GETINSERTMARK | 检索工具栏的当前插入标记。③参数:0;④数据:工具标记类 |
工具设置标记 | 0x450 | TB_SETINSERTMARK | 设置工具栏的当前插入标记。③参数:0;④数据:工具标记类 |
工具取点标记 | 0x451 | TB_INSERTMARKHITTEST | 检索工具栏中点的插入标记信息。③参数:坐标类;④数据:工具标记类 |
工具移动按钮 | 0x452 | TB_MOVEBUTTON | 将按钮从一个索引移到另一个索引。③参数:原序号;④数据:新序号 |
工具总体大小 | 0x453 | TB_GETMAXSIZE | 检索工具栏中所有可见的按钮和分隔符的总大小。③参数:0;④数据:尺寸类 |
工具设置扩展 | 0x454 | TB_SETEXTENDEDSTYLE | 设置工具栏控件的扩展样式。③参数:0;④数据:扩展样式 |
工具获取扩展 | 0x455 | TB_GETEXTENDEDSTYLE | 获取工具栏控件的扩展样式。③参数:0;④数据:0 |
工具获取填充 | 0x456 | TB_GETPADDING | 获取工具栏有自动大小样式的填充区域大小。③参数:0;④数据:0 |
工具设置填充 | 0x457 | TB_SETPADDING | 设置工具栏有自动大小样式的填充区域大小。③参数:0;④数据:宽/高 |
工具改标记色 | 0x458 | TB_SETINSERTMARKCOLOR | 设置用于绘制工具栏的插入标记的颜色。③参数:0;④数据:颜色 |
工具取标记色 | 0x459 | TB_GETINSERTMARKCOLOR | 检索用于绘制工具栏的插入标记的颜色。③参数:0;④数据:0 |
工具快捷编号 | 0x45A | TB_MAPACCELERATORW | 确定对应于指定加速键字符的按钮的编号。③参数:快捷键;④数据:@编号 |
工具获取文本 | 0x45B | TB_GETSTRINGW | 从工具栏的字符串池中检索字符串。③参数:长度/序号;④数据:内容 |
工具获取文字 | 0x45C | TB_GETSTRINGA | 从工具栏的字符串池中检索字符串。③参数:长度/序号;④数据:内容 |
工具多列边界 | 0x45D | TB_SETBOUNDINGSIZE | 设置多列工具栏控件的边界大小。③参数:0;④数据:尺寸类(忽略宽度) |
工具修改热项 | 0x45E | TB_SETHOTITEM2 | 设置工具栏中的热项。③参数:序号,-1取消;④数据:热项修改标志 |
工具快捷计数 | 0x45F | TB_HASACCELERATOR | 检索具有指定快捷键字符的工具栏按钮计数。③参数:键字;④数据:@计数 |
工具设置间距 | 0x460 | TB_SETLISTGAP | 设置特定工具栏上的工具栏按钮之间的距离。③参数:像素值;④数据:0 |
工具取图表数 | 0x462 | TB_GETIMAGELISTCOUNT | 获取与工具栏关联的图像列表数。③参数:0;④数据:0 |
工具理想大小 | 0x463 | TB_GETIDEALSIZE | 获取工具栏的理想大小。③参数:真=高度,假=宽度;④数据:尺寸类 |
工具获取指标 | 0x465 | TB_GETMETRICS | 检索工具栏控件的指标。③参数:0;④数据:工具指标类 |
工具设置指标 | 0x466 | TB_SETMETRICS | 设置工具栏控件的指标。③参数:0;④数据:工具指标类 |
工具下拉边框 | 0x467 | TB_GETITEMDROPDOWNRECT | 获取具有下拉样式的工具栏项的下拉窗口边框。③参数:序号;④数据:边框 |
工具设置按图 | 0x468 | TB_SETPRESSEDIMAGELIST | 设置工具栏按下状态的按钮的图像列表。③参数:0;④数据:图表 |
工具获取按图 | 0x469 | TB_GETPRESSEDIMAGELIST | 获取工具栏按下状态的按钮的图像列表。③参数:0;④数据:0 |
控件设置配色 | 0x2002 | CCM_SETCOLORSCHEME | 此消息用于设置控件的颜色配置。③参数:0;④数据:COLORSCHEME; |
控件获取配色 | 0x2003 | CCM_GETCOLORSCHEME | 此消息用于获取控件的颜色配置。③参数:0;④数据:COLORSCHEME; |
控件设置宽字 | 0x2005 | CCM_SETUNICODEFORMAT | 设置控件的 Unicode 字符格式标志。③参数:是否宽字;④数据:0; |
控件获取宽字 | 0x2006 | CCM_GETUNICODEFORMAT | 获取控件的 Unicode 字符格式标志。③参数:0;④数据:0; |
控件设置样式 | 0x200B | CCM_SETWINDOWTHEME | 此消息用于设置控件的视觉样式。③参数:0;④数据:样式(宽字符); |
控件启用缩放 | 0x200C | CCM_DPISCALE | 树表、表格、强组合框、标题、按钮、工具栏、动画启用dpi缩放。③参数:真;④数据:0; |
工具栏——控件样式:
中文名字 | 英文名称 | 数值 | 释义 |
顶部左侧 | CCS_TOP | 1 | 使控件自身位于父窗口工作区的顶部,并将宽度设置为与父窗口的宽度相同。 默认情况下,工具栏具有此样式。 |
缩放调整 | CCS_NOMOVEY | 2 | 导致控件在响应 WM_SIZE 消息时水平(而不是垂直)调整大小并移动自身。 如果使用CCS_NORESIZE,则此样式不适用。 默认情况下,标题窗口具有此样式。 |
底部右侧 | CCS_BOTTOM | 3 | 使控件将自身定位在父窗口工作区的底部,并将宽度设置为与父窗口的宽度相同。 默认情况下,状态窗口具有此样式。 |
禁止缩放 | CCS_NORESIZE | 4 | 防止控件在设置其初始大小或新大小时使用默认宽度和高度。 相反,控件使用在创建或调整大小的请求中指定的宽度和高度。 |
自由位置 | CCS_NOPARENTALIGN | 8 | 防止控件自动移动到父窗口的顶部或底部。 相反,控件会将其位置保留在父窗口中,尽管更改了父窗口的大小。 如果还使用了CCS_TOP或CCS_BOTTOM,则会将高度调整为默认值,但位置和宽度保持不变。 |
拖动调整 | CCS_ADJUSTABLE | 0x20 | 启用工具栏的内置自定义功能,使用户能够将按钮拖动到新位置,或通过将按钮从工具栏上拖动来删除按钮。 此外,用户可以双击工具栏以显示“ 自定义工具栏 ”对话框,使用户能够添加、删除和重新排列工具栏按钮。 |
禁止突显 | CCS_NODIVIDER | 0x40 | 防止在控件顶部绘制双像素的突出显示。 |
垂直显示 | CCS_VERT | 0x80 | 版本 4.70。 使控件垂直显示。 |
垂直左侧 | CCS_LEFT | 0x81 | 版本 4.70。 使控件垂直显示在父窗口的左侧。 |
垂直缩放 | CCS_NOMOVEX | 0x82 | 版本 4.70。 导致控件调整大小并垂直移动自身,而不是水平移动,以响应 WM_SIZE 消息。 如果使用CCS_NORESIZE,则此样式不适用。 |
垂直右侧 | CCS_RIGHT | 0x83 | 版本 4.70。 使控件垂直显示在父窗口的右侧。 |
提示文本 | TBSTYLE_TOOLTIPS | 0x100 | 创建一个工具提示控件,应用程序可以使用该控件显示工具栏中按钮的描述性文本。 |
多行按钮 | TBSTYLE_WRAPABLE | 0x200 | 创建可以包含多行按钮的工具栏。 |
Alt拖动 | TBSTYLE_ALTDRAG | 0x400 | 按住 Alt 键的同时拖动工具栏按钮来更改工具栏按钮的位置。否则拖动按钮时按住 Shift 键。 |
平面效果 | TBSTYLE_FLAT | 0x800 | 创建平面工具栏。在平面工具栏中,工具栏和按钮都是透明的,并且已启用热跟踪。 |
文本置右 | TBSTYLE_LIST | 0x1000 | 创建一个平面工具栏,其按钮文本在位图右侧。 |
自绘通知 | TBSTYLE_CUSTOMERASE | 0x2000 | 当工具栏处理 擦除背景 消息时,生成 自绘控件 通知代码。 |
支持拖放 | TBSTYLE_REGISTERDROP | 0x4000 | 生成 获取对象 通知代码,以在光标经过工具栏按钮时请求放置目标对象。 |
背景透明 | TBSTYLE_TRANSPARENT | 0x8000 | 创建透明工具栏。在透明工具栏中,工具栏是透明的,但按钮不是。 |
工具栏——系统定义的按钮图像列表:
英文名称 | 常量 | 释义 |
IDB_STD_SMALL_COLOR | 0 | 小的彩色标准位图。 |
IDB_STD_LARGE_COLOR | 1 | 大型彩色标准位图。 |
IDB_VIEW_SMALL_COLOR | 4 | 小的颜色视图位图。 |
IDB_VIEW_LARGE_COLOR | 5 | 大的颜色视图位图。 |
IDB_HIST_SMALL_COLOR | 8 | 小尺寸的 Windows 资源管理器位图。 |
IDB_HIST_LARGE_COLOR | 9 | 大尺寸的 Windows 资源管理器位图。 |
IDB_HIST_NORMAL | 12 | 处于正常状态的 Windows 资源管理器旅行按钮和收藏夹位图。 |
IDB_HIST_HOT | 13 | 处于热状态的 Windows 资源管理器旅行按钮和收藏夹位图。 |
IDB_HIST_DISABLED | 14 | 处于禁用状态的 Windows 资源管理器旅行按钮和收藏夹位图。 |
IDB_HIST_PRESSED | 15 | 处于按下状态的 Windows 资源管理器旅行按钮和收藏夹位图。 |
工具栏——标准小图和标准大图:
英文名称 | 常量 | 释义 |
STD_CUT | 0 | 剪切操作。 |
STD_COPY | 1 | 复制操作。 |
STD_PASTE | 2 | 粘贴操作。 |
STD_UNDO | 3 | 撤消操作。 |
STD_REDOW | 4 | 恢复操作。 |
STD_DELETE | 5 | 删除操作。 |
STD_FILENEW | 6 | 新建文件操作。 |
STD_FILEOPEN | 7 | 打开文件操作。 |
STD_FILESAVE | 8 | 保存文件操作。 |
STD_PRINTPRE | 9 | 打印预览操作。 |
STD_PROPERTIES | 10 | 属性操作。 |
STD_HELP | 11 | 帮助操作。 |
STD_FIND | 12 | 查找操作。 |
STD_REPLACE | 13 | 替换操作。 |
STD_PRINT | 14 | 打印操作。 |
工具栏——视窗小图和视窗大图:
英文名称 | 常量 | 释义 |
VIEW_LARGEICONS | 0 | 大图标视图。 |
VIEW_SMALLICONS | 1 | 小图标视图。 |
VIEW_LIST | 2 | 列表视图。 |
VIEW_DETAILS | 3 | 详细信息视图。 |
VIEW_SORTNAME | 4 | 按名称排序。 |
VIEW_SORTSIZE | 5 | 按大小排序。 |
VIEW_SORTDATE | 6 | 按日期排序。 |
VIEW_SORTTYPE | 7 | |
VIEW_PARENTFOLDER | 8 | 转到父文件夹。 |
VIEW_NETCONNECT | 9 | 连接到网络驱动器。 |
VIEW_NETDISCONNECT | 10 | 断开与网络驱动器的连接。 |
VIEW_NEWFOLDER | 11 | 新建文件夹。 |
VIEW_VIEWMENU | 12 | 菜单视图 |
工具栏——文件资源管理器小图和资源管理器大图:
英文名称 | 常量 | 释义 |
HIST_BACK | 0 | 退后。 |
HIST_FORWARD | 1 | 前进。 |
HIST_FAVORITES | 2 | 打开收藏夹文件夹。 |
HIST_ADDTOFAVORITES | 3 | 释义 |
HIST_VIEWTREE | 4 | 视图树。 |
工具栏——扩展样式:
英文名称 | 常量 | 释义 |
TBSTYLE_EX_DRAWDDARROWS | 1 | 允许按钮具有单独的下拉箭头。指定"下拉按钮"样式 |
TBSTYLE_EX_MULTICOLUMN | 2 | 为工具栏提供垂直方向,并将工具栏按钮组织成列。 |
TBSTYLE_EX_VERTICAL | 4 | 为工具栏提供垂直方向。 工具栏按钮从上到下流动,而不是水平排列。 |
TBSTYLE_EX_MIXEDBUTTONS | 8 | 允许你为所有按钮设置文本,未显示在按钮上的文本将自动用作按钮的工具提示文本。 |
TBSTYLE_EX_HIDECLIPPEDBUTTONS | 0x10 | 隐藏部分剪辑的按钮。 如果相邻的带区覆盖按钮的一部分,则不会显示该按钮。 |
TBSTYLE_EX_DOUBLEBUFFER | 0x80 | 对工具栏进行双重缓冲。 双重缓冲是一种检测工具栏何时更改的机制。 |
工具栏——热项修改原因标志:
英文名称 | 常量 | 释义 |
HICF_OTHER | 0 | 热项中的更改是由于无法确定的事件导致的。 |
HICF_MOUSE | 1 | 热项中的更改由鼠标事件导致。 |
HICF_ARROWKEYS | 2 | 热项中的更改是由箭头键引起的。 |
HICF_ACCELERATOR | 4 | 热项中的更改是由快捷键引起的。 |
HICF_DUPACCEL | 8 | 多个项具有相同的快捷键字符。 |
HICF_ENTERING | 0x10 | 设置了此标志,则不存在以前的热项 |
HICF_LEAVING | 0x20 | 设置了此标志,则不存在新的热项 |
HICF_RESELECT | 0x40 | 热项中的更改是由于用户输入已热项的快捷键导致的。 |
HICF_LMOUSE | 0x80 | 热项中的更改是左键单击鼠标事件导致的。 |
HICF_TOGGLEDROPDOWN | 0x100 | 版本 5.80。使按钮切换状态。 |
工具栏——按钮样式:
中文名字 | 英文名称 | 常量 | 释义 |
标准按钮 | TBSTYLE_BUTTON | 0 | 创建标准按钮。 |
是分隔条 | TBSTYLE_SEP | 1 | 创建一个分隔符,在按钮组之间提供小间隔。 |
复选按钮 | TBSTYLE_CHECK | 2 | 创建一个双状态推送按钮,该按钮在用户每次单击时在按下状态和非按下状态之间切换。 |
分组单选 | TBSTYLE_GROUP | 4 | 创建一个保持按下状态的按钮,直到按下组中的另一个按钮。 |
下拉按钮 | TBSTYLE_DROPDOWN | 8 | 创建可在单击按钮时显示列表的下拉样式按钮。 |
自动适应 | TBSTYLE_AUTOSIZE | 0x10 | 指定工具栏控件不应为按钮分配标准宽度。 相反,按钮的宽度将基于文本宽度加上按钮的图像计算。 |
不处理&符 | TBSTYLE_NOPREFIX | 0x20 | 指定按钮文本将不具有与之关联的加速键前缀。 |
标准按钮 | BTNS_BUTTON | 0 | 版本 5.80。创建标准按钮。此标志定义为 0,应用于表示未设置其他标志。 |
是分隔条 | BTNS_SEP | 1 | 版本 5.80。 创建一个分隔符,在按钮组之间提供小间隔。 具有此样式的按钮不接收用户输入。 |
复选按钮 | BTNS_CHECK | 2 | 版本 5.80。 创建一个双状态推送按钮,该按钮在用户每次单击时在按下状态和非按下状态之间切换。 按钮处于按下状态时具有不同的背景色。 |
分组单选 | BTNS_GROUP | 4 | 版本 5.80。 与 BTNS_CHECK 结合使用时,创建一个保持按下状态的按钮,直到按下组中的另一个按钮。 |
分组复选 | BTNS_CHECKGROUP | 6 | 版本 5.80。 创建一个在按下组中另一个按钮之前保持按下状态的按钮,类似于选项按钮 (也称为单选按钮) 。 |
下拉按钮 | BTNS_DROPDOWN | 8 | 版本 5.80。 创建可在单击按钮时显示列表的下拉样式按钮。 下拉按钮发送TBN_DROPDOWN通知代码,而不是用于普通按钮的 WM_COMMAND 消息。可以让通知处理程序显示选项列表。 |
自动适应 | BTNS_AUTOSIZE | 0x10 | 版本 5.80。指定工具栏控件不应为按钮分配标准宽度。 相反,按钮的宽度将基于文本宽度加上按钮的图像计算。 |
不处理&符 | BTNS_NOPREFIX | 0x20 | 版本 5.80。 指定按钮文本将不具有与之关联的加速键前缀。 |
显示文本 | BTNS_SHOWTEXT | 0x40 | 版本 5.80。指定应显示按钮文本。否则当光标悬停在按钮上时,工具栏控件将自动将其显示为工具提示。 |
下拉箭头 | BTNS_WHOLEDROPDOWN | 0x80 | 版本 5.80。指定按钮将具有下拉箭头,但不能作为单独的部分。 |
标准按钮 | TBSTYLE_BUTTON | 0 | 等效于 BTNS_BUTTON。 对 版本 4.72 及更早版本使用 TBSTYLE_BUTTON。 |
是分隔条 | TBSTYLE_SEP | 1 | 等效于 BTNS_SEP。 对 版本 4.72 及更早版本使用 TBSTYLE_SEP。 |
复选按钮 | TBSTYLE_CHECK | 2 | 等效于 BTNS_CHECK。 对 版本 4.72 及更早版本使用 TBSTYLE_CHECK。 |
分组单选 | TBSTYLE_GROUP | 4 | 等效于 BTNS_GROUP。 对 版本 4.72 及更早版本使用 TBSTYLE_GROUP。 |
分组复选 | TBSTYLE_CHECKGROUP | 6 | 等效于 BTNS_CHECKGROUP。 对 版本 4.72 及更早版本使用 TBSTYLE_CHECKGROUP。 |
下拉按钮 | TBSTYLE_DROPDOWN | 8 | 等效于 BTNS_DROPDOWN。 对 版本 4.72 及更早版本使用 TBSTYLE_DROPDOWN。 |
自动适应 | TBSTYLE_AUTOSIZE | 0x10 | 等效于 BTNS_AUTOSIZE。 对 版本 4.72 及更早版本使用 TBSTYLE_AUTOSIZE。 |
不处理&符 | TBSTYLE_NOPREFIX | 0x20 | 等效于 BTNS_NOPREFIX。 对 版本 4.72 及更早版本使用 TBSTYLE_NOPREFIX。 |
工具栏——按钮状态:
英文名称 | 常量 | 释义 |
TBSTATE_CHECKED | 1 | 选中状态 |
TBSTATE_PRESSED | 2 | 按下状态 |
TBSTATE_ENABLED | 4 | 可用状态 |
TBSTATE_HIDDEN | 8 | 隐藏状态 |
TBSTATE_INDETERMINATE | 0x10 | 灰暗状态 |
TBSTATE_WRAP | 0x20 | 按钮后跟换行符。 |
TBSTATE_ELLIPSES | 0x40 | 按钮的文本被截断,并显示省略号。 |
TBSTATE_MARKED | 0x80 | 已标记按钮。标记项的解释取决于应用程序。 |
工具按钮类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
工具按钮类 | TBBUTTON | 20 | 包含有关工具栏中的按钮的信息。 |
工具按钮类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
图像 | iBitmap | 整数 | 按钮图像的从零开始的索引。 |
标识 | idCommand | 整数 | 与按钮关联的命令标识符。用于 WM_COMMAND 消息中。 |
状态 | fsState | 字节 | 按钮状态标志。工具栏按钮状态列出的值的组合。 |
风格 | fsStyle | 字节 | 按钮样式标志。工具栏按钮样式列出的值的组合。 |
预留 | bReserved | 整形 | 预留。 |
数据 | dwData | 整数 | 应用程序定义的值。 |
文字 | iString | 整数 | 按钮字符串的从零开始的索引,或指向包含按钮文本的字符串缓冲区的指针。 |
工具信息类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
工具信息类 | TBBUTTONINFO | 20 | 包含或接收工具栏中特定按钮的信息。 |
工具信息类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | cbSize | 整数 | 结构的大小。 |
掩码 | dwMask | 整数 | 指示哪些成员包含有效信息的标志集。 |
标识 | idCommand | 整数 | 按钮的命令标识符。掩码:0x20 |
图像 | iBitmap | 整数 | 按钮图像的从零开始的索引。掩码:1 |
状态 | fsState | 字节 | 按钮状态标志。掩码:4;工具栏按钮状态列出的值的组合。 |
风格 | fsStyle | 字节 | 按钮样式标志。掩码:8;工具栏按钮样式列出的值的组合。 |
宽度 | cx | 整形 | 按钮的宽度(以像素为单位)。掩码:0x40 |
数据 | lParam | 整数 | 与按钮关联的应用程序定义值。掩码:0x10 |
文字 | pszText | 整数 | 包含或接收按钮文本的字符缓冲区的地址。掩码:2 |
长度 | cchText | 整数 | 接收按钮文本缓冲区的大小。掩码:2 |
工具保存类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
工具保存类 | TBSAVEPARAMS | 12 | 指定注册表中 保存还原 消息存储和检索工具栏状态信息的位置。 |
工具保存类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
表项 | hkr | 整数 | 注册表项的句柄。 |
子项 | pszSubKey | 整数 | 子项名称。 |
值名 | pszValueName | 整数 | 值名称。 |
工具指标类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
工具指标类 | TBMETRICS | 32 | 定义用于收缩或展开工具栏项的工具栏的指标。 |
工具指标类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | cbSize | 整数 | 结构的大小。 |
掩码 | dwMask | 整数 | 获取指标的掩码。1取填充宽高,2取工具条宽高,4取间距宽高 |
填充宽 | cxPad | 整数 | 按钮内填充的宽度,介于内容和按钮边缘之间。 |
填充高 | cyPad | 整数 | 按钮内填充的高度,介于内容和按钮边缘之间。 |
宽度 | cxBarPad | 整数 | 工具栏的宽度。未使用。 |
高度 | cyBarPad | 整数 | 工具栏的高度。未使用。 |
间宽 | cxButtonSpacing | 整数 | 工具栏按钮之间间距的宽度。 |
间高 | cyButtonSpacing | 整数 | 工具栏按钮之间间距的高度。 |
工具标记类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
工具标记类 | TBINSERTMARK | 8 | 包含有关工具栏控件中插入标记的信息。 |
工具标记类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
序号 | iButton | 整数 | 插入标记的从零开始的索引。如果此成员为-1,则没有插入标记。 |
标志 | dwFlags | 整数 | 定义插入标记相对于指定按钮的位置。0左侧,1右侧,2背景(仅限取点标记) |
工具图像类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
工具图像类 | TBADDBITMAP | 8 | 将包含按钮图像的位图添加到工具栏。 |
工具图像类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
实例 | hInst | 整数 | 包含包含位图资源的可执行文件的模块实例的句柄。非资源写0 |
标识 | nID | 整数 | 位图句柄或图像资源标识 |
工具替换类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
工具替换类 | TBREPLACEBITMAP | 32 | 将一个工具栏位图替换为另一个。 |
工具替换类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
原例 | hInstOld | 整数 | 要替换的位图资源的模块实例句柄。0位图柄 |
原图 | nIDOld | 整数 | 要替换的位图的位图柄或资源标识。 |
新例 | hInstNew | 整数 | 包含新位图资源的模块实例句柄。0位图柄 |
新图 | nIDNew | 整数 | 新位图的位图柄或资源标识。 |
数量 | nButtons | 整数 | 新位图中包含的按钮图像数。 新映像的数量应与替换的图像数相同。 |
工具提示类——结构体定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
工具提示类 | NMTTDISPINFOA | 108 | 包含用于处理 工具显示信息 通知代码的信息。 |
工具替换类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
通知 | hdr | 通知类 | 包含有关通知的其他信息的 通知类 结构。 |
提示 | lpszText | 整数 | 指向以 0 结尾的字符串的指针,该字符串将显示为工具提示文本。 如果 hinst 指定了实例句柄,则此成员必须是字符串资源的标识符。 |
内容 | szText[80] | 文本 | 接收工具提示文本的缓冲区。 应用程序可以将文本复制到此缓冲区,而不是指定字符串地址或字符串资源。 |
实例 | hinst | 整数 | 包含要用作工具提示文本的字符串资源的实例的句柄。 如果 提示 是工具提示文本字符串的地址,则此成员必须为 0。 |
标志 | uFlags | 整数 | 指示如何解释包含的 通知类 结构的 标识 成员的标志。0=标识符,1=工具的句柄,4=从右到左阅读,0x8000保留提供的信息 |
附加 | lParam | 整数 | 版本 4.70。 与工具关联的应用程序定义数据。 |
调节框——通知消息:
程序段 公共事件(数据)
整数 窗口=数据&,参数=.&4,事件=.&8,位置=.&12,方向=.&16;
判断(事件)为 控件释放鼠标{控件要释放鼠标捕捉}
为 调节位置更改{位置是当前位置,向上-1,向下为1}
处理窗口(窗口,控件事件,参数,数据)
结束
中文名字 | 常量数值 | 英文名称 | 释义 |
控件释放鼠标 | -16 | NM_RELEASEDCAPTURE | 控件要释放鼠标捕捉 |
调节位置更改 | -722 | UDN_DELTAPOS | 调节器控件的位置即将更改。④数据:NMUPDOWN 结构 |
发送消息——常数表 |
调节设置范围 | 0x465 | UDM_SETRANGE | 设置上下控件范围的最小和最大位置。③参数:0;④数据:最大/最小 |
调节获取范围 | 0x466 | UDM_GETRANGE | 获取上下控件范围的最小和最大位置。③参数:0;④数据:0 |
调节设置位置 | 0x467 | UDM_SETPOS | 设置上下控件16位精度的当前位置。③参数:0;④数据:新位置 |
调节获取位置 | 0x468 | UDM_GETPOS | 获取上下控件16位精度的当前位置。③参数:0;④数据:0 |
调节设置窗口 | 0x469 | UDM_SETBUDDY | 设置上下控件的伙伴窗口。③参数:窗口;④数据:0 |
调节获取窗口 | 0x46A | UDM_GETBUDDY | 获取上下控件的伙伴窗口。③参数:0;④数据:0 |
调节设置加速 | 0x46B | UDM_SETACCEL | 设置上下控件的加速。③参数:数目;④数据:UDACCEL 结构的数组 |
调节获取加速 | 0x46C | UDM_GETACCEL | 获取上下控件的加速。③参数:数目;④数据:UDACCEL 结构的数组 |
调节设置基数 | 0x46D | UDM_SETBASE | 设置上下控件的基数。③参数:10十进制,16十六进制;④数据:0 |
调节获取基数 | 0x46E | UDM_GETBASE | 获取上下控件的基数。③参数:0;④数据:0 |
调节设置限定 | 0x46F | UDM_SETRANGE32 | 设置上下控件的32 位范围。③参数:下限;④数据:上限 |
调节获取限定 | 0x470 | UDM_GETRANGE32 | 获取上下控件的32 位范围。③参数:@下限;④数据:@上限;为0不获取 |
调节设置定位 | 0x471 | UDM_SETPOS32 | 设置上下控件32位精度的当前位置。③参数:0;④数据:新位置 |
调节获取定位 | 0x472 | UDM_GETPOS32 | 获取上下控件32位精度的当前位置。③参数:0;④数据:0 |
控件设置宽字 | 0x2005 | CCM_SETUNICODEFORMAT | 设置控件的 Unicode 字符格式标志。③参数:是否宽字;④数据:0; |
控件获取宽字 | 0x2006 | CCM_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世纪}
处理窗口(窗口,控件事件,参数,数据)
结束
中文名字 | 常量数值 | 英文名称 | 释义 |
控件释放鼠标 | -16 | NM_RELEASEDCAPTURE | 控件要释放鼠标捕捉 |
月历显示风格 | -743 | MCN_GETDAYSTATE | 获取月历控件的日期显示风格。NMDAYSTATE 结构 |
月历选择日期 | -746 | MCN_SELECT | 在月历控件中选择一个日期。 NMSELCHANGE 结构 |
月历选项改变 | -749 | MCN_SELCHANGE | 当前选择项已被改变。NMSELCHANGE 结构 |
月历视图改变 | -750 | MCN_VIEWCHANGE | 当前视图发生更改。NMVIEWCHANGE 结构 |
日期框——通知消息:
中文名字 | 常量数值 | 英文名称 | 释义 |
控件得到焦点 | -7 | NM_SETFOCUS | 控件收到输入焦点 |
控件失去焦点 | -8 | NM_KILLFOCUS | 用户失去输入焦点 |
日历内容改变 | -759 | DTN_DATETIMECHANGE | DTP控件中的内容已发生改变 |
日历完成编辑 | -758 | DTN_USERSTRINGA | 用户已完成DTP控件的编辑 |
日历单击回调 | -757 | DTN_WMKEYDOWNA | 用户单击了DTP控件的回调域 |
日历显示回调 | -756 | DTN_FORMATA | DTP控件中的文本需要显示在回调域中 |
日历显示尺寸 | -755 | DTN_FORMATQUERYA | DTP控件中的文本显示所需最大尺寸 |
日历显示月历 | -754 | DTN_DROPDOWN | DTP控件中的月历控件将要显示 |
日历关闭月历 | -753 | DTN_CLOSEUP | DTP控件中的月历控件将要关闭 |
超组合框——通知消息:
中文名字 | 常量数值 | 英文名称 | 释义 |
控件设置光标 | -17 | NM_SETCURSOR | 控件响应消息要设置光标 |
组框显示信息 | -800 | CBEN_GETDISPINFOA | 获取组框控件的回调条目的显示信息 |
组框插入条目 | -801 | CBEN_INSERTITEM | 一个新条目已插入到组框控件 |
组框删除条目 | -802 | CBEN_DELETEITEM | 组框控件的某条目已被删除 |
组框激活编辑 | -804 | CBEN_BEGINEDIT | 用户激活下拉列表或点击组框控件的编辑框 |
组框结束编辑 | -805 | CBEN_ENDEDITA | 用户已结束对组框控件的编辑框的操作或选择了下拉列表 |
组框完成编辑 | -806 | CBEN_ENDEDITW | 用户已结束对组框控件的编辑框的操作或选择了下拉列表 |
组框信息显示 | -807 | CBEN_GETDISPINFOW | 获取组框控件的回调条目的显示信息 |
组框拖起图像 | -808 | CBEN_DRAGBEGINA | 用户开始拖动组框控件的编辑框中的条目图像 |
组框拖起条目 | -809 | CBEN_DRAGBEGINW | 用户开始拖动组框控件的编辑框中的条目图像 |
组框模块——函数表 |
中文名字 | 英文名称 | 用法 | 释义 |
组框添加 | CBEM_INSERTITEMA | 组框添加(控件,内容,图标,选中,缩进) | 高级组合框添加项目,可指定图标和选中图标,每个缩进等于10像素。 |
组框删除 | CBEM_DELETEITEM | 组框添加(控件,序号) | 高级组合框删除指定项目 |
组框文字 | CBEM_SETITEMA | 内容=组框文字(控件,序号) | 获取或修改高级组合框的指定项目的文字 |
组框扩展 | CBEM_GETEXSTYLE | 样式=组框扩展(控件) | 获取或修改组合框扩展样式:1不显图像;2不显缩进;4单词分割/.\;8允许剪裁;$10搜索分大小写 |
组框更改 | CBEM_HASEDITCHANGED | 组框更改(控件) | 确定用户是否已更改高级组合框编辑控件的文本。返回真表示已更改 |
伸缩条——通知消息:
中文名字 | 常量数值 | 英文名称 | 释义 |
控件自行绘制 | -12 | NM_CUSTOMDRAW | 通知控件的父窗口有关自定义绘制操作的信息。 |
控件命中测试 | -14 | NM_NCHITTEST | 当控件收到消息时,由 伸缩条 控件发送。④数据:NMMOUSE 结构 |
控件释放鼠标 | -16 | NM_RELEASEDCAPTURE | 控件要释放鼠标捕捉 |
伸缩高度改变 | -831 | RBN_HEIGHTCHANGE | 高度已被更改 |
伸缩放置目标 | -832 | RBN_GETOBJECT | 对象被拖动到此控件中的带区上 |
伸缩更改布局 | -833 | RBN_LAYOUTCHANGED | 用户更改此控件的带区布局 |
伸缩自动调整 | -834 | RBN_AUTOSIZE | 控件自己自动调整大小 |
伸缩开始拖动 | -835 | RBN_BEGINDRAG | 用户开始拖动带区 |
伸缩结束拖动 | -836 | RBN_ENDDRAG | 用户停止拖动带区 |
伸缩将被删除 | -837 | RBN_DELETINGBAND | 带区即将被删除 |
伸缩已被删除 | -838 | RBN_DELETEDBAND | 带区已被删除 |
伸缩调整子窗 | -839 | RBN_CHILDSIZE | 调整带区的子窗口大小 |
伸缩条——控件样式:
中文名字 | 英文名称 | 数值 | 释义 |
顶部左侧 | CCS_TOP | 1 | 使控件自身位于父窗口工作区的顶部,并将宽度设置为与父窗口的宽度相同。 默认情况下,工具栏具有此样式。 |
缩放调整 | CCS_NOMOVEY | 2 | 导致控件在响应 WM_SIZE 消息时水平(而不是垂直)调整大小并移动自身。 如果使用CCS_NORESIZE,则此样式不适用。 默认情况下,标题窗口具有此样式。 |
底部右侧 | CCS_BOTTOM | 3 | 使控件将自身定位在父窗口工作区的底部,并将宽度设置为与父窗口的宽度相同。 默认情况下,状态窗口具有此样式。 |
禁止缩放 | CCS_NORESIZE | 4 | 防止控件在设置其初始大小或新大小时使用默认宽度和高度。 相反,控件使用在创建或调整大小的请求中指定的宽度和高度。 |
自由位置 | CCS_NOPARENTALIGN | 8 | 防止控件自动移动到父窗口的顶部或底部。 相反,控件会将其位置保留在父窗口中,尽管更改了父窗口的大小。 如果还使用了CCS_TOP或CCS_BOTTOM,则会将高度调整为默认值,但位置和宽度保持不变。 |
拖动调整 | CCS_ADJUSTABLE | 0x20 | 启用工具栏的内置自定义功能,使用户能够将按钮拖动到新位置,或通过将按钮从工具栏上拖动来删除按钮。 此外,用户可以双击工具栏以显示“ 自定义工具栏 ”对话框,使用户能够添加、删除和重新排列工具栏按钮。 |
禁止突显 | CCS_NODIVIDER | 0x40 | 防止在控件顶部绘制双像素的突出显示。 |
垂直显示 | CCS_VERT | 0x80 | 版本 4.70。 使控件垂直显示。 |
垂直左侧 | CCS_LEFT | 0x81 | 版本 4.70。 使控件垂直显示在父窗口的左侧。 |
垂直缩放 | CCS_NOMOVEX | 0x82 | 版本 4.70。 导致控件调整大小并垂直移动自身,而不是水平移动,以响应 WM_SIZE 消息。 如果使用CCS_NORESIZE,则此样式不适用。 |
垂直右侧 | CCS_RIGHT | 0x83 | 版本 4.70。 使控件垂直显示在父窗口的右侧。 |
调整大小 | SBARS_SIZEGRIP | 0x100 | 状态栏控件将包括状态栏右端的大小调整手柄。 大小调整手柄类似于大小调整边框;它是用户可以通过单击和拖动来重设父窗口大小的矩形区域。 |
适应大小 | RBS_AUTOSIZE | 0x2000 | 版本 4.71。 当控件的大小或位置发生更改时,rebar 控件将自动更改带的布局。 发生这种情况时,将发送 RBN_AUTOSIZE 通知。 |
窄线分隔 | RBS_BANDBORDERS | 0x400 | 版本 4.71。 rebar 控件显示窄线以分隔相邻带。 |
双击大小 | RBS_DBLCLKTOGGLE | 0x8000 | 版本 4.71。 当用户双击带区时,rebar 带将切换其最大化或最小化状态。 如果没有此样式,当用户单击带区时,将切换最大化或最小化状态。 |
顺序显示 | RBS_FIXEDORDER | 0x800 | 版本 4.70。 rebar 控件始终按相同的顺序显示带区。 可以将带区移动到不同的行,但带区顺序是静态的。 |
拖放通知 | RBS_REGISTERDROP | 0x1000 | 版本 4.71。 当对象拖动到控件中的带区上时,rebar 控件将生成 RBN_GETOBJECT 通知代码。 若要接收RBN_GETOBJECT通知,请使用调用 OleInitialize 或 CoInitialize 初始化 OLE。 |
工具提示 | RBS_TOOLTIPS | 0x100 | 版本 4.71。 尚不支持。 |
最小高度 | RBS_VARHEIGHT | 0x200 | 版本 4.71。 rebar 控件尽可能以所需的最小高度显示带区。 如果没有此样式,rebar 控件将使用最高可见带的高度来确定其他带的高度,以相同的高度显示所有带。 |
垂直把手 | RBS_VERTICALGRIPPER | 0x4000 | 版本 4.71。 大小手柄将垂直显示,而不是在垂直 rebar 控件中水平显示。 对于没有 CCS_VERT 样式的 rebar 控件,将忽略此样式。 |
IP控件——使用说明:
IP框允许用户以易于理解的格式输入 IP 地址。 此控件还允许应用程序以数字形式而不是文本形式获取地址。
这是一种类似于编辑控件的新控件,允许用户在 Internet 协议中输入数字地址 (IP) 格式。
此格式由四个三位数字段组成。 每个字段单独处理;字段编号从零开始,从左到右继续,如下图所示。
控件只允许在每个字段中输入数字文本。 在给定字段中输入三位数字后,键盘焦点会自动移动到下一个字段。
如果应用程序不需要填写整个字段,则用户可以输入少于三位数。 例如,如果字段应仅包含数字 21,则键入“21”并按 键会将用户带到下一个字段。
每个字段的默认范围为 0 到 255,但应用程序可以使用 IP框设置范围 消息将范围设置为这些限制之间的任何值。
IP控件——通知消息:
中文名字 | 常量数值 | 英文名称 | 释义 |
IP框内容改变 | -860 | IPN_FIELDCHANGED | 更改控件中的字段或从一个字段移动到另一个字段 |
发送消息——常数表 |
IP框清除内容 | $464 | IPM_CLEARADDRESS | 清除 IP 地址控件的内容。③参数:0;④数据:0 |
IP框设置地址 | $465 | IPM_SETADDRESS | 设置 IP 地址控件中所有四个字段的地址值。 ③参数:0;④数据:32位IP地址 |
IP框获取地址 | $466 | IPM_GETADDRESS | 获取 IP 地址控件中所有四个字段的地址值。 ③参数:0;④数据:@地址 |
IP框设置范围 | $467 | IPM_SETRANGE | 设置 IP 地址控件中指定字段的有效范围。③参数:0-3字段;④数据:低/高(各1字节) |
IP框设置焦点 | $468 | IPM_SETFOCUS | 将键盘焦点选中为控件中的指定字段。 ③参数:0-3字段;④数据:0 |
IP框是否为空 | $469 | IPM_ISBLANK | 确定控件中的所有字段是否为空。③参数:0;④数据:0 |
IP框改变类——通知消息:
中文名字 | 英文名称 | 长度 | 作用解释 |
IP框改变类 | NMIPADDRESS | 20 | 包含 IP框内容改变 通知代码的信息。 |
IP框改变类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
通知 | hdr | 通知类 | 包含有关通知的信息的类结构。 |
字段 | iField | 整数 | 已更改的字段的从零开始的编号。 |
新值 | iValue | 整数 | 字段 成员中指定的字段的新值。 处理 IP框内容改变 通知时,可以将此成员设置为字段范围内的任何值,控件会将此新值置于字段中。 |
状态栏——使用说明:
状态栏是父窗口底部的水平窗口,应用程序可在其中显示各种状态信息。 状态栏可以分为多个部分以显示多种类型的信息。
类型和样式
状态栏的默认位置位于父窗口底部,但你可以指定 顶部 样式,使其显示在父窗口工作区的顶部。
可以指定 调整大小 样式,以在状态栏的右端包含大小调整手柄。
不建议结合使用 顶部 和 调整大小 样式,因为生成的大小调整手柄不起作用。
大小和高度
状态栏的窗口过程会自动设置窗口的初始大小和位置,忽略 创建窗口 函数中指定的值。 宽度与父窗口工作区的一样。
高度基于当前在状态栏的设备上下文中选择的字体的指标,以及窗口边框的宽度。
每当收到 窗口缩放 消息时,窗口过程都会自动调整状态栏的大小。 通常,当父窗口的大小更改时,父窗口会向状态栏发送 窗口缩放 消息。
应用程序可以通过向窗口发送 状态最小高度 消息(指定最小高度(以像素为单位)来设置状态栏绘图区的最小高度。 绘图区不包括窗口边框。
最小高度对于在所有者绘制的状态栏中绘图很有用。 有关详细信息,请参阅本章后面的 所有者绘制状态栏 。
通过向窗口发送 状态获取边框 消息来检索状态栏边框的宽度。 该消息包含接收宽度的三元素数组的地址。
多部件状态栏
状态栏可以具有许多不同的部分,每个部分显示不同的文本行。 通过向窗口发送 状态设置部件 消息,指定要创建的部件数和整数数组的地址,
将状态栏划分为多个部分。 数组包含每个部件的一个元素,每个元素指定部件右边缘的客户端坐标。一个状态栏最多可以有 256 个部分,
尽管应用程序通常使用的部件要少得多。 通过向窗口发送 状态获取部件消息, 检索状态栏中各部分的计数以及每个部件右边缘的坐标。
状态栏文本操作
可以通过发送 状态设置文本 消息、指定部件的从零开始的索引、在部件中绘制的字符串地址以及绘制字符串的技术来设置状态栏的任何部分的文本。
绘制技术确定文本是否具有边框,如果具有边框,则确定边框的样式。 它还确定父窗口是否负责绘制文本。 有关详细信息,请参阅所有者绘制状态栏。
默认情况下,文本在状态栏的指定部分中左对齐。可以在文本中嵌入制表符,使其居中或右对齐。 单个制表符右侧的文本居中,第二个制表符右侧的文本右对齐。
若要从状态栏中检索文本,请使用 状态获取长度 和 状态获取文本 消息。如果应用程序使用只有一个部分的状态栏,
则可以使用 设置文本、获取文本和 文本长度 消息来执行文本操作。 这些消息仅处理索引为零的部分,使你可以将状态栏视为静态文本控件。
若要在不创建状态栏的情况下显示状态行,请使用 状态栏字 函数。 函数使用与状态栏的窗口过程相同的技术来绘制状态,但它不会自动设置状态信息的大小和位置。
调用函数时,必须指定状态信息的大小和位置,以及要在其中绘制它的窗口的设备上下文。
简单模式状态栏
通过向状态栏发送 状态简单样式 消息,将状态栏置于“简单模式”。简单模式状态栏仅显示一个部分。设置窗口的文本后,窗口将失效,但在下一窗口重绘之前不会重绘。
等待消息可最大程度地减少重绘窗口的次数,从而减少屏幕闪烁。 简单模式状态栏可用于在用户滚动浏览菜单时显示菜单项的帮助文本。
状态栏在简单模式下显示的字符串与在非简单模式下显示的字符串分开维护。 这意味着你可以将窗口置于简单模式,设置其文本,并切换回非简单模式,
而不会更改非简单模式文本。设置简单模式状态栏的文本时,可以指定除 父窗绘制 之外的任何绘图技术。 简单模式状态栏不支持所有者绘图。
状态设置文本——参数样式
中文名字 | 英文名称 | 常量数值 | 释义 |
凹陷边框 | 0 | 0 | 文本带有边框,显示位置低于窗口平面。 |
不带边框 | SBT_NOBORDERS | 0x100 | 文本不带边框。 |
父窗绘制 | SBT_OWNERDRAW | 0x1000 | 文本由父窗口绘制。注意:简单模式状态栏不支持所有者绘图。 |
凸起边框 | SBT_POPOUT | 0x200 | 文本带有边框,显示位置高于窗口平面。 |
反向显示 | SBT_RTLREADING | 0x400 | 系统将以与父窗口中文本相反的方向显示文本。 |
忽略制表 | SBT_NOTABPARSING | 0x800 | 将忽略 Tab 字符。 |
默认状态栏消息处理
本部分介绍由预定义类的窗口过程处理的消息。
中文名字 | 常量数值 | 英文名称 | 释义 |
窗口创建 | WM_CREATE | 1 | 初始化状态栏。 |
程序关闭 | WM_DESTROY | 2 | 释放为状态栏分配的资源。 |
获取字体 | WM_GETFONT | 0x31 | 返回状态栏用于绘制其文本的当前字体的句柄。 |
获取文本 | WM_GETTEXT | 13 | 将文本从状态栏的第一部分复制到缓冲区。 它返回一个 32 位值,该值指定文本的长度(以字符为单位)以及用于绘制文本的技术。 |
文本长度 | WM_GETTEXTLENGTH | 14 | 返回一个 32 位值,该值指定状态栏第一部分中文本的长度(以字符为单位),以及用于绘制文本的技术。 |
区外鼠标 | WM_NCHITTEST | 0x84 | 如果鼠标光标位于大小调整手柄中,导致系统显示大小调整光标,则返回 HTBOTTOMRIGHT 值。 如果鼠标光标不在大小调整手柄中,状态栏会将此消息传递给 DefWindowProc 函数。 |
窗口重绘 | WM_PAINT | 15 | 绘制状态栏的无效区域。 如果 wParam 参数为非 NULL,则控件假定该值是 HDC 并使用该设备上下文进行绘制。 |
指定字体 | WM_SETFONT | 0x30 | 在状态栏的设备上下文中选择字体句柄。 |
设置文本 | WM_SETTEXT | 12 | 使用默认绘制操作将指定文本复制到状态栏的第一部分, (指定为零) 。 如果成功,则返回 TRUE ,否则返回 FALSE 。 |
窗口缩放 | WM_SIZE | 5 | 根据父窗口工作区的当前宽度和状态栏当前字体的高度调整状态栏的大小。 |
状态栏——通知消息:
中文名字 | 常量数值 | 英文名称 | 释义 |
控件单击左键 | -2 | NM_CLICK | 用户在控件上点击了鼠标左键。④数据:NMMOUSE 结构 |
控件双击左键 | -3 | NM_DBLCLK | 用户在控件上双击了鼠标左键。④数据:NMMOUSE 结构 |
控件单击右键 | -5 | NM_RCLICK | 用户在控件上点击了鼠标右键。④数据:NMMOUSE 结构 |
控件双击右键 | -6 | NM_RDBLCLK | 用户在控件上双击了鼠标右键。④数据:NMMOUSE 结构 |
状态模式改变 | -880 | SBN_SIMPLEMODECHANGE | 状态栏简单模式发生改变 |
发送消息——常数表 |
状态设置文本 | 0x401 | SB_SETTEXTA | 设置状态窗口的指定部分中的文本。③参数:序号/样式(各1字节);④数据:内容文本;
序号=255单窗口;样式=0凹陷边框,0x100无边框,0x200凸起边框,0x400反向显示,0x800忽略制表,0x1000父窗口绘制 |
状态获取文本 | 0x402 | SB_GETTEXTA | 从状态窗口的指定部分检索文本。③参数:序号;④数据:文本; |
状态获取长度 | 0x403 | SB_GETTEXTLENGTHA | 从状态窗口的指定部分检索文本的字数。③参数:序号;④数据:0;返回值:低字=字数,高字=样式 |
状态设置部件 | 0x404 | SB_SETPARTS | 设置状态窗口中的部件数以及每个部件右边缘的坐标。③参数:数量;④数据:整数数组; |
状态获取部件 | 0x406 | SB_GETPARTS | 获取状态窗口中的部件数以及每个部件右边缘的坐标。③参数:数量;④数据:整数数组;返回部件数 |
状态获取边框 | 0x407 | SB_GETBORDERS | 获取状态窗口的水平边框和垂直边框的当前宽度。③参数:0;④数据:3整数=0宽度,1高度,2边框宽; |
状态最小高度 | 0x408 | SB_SETMINHEIGHT | 设置状态窗口绘图区域的最小高度。③参数:高度;④数据:0; |
状态简单样式 | 0x409 | SB_SIMPLE | 指定状态窗口是显示简单文本还是上一个设置部件。③参数:是否简单;④数据:0; |
状态边框矩形 | 0x40A | SB_GETRECT | 检索状态窗口中部件的边框。③参数:序号;④数据:矩形; |
状态设置文字 | 0x40B | SB_SETTEXTW | 设置状态窗口的指定部分中的文本。③参数:序号/样式(各1字节);④数据:内容文本; |
状态获取字数 | 0x40C | SB_GETTEXTLENGTHW | 从状态窗口的指定部分检索文本的字数。③参数:序号;④数据:0;返回值:低字=字数,高字=样式 |
状态获取文字 | 0x40D | SB_GETTEXTW | 从状态窗口的指定部分检索文本。③参数:序号;④数据:文本; |
状态是否简单 | 0x40E | SB_ISSIMPLE | 检查状态栏控件以确定它是否处于简单模式。③参数:0;④数据:0; |
状态设置图标 | 0x40F | SB_SETICON | 设置状态栏中部件的图标。③参数:序号;④数据:图标; |
状态设置提示 | 0x410 | SB_SETTIPTEXTA | 设置状态栏中部件的工具提示文本。③参数:序号;④数据:文本; |
状态修改提示 | 0x411 | SB_SETTIPTEXTW | 设置状态栏中部件的工具提示文本。③参数:序号;④数据:文本; |
状态获取提示 | 0x412 | SB_GETTIPTEXTA | 检索状态栏中部件的工具提示文本。③参数:序号/大小;④数据:文本; |
状态获得提示 | 0x413 | SB_GETTIPTEXTW | 检索状态栏中部件的工具提示文本。③参数:序号/大小;④数据:文本; |
状态获取图标 | 0x414 | SB_GETICON | 检索状态栏中部件的图标。③参数:序号;④数据:0; |
控件设置宽字 | 0x2005 | CCM_SETUNICODEFORMAT | 设置控件的 Unicode 字符格式标志。③参数:是否宽字;④数据:0; |
控件获取宽字 | 0x2006 | CCM_GETUNICODEFORMAT | 获取控件的 Unicode 字符格式标志。③参数:0;④数据:0; |
状态栏——控件样式:
中文名字 | 英文名称 | 数值 | 释义 |
顶部左侧 | CCS_TOP | 1 | 使控件自身位于父窗口工作区的顶部,并将宽度设置为与父窗口的宽度相同。 默认情况下,工具栏具有此样式。 |
缩放调整 | CCS_NOMOVEY | 2 | 导致控件在响应 WM_SIZE 消息时水平(而不是垂直)调整大小并移动自身。 如果使用CCS_NORESIZE,则此样式不适用。 默认情况下,标题窗口具有此样式。 |
底部右侧 | CCS_BOTTOM | 3 | 使控件将自身定位在父窗口工作区的底部,并将宽度设置为与父窗口的宽度相同。 默认情况下,状态窗口具有此样式。 |
禁止缩放 | CCS_NORESIZE | 4 | 防止控件在设置其初始大小或新大小时使用默认宽度和高度。 相反,控件使用在创建或调整大小的请求中指定的宽度和高度。 |
自由位置 | CCS_NOPARENTALIGN | 8 | 防止控件自动移动到父窗口的顶部或底部。 相反,控件会将其位置保留在父窗口中,尽管更改了父窗口的大小。 如果还使用了CCS_TOP或CCS_BOTTOM,则会将高度调整为默认值,但位置和宽度保持不变。 |
拖动调整 | CCS_ADJUSTABLE | 0x20 | 启用工具栏的内置自定义功能,使用户能够将按钮拖动到新位置,或通过将按钮从工具栏上拖动来删除按钮。 此外,用户可以双击工具栏以显示“ 自定义工具栏 ”对话框,使用户能够添加、删除和重新排列工具栏按钮。 |
禁止突显 | CCS_NODIVIDER | 0x40 | 防止在控件顶部绘制双像素的突出显示。 |
垂直显示 | CCS_VERT | 0x80 | 版本 4.70。 使控件垂直显示。 |
垂直左侧 | CCS_LEFT | 0x81 | 版本 4.70。 使控件垂直显示在父窗口的左侧。 |
垂直缩放 | CCS_NOMOVEX | 0x82 | 版本 4.70。 导致控件调整大小并垂直移动自身,而不是水平移动,以响应 WM_SIZE 消息。 如果使用CCS_NORESIZE,则此样式不适用。 |
垂直右侧 | CCS_RIGHT | 0x83 | 版本 4.70。 使控件垂直显示在父窗口的右侧。 |
调整大小 | SBARS_SIZEGRIP | 0x100 | 状态栏控件将包括状态栏右端的大小调整手柄。 大小调整手柄类似于大小调整边框;它是用户可以通过单击和拖动来重设父窗口大小的矩形区域。 |
工具提示 | SBT_TOOLTIPS | 0x800 | 版本 4.71。使用此样式启用工具提示。 |
工具提示 | SBARS_TOOLTIPS | 0x800 | 版本 5.80。与SBT_TOOLTIPS相同。 将此标志用于版本 5.00 或更高版本。 |
分页导航——使用说明:
分页控件是一个窗口容器,与没有足够的显示区域来显示其所有内容的窗口一起使用。 寻呼控件允许用户滚动到当前不在视图中的窗口区域。
当窗口没有足够的区域显示子窗口时,此控件非常有用。 例如,如果应用程序的工具栏不够宽,无法显示其所有项,则可以将工具栏分配给寻呼控件,
用户将能够向左或向右滚动以访问所有项。 还可以创建垂直滚动的寻呼控件。分配给寻呼程序控件的窗口称为 包含的窗口。
以下屏幕截图显示了页码控件中包含的工具栏。 寻呼控件以红色显示,以显示控件的哪些区域可见。
创建寻呼控件后,很可能想要为其分配包含的窗口。 如果包含的窗口是子窗口,则应使子窗口成为寻呼控件的子窗口,以便正确计算大小和位置。
然后发送 分页设置窗口 消息将窗口分配给分页控件。 请注意,此消息实际上不会更改包含窗口的父窗口;它只是分配包含的窗口。
如果包含的窗口是公共控件之一,它必须具有 禁止缩放 样式,以防止控件尝试将自身大小调整为页码页控件的大小。
进程寻呼控件通知
至少需要处理 分页滚动尺寸 通知。 如果不处理此通知并输入宽度或高度的值,则不会显示寻呼控件中的滚动箭头。这是因为寻呼控件使用分页滚动尺寸通知中提供的宽度或高度来确定包含窗口的“理想”大小。
以下示例演示如何处理 分页滚动尺寸 通知案例。 在此示例中,包含的窗口是一个工具栏控件,其中包含未知数量的按钮,大小未知。 该示例演示如何使用 工具总体大小 消息来确定工具栏中所有项的大小。
然后,该示例将所有项的宽度放入传递到通知的
分页滚区类 结构的 宽度 成员中。
判断(消息) 为 控件事件 公共事件(数据) //调用公共事件这段程序代码,④数据:包含多项事件信息的数据
程序段 公共事件(数据)
整数 窗口=数据&,参数=.&4,事件=.&8,方向=.&30
判断(方向)为 1,2,4,8 //向上向下向左向右
.&42 =20;//修改默认滚动增量为20
处理窗口(窗口,控件事件,参数,数据)
结束
分页导航——通知消息:
中文名字 | 常量数值 | 英文名称 | 释义 |
控件释放鼠标 | -16 | NM_RELEASEDCAPTURE | 控件要释放鼠标捕捉 |
分页开始滚动 | -901 | PGN_SCROLL | 所包含窗口即将被滚动。④数据:分页滚向类 结构 |
分页滚动尺寸 | -902 | PGN_CALCSIZE | 获得所包含窗口的可滚动尺寸。④数据:分页滚区类 结构 |
分页热项更改 | -903 | PGN_HOTITEMCHANGE | 通知父窗口突出显示的热项已更改。④数据:分页热项类 结构 |
发送消息——常数表 |
分页设置窗口 | 0x1401 | PGM_SETCHILD | 设置页码控件的包含窗口。③参数:0;④数据:窗口 |
分页重算大小 | 0x1402 | PGM_RECALCSIZE | 强制控件重新计算包含窗口的大小。③参数:0;④数据:0 |
分页鼠标转发 | 0x1403 | PGM_FORWARDMOUSE | 为页码控件启用或禁用鼠标转发。③参数:是否转发;④数据:0 |
分页设置背景 | 0x1404 | PGM_SETBKCOLOR | 设置页码控件的当前背景色。③参数:0;④数据:颜色 |
分页获取背景 | 0x1405 | PGM_GETBKCOLOR | 获取页码控件的当前背景色。③参数:0;④数据:0 |
分页设置边框 | 0x1406 | PGM_SETBORDER | 设置页码控件的当前边框大小。③参数:0;④数据:像素 |
分页获取边框 | 0x1407 | PGM_GETBORDER | 获取页码控件的当前边框大小。③参数:0;④数据:0 |
分页设置位置 | 0x1408 | PGM_SETPOS | 设置页码控件的当前滚动位置。③参数:0;④数据:位置 |
分页获取位置 | 0x1409 | PGM_GETPOS | 获取页码控件的当前滚动位置。③参数:0;④数据:0 |
分页设置按钮 | 0x140A | PGM_SETBUTTONSIZE | 设置页码控件的当前按钮大小。③参数:0;④数据:像素 |
分页获取按钮 | 0x140B | PGM_GETBUTTONSIZE | 获取页码控件的当前按钮大小。③参数:0;④数据:0 |
分页按钮状态 | 0x140C | PGM_GETBUTTONSTATE | 设置页码控件指定按钮的状态。③参数:0;④数据:像素 |
分页超时行数 | 0x140D | PGM_SETSCROLLINFO | 设置超时值、每超时行数和每行像素。③参数:超时数;④数据:超时行数/每行像素(各2字节) |
控件拖放接口 | 0x2004 | PGM_GETDROPTARGET | 获取页码控件的 拖放目标对象 接口指针。③参数:0;④数据:@接口 |
分页框——控件样式:
中文名字 | 英文名称 | 长度 | 作用解释 |
垂直滚动 | PGS_VERT | 0 | 创建可垂直滚动的寻呼控件。 如果未指定方向样式,则这是默认方向。 此样式和 PGS_HORZ 样式是互斥的,不能组合使用。 |
水平滚动 | PGS_HORZ | 1 | 创建可水平滚动的寻呼控件。 此样式和 PGS_VERT 样式是互斥的,不能组合使用。 |
悬停滚动 | PGS_AUTOSCROLL | 2 | 当用户将鼠标悬停在其中一个滚动按钮上时,页导航控件将滚动。 |
支持拖放 | PGS_DRAGNDROP | 4 | 包含的窗口可以是拖放目标。 如果某个项从寻呼器外部拖动到其中一个滚动按钮上,则页导航控件将自动滚动。 |
分页滚向类——通知消息:
中文名字 | 英文名称 | 长度 | 作用解释 |
分页滚向类 | NMPGSCROLL | 46 | 包含并接收页导航控件在滚动包含的窗口时使用的信息。 |
分页滚向类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
通知 | hdr | 通知类 | 包含有关通知的信息的类结构。 |
闭键 | fwKeys | 整形 | 发生滚动时关闭的修改键。0 所有修改键均未关闭。1 按下了 Shift 键。2 CONTROL 键已关闭。4 ALT键已关闭。 |
外框 | rcParent | 矩形类 | 包含分页控件的客户端矩形。 |
方向 | iDir | 整数 | 指示滚动的发生方向的值。1向上滚动。2向下滚动。4向左滚动。8向右滚动。 |
水平 | iXpos | 整数 | 包含滚动操作之前包含窗口的水平滚动位置(以像素为单位)。 |
垂直 | iYpos | 整数 | 包含滚动操作之前包含窗口的垂直滚动位置(以像素为单位)。 |
增量 | iScroll | 整数 | 输入时,包含默认滚动增量(以像素为单位)。可以修改此成员以包含不同的滚动增量(正数值)。 |
分页滚区类——通知消息:
中文名字 | 英文名称 | 长度 | 作用解释 |
分页滚区类 | NMPGCALCSIZE | 24 | 包含并接收分页控件用于计算包含窗口的可滚动区域的信息。 |
分页滚区类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
通知 | hdr | 通知类 | 包含有关通知的信息的类结构。 |
标志 | dwFlag | 整数 | 指示所请求的维度的值。1=正在请求可滚动区域的宽度。2=请求可滚动区域的高度。 |
宽度 | iWidth | 整数 | 接收可滚动区域所需的宽度(以像素为单位)。 |
高度 | iHeight | 整数 | 接收可滚动区域所需的高度(以像素为单位)。 |
分页热项类——通知消息:
中文名字 | 英文名称 | 长度 | 作用解释 |
分页热项类 | NMPGHOTITEM | 24 | 包含与 分页热项更改 通知代码一起使用的信息。 |
分页热项类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
通知 | hdr | 通知类 | 包含有关通知的信息的类结构。 |
旧项 | idOld | 整数 | 指定前面突出显示的项的命令标识符。 |
新项 | idNew | 整数 | 指定突出显示项的命令标识符。 |
原因 | dwFlags | 整数 | 包含指示热项更改原因的标志。0x10没有以前的热项。0x20没有新的热项 |
链接框——使用简介:
链接框 控件是一个窗口,用于呈现标记文本,并在用户单击其嵌入的超链接时通知应用程序。 此控件提供了使用 “命令链接”按钮的便捷替代方法。
每个 链接框 控件都可以支持多个超链接,并且可以通过从零开始的索引访问每个超链接。 链接框 控件需要一个清单或指令,指定应使用版本 6 的 DLL。
链接标记
链接框 控件支持定位标记 (<>) 以及属性 HREF 和 ID。 HREF 可以是任何协议,例如 http、ftp 和 mailto。 ID 是可选名称,在 链接框 控件中是唯一的,
它与单个链接相关联。 还会根据链接在字符串中的位置为其分配从零开始的索引。 此索引用于访问链接。
链接属性
可以在每个链接的定位标记中设置每个链接的属性,也可以通过发送 链接修改属性 消息来设置。 通过在初始化字符串中指定属性来设置它只是初始化值。
可以通过后续使用 链接修改属性 消息来更改属性的值。
链接状态
链接项可以处于三种状态中的任何一种,由下表中的标志表示。
英文名称 | 数值 | 释义 |
LIS_FOCUSED | 1 | 链接具有键盘焦点,按 Enter 可激活它。 |
LIS_ENABLED | 2 | 链接已启用。 |
LIS_VISITED | 4 | 用户已访问链接表示的 URL。 |
双向文本显示的限制
某些语言(如阿拉伯语或希伯来语)在 RTL) (从右到左书写;英语采用从左到右 (LTR) 。 将 RTL 与 LTR 组合称为双向文本。 使用 链接框 控件时,
混合使用资源字符串中的 LTR 和 RTL 宽字 或 HTML 定向标记构造(作为用于控制字符串流的双向流标记)可能不会产生预期结果。
在所有情况下,链接框控件都不支持双向显示。 仅当知道简单的 LTR 或 RTL 布局足够时,才使用 链接框 控件。 否则,请考虑使用更先进的技术。
使用 链接框 通知
以下示例代码演示如何处理当用户单击 上一示例中的两个链接之一时生成的 链接框 通知。 当用户单击 网址 时,关联的网页将在默认浏览器中打开。
当用户单击应用程序定义的超链接时,将显示一个消息框。
判断(消息) 为 控件事件 公共事件(数据) //调用公共事件这段程序代码,④数据:包含多项事件信息的数据
程序段 公共事件(数据)
整数 窗口=数据&,参数=.&4,事件=.&8,标识=.$28,链接=.$124
判断(事件)为 -2,-4 //控件单击左键 控件按下回车
信息框(0,链接,标识,信息图标)
结束
链接框——通知消息:
中文名字 | 常量数值 | 英文名称 | 释义 |
控件单击左键 | -2 | NM_CLICK | 用户在控件上点击了鼠标左键。④数据:链接通知类 |
控件按下回车 | -4 | NM_RETURN | 控件获得键盘焦点并按下回车键 |
发送消息——常数表 |
链接是否点击 | 0x700 | LM_HITTEST | 确定用户是否单击了指定链接。③参数:0;④数据:链接点类 |
链接首选高度 | 0x701 | LM_GETIDEALHEIGHT | 检索控件当前宽度的链接的首选高度。③参数:0;④数据:0 |
链接修改属性 | 0x702 | LM_SETITEM | 设置项的状态和属性。③参数:0;④数据:链接项类 |
链接获取属性 | 0x703 | LM_GETITEM | 检索项的状态和属性。③参数:0;④数据:链接项类 |
链接框——控件样式:
中文名字 | 英文名称 | 数值 | 作用解释 |
背景透明 | LWS_TRANSPARENT | 1 | 背景混合模式是透明的。 |
忽略回车 | LWS_IGNORERETURN | 2 | 当链接具有键盘焦点且用户按 Enter 时,控件将忽略击键并将其传递给主机对话框。 |
显示&字符 | LWS_NOPREFIX | 4 | Windows Vista。 如果文本包含与号,则会将其视为文本字符,而不是快捷键的前缀。 |
当前样式 | LWS_USEVISUALSTYLE | 8 | Windows Vista。 链接以当前视觉样式显示。 |
绘制通知 | LWS_USECUSTOMTEXT | 16 | Windows Vista。 绘制控件时会发送 NM_CUSTOMTEXT 通知,以便应用程序可以动态提供文本。 |
向右对齐 | LWS_RIGHT | 32 | Windows Vista。 文本右对齐。 |
链接项类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
链接项类 | LITEM | 4280 | 用于设置和检索有关链接项的信息。 |
链接项类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
掩码 | mask | 整数 | 标志的组合 |
序号 | iLink | 整数 | 控件链接的索引。掩码:1 |
状态 | state | 整数 | 1有键盘焦点,2启用链接,4已点击,8悬停突出,16定义颜色 |
标志 | stateMask | 整数 | 状态项的标志组合。与状态相同。掩码:2。 |
标识 | szID[96] | 文本 | 包含标识名称的宽字符串。掩码:4 |
链接 | szUrl[4168] | 文本 | 包含链接表示的URL的宽字符串。掩码:8 |
链接通知类——通知消息:
中文名字 | 英文名称 | 长度 | 作用解释 |
链接通知类 | NMLINK | 4292 | 包含链接通知信息。 |
链接通知类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
通知 | hdr | 通知类 | 包含有关通知的信息的类结构。 |
项目 | item | 链接项类 | 有关链接项的信息的类结构 |
链接点类——通知消息:
中文名字 | 英文名称 | 长度 | 作用解释 |
链接点类 | LHITTESTINFO | 4288 | 用于获取与给定位置对应的链接的相关信息。 |
链接点类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
左 | pt.x | 整数 | 有关链接项的信息的类结构 |
顶 | pt.y | 整数 | 命中测试的位置,以客户端坐标 (而不是屏幕坐标) 。 |
项目 | item | 链接项类 | 有关链接项的信息的类结构 |
热键框——使用说明:
热键控件是一个窗口,允许用户输入要用作热键的击键组合。 热键是用户可按以快速执行操作的组合键。例如用户需要定义一个热键,用于激活指定窗口。
热键控件显示用户的选择并确保用户选择有效的组合键。 以下屏幕截图显示了用户按下 Alt 键后热键控件在对话框中的显示方式。
使用热键控件
当用户输入要用作热键的组合键时,键的名称将显示在热键控件中。 组合键可以包含一个修饰键(如CTRL、Alt或SHIFT)和一个随附的键(如字符键、箭头键、功能键等) 。
用户选择组合键后,应用程序将从热键控件检索组合键,并使用它在系统中设置热键。 从热键控件检索的信息包括一个标志,指示修饰键和随附密钥的虚拟密钥代码。
应用程序可以使用热键控件提供的信息来设置全局热键或特定于线程的热键。 全局热键与特定窗口相关联;它允许用户从系统的任何部分激活窗口。
应用程序使用 设置热键 消息设置全局热键。 每当用户按下全局热键时, 设置热键 中指定的窗口都会收到指定 0xF150 值的 系统命令 消息。
此消息会激活接收它的窗口。 在调用 设置热键 的应用程序退出之前,热键将保持有效。
特定于线程的热键会生成 热键消息 消息,该消息将发布到特定线程的开头,以便消息循环的下一次迭代将其删除。 应用程序使用 注册热键 函数设置线程特定的热密钥。
热键控制消息
创建热键控件后,应用程序使用三条消息与之交互:热键设置组合、 热键设置按键和 热键获取按键。
应用程序可以发送 热键设置组合 消息,以指定一组被视为无效热键的 CTRL、ALT 和 SHIFT 组合键。 如果应用程序指定了无效的组合键,则它还应指定用户选择无效组合时
要使用的默认修饰符组合。 当用户输入无效组合时,系统会对无效组合和默认组合执行逻辑 OR 操作。 结果被视为有效组合;它转换为字符串并显示在 控件中。
热键设置按键消息允许应用程序为热键控件设置热键组合。 创建热键控件时也会使用此消息。程序使用 热键获取按键 消息检索用户选择的热键的虚拟密钥代码和修饰符标志。
热键控制通知
热键控件不会通过 控件事件 消息发送任何通知代码。 但是,当用户更改 控件 的内容时,它将通过命令事件消息发送 编辑内容更改 通知。
默认热键消息处理
本部分介绍与热键控件一起使用的窗口过程处理的窗口消息。
中文名字 | 常量数值 | 英文名称 | 释义 |
键入字符 | WM_CHAR | 0x102 | 检索虚拟密钥代码。 |
窗口创建 | WM_CREATE | 1 | 初始化热键控件,清除任何热键规则,并使用系统字体。 |
擦除背景 | WM_ERASEBKGND | 0x14 | 隐藏插入点,调用 处理窗口 函数,然后再次显示插入符号。 |
切换控件 | WM_GETDLGCODE | 0x87 | 返回 DLGC_WANTCHARS 和 DLGC_WANTARROWS 值的组合。 |
中文 | WM_GETFONT | 4 | 检索字体。 |
键盘按下 | WM_KEYDOWN | 0x100 | 如果键为 ENTER、TAB、空格键、DEL、ESC 或 BACKSPACE,则调用 处理窗口 函数。 如果键为 SHIFT、CTRL 或 Alt,它会检查组合是否有效,如果有效,则使用组合设置热键。 所有其他密钥都设置为热键,而无需先检查其有效性。 |
键盘松开 | WM_KEYUP | 0x101 | 检索虚拟密钥代码。 |
失去焦点 | WM_KILLFOCUS | 8 | 销毁插入点。 |
按下左键 | WM_LBUTTONDOWN | 0x201 | 将焦点设置为窗口。 |
首创窗口 | WM_NCCREATE | 0x81 | 设置 WS_EX_CLIENTEDGE 窗口样式。 |
窗口重绘 | WM_PAINT | 15 | 绘制热键控件。 |
获得焦点 | WM_SETFOCUS | 7 | 创建并显示插入点。 |
指定字体 | WM_SETFONT | 0x30 | 设置字体。 |
ALT键字符 | WM_SYSCHAR | 0x107 | 检索虚拟密钥代码。 |
ALT键按下 | WM_SYSKEYDOWN | 0x104 | 如果键为 ENTER、TAB、空格键、DEL、ESC 或 BACKSPACE,则调用 处理窗口 函数。 如果键为 SHIFT、CTRL 或 Alt,它会检查组合是否有效,如果有效,则使用组合设置热键。 所有其他密钥都设置为热键,而无需先检查其有效性。 |
ALT键松开 | WM_SYSKEYUP | 0x105 | 检索虚拟密钥代码。 |
如何检索和设置热键
本主题演示如何检索或设置热键控件的组合键。热键设置按键消息允许应用程序设置热键控件的热键组合。 应用程序使用 热键获取按键 消息检索用户选择的热键的虚拟密钥代码和修饰符标志。
使用热键框可以显示用户按下的组合键,使用 热键获取按键 消息从热键控件中检索组合键,然后使用 设置热键 消息设置全局热键。
程序段 按钮1_点击
整数 键值=发送消息(热键框1, 热键获取按键, 0, 0)
发送消息(窗体, 设置热键, 键值, 0)
结束
热键框——通知消息:
中文名字 | 常量数值 | 英文名称 | 释义 |
热键设置按键 | 0x401 | HKM_SETHOTKEY | 设置热键控件的热键组合。③参数:键码/修饰符(各1字节);④数据:0 |
热键获取按键 | 0x402 | HKM_GETHOTKEY | 获取热键控件的键码和修饰符标志。③参数:0;④数据:0;返回值1SHIFT,2CTRL,4ALT,8扩展 |
热键设置组合 | 0x403 | HKM_SETRULES | 定义热键控件的无效组合和默认修饰符组合。③参数:标志,1无,2SHIFT,4CTRL,8ALT,16S+C,32S+A,64C+A,128SCA;④数据:组合1SHIFT,2CTRL,4ALT,8扩展; |
富编辑——使用说明
只写 ④数据 为控件事件;同时写 ③参数④数据 或不写时为单击左键
富编辑框——通知消息: |
中文名字 | 常量数值 | 英文名称 | 释义 |
编辑内容更改 | 0x300 | EN_CHANGE | 通知无窗口富编辑控件的主机窗口发生了更改。④数据:CHANGENOTIFY 结构 |
编辑更新重绘 | 0x400 | EN_UPDATE | 在编辑控件即将重绘自身时发送。③参数:控件号/通知码;④数据:编辑框 |
编辑内存不足 | 0x500 | EN_ERRSPACE | 当编辑控件无法分配足够的内存时发送。③参数:控件号/通知码;④数据:编辑框 |
编辑字数超出 | 0x501 | EN_MAXTEXT | 当前文本插入超过编辑控件的指定字符数时发送。③参数:控件号/通知码;④数据:编辑框 |
编辑水平滚动 | 0x601 | EN_HSCROLL | 当用户单击编辑控件的水平滚动条时发送。③参数:控件号/通知码;④数据:编辑框 |
编辑垂直滚动 | 0x602 | EN_VSCROLL | 单击垂直滚动条或滚动鼠标滚轮时发送。③参数:控件号/通知码;④数据:编辑框 |
编辑键盘鼠标 | 0x0700 | EN_MSGFILTER | 通知富编辑控件的父窗口,该控件中的键盘或鼠标事件。④数据:MSGFILTER 结构 |
编辑超出大小 | 0x0701 | EN_REQUESTRESIZE | 通知富编辑控件的父窗口,控件的内容小于或大于控件的窗口大小。④数据:REQRESIZE 结构 |
编辑选字更改 | 0x0702 | EN_SELCHANGE | 通知富编辑控件的父窗口当前所选内容已更改。④数据:SELCHANGE 结构 |
编辑文件拖放 | 0x0703 | EN_DROPFILES | 通知富编辑控件父窗口,用户正在尝试将文件拖放到控件中。④数据:ENDROPFILES 结构 |
编辑保护文本 | 0x0704 | EN_PROTECTED | 通知富编辑控件的父窗口,用户正在执行的操作将更改受保护的文本范围。④数据:ENPROTECTED 结构 |
编辑校正手势 | 0x0705 | EN_CORRECTTEXT | 通知富编辑控件父窗口发生了SYV_CORRECT手势,使父窗口有机会取消更正文本。④数据:ENCORRECTTEXT 结构 |
编辑撤销不足 | 0x0706 | EN_STOPNOUNDO | 通知富编辑控件的父窗口该控件无法为其分配足够的内存来维持撤消状态。④数据:通知类 |
编辑换输入法 | 0x0707 | EN_IMECHANGE | 通知富编辑控件的父级 IME 转换状态已更改。③参数:标识/代码;④数据:控件 |
编辑存剪切板 | 0x0708 | EN_SAVECLIPBOARD | 通知富编辑控件的父窗口控件正在关闭,并且剪贴板包含信息。④数据:ENSAVECLIPBOARD 结构 |
编辑对象失败 | 0x0709 | EN_OLEOPFAILED | 通知富编辑控件的父窗口,用户对组件对象模型(COM)对象的操作失败。④数据:ENOLEOPFAILED 结构 |
编辑对象读取 | 0x070A | EN_OBJECTPOSITIONS | 当控件在对象中读取时,通知富编辑控件的父窗口。④数据:OBJECTPOSITIONS 结构 |
编辑链接通知 | 0x070B | EN_LINK | 控件在收到各种消息时发送EN_LINK通知代码。④数据:ENLINK 结构 |
编辑拖放完成 | 0x070C | EN_DRAGDROPDONE | 通知富编辑控件的父窗口拖放操作已完成。④数据:通知类 |
编辑展开大纲 | 0x070D | EN_PARAGRAPHEXPANDED | 通知富编辑控件的父级已展开大纲。④数据:通知类 |
编辑页面更改 | 0x070E | EN_PAGECHANGE | 通知富编辑控件的父窗口页面已更改。 |
编辑无效字符 | 0x070F | EN_LOWFIRTF | 通知控件的父窗口收到不支持的RTF格式关键字。④数据:ENLOWFIRTF 结构 |
编辑从左到右 | 0x0710 | EN_ALIGNLTR | 通知富编辑控件的父窗口段落方向已更改为从左到右。③参数:标识/代码;④数据:控件 |
编辑从右到左 | 0x0711 | EN_ALIGNRTL | 通知富编辑控件的父窗口段落方向更改为从右到左。③参数:标识/代码;④数据:控件 |
编辑特定格式 | 0x0712 | EN_CLIPFORMAT | 通知富编辑控件的父窗口,特定剪贴板格式发生粘贴。④数据:CLIPBOARDFORMAT 结构 |
编辑输入服务 | 0x0713 | EN_STARTCOMPOSITION | 通知用户开始使用IME或文本服务框架键入的丰富编辑控件父窗口。④数据:通知类 |
编辑完成输入 | 0x0714 | EN_ENDCOMPOSITION | 用户已输入新数据或已完成使用IME或文本服务框架的输入数据。④数据:ENDCOMPOSITIONNOTIFY 结构 |
富编辑框——发送消息: |
中文名字 | 常量数值 | 英文名称 | 释义 |
编辑获取字限 | 0x425 | EM_GETLIMITTEXT | 获取编辑控件的当前文本限制。③参数:0;④数据:0;返回限制字数 |
编辑获取坐标 | 0x426 | EM_POSFROMCHAR | 检索编辑控件中指定字符的工作区坐标。③参数:字符索引;④数据:0;返回低位是左,高位是顶 |
编辑坐标点位 | 0x427 | EM_CHARFROMPOS | 获取编辑控件最靠近指定点的字符的信息。③参数:0;④数据:坐标类;返回字符索引 |
编辑光标可视 | 0x431 | EM_SCROLLCARET | 将插入点滚动到编辑控件的视图中。③参数:0;④数据:0; |
编辑粘贴格式 | 0x432 | EM_CANPASTE | 确定富编辑控件是否可以粘贴指定的剪贴板格式。③参数:格式;④数据:0;返回非零可以粘贴 |
编辑显示区域 | 0x433 | EM_DISPLAYBAND | 显示丰富编辑控件的一部分内容。 ③参数:0;④数据:矩形; |
编辑选中范围 | 0x434 | EM_EXGETSEL | 检索丰富编辑控件中所选内容的起始和结束字符位置。 ③参数:0;④数据:范围类; |
编辑最大粘贴 | 0x435 | EM_EXLIMITTEXT | 设置用户可键入或粘贴到富编辑控件的文本量的上限。 ③参数:0;④数据:数量(默认64K); |
编辑字符行号 | 0x436 | EM_EXLINEFROMCHAR | 确定哪个行包含富编辑控件中的指定字符。 ③参数:0;④数据:字符索引;返回行号索引 |
编辑设置选中 | 0x437 | EM_EXSETSEL | 选择控件中的一系列字符或组件对象模型。 ③参数:0;④数据:范围类; |
编辑查找文本 | 0x438 | EM_FINDTEXT | 在富编辑控件中查找文本。查找方式 ③参数:方式1向下,2全字匹配,4分大小写;④数据:文字类; |
编辑格式范围 | 0x439 | EM_FORMATRANGE | 在特定设备的 Rich Edit 控件中格式化文本范围。 ③参数:是否呈现文本;④数据:格式范围类; |
编辑取字格式 | 0x43A | EM_GETCHARFORMAT | 确定富编辑控件中的字符格式。 ③参数:0默认,1所选字符;④数据:字符格式类; |
编辑获取事件 | 0x43B | EM_GETEVENTMASK | 检索富编辑控件的事件掩码。事件掩码指定控件发送到其父窗口的通知代码。 ③参数:0;④数据:0;返回:事件掩码 |
编辑对象接口 | 0x43C | EM_GETOLEINTERFACE | 获取丰富编辑控件的组件对象模型接口。 ③参数:0;④数据:@接口:富编辑对象; |
编辑取段格式 | 0x43D | EM_GETPARAFORMAT | 检索丰富编辑控件中当前所选内容的段落格式。 ③参数:0;④数据:段落格式类; |
编辑取选中字 | 0x43E | EM_GETSELTEXT | 检索格式编辑控件中当前选择的文本。 ③参数:0;④数据:缓冲区; |
编辑隐藏选中 | 0x43F | EM_HIDESELECTION | 隐藏或显示富编辑控件中的选定内容。 ③参数:真=隐藏,假=显示;④数据:0; |
编辑特殊粘贴 | 0x440 | EM_PASTESPECIAL | 将特定剪贴板格式粘贴到富编辑控件中。 ③参数:格式;④数据:特殊粘贴类; |
编辑超出通知 | 0x441 | EM_REQUESTRESIZE | 强制富编辑控件将 编辑超出大小 通知代码发送到其父窗口。 ③参数:0;④数据:0; |
编辑选中类型 | 0x442 | EM_SELECTIONTYPE | 确定富编辑控件的选择内容的类型。 ③参数:0;④数据:0;返回:0为空,1文本,2对象,4多个字符,8多个对象 |
编辑背景颜色 | 0x443 | EM_SETBKGNDCOLOR | 设置丰富编辑控件的背景色。 ③参数:真=系统颜色,假=指定颜色;④数据:颜色值;返回原始背景色。 |
编辑改字格式 | 0x444 | EM_SETCHARFORMAT | 在富编辑控件中设置字符格式。 ③参数:字符格式;④数据:字符格式类; |
编辑设置事件 | 0x445 | EM_SETEVENTMASK | 设置丰富编辑控件的事件掩码。事件掩码指定控件发送到其父窗口的通知代码。 ③参数:0;④数据:事件掩码; |
编辑回调对象 | 0x446 | EM_SETOLECALLBACK | 为丰富编辑控件提供富编辑回调对象,控件使用该对象从客户端获取与 OLE 相关的资源和信息。 ③参数:0;④数据:对象; |
编辑改段格式 | 0x447 | EM_SETPARAFORMAT | 在富编辑控件中设置当前选定内容的段落格式。 ③参数:0;④数据:段落格式类; |
编辑设备行宽 | 0x448 | EM_SETTARGETDEVICE | 设置用于“所见即所得”的目标设备和行宽, (WYSIWYG) 丰富编辑控件中的格式设置。 ③参数:设备;④数据:线条宽度; |
编辑传数据流 | 0x449 | EM_STREAMIN | 将富编辑控件的内容替换为由应用程序定义的编辑流回调函数提供的数据流。 ③参数:选项;④数据:编辑流类;选项:1文本,2RTF;控件字 \objattph 后跟空格表示对象位置。 选项组合标志:0x10宽字符文本,0x20其他代码页(0xFDE90021高位65001是CP_UTF8),0x4000仅流式传输所有语言通用的关键字,0x8000数据流将替换当前所选内容 |
编辑取数据流 | 0x44A | EM_STREAMOUT | 将富编辑控件的内容传递给由应用程序定义的编辑流回调函数。 ③参数:选项;④数据:编辑流类;选项:1文本,2RTF,3空格代替对象的RTF,4对象文本; 选项组合标志:0x10宽字符文本,0x20其他代码页(0xFDE90021高位65001是CP_UTF8),0x4000仅流式传输所有语言通用的关键字,0x8000数据流将替换当前所选内容 |
编辑字符范围 | 0x44B | EM_GETTEXTRANGE | 从丰富编辑控件中检索指定的字符范围。 ③参数:0;④数据:文字类; |
编辑前后断字 | 0x44C | EM_FINDWORDBREAK | 查找指定字符位置之前或之后的下一个断字符,或检索有关该位置的字符的信息。 ③参数:操作;④数据:位置; 操作:0=查找以单词开头的指定位置之前最近的字符。
1=查找在指定位置后开始单词的下一个字符。2=如果指定位置处的字符是分隔符,则返回真,否则返回假。
3=返回字符在指定位置的字符类和断字符标志。4=查找在指定位置之前开始单词的下一个字符。 此值在 CTRL+向左键处理期间使用。
5=查找在指定位置后开始单词的下一个字符。 此值在 CTRL+向右键处理期间使用。6=在指定位置之前查找下一个单词结尾。7=查找指定位置后的下一个词尾分隔符。 |
编辑设置选项 | 0x44D | EM_SETOPTIONS | 设置富编辑控件的选项。 ③参数:1指定选项,2增加选项,3保留新项,4异或选项;④数据:1双击时自动选择单词,
0x40向上滚动,0x80水平滚动,0x100选中反显,0x800只读,0x1000允许多行,0x8000保留所选,0x01000000选择整行,0x00400000竖向文字;
|
编辑获取选项 | 0x44E | EM_GETOPTIONS | 检索富编辑控件选项。 ③参数:0;④数据:0;返回当前选项标志值的组合。 |
编辑搜索文本 | 0x44F | EM_FINDTEXTEX | 查找格式编辑控件中的文本。查找方式 ③参数:0;④数据:1向下,2全字匹配,4分大小写;④数据:查找文字类; |
编辑分词函数 | 0x450 | EM_GETWORDBREAKPROCEX | 检索当前注册的扩充编辑控件的扩展分词过程的地址。 ③参数:0;④数据:0; |
编辑设置分词 | 0x451 | EM_SETWORDBREAKPROCEX | 设置丰富编辑控件的扩展分词过程。 ③参数:0;④数据:编辑分词回调; |
编辑撤销次数 | 0x452 | EM_SETUNDOLIMIT | 设置可存储在丰富编辑控件的撤消队列中的最大操作数。 ③参数:数值;④数据:0; |
编辑重复操作 | 0x454 | EM_REDO | 向丰富编辑控件发送重做消息,以重复控件重做队列中的下一个操作。 ③参数:0;④数据:0; |
编辑能否重复 | 0x455 | EM_CANREDO | 确定控制重做队列中是否有任何操作。 ③参数:0;④数据:0;返回0无队列,否则可重做 |
编辑撤销类型 | 0x456 | EM_GETUNDONAME | 检索下一个撤消操作的类型。 ③参数:0;④数据:0;返回:0未知,1键入操作。2删除操作。3拖放操作。4剪切操作。5粘贴操作。6自动表格插入 |
编辑重做类型 | 0x457 | EM_GETREDONAME | 检索重做队列中下一个操作的类型。③参数:0;④数据:0;返回:0未知,1键入操作。2删除操作。3拖放操作。4剪切操作。5粘贴操作。6自动表格插入 |
编辑阻止撤销 | 0x458 | EM_STOPGROUPTYPING | 阻止控件将其他键入操作收集到当前撤消操作中。 ③参数:0;④数据:0; |
编辑文本模式 | 0x459 | EM_SETTEXTMODE | 设置富编辑控件的文本模式或撤消级别。 如果控件包含任何文本,则消息失败。 ③参数:模式;④数据:0; |
编辑获取模式 | 0x45A | EM_GETTEXTMODE | 获取丰富的编辑控件的当前文本模式和撤消级别。 ③参数:0;④数据:0;返回:文本模式 |
编辑链接检测 | 0x45B | EM_AUTOURLDETECT | 启用或禁用富编辑控件对超链接的自动检测。③参数:0禁用检测,1识别路径域名,2识别邮件,4识别电话,8识别东亚域名, 16识别盘符路径,32禁止拉丁文、希腊语和西里尔文的域名;④数据:0默认名字,或者news:http:ftp:telnet:等等 |
编辑是否检测 | 0x45C | EM_GETAUTOURLDETECT | 指示是否在富编辑控件中启用自动 URL 检测。 ③参数:0;④数据:0;返回1活动检测,0非活动 |
编辑改调色板 | 0x45D | EM_SETPALETTE | 更改富编辑控件用于其显示窗口的调色板。 ③参数:调色板;④数据:0; |
编辑获取文本 | 0x45E | EM_GETTEXTEX | 获取富编辑控件中的文本。 ③参数:取文字类;④数据:文本缓冲区; |
编辑文本长度 | 0x45F | EM_GETTEXTLENGTHEX | 以各种方式计算文本长度。 ③参数:文字长度类;④数据:0;返回字数 |
编辑显滚动条 | 0x460 | EM_SHOWSCROLLBAR | 显示或隐藏丰富编辑控件的主机窗口中的滚动条之一。 ③参数:0水平,1垂直;④数据:真=显示,假=隐藏; |
编辑设置文本 | 0x461 | EM_SETTEXTEX | 插入替换文本,可使用代码页和格式文本。 ③参数:改文字类;④数据:文字内容;开头使用“{\rtf”或“{urtf”序列,则使用 RTF 读取器读取文本。 |
编辑设置标点 | 0x464 | EM_SETPUNCTUATION | 设置富编辑控件的标点符号。 ③参数:1以下标点,2前导符号,3溢出,4分隔符;④数据:标点类; |
编辑获取标点 | 0x465 | EM_GETPUNCTUATION | 获取富编辑控件的当前标点符号。 ③参数:1以下标点,2前导符号,3溢出,4分隔符;④数据:标点类; |
编辑设置换行 | 0x466 | EM_SETWORDWRAPMODE | 设置丰富编辑控件的自动换行和断字选项。 ③参数:0x010自动换行,0x020中日韩英断字,0x040识别溢出,0x080设为级别1,0x100级别2,0x200自定义符号;④数据:0; |
编辑获取换行 | 0x467 | EM_GETWORDWRAPMODE | 获取丰富编辑控件的当前换行和分词选项。 ③参数:0;④数据:0; |
编辑改合成色 | 0x468 | EM_SETIMECOLOR | 为丰富编辑控件设置输入法编辑器合成颜色。 ③参数:0;④数据:合成色类; |
编辑取合成色 | 0x469 | EM_GETIMECOLOR | 检索输入法编辑器合成颜色。 ③参数:0;④数据:合成色类; |
编辑改输入项 | 0x46A | EM_SETIMEOPTIONS | 设置输入法编辑器选项。 ③参数:1指定选项,2组合添加,3保留指定,4独占异或;④数据:1禁用IME,2输入焦点时启用IME,4输入焦点时禁用IME,
8输入焦点时关闭IME状态窗口,0x20使用的注释,0x40输入焦点时激活IME,0x80输入焦点时停用IME,0x100输入焦点时还原IME,0x400单独的组合字符串编辑器; |
编辑取输入项 | 0x46B | EM_GETIMEOPTIONS | 获取输入法编辑器选项。 ③参数:0;④数据:0; |
编辑转换坐标 | 0x46C | EM_CONVPOSITION | 此消息未实现。 ③参数:0;④数据:0; |
编辑改语言项 | 0x478 | EM_SETLANGOPTIONS | 在丰富编辑控件中设置输入法编辑器和亚洲语言支持的选项。 ③参数:0;④数据:选项; |
编辑取语言项 | 0x479 | EM_GETLANGOPTIONS | 获取输入法编辑器的丰富编辑控件选项设置和亚洲语言支持。 ③参数:0;④数据:0;返回:语言选项 |
编辑输入模式 | 0x47A | EM_GETIMECOMPMODE | 检索丰富编辑控件的当前输入法编辑器模式。 ③参数:0;④数据:0;返回:0未打开。1真内联模式。2级别2。3级别2.5。4特殊界面 |
编辑查找文字 | 0x47B | EM_FINDTEXTW | 在富编辑控件中查找宽文本。查找方式 ③参数:方式1向下,2全字匹配,4分大小写;④数据:文字类; |
编辑搜索文字 | 0x47C | EM_FINDTEXTEXW | 查找格式编辑控件中的宽文本。查找方式 ③参数:0;④数据:1向下,2全字匹配,4分大小写;④数据:查找文字类; |
编辑转换输入 | 0x47D | EM_RECONVERSION | 重新转换对话框调用输入法编辑器。 ③参数:0;④数据:0; |
编辑设置偏差 | 0x47E | EM_SETIMEMODEBIAS | 为丰富编辑控件设置输入法编辑器模式偏差。 ③参数:1名字偏差,2没有偏差;④数据:与参数相同; |
编辑获取偏差 | 0x47F | EM_GETIMEMODEBIAS | 检索富编辑控件的输入法编辑器模式偏差。 ③参数:0;④数据:0; |
编辑设置双向 | 0x4C8 | EM_SETBIDIOPTIONS | 设置富编辑控件中双向选项的当前状态。 ③参数:0;④数据:双向信息类; |
编辑获取双向 | 0x4C9 | EM_GETBIDIOPTIONS | 获取富编辑控件中双向选项的当前状态。 ③参数:0;④数据:双向信息类; |
编辑设置版式 | 0x4CA | EM_SETTYPOGRAPHYOPTIONS | 设置丰富编辑控件的版式选项的当前状态。 ③参数:1高级换行格式,2简单换行;④数据:与参数相同; |
编辑获取版式 | 0x4CB | EM_GETTYPOGRAPHYOPTIONS | 返回丰富编辑控件的版式选项的当前状态。 ③参数:0;④数据:0; |
编辑设置样式 | 0x4CC | EM_SETEDITSTYLE | 设置格式编辑控件的当前编辑样式标志。 ③参数:样式;④数据:与参数相同; |
编辑获取样式 | 0x4CD | EM_GETEDITSTYLE | 检索当前编辑样式标志。 ③参数:0;④数据:0; |
编辑轮廓外形 | 0x4DC | EM_OUTLINE | 未实现。 ③参数:0;④数据:0; |
编辑取滚动点 | 0x4DD | EM_GETSCROLLPOS | 获取编辑控件的当前滚动位置。 ③参数:0;④数据:坐标类; |
编辑改滚动点 | 0x4DE | EM_SETSCROLLPOS | 将富编辑控件的内容滚动到指定点。 ③参数:0;④数据:坐标类; |
编辑设置字号 | 0x4DF | EM_SETFONTSIZE | 设置富编辑控件中所选文本的字号。 ③参数:-1637 到 1638磅;④数据:0; |
编辑获取缩放 | 0x4E0 | EM_GETZOOM | 获取多行编辑控件或丰富编辑控件的当前缩放比例。缩放比例始终在 1/64 和 64 之间。 ③参数:分子;④数据:分母; |
编辑设置缩放 | 0x4E1 | EM_SETZOOM | 设置获取多行编辑控件或丰富编辑控件的当前缩放比例。缩放比例始终在 1/64 和 64 之间。③参数:分子;④数据:分母; |
编辑获取视图 | 0x4E2 | EM_GETVIEWKIND | 未使用。 ③参数:0;④数据:0; |
编辑设置视图 | 0x4E3 | EM_SETVIEWKIND | 未使用。 ③参数:0;④数据:0; |
编辑获取页面 | 0x4E4 | EM_GETPAGE | 未使用。 ③参数:0;④数据:0; |
编辑设置页面 | 0x4E5 | EM_SETPAGE | 未使用。 ③参数:0;④数据:0; |
编辑获取连字 | 0x4E6 | EM_GETHYPHENATEINFO | 检索有关富编辑控件的连字的信息。 ③参数:连字类;④数据:0; |
编辑设置连字 | 0x4E7 | EM_SETHYPHENATEINFO | 设置富编辑控件执行断字的方式。 ③参数:连字类;④数据:0; |
编辑获取布局 | 0x4EB | EM_GETPAGEROTATE | 获取富编辑控件中的文本布局。 ③参数:0;④数据:0;返回布局相当于旋转角度:0=0度,1=270度,2=180度,3=90度,5蒙古文 |
编辑设置布局 | 0x4EC | EM_SETPAGEROTATE | 设置富编辑控件中的文本布局。 ③参数:0左右/上下,1上下-右左,2右左-下上,3下上-左右,5上下-左右;④数据:0; |
编辑取字偏差 | 0x4ED | EM_GETCTFMODEBIAS | 获取富编辑控件中文本服务框架模式偏差值。 ③参数:0;④数据:0; |
编辑改字偏差 | 0x4EE | EM_SETCTFMODEBIAS | 设置富编辑控件中文本服务框架 (TSF) 模式偏差。 ③参数:0无,1文件名,2名称,3阅读,4日期 ,5对话,6数字,7平假名,8片假名,9朝鲜文,10半角片假,11全角字母,12半角字母;④数据:0; |
编辑获取键盘 | 0x4F0 | EM_GETCTFOPENSTATUS | 确定文本服务框架 (TSF) 键盘是打开还是关闭。 ③参数:0;④数据:0;返回:真=打开,假=关闭 |
编辑设置键盘 | 0x4F1 | EM_SETCTFOPENSTATUS | 打开或关闭文本服务框架 (TSF) 键盘。 ③参数:真=打开,假=关闭;④数据:0; |
编辑合成文本 | 0x4F2 | EM_GETIMECOMPTEXT | 检索输入法编辑器合成文本。 ③参数:合成字类;④数据:缓冲区; |
编辑东亚区域 | 0x4F3 | EM_ISIME | 使用丰富编辑控件的当前输入区域设置确定是东亚区域设置。 ③参数:0;④数据:0; |
编辑输入功能 | 0x4F4 | EM_GETIMEPROPERTY | 检索与当前输入区域设置关联的输入法编辑器的属性和功能。 ③参数:功能属性;④数据:0; |
编辑获取对象 | 0x50D | EM_GETQUERYRTFOBJ | 未实现。 ③参数:0;④数据:0; |
编辑设置对象 | 0x50E | EM_SETQUERYRTFOBJ | 未实现。 ③参数:0;④数据:0; |
编辑获取纠错 | 0x4E9 | EM_GETAUTOCORRECTPROC | 获取指向应用程序定义的 编辑纠错回调 函数的 指针。 ③参数:0;④数据:0; |
编辑设置纠错 | 0x4EA | EM_SETAUTOCORRECTPROC | 定义当前自动更正回调过程。 ③参数:编辑纠错回调;④数据:0; |
编辑调用纠错 | 0x4FF | EM_CALLAUTOCORRECTPROC | 调用设置的自动更正回调函数,前提是插入点前面的文本是自动更正的候选项。 ③参数:宽字符;④数据:0; |
编辑获取表格 | 0x509 | EM_GETTABLEPARMS | 检索表行的表参数和指定数量的单元格参数。 ③参数:表行类;④数据:表列类; |
编辑设置表格 | 0x533 | EM_SETTABLEPARMS | 更改表中行的参数。 ③参数:表行类;④数据:表列类; |
编辑设置扩展 | 0x513 | EM_SETEDITSTYLEEX | 设置当前的扩展编辑样式标志。 ③参数:样式;④数据:同参数; |
编辑获取扩展 | 0x514 | EM_GETEDITSTYLEEX | 检索当前的扩展编辑样式标志。 ③参数:0;④数据:0; |
编辑获取故事 | 0x522 | EM_GETSTORYTYPE | 获取故事类型。 ③参数:0;④数据:0; |
编辑设置故事 | 0x523 | EM_SETSTORYTYPE | 设置故事类型。 ③参数:索引;④数据:类型; |
编辑获取省略 | 0x531 | EM_GETELLIPSISMODE | 检索当前省略号模式。 ③参数:0;④数据:@模式;0不使用省略号。1末尾的省略号 (强行中断) 。3结尾的省略号 (分词) 。 |
编辑设置省略 | 0x532 | EM_SETELLIPSISMODE | 设置当前省略号模式。 ③参数:0;④数据:0不使用省略号,1末尾的省略号 (强行中断) 。3结尾的省略号 (分词) ; |
编辑获取触摸 | 0x536 | EM_GETTOUCHOPTIONS | 检索与丰富编辑控件关联的触摸选项。 ③参数:1触摸手柄是否可见,2未实现;④数据:0; |
编辑设置触摸 | 0x537 | EM_SETTOUCHOPTIONS | 设置与丰富编辑控件关联的触摸选项。 ③参数:1显示或隐藏触摸手柄,2启用或禁用触摸手柄;④数据:真/假; |
编辑插入图像 | 0x53A | EM_INSERTIMAGE | 将所选内容替换为显示图像的数据。 ③参数:0;④数据:编辑图像类; |
编辑自动化名 | 0x540 | EM_SETUIANAME | 设置 UI 自动化 (UIA) 的丰富编辑控件的名称。 ③参数:0;④数据:名称; |
编辑省略状态 | 0x542 | EM_GETELLIPSISSTATE | 检索当前省略号状态。 ③参数:0;④数据:0;显示省略号则返回真,否则返回假。 |
编辑纠错回调——函数结构:
中文名字 | 英文名称 | 参数 | 作用解释 |
编辑纠错回调 | Autocorrectproc | 5 | 为输入到丰富编辑控件中的文本提供应用程序定义的自动错误更正。 |
编辑纠错回调——成员表 |
中文 | 英文 | 类型 | 作用解释 |
语言 | langid | 整数 | 标识要用于自动更正的自动更正文件的语言 ID。 |
候选 | pszBefore | 整数 | 自动更正候选字符串。 |
更正 | pszAfter | 整数 | 生成的自动更正字符串(如果未 ATP_NOCHANGE返回值)。 |
字数 | cchAfter | 整数 | 自动更正字符串的字符计数。 |
尾字 | pcchReplaced | 整数 | 候选字符串要替换为自动更正字符串的尾随字符计数。 |
编辑纠错回调——返回值:
英文名称 | 数值 | 作用解释 |
ATP_NOCHANGE | 0 | 无更改。 |
ATP_CHANGE | 1 | 更改但不替换大多数分隔符,并且不要替换未更改的尾随字符范围, (保留其格式) 。 |
ATP_NODELIMITER | 2 | 更改但不替换未更改的尾随字符范围。 |
ATP_REPLACEALLTEXT | 4 | 替换尾随字符,即使它们未更改, (对整个替换字符串) 使用相同的格式。 |
编辑分词回调——函数结构:
中文名字 | 英文名称 | 参数 | 作用解释 |
编辑分词回调 | Editwordbreakprocex | 4 | 确定指定文本中字符的断字符索引或字符类和分词标志。 |
编辑分词回调——成员表 |
中文 | 英文 | 类型 | 作用解释 |
文字 | pchText | 整数 | 指向当前位置的文本的指针。 |
长度 | cchText | 整数 | 缓冲区 中代码指定方向的字符数。 |
字集 | bCharSet | 整数 | 文本的字符集。 |
功能 | action | 整数 | 指向变量的指针,回调函数将该变量设置为实际读取或写入的字节数。 |
编辑流回调——函数结构:
中文名字 | 英文名称 | 参数 | 作用解释 |
编辑流回调 | Editstreamcallback | 4 | 用于将数据流传入或传出丰富的编辑控件。 |
编辑流回调——成员表 |
中文 | 英文 | 类型 | 作用解释 |
标识 | dwCookie | 整数 | 编辑流类 结构的 标识 成员指定的值。 |
指针 | pbBuff | 整数 | 指向要从中读取或写入的缓冲区的指针。 |
长度 | cb | 整数 | 要读取或写入的字节数。 |
实长 | pcb | 整数 | 指向变量的指针,回调函数将该变量设置为实际读取或写入的字节数。 |
编辑连字回调——函数结构:
中文名字 | 英文名称 | 参数 | 作用解释 |
编辑连字回调 | HyphenateProc | 4 | 它确定如何在丰富编辑控件中执行断字。 |
编辑连字回调——成员表 |
中文 | 英文 | 类型 | 作用解释 |
标识 | pszWord | 整数 | 指向用于连字符的单词的指针。 |
指针 | langid | 整数 | 控件的当前语言 ID。 |
长度 | ichExceed | 整数 | 传递的字符串中超出行宽的字符的索引。 |
实长 | phyphresult | 整数 | 指向断字结果填充的 断字类 结构的指针。 |
断字类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
断字类 | HYPHRESULT | 12 | 包含有关丰富编辑控件中断字结果的信息。 |
断字类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
种类 | khyph | 整数 | 断字的类型。 |
位置 | ichHyph | 整数 | 发生断字符的传递字符串中 宽字符 的索引。 |
换字 | chHyph | 整数 | 断字需要替换、添加或更改时使用的字符。如果不需要新字符,则值为零。 |
连字类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
连字类 | HYPHENATEINFO | 8 | 包含有关丰富编辑控件的连字信息。 |
连字类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | cbSize | 整形 | 指定结构的大小(以字节为单位)。 |
区域 | dxHyphenateZone | 整形 | 缇大小 (1/1440 英寸) ,其边距附近不包括连字。如果空格字符比此值更接近边距,请不要将以下单词连字符。 |
回调 | pfnHyphenate | 整数 | 客户端定义的 编辑连字回调 回调函数。 |
编辑图像类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
编辑图像类 | RICHEDIT_IMAGE_PARAMETERS | 24 | 定义要由 编辑插入图像 消息插入的图像的属性。 |
编辑图像类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
宽度 | xWidth | 整数 | 图像的宽度(以 像素 为单位) (0.01 毫米) 。 |
高度 | yHeight | 整数 | 图像的宽度(以 像素 为单位) (0.01 毫米) 。 |
上升 | Ascent | 整数 | 如果是基线对齐,则此参数是图像顶部超出文本基线的距离(以 像素 为单位)。 如果是基线对齐且上升为零,则图像底部位于文本基线处。 |
对齐 | Type | 整数 | 图像的垂直对齐方式。0顶部对齐,1底部对齐,2文本基线对齐 |
备注 | pwszAlternateText | 整数 | 图像的备用文本。 |
图像 | pIStream | 整数 | 包含图像数据的流。 |
双向信息类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
双向信息类 | BIDIOPTIONS | 8 | 包含有关丰富编辑控件的双向信息。 |
双向信息类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | cbSize | 整数 | 指定结构的大小(以字节为单位)。 |
掩码 | wMask | 整形 | 指定效果的标志,跟效果值相同。掩码效果标志对照 |
效果 | wEffects | 整形 | 指示效果或当前状态。1默认段落方向。2纯文本布局。4 !"#&'()*+,-./:;<=> 被视为强 LTR 字符。8上下文段落方向性处于活动状态。 ,$10上下文段落对齐方式处于活动状态。$20重新计算双向信息并重绘。0x40加减号没有隐式方向斜杠字符为通用分隔符。0x80宽字符双向算法 (UBA) 。 |
双向信息掩码和效果标志——对照表:
掩码名字 | 掩码值 | 作用 | 效果名称 | 效果值 | 作用 |
BOM_CONTEXTALIGNMENT | 0x10 | BOE_CONTEXTALIGNMENT值有效。 | BOE_CONTEXTALIGNMENT | 0x10 |
如果此标志为 1,则上下文段落对齐方式处于活动状态。 此功能仅用于纯文本控件。 活动时,如果第一个强方向字符为 LTR,则段落对齐方式设置为PFA_LEFT;如果第一个强方向字符为 RTL,则PFA_RIGHT。 如果控件没有强方向字符,则当控件重新获得焦点时,将根据键盘语言的方向性选择对齐方式 (默认值:0) 。 |
BOM_CONTEXTREADING | 8 | BOE_CONTEXTREADING值有效。 | BOE_CONTEXTREADING | 8 |
如果此标志为 1,则上下文段落方向性处于活动状态。 此功能仅用于纯文本控件。 活动时,如果第一个强方向字符为 LTR,则PFE_RTLPARA段落方向性效果设置为 0;如果第一个强方向字符为 RTL,则为 1。 如果控件没有强方向字符,则根据 的方向性选择方向。控件重新获得焦点时的键盘语言 (默认值:0) 。 |
BOM_FORCERECALC | 0x20 | BOE_FORCERECALC有效 | BOE_FORCERECALC | 0x20 | Windows 8:强制富编辑控件重新计算双向信息,然后重绘控件。 |
BOM_LEGACYBIDICLASS | 0x40 | BOE_LEGACYBIDICLASS值有效。 | BOE_LEGACYBIDICLASS | 0x40 |
导致加号和减号字符被视为没有隐式方向的中性字符。 还会导致斜杠字符被视为通用分隔符。 |
BOM_NEUTRALOVERRIDE | 4 | BOE_NEUTRALOVERRIDE值有效。 | BOE_NEUTRALOVERRIDE | 4 |
如果此标志为 1,则为字符 !”#&' () *+,-./:;<=> 被视为强 LTR 字符 (默认值:0) 。 |
BOM_PLAINTEXT | 2 | BOE_PLAINTEXT值有效。 | BOE_PLAINTEXT | 2 | 使用纯文本布局 (过时) 。 |
BOM_DEFPARADIR | 1 | BOE_RTLDIR值有效。 | BOE_RTLDIR | 1 | 默认段落方向 - 表示对齐方式 (过时) 。 |
BOM_UNICODEBIDI | 0x80 | BOE_UNICODEBIDI值有效。 | BOE_UNICODEBIDI | 0x80 |
如果此标志为 1,则 Unicode 双向算法 (UBA) 用于富文本控件。 UBA 始终用于纯文本控件 (默认值:0) 。 |
范围类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
范围类 | CHARRANGE | 8 | 指定编辑控件中的字符范围。 |
范围类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
首 | cpMin | 整数 | 紧邻范围中第一个字符的字符位置索引。 |
尾 | cpMax | 整数 | 紧跟在范围中最后一个字符之后的字符位置。 |
查找文字类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
查找文字类 | FINDTEXTEXA | 20 | 包含有关富编辑控件中的搜索操作的信息。 |
查找文字类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
首 | chrg.cpMin | 整数 | 要搜索的第一个字符的字符位置索引。 |
尾 | chrg.cpMax | 整数 | 要搜索的最后一个字符之后的字符位置。-1是整个范围 |
文字 | lpstrText | 整数 | 查找操作中使用的以 0 结尾的字符串。 |
始 | chrgText.cpMin | 整数 | 在其中找到文本的第一个字符的字符位置索引。 |
末 | chrgText.cpMax | 整数 | 在其中找到文本的最后一个字符之后的字符位置。 |
格式范围类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
格式范围类 | FORMATRANGE | 32 | 丰富编辑控件用于为特定设备设置其输出格式的信息。 |
格式范围类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
设备 | hdc | 整数 | 如果正在使用 编辑格式范围 将输出发送到设备,则为设备呈现的 HDC。 |
目标 | hdcTarget | 整数 | 要格式化的目标设备的 HDC。 |
区域 | rc | 矩形类 | 要呈现到 的 全区 矩形中的区域。 单位以缇为单位。 |
全区 | rcPage | 矩形类 | 呈现设备上页面的整个区域。 单位以缇为单位。 |
首 | chrg.cpMin | 整数 | 紧邻范围中第一个字符的字符位置索引。 |
尾 | chrg.cpMax | 整数 | 紧跟在范围中最后一个字符之后的字符位置。 |
字符格式类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
字符格式类 | CHARFORMATA | 64 | 包含有关富编辑控件中的字符格式的信息。 |
字符格式类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | 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 |
合成色类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
合成色类 | COMPCOLOR | 12 | 包含合成字符串的颜色设置。 |
标点类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
文字 | crText | 整数 | 文本的颜色。 |
背景 | crBackground | 整数 | 背景颜色。 |
效果 | dwEffects | 整数 | 字符效果值,1粗体,2斜体,4下划线,8删除线,$10受保护,$20链接,0x40000000窗口文本色。 |
合成字类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
合成字类 | IMECOMPTEXT | 8 | 包含有关输入法编辑器 (IME) 在富编辑控件中的合成文本的信息。 |
合成字类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | cbSize | 整数 | 指定结构的大小(以字节为单位)。 |
标志 | flags | 整数 | 组合字符串的类型。1最终组合的字符串。 |
标点类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
标点类 | PUNCTUATION | 8 | 包含有关在富编辑控件中使用的标点的信息。 |
标点类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | iSize | 整数 | 标点字符缓冲区大小(以字节为单位)。 |
文字 | szPunctuation | 整数 | 包含标点字符的缓冲区。 |
改文字类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
改文字类 | SETTEXTEX | 8 | 包含用于向富编辑控件写入文本的信息。 |
改文字类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
标志 | flags | 整数 | 指定文本操作的值。0=删除撤消堆栈和文本格式,替换所有文本。1保留撤消堆栈。2替换选定内容并保留格式文本。4输入新字符。8宽字符文本 |
码页 | codepage | 整数 | 翻译中使用的代码页。0=ANSI,1200=Unicode |
文字长度类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
文字长度类 | GETTEXTLENGTHEX | 8 | 含有关如何计算富编辑控件的文本长度的信息。 |
文字长度类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
标志 | flags | 整数 | 指定文本操作的值。0字符数,1行数,2精确答案,4近似答案,8字符数,16字节数 |
码页 | codepage | 整数 | 翻译中使用的代码页。0=ANSI,1200=Unicode |
取文字类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
取文字类 | GETTEXTEX | 20 | 包含用于从富编辑控件获取文本的信息。 |
取文字类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | cb | 整数 | 用于存储检索到的文本的缓冲区的大小(以字节为单位)。 |
标志 | flags | 整数 | 指定文本操作的值。0默认所有文本,1回车转换行回车,2所选文本,4带结构特殊字符,8不含隐藏文本 |
码页 | codepage | 整数 | 翻译中使用的代码页。0=ANSI,1200=Unicode |
默字 | lpDefaultChar | 整数 | 如果无法在指定的代码页中表示宽字符,则使用的字符。0=系统默认字符; |
默认 | lpUsedDefChar | 整数 | 指示是否使用了默认字符。如果宽字符不能在指定的代码页中表示,则为真 |
编辑流类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
编辑流类 | EDITSTREAM | 12 | 丰富编辑控件使用信息将数据流传入或传出控件。 |
编辑流类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
标识 | dwCookie | 整数 | 指定富编辑控件传递给回调函数的应用程序定义值。 |
结果 | dwError | 整数 | 指示流式传入 (读取) 或流出 (写入) 操作的结果。 值为零表示没有错误。 |
回调 | pfnCallback | 整数 | 指向回调函数的指针。控件重复调用回调函数,每次调用时传输一部分数据。 |
文字类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
文字类 | TEXTRANGEA/FINDTEXTA | 12 | 富编辑控件的文本范围和搜索操作的信息。 |
文字类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
首 | chrg.cpMin | 整数 | 紧邻范围中第一个字符的字符位置索引。 |
尾 | chrg.cpMax | 整数 | 紧跟在范围中最后一个字符之后的字符位置。 |
文字 | lpstrText | 整数 | 查找操作中使用的以 0 结尾的字符串。 |
特殊粘贴类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
特殊粘贴类 | REPASTESPECIAL | 8 | 包含标识粘贴对象的显示方面是否应基于对象的内容或表示对象的图标的信息。 |
特殊粘贴类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
方面 | dwAspect | 整数 | 显示方面。1内容,4图标 |
数据 | dwParam | 整数 | 方面数据。方面为图标则包含具有对象的图标视图的图元文件的句柄。 |
表行类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
表行类 | TABLEROWPARMS | 26 | 定义表中行的属性。 定义包括 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) 。 |
表列类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
表列类 | TABLECELLPARMS | 40 | 定义表格行中单元格的属性。 定义包括 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_PLAINTEXT | 1 | 指示纯文本模式,其中控件类似于标准编辑控件。 |
TM_RICHTEXT | 2 | 指示富文本模式,在该模式下,控件具有标准的丰富编辑功能。 格式文本模式是默认设置。 |
设置撤消级别参数 |
TM_SINGLELEVELUNDO | 4 | 控件允许用户仅撤消撤消队列中的最后一个操作。 |
TM_MULTILEVELUNDO | 8 | 控件支持多个撤消操作。 这是默认设置。 使用 编辑撤销次数 消息设置撤消操作的最大数目。 |
设置代码页参数 |
TM_SINGLECODEPAGE | 16 | 控件仅允许英语键盘和对应于默认字符集的键盘。可以使用希腊语和英语。 这会阻止 Unicode 文本进入控件。如果控件必须限制为 ANSI 文本,请使用此值。 |
TM_MULTICODEPAGE | 32 | 控件允许多个代码页和 Unicode 文本进入 控件。 这是默认设置。 |
富编辑控件文章故事类型——常量数值:
英文名称 | 数值 | 作用解释 |
tomFontStyleUpright | 0 | 表示正常的直立字体样式。 |
tomFontStyleOblique | 1 | 表示倾斜字体样式。 |
tomFontStyleItalic | 2 | 表示斜体字体样式。 |
tomFontStretchDefault | 0 | 没有定义的字体拉伸。 |
tomFontStretchUltraCondensed | 1 | 超浓缩字体拉伸 (正常) 的 50%。 |
tomFontStretchExtraCondensed | 2 | 额外压缩字体拉伸 (正常) 的 62.5%。 |
tomFontStretchCondensed | 3 | 压缩字体拉伸 (正常) 的 75%。 |
tomFontStretchSemiCondensed | 4 | 半浓缩字体拉伸 (正常) 的 87.5%。 |
tomFontStretchNormal | 5 | 所有其他字体拉伸值相关的正常字体拉伸 (100%) 。 |
tomFontStretchSemiExpanded | 6 | 半展开字体 (正常) 的 112.5%。 |
tomFontStretchExpanded | 7 | 展开的字体拉伸 (正常) 的 125%。 |
tomFontStretchExtraExpanded | 8 | 额外展开的字体拉伸 (正常) 的 150%。 |
tomFontStretchUltraExpanded | 9 | 超扩展字体 (正常) 的 200%。 |
tomFontWeightDefault | 0 | 默认字体粗细。 |
tomFontWeightThin | 100 | 较细的字体粗细。 |
tomFontWeightExtraLight | 200 | 额外轻量字体粗细。 |
tomFontWeightLight | 300 | 浅色字体粗细。 |
tomFontWeightNormal | 400 | 正常字体粗细。 |
tomFontWeightRegular | 400 | 与 tomFontWeightNormal 相同。 |
tomFontWeightMedium | 500 | 中等字体粗细。 |
tomFontWeightSemiBold | 600 | 半粗体字体粗细。 |
tomFontWeightBold | 700 | 粗体字体粗细。 |
tomFontWeightExtraBold | 800 | 加粗字体粗细。 |
tomFontWeightBlack | 900 | 字体粗细。 |
tomFontWeightHeavy | 900 | 与 tomFontWeightBlack 相同。 |
tomFontWeightExtraBlack | 950 | 额外的重字体粗细。 |
tomParaPropMathAlign | 0x437 | 数学段落的对齐属性。 |
tomDocMathBuild | 0x80 | 与 ITextDocument2::SetProperty 方法一起使用,可设置 tomMathAutoCorrect、 tomTeX 或 tomMathAlphabetics 的任意组合。 |
tomMathLMargin | 0x81 | 显示数学的左边距。 |
tomMathRMargin | 0x82 | 显示数学运算的右边距。 |
tomMathWrapIndent | 0x83 | 用于显示数学的公式换行缩进。 |
tomMathWrapRight | 0x84 | 公式右换行缩进,用于在从左到右 (LTR) 数学区域) 中显示数学 (。 |
tomMathPostSpace | 0x86 | 显示数学公式后的空格。 |
tomMathPreSpace | 0x85 | 显示数学公式前的空格。 |
tomMathInterSpace | 0x87 | 数学段落中公式之间的间距。 |
tomMathIntraSpace | 0x88 | 显示数学公式中的行之间的间距。 |
tomCanCopy | 0x89 | 指示是否可以将数据复制到剪贴板。 |
tomCanRedo | 0x8a | 指示是否存在一个或多个重做操作。 |
tomCanUndo | 0x8b | 指示是否存在一个或多个撤消操作。 |
tomUndoLimit | 0x8c | 撤消堆栈计数限制。 |
tomDocAutoLink | 0x8d | 文档自动链接。 |
tomEllipsisMode | 0x8e | 省略号模式。 |
tomEllipsisState | 0x8f | 省略号状态。 |
tomEllipsisNone | 0 | 省略号已禁用。 |
tomEllipsisEnd | 1 | 省略号强制在行中的任何位置中断。 |
tomEllipsisWord | 3 | 省略号强制在单词之间休息。 |
tomEllipsisPresent | 1 | 省略号存在。 |
tomVTopCell | 1 | 垂直合并单元格集中的顶部单元格。 |
tomVLowCell | 2 | 垂直合并单元格集中除顶部单元格以外的任何单元格。 |
tomHStartCell | 4 | 在水平合并的单元格集中启动单元格。 |
tomHContCell | 8 | 水平合并单元格集中除开头之外的任何单元格。 |
tomRowUpdate | 1 | 更新行,使表格行的属性由关联的文本范围标识。 |
tomRowApplyDefault | 0 | 表行应用程序默认值 |
tomCellStructureChangeOnly | 1 | 更改单元格宽度 () 或单元格计数 (更改列宽度和插入/删除列而不更改单元格边框属性,等等。) |
tomRowHeightActual | 0x80b | 表行的实际高度。 |
富编辑控件事件掩码——常量数值:
英文名称 | 数值 | 作用解释 |
ENM_NONE | 0x00000000 | 不发送通知 |
ENM_CHANGE | 0x00000001 | 发送 编辑窗口更改 通知 |
ENM_UPDATE | 0x00000002 | 发送 编辑更新重绘 通知 |
ENM_SCROLL | 0x00000004 | 发送 编辑水平滚动和编辑垂直滚动 通知 |
ENM_SCROLLEVENTS | 0x00000008 | 发送 编辑键盘鼠标 滚轮通知 |
ENM_DRAGDROPDONE | 0x00000010 | 发送 编辑拖放完成 通知 |
ENM_PARAGRAPHEXPANDED | 0x00000020 | 发送 编辑展开大纲 通知 |
ENM_PAGECHANGE | 0x00000040 | 发送 编辑页面更改 通知 |
ENM_CLIPFORMAT | 0x00000080 | 发送 编辑特定格式 通知 |
ENM_KEYEVENTS | 0x00010000 | 发送 编辑键盘鼠标 键盘通知 |
ENM_MOUSEEVENTS | 0x00020000 | 发送 编辑键盘鼠标 鼠标通知 |
ENM_REQUESTRESIZE | 0x00040000 | 发送 编辑超出大小 通知 |
ENM_SELCHANGE | 0x00080000 | 发送 编辑选字更改 通知 |
ENM_DROPFILES | 0x00100000 | 发送 编辑文件拖放 通知 |
ENM_PROTECTED | 0x00200000 | 发送 编辑保护文本 通知 |
ENM_CORRECTTEXT | 0x00400000 | 发送 编辑校正手势 通知 |
ENM_IMECHANGE | 0x00800000 | 发送 编辑换输入法 通知 |
ENM_LANGCHANGE | 0x01000000 | 发送 语言更改 通知 |
ENM_OBJECTPOSITIONS | 0x02000000 | 发送 编辑对象读取 通知 |
ENM_LINK | 0x04000000 | 发送 编辑链接通知 通知 |
ENM_LOWFIRTF | 0x08000000 | 发送 编辑无效字符 通知 |
ENM_STARTCOMPOSITION | 0x10000000 | 发送 编辑输入服务 通知 |
ENM_ENDCOMPOSITION | 0x20000000 | 发送 编辑完成输入 通知 |
ENM_GROUPTYPINGCHANGE | 0x40000000 | 发送 分组打字更改 通知 |
ENM_HIDELINKTOOLTIP | 0x80000000 | 发送 隐藏链接工具提示 通知 |
富编辑控件编辑样式标志——常量数值:
英文名称 | 数值 | 作用解释 |
SES_BEEPONMAXTEXT | 2 | 如果用户尝试输入超过最大字符数,Rich Edit 将调用系统蜂鸣器。 |
SES_BIDI | 0x1000 | 启用双向处理。 如果以下任一窗口样式处于活动状态,Rich Edit 会自动启用此功能: WS_EX_RIGHT、 WS_EX_RTLREADINGWS_EX_LEFTSCROLLBAR。 但是,在使用 ITextHost 的自定义实现时,此设置对于处理这些窗口样式很有用, (默认值:0) 。 |
SES_CTFALLOWEMBED | 0x00200000 | 带 SP1 的 Windows XP:允许使用 TSF 插入嵌入对象 (默认值:0) 。 |
SES_CTFALLOWPROOFING | 0x00800000 | 带 SP1 的 Windows XP:允许 TSF 校对提示 (默认值:0) 。 |
SES_CTFALLOWSMARTTAG | 0x00400000 | 带 SP1 的 Windows XP:允许 TSF SmartTag 提示 (默认值:0) 。 |
SES_CTFNOLOCK | 0x10000000 | Windows 8:不允许 TSF 锁读取/写入访问。 这会暂停 TSF 输入。 |
SES_DEFAULTLATINLIGA | 0x10 | Windows 8:使用默认 OpenType 功能显示具有 fi 连字的字体,从而改进了版式 (默认值:0) 。 |
SES_DRAFTMODE | 0x8000 | Windows XP SP1:使用草稿模式字体显示文本。 草稿模式是一个辅助功能选项,其中控件使用单一字体显示文本;字体由消息框中所用字体的系统设置确定。 例如,如果文本是统一的,则可访问的用户可以更轻松地阅读文本,而不是将字体和样式混合 (默认值:0) 。 |
SES_EMULATE10 | 16 | Windows 8:模拟 RichEdit 1.0 行为。注意: 如果确实需要此行为,请使用 Windows riched32.dll,而不是 riched20.dll 或 msftedit.dll。 Riched32.dll 具有更多功能。 |
SES_EMULATESYSEDIT | 1 | 当此位处于打开状态时,rich edit 将尝试模拟系统编辑控件 (默认值:0) 。 |
SES_EXTENDBACKCOLOR | 4 | 将背景色一直扩展到客户端矩形的边缘 (默认值:0) 。 |
SES_HIDEGRIDLINES | 0x00020000 | 带 SP1 的 Windows XP:如果表格网格线的宽度为零,则不显示网格线。 这等效于Word表菜单中的隐藏网格线功能,默认 (:0) 。 |
SES_HYPERLINKTOOLTIPS | 8 | Windows 8:当光标悬停在某个链接上时,显示工具提示,其目标链接地址 (默认值:0) 。 |
SES_LOGICALCARET | 0x01000000 | Windows 8:提供逻辑插入符号信息而不是插入点位图,如 ITextHost::TxSetCaretPos (默认值:0) 。 |
SES_LOWERCASE | 0x400 | 将所有输入字符转换为小写 (默认值:0) 。 |
SES_MAPCPS | 8 | 已过时。 请勿使用。 |
SES_MULTISELECT | 0x08000000 | Windows 8:在按 Ctrl 键时使用单个鼠标选择启用多选 (默认值:0) 。 |
SES_NOEALINEHEIGHTADJUST | 0x20000000 | Windows 8:不调整东亚文本的行高 (默认值:0,它将行高调整 15%) 。 |
SES_NOFOCUSLINKNOTIFY | 32 | 从没有焦点的链接发送 EN_LINK 通知。 |
SES_NOIME | 0x80 | 禁止此格式编辑控件实例的 IME, (默认值:0) 。 |
SES_NOINPUTSEQUENCECHK | 0x800 | 当此位处于打开状态时,丰富编辑不会验证键入文本的顺序。 某些语言 ((如泰语和越南语)) 要求先验证输入序列顺序,然后再将其提交到后备存储 (默认值:0) 。 |
SES_SCROLLONKILLFOCUS | 0x2000 | 发生 KillFocus 时,滚动到文本的开头, (字符位置等于 0) (默认值:0) 。 |
SES_SMARTDRAGDROP | 0x04000000 | Windows 8:在删除文本时根据上下文添加或删除空格 (默认值:0) 。 |
SES_USECRLF | 0x00010000 | 已过时。 请勿使用。 |
SES_WORDDRAGDROP | 0x02000000 | Windows 8:如果 word select 处于活动状态,请确保放置位置位于单词边界 (默认值:0) 。 |
SES_UPPERCASE | 0x200 | 将所有输入字符转换为大写 (默认值:0) 。 |
SES_USEAIMM | 0x100 | 使用 Internet Explorer 4.0 或更高版本随附的 Active IMM 输入法组件 (默认值:0) 。 |
SES_USEATFONT | 0x00040000 | Windows XP SP1:使用 @ 字体,专为垂直文本设计;这与 ES_VERTICAL 窗口样式一起使用。 @ 字体的名称以 @ 符号开头,例如,“@Batang” (默认值:0,但会自动打开垂直文本布局) 。 |
SES_USECTF | 0x00010000 | Windows XP SP1:启用 TSF 支持。 (默认值:0) |
SES_XLTCRCRLFTOCR | 0x4000 | 打开将 CRCRLF 转换为 PR。 打开此位并读取文件时,所有 CRCRLF 实例都将在内部转换为硬性 PR。 这会影响文本环绕。 请注意,如果此类文件保存为纯文本,则 CRL 将替换为 CRLF。 这是纯文本 (默认值为 0 的 .txt 标准,用于删除输入) 上的 CRCRLF。 |
富编辑控件扩展编辑样式标志——常量数值:
英文名称 | 数值 | 作用解释 |
SES_EX_HANDLEFRIENDLYURL | 0x00000100 | 显示与自动链接相同的文本颜色和下划线的友好名称链接,前提是未使用临时格式或使用文本自动颜色 (默认值:0) 。 |
SES_EX_MULTITOUCH | 0x08000000 | 在 Rich Edit 中启用触摸支持。 这包括选择、插入点放置和上下文菜单调用。 如果未设置此标志,则鼠标命令会模拟触摸,这些命令不考虑触摸模式的详细信息, (默认值:0) 。 |
SES_EX_NOACETATESELECTION | 0x00100000 | 使用经典Windows选择文本和背景色而不是背景色来显示所选文本, (默认值:0) 。 |
SES_EX_NOMATH | 0x00000040 | 禁用 (默认值插入数学区域:1) 。 若要启用数学编辑和显示,请将 wParam 设置为 0 且 lParam 设置为SES_EX_NOMATH发送EM_SETEDITSTYLEEX消息。 |
SES_EX_NOTABLE | 0x00000004 | 禁用插入表。 默认为 (0) ,EM_INSERTTABLE消息返回E_FAIL,RTF 表将跳过 。 |
SES_EX_USESINGLELINE | 0x00200000 | 使多行控件像单行控件一样,当单行高度大于窗口高度 (默认值:0) 时,能够垂直滚动。 |
SES_HIDETEMPFORMAT | 0x10000000 | 隐藏使用 tomApplyTmp 调用 ITextFont.Reset 时创建的临时格式。 例如,拼写检查器使用此类格式在可能拼写错误的字词下显示波浪下划线。 |
SES_EX_USEMOUSEWPARAM | 0x20000000 | 处理WM_MOUSEMOVE消息时使用 wParam,而不调用 按键开关。 |
字符格式——常量数值:
英文名称 | 数值 | 作用解释 |
SCF_SELECTION | 0x0001 | 将格式应用于当前所选内容。 如果所选内容为空,则字符格式将应用于插入点,并且新字符格式仅在插入点更改之前生效。 |
SCF_WORD | 0x0002 | 将格式应用于所选的一个或多个单词。 如果所选内容为空,但插入点位于单词内,则将格式应用于该单词。 SCF_WORD值必须与SCF_SELECTION值结合使用。 |
SCF_DEFAULT | 0x0000 | RichEdit 4.1:设置控件的默认字体。 |
SCF_ALL | 0x0004 | 将格式应用于 控件中的所有文本。 对 SCF_SELECTION 或 SCF_WORD 无效。 |
SCF_USEUIRULES | 0x0008 | RichEdit 4.1: 与 SCF_SELECTION 一起使用。 指示格式来自工具栏或其他 UI 工具,因此应使用 UI 格式规则而不是文本格式设置。 |
SCF_ASSOCIATEFONT | 0x0010 | RichEdit 4.1: 将字体关联到给定脚本,从而更改该脚本的默认字体。 |
SCF_NOKBUPDATE | 0x0020 | | RichEdit 4.1: 阻止键盘切换以匹配字体。 例如,如果设置了阿拉伯语字体,则通常 Bidi 语言的自动键盘功能会将键盘更改为阿拉伯语键盘。
SCF_ASSOCIATEFONT2 | 0x0040 | RichEdit 4.1: 将代理项 (平面 2) 字体关联到给定脚本,从而更改该脚本的默认字体。 |
SCF_SMARTFONT | 0x0080 | 仅当字体可以处理脚本时,才应用字体。 |
SCF_CHARREPFROMLCID | 0x0100 | 从 LCID 获取字符剧目。 |
SPF_DONTSETDEFAULT | 0x0002 | 当 Richedit 控件为空时,阻止设置默认段落格式。 |
SPF_SETDEFAULT | 0x0004 | 设置默认段落格式属性。 |
富编辑控件输入法语言选项——常量数值:
英文名称 | 数值 | 作用解释 |
IMF_AUTOKEYBOARD | 0x0001 | 如果设置了此标志,则当用户显式更改为其他字体或用户将插入点显式更改为文本中的新位置时,控件会自动更改键盘布局。 将为双向控件自动打开。 对于所有其他控件,默认情况下会将其关闭。 此选项默认关闭 (0) 。 |
IMF_AUTOFONT | 0x0002 | 如果设置了此标志,当用户显式更改为其他键盘布局时,控件会自动更改字体。 关闭通用 Unicode 字体 IMF_AUTOFONT 很有用。 此选项默认为 启用(1) 。 |
IMF_IMECANCELCOMPLETE | 0x0004 | 此标志确定控件在用户取消输入法时如何使用它的组合字符串。 如果设置了此标志,则控件放弃该字符串。 如果未设置此标志,则控件将该字符串用作结果字符串。 此选项默认关闭 (0) 。 |
IMF_IMEALWAYSSENDNOTIFY | 0x0008 | 此标志控制丰富编辑控件在 IME 合成期间通知客户端的方式:
0:未确定状态期间没有 EN_CHANGE 或 EN_SELCHANGE 通知。 当最后一个字符串传入时发送通知。 这是默认值。1:在不确定状态下发送 EN_CHANGE 和 EN_SELCHANGE 事件。 |
IMF_AUTOFONTSIZEADJUST | 0x0010 | 如果设置了此标志,控件将根据脚本从插入点大小缩放字体绑定字体大小。 例如,亚洲字体略大于西方字体。 此选项默认为 启用(1)。 |
IMF_UIFONTS | 0x0020 | 使用用户界面默认字体。 此选项默认关闭 (0) 。 |
IMF_NOIMPLICITLANG | 0x0040 | Windows 8:如果设置了此标志,请使用键盘语言禁用标记键盘输入,并确保非东亚语言 ID 与字符集兼容。 此选项默认关闭 (0) 。 |
IMF_DUALFONT | 0x0080 | 如果设置了此标志,控件将使用双字体模式。 用于亚洲语言支持。 控件对 ASCII 文本使用英文字体,对亚洲文本使用亚洲字体。 此选项默认为 启用(1) 。 |
IMF_NOKBDLIDFIXUP | 0x0200 | Windows 8:如果设置了此标志,则丰富编辑控件将禁用对空控件的键盘语言进行标记。 此选项默认关闭 (0) |
IMF_NORTFFONTSUBSTITUTE | 0x0400 | 如果设置了此标志,则不使用RTF字体文本替换 |
IMF_SPELLCHECKING | 0x0800 | Windows 8:如果设置了此标志,则丰富编辑控件将打开拼写检查。 此选项默认关闭 (0) 。 |
IMF_TKBPREDICTION | 0x1000 | Windows 10:忽略。Windows 8:如果设置了此标志,则丰富编辑控件将启用触摸键盘预测。 此选项默认关闭 (0) 。 |
IMF_DISABLEAUTOBIDIAUTOKEYBOARD | | Windows 8:如果设置了此标志,控件将使用非特定语言逻辑进行自动键盘切换。 此选项默认关闭 (0) 。 |
IMF_TKBAUTOCORRECTION | | indows 8:如果设置了此标志,请启用触摸键盘自动更正。 此选项默认关闭 (0) 。 |
富编辑控件文字服务框架模式偏差标志——常量数值:
英文名称 | 数值 | 作用解释 |
CTFMODEBIAS_DEFAULT | 0x0000 | 不存在模式偏差。 |
CTFMODEBIAS_FILENAME | 0x0001 | 偏差是文件名。 |
CTFMODEBIAS_NAME | 0x0002 | 偏向于名称。 |
CTFMODEBIAS_READING | 0x0003 | 偏见是阅读。 |
CTFMODEBIAS_DATETIME | 0x0004 | 偏差为日期或时间。 |
CTFMODEBIAS_CONVERSATION | 0x0005 | 偏见是对话。 |
CTFMODEBIAS_NUMERIC | 0x0006 | 偏差是数字的偏差。 |
CTFMODEBIAS_HIRAGANA | 0x0007 | 偏向于平假名字符串。 |
CTFMODEBIAS_KATAKANA | 0x0008 | 偏差是片假名字符串。 |
CTFMODEBIAS_HANGUL | 0x0009 | 偏向于朝鲜文字符。 |
CTFMODEBIAS_HALFWIDTHKATAKANA | 0x000a | 偏差为半角片假名字符串。 |
CTFMODEBIAS_FULLWIDTHALPHANUMERIC | 0x000b | 偏差为全角字母数字字符。 |
CTFMODEBIAS_HALFWIDTHALPHANUMERIC | 0x000c | 偏差为半角字母数字字符。 |
段落格式类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
段落格式类 | PARAFORMAT2 | 194 | 包含有关丰富编辑控件中的段落格式设置属性的信息。 |
段落格式类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | 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_RTLPARA | 0x10000 | PFE_RTLPARA值有效。 | PFE_RTLPARA | 0x1 | 使用从右到左的阅读顺序显示文本。 |
PFM_KEEP | 0x20000 | PFE_KEEP值有效。 | PFE_KEEP | 0x2 | 段落内无分页符。 |
PFM_KEEPNEXT | 0x40000 | PFE_KEEPNEXT值有效。 | PFE_KEEPNEXT | 0x4 | 此段落与下一段之间没有分页符。 |
PFM_PAGEBREAKBEFORE | 0x80000 | PFE_PAGEBREAKBEFORE值有效。 | PFE_PAGEBREAKBEFORE | 0x8 | 在所选段落之前插入分页符。 |
PFM_NOLINENUMBER | 0x100000 | PFE_NOLINENUMBER值有效。 | PFE_NOLINENUMBER | 0x10 | 禁用行号(未实现) 。 |
PFM_NOWIDOWCONTROL | 0x200000 | PFE_NOWIDOWCONTROL值有效。 | PFE_NOWIDOWCONTROL | 0x20 | 禁用所选段落的寡妇和孤立控件。 |
PFM_DONOTHYPHEN | 0x400000 | PFE_DONOTHYPHEN值有效。 | PFE_DONOTHYPHEN | 0x40 | 禁用自动断字。 |
PFM_SIDEBYSIDE | 0x800000 | PFE_SIDEBYSIDE值有效。 | PFE_SIDEBYSIDE | 0x80 | 并排显示段落(未实现)。 |
PFM_COLLAPSED | 0x1000000 | PFE_COLLAPSED值有效。 | PFE_COLLAPSED | 0x100 | 作用 |
PFM_OUTLINELEVEL | 0x2000000 | PFE_OUTLINELEVEL值有效。 | PFE_OUTLINELEVEL | 0x200 | 作用 |
PFM_BOX | 0x4000000 | PFE_BOX值有效。 | PFE_BOX | 0x400 | 作用 |
PFM_RESERVED2 | 0x8000000 | PFE_RESERVED2值有效。 | PFE_RESERVED2 | 0x800 | 作用 |
PFM_TABLEROWDELIMITER | 0x10000000 | PFE_TABLEROWDELIMITER值有效。 | PFE_TABLEROWDELIMITER | 0x1000 | 段落是表中行 (U+FFF9 U+000D) 或结束分隔符 (U+FFFB U+000D) 。 |
PFM_TEXTWRAPPINGBREAK | 0x20000000 | PFE_TEXTWRAPPINGBREAK值有效。 | PFE_TEXTWRAPPINGBREAK | 0x2000 | 作用 |
PFM_TABLE | 0x40000000 | PFE_TABLE值有效。 | PFE_TABLE | 0x4000 | 段落是表格行。 |
输入法属性和功能
英文名称 | 数值 | 作用解释 |
要检索的属性信息的类型 |
IGP_PROPERTY | 4 | 属性信息。 |
IGP_CONVERSION | 8 | 转换功能。 |
IGP_SENTENCE | 12 | 句子模式功能。 |
IGP_UI | 0x10 | 用户界面功能。 |
IGP_SETCOMPSTR | 0x14 | 组合字符串功能。 |
IGP_SELECT | 0x18 | 选择继承功能。 |
IGP_GETIMEVERSION | -4 | 检索为其创建了指定 IME 的系统版本号。 |
IGP_PROPERTY 属性信息常量 |
IME_PROP_AT_CARET | 0x00010000 | 如果设置,则转换窗口位于插入点位置。 如果清除,则窗口接近插入点位置。 |
IME_PROP_SPECIAL_UI | 0x00020000 | 如果设置,IME 具有非标准用户界面。 应用程序不应在 IME 窗口中绘制。 |
IME_PROP_CANDLIST_START_FROM_1 | 0x00040000 | 如果设置,候选列表中的字符串从 1 开始编号。 如果清除,则字符串从零开始。 |
IME_PROP_UNICODE | 0x00080000 | 系统和 IME 将通过 UnicodeIME 接口进行通信。 如果清除,IME 将使用 ANSI 接口与系统通信。 |
IME_PROP_COMPLETE_ON_UNSELECT | 0x00100000 | 如果设置,则转换窗口位于插入点位置。 如果清除,则窗口接近插入点位置。 |
IME_PROP_ACCEPT_WIDE_VKEY | 0x00000020 | 如果设置,IME 将使用 VK_PACKET 处理来自 SendInput 函数的注入 Unicode。 如果清除,IME 可能不会处理注入的 Unicode,并且注入的 Unicode 可能会直接发送到应用程序。 |
IGP_UI 用户界面常量 |
UI_CAP_2700 | 1 | 支持文本转义值 0 或 2700。 |
UI_CAP_ROT90 | 2 | 支持文本转义值 0、900、1800 或 2700。 |
UI_CAP_ROTANY | 4 | 支持任何文本转义值。 |
IGP_SETCOMPSTR 组合字符串常量 |
SCS_CAP_COMPSTR | 1 | 可以通过使用 SCS_SETSTR 值调用 ImmSetCompositionString 函数来创建组合字符串。 |
SCS_CAP_MAKEREAD | 2 | 在将 ImmSetCompositionString 函数与 SCS_SETSTR 一起使用且不设置 lpRead 时,可以从相应的组合字符串创建读取字符串。 |
SCS_CAP_SETRECONVERTSTRING | 4 | 此输入法可以支持重新转换。 使用 ImmSetCompositionString 执行重新转换。 |
IGP_SELECT 选择继承功能常量 |
SELECT_CAP_CONVMODE | 1 | 选择新的 IME 时继承转换模式。 |
SELECT_CAP_SENTENCE | 2 | 选择新的 IME 时继承句子模式。 |
IGP_GETIMEVERSION 获取IME版本功能常量 |
IMEVER_0310 | 0x0003000A | IME 是为 Windows 3.1 创建的。 |
IMEVER_0400 | 0x00040000 | IME 是为 Windows 95 或更高版本创建的 |
查找方式
英文名称 | 数值 | 作用解释 |
FR_DOWN | 1 | 如果设置,则搜索从当前所选内容的末尾到文档末尾。否则搜索将从当前所选内容的末尾到文档的开头。 |
FR_WHOLEWORD | 2 | 如果已设置,则操作仅搜索与搜索字符串匹配的整个单词。 如果未设置,该操作还会搜索与搜索字符串匹配的单词片段。 |
FR_MATCHALEFHAMZA | 0x80000000 | Microsoft Rich Edit 3.0 及更高版本:如果设置,搜索将区分具有不同口音的阿拉伯语 alef。 如果未设置,则由 alef 字符单独匹配所有 alef。 |
FR_MATCHDIAC | 0x20000000 | Microsoft Rich Edit 3.0 及更高版本:如果设置,搜索操作将考虑阿拉伯语和希伯来语音调符号。 如果未设置,则忽略音调符号。 |
FR_MATCHKASHIDA | 0x40000000 | Microsoft Rich Edit 3.0 及更高版本:如果设置,则搜索操作将视为阿拉伯语 kashida。 如果未设置,则忽略 kashidas。 |
FR_MATCHWIDTH | 0x10000000 | Windows 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_INTERFACES | 0 | 不获取接口。 |
REO_GETOBJ_POLEOBJ | 1 | 获取对象接口。 |
REO_GETOBJ_PSTG | 2 | 获取存储接口。 |
REO_GETOBJ_POLESITE | 4 | 获取网站界面。 |
REO_GETOBJ_ALL_INTERFACES | 7 | 获取所有接口。 |
富对象类——数据结构:
中文名字 | 英文名称 | 长度 | 作用解释 |
富对象类 | REOBJECT | 56 | 包含有关丰富编辑控件中的 OLE 或图像对象的信息。 |
富对象类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | cbStruct | 整数 | 结构大小(以字节为单位)。 |
位置 | cp | 整数 | 对象的字符位置。 |
类标识 | clsid[16] | 文本 | 对象的类标识符。 |
接口 | poleobj | 整数 | 对象的 IOleObject 接口的实例。 |
存储 | pstg | 整数 | 存储对象 接口的实例。这是与对象关联的存储对象。 |
站点 | polesite | 整数 | 客户站点对象 接口的实例。 必须从 富编辑对象.站点 方法获取此地址。 |
宽度 | sizel.cx | 整数 | 对象的大小。度量单位为 0.01 毫米,这是 HIMETRIC 度量单位。 |
高度 | sizel.cy | 整数 | 对象的大小。度量单位为 0.01 毫米,这是 HIMETRIC 度量单位。 |
方位 | dvaspect | 整数 | 使用的显示方面。视图方位 |
标志 | dwFlags | 整数 | 对象状态标志。它可以是状态标志值的组合。 |
定义 | dwUser | 整数 | 为用户定义的值保留。 |
视图方位常量——在绘制或获取数据时,指定所需对象数据或对象视图方位。DVASPECT
英文名称 | 数值 | 作用解释 |
DVASPECT_CONTENT | 1 | 提供对象的表示形式,以便它可以显示为容器内的嵌入对象。 通常为复合文档对象指定此值。 该演示可提供给屏幕或打印机。 |
DVASPECT_THUMBNAIL | 2 | 提供对象的缩略图表示形式,以便可以在浏览工具中显示该对象。 缩略图大约为 120 x 120 像素、16 色 (建议) 可能包装在图元文件中的与设备无关的位图。 |
DVASPECT_ICON | 4 | 提供对象的图标表示形式。 |
DVASPECT_DOCPRINT | 8 | 提供屏幕上对象的表示形式,就像使用“文件”菜单中的“打印”命令打印到打印机一样。 该描述数据可以表示页序列。 |
DVASPECT2指定用于优化绘图过程的新绘图方面。
英文名称 | 数值 | 作用解释 |
DVASPECT_OPAQUE | 16 | 表示不透明、易于剪辑对象的部分。 |
DVASPECT_TRANSPARENT | 32 | 表示 对象上的透明或不规则部分,通常是昂贵或无法剪裁的部分。对象可能支持(也可能不支持)这一方面。 |
丰富编辑控件状态标志组合
英文名称 | 数值 | 作用解释 |
REO_RESIZABLE | 1 | 对象可以调整大小。 |
REO_BELOWBASELINE | 2 | 对象位于周围文本的基线下方;默认值为位于基线上。 |
REO_INVERTEDSELECT | 4 | 选定对象时将完全反转绘制;默认为使用边框绘制。 |
REO_BLANK | 0x10 | 对象是新的。 此值使对象有机会不保存任何内容并自动从控件中删除。 |
REO_CANROTATE | 0x80 | 对象可以在旋转的位置显示自身。 |
REO_ALIGNTORIGHT | 0x100 | 将 对象与视图的右侧对齐。 如果未指定REO_WRAPTEXTAROUND,则忽略此值。 |
REO_DONTNEEDPALETTE | 0x20 | 对象在创建和实现半色调调色板之前呈现。 仅适用于 32 位平台。 |
REO_DYNAMICSIZE | 8 | 对象始终确定其盘区,尽管修改标志被关闭,但可能会更改。 |
REO_GETMETAFILE | 0x00400000 | Rich edit 控件从 对象检索图元文件,以正确确定对象的范围。 可以读取此标志,但不能设置。 |
REO_HILITED | 0x01000000 | 对象当前突出显示以指示选择。 当焦点位于控件中并设置 |
REO_SELECTED 时发生。 可以读取此标志,但不能设置。 |
REO_INPLACEACTIVE | 0x02000000 | 对象当前处于就地活动状态。 可以读取此标志,但不能设置。 |
REO_LINK | 0x80000000 | 对象是一个链接。 可以读取此标志,但不能设置。 |
REO_LINKAVAILABLE | 0x00800000 | 对象是一个链接,据信是可用的。 可以读取此标志,但不能设置。 |
REO_OPEN | 0x04000000 | 对象当前在其服务器中处于打开状态。 可以读取此标志,但不能设置。 |
REO_OWNERDRAWSELECT | 0x40 | 所有者绘制所选对象。 |
REO_SELECTED | 0x08000000 | 对象当前在 Rich edit 控件中处于选中状态。 可以读取此标志,但不能设置。 |
REO_STATIC | 0x40000000 | 对象是静态对象。 可以读取此标志,但不能设置。 |
REO_USEASBACKGROUND | 0x400 | 使用 对象作为背景图片。 |
REO_WRAPTEXTAROUND | 0x00000200 | 文本环绕对象。 |
字符集
英文名字 | 数值 | 编码 | 代码页 |
ANSI_CHARSET | 0x00 | 0 | 1252 |
DEFAULT_CHARSET | 0x01 | 1 | |
SYMBOL_CHARSET | 0x02 | 2 | |
SHIFTJIS_CHARSET | 0x80 | 128 | 932 |
HANGUL_CHARSET | 0x81 | 129 | 949 |
GB2312_CHARSET | 0x86 | 134 | 936 |
CHINESEBIG5_CHARSET | 0x88 | 136 | 950 |
GREEK_CHARSET | 0xA1 | 161 | 1253 |
TURKISH_CHARSET | 0xA2 | 162 | 1254 |
HEBREW_CHARSET | 0xB1 | 177 | 1255 |
ARABIC_CHARSET | 0xB2 | 178 | 1256 |
BALTIC_CHARSET | 0xBA | 186 | 1257 |
RUSSIAN_CHARSET | 0xCC | 204 | 1251 |
THAI_CHARSET | 0xDE | 222 | 874 |
EE_CHARSET | 0xEE | 238 | 1250 |
OEM_CHARSET | 0xFF | 255 | |
滑块条——使用简介:
跟踪条是一个窗口,其中包含一个滑块 (有时称为通道中的拇指) 和可选的刻度线。 当用户使用鼠标或方向键移动滑块时,跟踪条会发送通知消息以指示更改。
当希望用户选择一个离散无符号整数值或一个范围内的一组连续无符号整数值时,跟踪栏非常有用。 例如,可以使用跟踪条来允许用户通过将滑块移动到给定刻度线来设置键盘的重复速率。 下图显示了一个典型的跟踪条。
跟踪栏中的滑块以创建时指定的增量移动。 此范围内的值称为逻辑单元。 例如,如果指定跟踪条的逻辑单元范围为 0 到 5,则滑块只能占据六个位置:跟踪条左侧的一个位置,以及范围中每个增量的一个位置。
通常,每个位置都由刻度线标识;但是,刻度线的数量是任意的,并且可能小于逻辑位置的数量。
使用 创建窗口 函数创建跟踪条,指定 "msctls_trackbar32" 窗口类。 创建跟踪栏后,可以使用跟踪条消息来设置和检索其许多属性。可进行的更改包括设置滑块的最小和最大位置、绘制刻度线、设置选择范围以及重新定位滑块。
选择范围
如果创建具有 TBS_ENABLESELRANGE样式的 跟踪条,则可以指定选择范围。 跟踪条突出显示选择范围,并在开始和结束位置显示三角形刻度线,如下图所示。
跟踪条的选择范围不会以任何方式影响其功能。 由应用程序来实现范围。 可以通过以下方法之一执行此操作:
使用选择范围使用户能够设置某些参数的最大值和最小值。 例如,用户可以将滑块移动到某个位置,然后单击标有“Max”的按钮。 然后,应用程序设置选择范围以显示用户选择的值。
通过处理 水平滚动 或 垂直滚动 通知并禁止任何超出选择范围的任何移动,将滑块的移动限制为控件内预先确定的子范围。 例如,如果用户可用的值范围可能因用户所做的其他选择或根据可用资源而更改,则可以执行此操作。
跟踪栏通知消息
跟踪栏通过向父级发送 水平滚动 或 垂直滚动 消息来通知其父窗口的用户操作。 具有 水平方向 样式的 跟踪条发送 水平滚动 消息。 具有 垂直方向 样式的跟踪条发送 垂直滚动 消息。
水平滚动 或垂直滚动的 ③参数 参数的低序字包含通知代码。 对于松开滑块和拖动滑块通知代码, ③参数 参数的高序字指定滑块的位置。 对于所有其他通知代码,高序字为零;发送 滑块获取位置 消息以确定滑块位置。 ④数据 参数是跟踪条的句柄。
仅当用户使用键盘与跟踪条交互时,系统才会发送按左上键、按右下键、按首页键和按结尾键通知代码。 仅当用户使用鼠标时,才会发送松开滑块和拖动滑块通知代码。
在这两种情况下,都会发送 结束滑键、按上页键 和 按下页键 通知代码。 下表列出了跟踪栏通知代码,以及导致发送虚拟密钥代码通知 (虚拟 密钥代码或鼠标事件) 的事件。
滑块条——移动类型:
中文名字 | 英文名称 | 数值 | 释义 |
按左上键 | TB_LINEUP | 0 | 用户按下了向左键 (VK_LEFT) 或向上键 (VK_UP) 键。 |
按右下键 | TB_LINEDOWN | 1 | 用户按下了向右键 (VK_RIGHT) 或向下键 (VK_DOWN) 键。 |
按上页键 | TB_PAGEUP | 2 | 用户单击了滑块上方或左侧的通道 (VK_PRIOR)。 |
按下页键 | TB_PAGEDOWN | 3 | 用户单击了滑块下方或右侧的通道 (VK_NEXT)。 |
松开滑块 | TB_THUMBPOSITION | 4 | 跟踪条在收到 TB_THUMBTRACK 通知代码后收到 WM_LBUTTONUP。 |
拖动滑块 | TB_THUMBTRACK | 5 | 用户拖动了滑块。 |
按结尾键 | TB_BOTTOM | 7 | 用户按下了 END 键 (VK_END)。 |
搂首页键 | TB_TOP | 6 | 用户按下了 Home 键 (VK_HOME)。 |
结束滑键 | TB_ENDTRACK | 8 | 跟踪条收到 WM_KEYUP,这表示用户释放了发送相关虚拟键代码的键。 |
默认跟踪条消息处理
本部分介绍由跟踪条执行的窗口消息处理。
中文名字 | 英文名称 | 数值 | 释义 |
失去鼠标 | WM_CAPTURECHANGED | 0x215 | 如果在 WM_LBUTTONDOWN 处理期间设置了计时器,则终止计时器,并在必要时发送TB_THUMBPOSITION通知代码。 它始终发送TB_ENDTRACK通知代码。 |
窗口创建 | WM_CREATE | 0x1 | 执行其他初始化,例如将行大小、页面大小和刻度线频率设置为默认值。 |
程序关闭 | WM_DESTROY | 0x2 | 释放资源。 |
可用状态 | WM_ENABLE | 0xA | 重新绘制跟踪条窗口。 |
擦除背景 | WM_ERASEBKGND | 0x14 | 使用跟踪条的当前背景色擦除窗口背景。 |
切换控件 | WM_GETDLGCODE | 0x87 | 返回DLGC_WANTARROWS值。 |
键盘按下 | WM_KEYDOWN | 0x100 | 处理方向键,并根据需要发送TB_TOP、TB_BOTTOM、TB_PAGEUP、TB_PAGEDOWN、TB_LINEUP和TB_LINEDOWN通知代码。 |
键盘松开 | WM_KEYUP | 0x101 | 如果键是方向键之一,则发送TB_ENDTRACK通知代码。 |
失去焦点 | WM_KILLFOCUS | 0x8 | 重新绘制跟踪条窗口。 |
按下左键 | WM_LBUTTONDOWN | 0x201 | 将焦点和鼠标捕获设置为跟踪条。 如有必要,它会设置一个计时器,用于确定当用户在窗口中按住鼠标按钮时滑块向鼠标光标移动的速度。 |
释放左键 | WM_LBUTTONUP | 0x202 | 释放鼠标捕获并在 WM_LBUTTONDOWN 处理期间设置计时器并终止计时器。 如有必要,它会发送TB_THUMBPOSITION通知代码。 它始终发送TB_ENDTRACK通知代码。 |
鼠标移动 | WM_MOUSEMOVE | 0x200 | 移动滑块并在跟踪鼠标时发送TB_THUMBTRACK通知代码, (看到 WM_TIMER) 。 |
窗口重绘 | WM_PAINT | 0xF | 绘制跟踪条。 如果 wParam 参数为非 NULL,则控件假定该值是 HDC 并使用该设备上下文进行绘制。 |
获得焦点 | WM_SETFOCUS | 0x7 | 重新绘制跟踪条窗口。 |
窗口缩放 | WM_SIZE | 0x5 | 设置跟踪条的尺寸,如果没有足够的空间显示滑块,则删除滑块。 |
定时事件 | WM_TIMER | 0x113 | 检索鼠标位置并更新滑块的位置。 (仅在用户拖动 slider 时收到它。) |
配置更新 | WM_WININICHANGE | 0x1A | 初始化滑块维度。 |
跟踪条工具提示
使用 支持提示 样式创建的跟踪条具有默认的工具提示控件。 当用户使用鼠标拖动滑块时,工具提示将保持可见并显示当前值。
可以通过发送 滑块设置提示 消息将新的工具提示控件分配给跟踪条。 若要检索已分配的工具提示控件的句柄,请使用 滑块获取提示 消息。
滑块条——通知消息:
中文名字 | 常量数值 | 英文名称 | 释义 |
控件自行绘制 | -12 | NM_CUSTOMDRAW | 通知控件的父窗口有关自定义绘制操作的信息。④数据:NMCUSTOMDRAW 结构的 dwItemSpec 成员:1边缘显示刻度,2拇指标记,3拇指沿轨道滑动 |
控件释放鼠标 | -16 | NM_RELEASEDCAPTURE | 通知控件的父窗口控件要释放鼠标捕捉 |
滑块位置更改 | -1502 | TRBN_THUMBPOSCHANGING | 通知跟踪条上的拇指位置正在更改。④数据:跟踪通知类 结构 |
水平滚动 | $0114 | WM_HSCROLL | 当窗口的标准水平滚动条产生一个滚动事件时,发送本消息给该窗口。③参数:低位=0点左键,1点右/下键,2点滑块左,3点滑块右,4松开滑块, 5拖动滑块,6按home,7按END,8释放按键;高位=滑块当前位置;④数据:控件 |
垂直滚动 | $0115 | WM_VSCROLL | 当窗口的标准垂直滚动条产生一个滚动事件时,发送本消息给该窗口。③参数:低位=0点上键,1点下键,2点滑块上方,3点滑块下方,4松开滑块, 5拖动滑块,6按home,7按END,8释放按键;高位=滑块当前位置;④数据:控件 |
滑块条——发送消息:
中文 | 英文名称 | 数值 | 释义 |
滑块获取位置 | TBM_GETPOS | 0x400 | 检索跟踪栏中滑块的当前逻辑位置。 逻辑位置是跟踪条最小到最大滑块位置范围内的整数值。③参数:0;④数据:0 |
滑块取最小位 | TBM_GETRANGEMIN | 0x401 | 检索跟踪栏中滑块的最小位置。③参数:0;④数据:0 |
滑块取最大位 | TBM_GETRANGEMAX | 0x402 | 检索跟踪栏中滑块的最大位置。③参数:0;④数据:0 |
滑块取刻度线 | TBM_GETTIC | 0x403 | 检索跟踪栏中刻度线的逻辑位置。 逻辑位置可以是跟踪条的最小到最大滑块位置范围内的任意整数值。③参数:索引0到2;④数据:0 |
滑块改刻度线 | TBM_SETTIC | 0x404 | 在指定逻辑位置的跟踪栏中设置刻度线。③参数:0;④数据:位置 |
滑块修改位置 | TBM_SETPOS | 0x405 | 设置跟踪栏中滑块的当前逻辑位置。③参数:是否重绘;④数据:新位置 |
滑块位置范围 | TBM_SETRANGE | 0x406 | 设置跟踪栏中滑块的最小和最大逻辑位置范围。③参数:是否重绘;④数据:最小/最大位置 |
滑块改最小位 | TBM_SETRANGEMIN | 0x407 | 设置跟踪栏中滑块的最小逻辑位置。③参数:是否重绘;④数据:最小位置 |
滑块改最大位 | TBM_SETRANGEMAX | 0x408 | 设置跟踪栏中滑块的最大逻辑位置。③参数:是否重绘;④数据:最大位置 |
滑块删刻度线 | TBM_CLEARTICS | 0x409 | 从跟踪条中删除当前刻度线。此消息不会删除由跟踪条自动创建的第一个和最后一个刻度线。③参数:是否重绘;④数据:0 |
滑块选择范围 | TBM_SETSEL | 0x40A | 设置跟踪栏中可用选择范围的起始和结束位置。③参数:是否重绘;④数据:起始/结束位置 |
滑块取起始位 | TBM_SETSELSTART | 0x40B | 设置跟踪栏中当前选择范围的起始逻辑位置。 如果跟踪条没有 范围显示 样式,则忽略此消息。③参数:是否重绘;④数据:起始位置 |
滑块取结束位 | TBM_SETSELEND | 0x40C | 设置跟踪栏中当前选择范围的结束逻辑位置。 如果跟踪条没有 范围显示 样式,则忽略此消息。③参数:是否重绘;④数据:结束位置 |
滑块刻度数组 | TBM_GETPTICS | 0x40E | 检索包含跟踪条刻度线位置的数组的地址。③参数:0;④数据:0 |
滑块刻度位置 | TBM_GETTICPOS | 0x40F | 检索跟踪栏中刻度线的当前物理位置。③参数:索引(不包括第一和最后);④数据:0 |
滑块刻度线数 | TBM_GETNUMTICS | 0x410 | 检索跟踪栏中的刻度线数。③参数:0;④数据:0 |
滑块改起始位 | TBM_GETSELSTART | 0x11 | 检索跟踪栏中当前选择范围的起始位置。③参数:0;④数据:0 |
滑块改结束位 | TBM_GETSELEND | 0x12 | 检索跟踪栏中当前选择范围的结束位置。③参数:0;④数据:0 |
滑块清除选择 | TBM_CLEARSEL | 0x413 | 清除跟踪栏中的当前选择范围。③参数:是否重绘;④数据:0 |
滑块间隔频率 | TBM_SETTICFREQ | 0x414 | 设置跟踪栏中刻度线的间隔频率。例如频率设置为2,则跟踪条范围中每隔一个增量显示一个刻度线。默认为1。③参数:频率;④数据:0 |
滑块取翻页量 | TBM_GETPAGESIZE | 0x415 | 检索跟踪条的滑块在响应键盘或鼠标输入时移动的逻辑位置数。③参数:0;④数据:0 |
滑块改翻页量 | TBM_SETPAGESIZE | 0x416 | 设置跟踪条的滑块在响应键盘或鼠标输入时移动的逻辑位置数。③参数:0;④数据:增量 |
滑块取移动量 | TBM_GETLINESIZE | 0x417 | 检索跟踪条滑块在响应键盘或鼠标输入时移动的逻辑位置数。③参数:0;④数据:0 |
滑块改移动量 | TBM_SETLINESIZE | 0x418 | 设置跟踪条滑块在响应键盘或鼠标输入时移动的逻辑位置数。③参数:0;④数据:增量 |
滑块边框矩形 | TBM_GETTHUMBRECT | 0x419 | 检索跟踪栏中滑块的边框的大小和位置。③参数:0;④数据:矩形类 |
滑块通道矩形 | TBM_GETCHANNELRECT | 0x41A | 检索跟踪条通道的边框的大小和位置。通道是滑块移动的区域。③参数:0;④数据:矩形类 |
滑块修改长度 | TBM_SETTHUMBLENGTH | 0x41B | 设置跟踪栏中滑块的长度。如果跟踪条没有 滑块调整 样式,则忽略此消息。③参数:长度;④数据:0 |
滑块获取长度 | TBM_GETTHUMBLENGTH | 0x41C | 检索跟踪栏中滑块的长度(以像素为单位)。③参数:0;④数据:0 |
滑块设置提示 | TBM_SETTOOLTIPS | 0x41D | 将工具提示控件分配给跟踪条控件。③参数:提示控件;④数据:0 |
滑块获取提示 | TBM_GETTOOLTIPS | 0x41E | 检索分配给跟踪栏的工具提示控件的句柄(如果有)。③参数:0;④数据:0 |
滑块提示方位 | TBM_SETTIPSIDE | 0x41F | 放置使用支持提示样式跟踪条控件使用的工具提示控件。③参数:0上方,1左边,2下边,3右边;④数据:0 |
滑块修改伴窗 | TBM_SETBUDDY | 0x420 | 将窗口分配为跟踪条控件的伙伴窗口。伙伴窗口将自动显示在相对于控件方向的位置。③参数:真=伙伴在左/上,假=伙伴在右/下;④数据:窗口 |
滑块获取伴窗 | TBM_GETBUDDY | 0x421 | 检索给定位置的跟踪条控件伙伴窗口的句柄。指定位置相对于控件的方向 (水平或垂直) 。③参数:真=取左/上伙伴,假=取右/下伙伴;④数据:0 |
滑块改变位置 | TBM_SETPOSNOTIFY | 0x422 | 设置跟踪栏中滑块的当前逻辑位置。③参数:0;④数据:新位置 |
控件设置宽字 | TBM_SETUNICODEFORMAT | 0x2005 | 设置控件的 Unicode 字符格式标志。③参数:是否宽字;④数据:0; |
控件获取宽字 | TBM_GETUNICODEFORMAT | 0x2006 | 获取控件的 Unicode 字符格式标志。③参数:0;④数据:0; |
滑块条——自定义绘制:
本部分列出了用于标识滑块条控件部分的值。
中文 | 英文名称 | 数值 | 释义 |
通道 | TBCD_CHANNEL | 0x3 | 标识跟踪条控件的拇指标记滑行的通道。 |
滑块 | TBCD_THUMB | 0x2 | 标识跟踪条控件的拇指标记。 这是用户移动的控件的一部分。 |
刻度 | TBCD_TICS | 0x1 | 标识沿跟踪条控件边缘显示的刻度线。 |
滑块条——控件样式:
中文名字 | 英文名称 | 数值 | 释义 |
显刻度线 | TBS_AUTOTICKS | 0x1 | 跟踪条控件在其值范围中的每个增量中都有一个刻度线。 |
垂直方向 | TBS_VERT | 0x2 | 跟踪条控件垂直方向。 |
水平方向 | TBS_HORZ | 0 | 跟踪条控件是水平方向的。这是默认方向。 |
左上刻度 | TBS_TOP | 0x4 | 跟踪条控件在控件上方显示刻度线。 此样式仅对 水平方向 有效。 |
下方刻度 | TBS_BOTTOM | 0 | 跟踪条控件在控件下方显示刻度线。 此样式仅对 水平方向 有效。 |
左边刻度 | TBS_LEFT | 0x4 | 跟踪条控件在控件左侧显示刻度线。 此样式仅对 垂直方向 有效。 |
右边刻度 | TBS_RIGHT | 0 | 跟踪条控件在控件右侧显示刻度线。 此样式仅对 垂直方向 有效。 |
两边刻度 | TBS_BOTH | 0x8 | 跟踪条控件在控件的两侧显示刻度线。 与 水平方向 一起使用时,这既是顶部,也是底部,如果与 垂直方向 一起使用,则为左和右。 |
不显刻度 | TBS_NOTICKS | 0x10 | 跟踪条控件不显示任何刻度线。 |
范围显示 | TBS_ENABLESELRANGE | 0x20 | 跟踪条控件仅显示选择范围。 选择范围起始和结束位置处的刻度线显示为三角形 (而不是) 垂直虚线,并突出显示选择范围。 |
滑块调整 | TBS_FIXEDLENGTH | 0x40 | 跟踪条控件允许随 滑块修改长度 消息更改滑块的大小。 |
不显滑块 | TBS_NOTHUMB | 0x8 | 跟踪条控件不显示滑块。 |
支持提示 | TBS_TOOLTIPS | 0x100 | 版本 4.70。 跟踪条控件支持工具提示。 使用此样式创建跟踪条控件时,它会自动创建显示滑块当前位置的默认工具提示控件。 可以使用 滑块提示方位 消息更改工具提示的显示位置。 |
反向跟踪 | TBS_REVERSED | 0x200 | 版本 5.80。此样式位用于“反向”跟踪条,其中较小的数字表示“较高”,较大的数字表示“较低”。它对控件没有影响;它只是一个标签,可以检查以确定跟踪条是正常还是反向。 |
反转方向 | TBS_DOWNISLEFT | 0x400 | 默认情况下,跟踪条控件使用向下等于右,向上等于左。 使用此样式来反转默认值,使向下等于左,向上等于右。 |
贴靠通知 | TBS_NOTIFYBEFOREMOVE | 0x800 | 版本 6.00 和 Windows Vista。 由于用户操作,跟踪条在重新定位滑块之前应通知父级, (启用贴靠) 。 |
自绘背景 | TBS_TRANSPARENTBKGND | 0x1000 | 版本 6.00 和 Windows Vista。 背景由父级通过 绘客户区 消息绘制。 |
跟踪通知类——结构定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
跟踪通知类 | NMTRBTHUMBPOSCHANGING | 8 | 包含有关跟踪条更改通知的信息。 此消息随 滑块位置更改 通知一起发送。 |
跟踪通知类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
通知 | 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_CLOSE | 0x10 | 释放与动画控件关联的 AVI 文件或 AVI 资源。 |
程序关闭 | WM_DESTROY | 0x2 | 释放 AVI 文件或 AVI 资源,释放内部数据结构,然后调用 处理窗口 函数。 |
擦除背景 | WM_ERASEBKGND | 0x14 | 使用静态控件的当前背景色擦除窗口背景。 |
首创窗口 | WM_NCCREATE | 0x81 | 分配并初始化内部数据结构,然后调用 处理窗口。 |
区外鼠标 | WM_NCHITTEST | 0x84 | 返回 HTTRANSPARENT 命中测试值。 |
窗口重绘 | WM_PAINT | 0xF | 在动画控件中绘制 AVI 帧。 |
窗口缩放 | WM_SIZE | 0x5 | 检查控件是否具有 ACS_CENTER 样式。 如果控件没有,它将调用 处理窗口。 否则,它会使动画在控件中居中,使控件失效,然后调用 处理窗口。 |
单击按钮事件的高位值为事件代码
中文名字 | 常量数值 | 英文名称 | 释义 |
通知消息——常数表 |
动画开始事件 | 1 | ACN_START | 通知动画控件的父窗口关联的AVI剪辑已开始播放。③参数:标识/代码;④数据:控件 |
动画停止事件 | 2 | ACN_STOP | 通知动画控件的父窗口关联的 AVI 剪辑已停止播放。 ③参数:标识/代码;④数据:控件 |
发送消息——常数表 |
动画打开文件 | $464 | ACM_OPENA | 打开 AVI 剪辑并在动画控件中显示其第一帧。③参数:0/实例;④数据:路径/资源标识 |
动画开始播放 | $465 | ACM_PLAY | 在动画控件中播放 AVI 剪辑。 ③参数:次数,-1无限;④数据:开头/结尾 |
动画停止播放 | $466 | ACM_STOP | 停止在动画控件中播放 AVI 剪辑。 ③参数:0;④数据:0 |
动画视频文件 | $467 | ACM_OPENW | 打开 AVI 剪辑并在动画控件中显示其第一帧。③参数:0/实例;④数据:路径/资源标识 |
动画是否播放 | $468 | ACM_ISPLAYING | 检查是否正在播放AVI剪辑。 ③参数:0;④数据:0 |
影音动画——控件样式:
中文名字 | 英文名称 | 数值 | 释义 |
居中显示 | ACS_CENTER | 1 | 动画在动画控件的窗口中居中。 |
控件透明 | ACS_TRANSPARENT | 2 | 允许将动画的背景色与基础窗口的背景色匹配,从而创建“透明”背景。 |
自动播放 | ACS_AUTOPLAY | 4 | 打开 AVI 剪辑后立即开始播放动画。 |
内部控制 | ACS_TIMER | 8 | 默认控件创建一个线程来播放AVI剪辑。设置此标志,控件在内部使用 Win32 计时器来同步播放。 |
图像列表——通知消息:
使用图像列表可以为其它控件提供显示图标
图像列表(数量,大小,格式)格式:0=位图1图标2光标。
添加指定数量和大小的图像到列表,默认从图像目录下名称为0的文件开始加载
在程序目录下新建一个图像的文件夹,把图片文件从0开始递增排序,如0.bmp,1.bmp
位图扩展名是bmp,图标扩展名是ico,光标扩展名是cur
中文名字 | 英文名称 | 常量数值 | 释义 |
图像掩码 | ILC_MASK | 0x00001 | 使用掩码。 图像列表包含两个位图,其中一个是用作蒙板的单色位图。 如果未包含此值,则图像列表仅包含一个位图。 |
图像颜色 | ILC_COLOR | 0x00000 | 如果未指定其他ILC_COLORx标志,请使用默认行为。 通常,默认值为ILC_COLOR4,但对于较旧的显示驱动程序,默认值为ILC_COLORDDB。 |
图像位色 | ILC_COLORDDB | 0x000FE | 使用与设备相关的位图。 |
图像四位 | ILC_COLOR4 | 0x00004 | 使用 4 位 (16 色) 与设备无关的位图 (DIB) 部分作为图像列表的位图。 |
图像八位 | ILC_COLOR8 | 0x00008 | 使用 8 位 DIB 节。 用于颜色表的颜色与半色调调色板的颜色相同。 |
图像16位 | ILC_COLOR16 | 0x00010 | 使用 16 位 (32/64k 彩色) DIB 部分。 |
图像24位 | ILC_COLOR24 | 0x00018 | 使用 24 位 DIB 节。 |
图像32位 | ILC_COLOR32 | 0x00020 | 使用 32 位 DIB 节。 |
图像粘贴 | ILC_PALETTE | 0x00800 | 未实现。 |
图像镜图 | ILC_MIRROR | 0x02000 | 镜像包含的图标(如果进程已镜像) |
图像插入 | ILC_PERITEMMIRROR | 0x08000 | 导致镜像代码在插入一组图像时镜像每个项,而不是整个条带。 |
图像小于 | ILC_ORIGINALSIZE | 0x10000 | Windows Vista 及更高版本。 Imagelist 应接受小于设置的图像,并根据添加的图像应用原始大小。 |
图像预留 | ILC_HIGHQUALITYSCALE | 0x20000 | Windows Vista 及更高版本。 保留。 |
用户控件
创建静态图片框,选择自绘控件风格,可以用来绘制图片和文字。目前,以下控件支持自定义绘制功能:
标头控件 | NMCUSTOMDRAW 结构 |
表格框 | NMLVCUSTOMDRAW 结构 |
伸缩条 | NMCUSTOMDRAW 结构 |
工具栏 | NMTBCUSTOMDRAW 结构 |
工具提示 | NMTTCUSTOMDRAW 结构 |
滑动条 | NMCUSTOMDRAW 结构 |
树表框 | NMTVCUSTOMDRAW 结构 |
用户控件——通知消息:
中文名字 | 常量数值 | 英文名称 | 释义 |
控件自行绘制 | -12 | NM_CUSTOMDRAW | 通知控件的父窗口有关自定义绘制操作的信息。 |
自绘控件 | 13 | SS_OWNERDRAW | 静态控件的所有者负责绘制控件。每当需要绘制控件时,所有者窗口都会收到 外观改变 消息。 |
外观改变 | $002B | WM_DRAWITEM | 按钮、组合框、列表框、菜单的外观改变时会发送本消息给这些控件的所有者。④数据:绘制项目类 |
调色板——通知消息:
中文名字 | 常量数值 | 英文名称 | 释义 |
色板请求 | $30F | WM_QUERYNEWPALETTE | 本消息发送给将要收到焦点的窗口,本消息能使窗口在收到焦点时同时有机会实现逻辑调色板。③参数:0;④数据:0 |
色板启用 | $310 | WM_PALETTEISCHANGING | 当一个应用程序正要实现它的逻辑调色板时,发本消息通知所有的应用程序。③参数:窗口;④数据:0 |
色板变更 | $311 | WM_PALETTECHANGED | 发送本消息给所有顶级并重叠的窗口,以此来改变系统调色板。③参数:窗口;④数据:0 |
系统变色 | $0015 | WM_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_V2 | 8 | 定义属性表中的页面。 |
属性页类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
标题 | pszHeaderTitle | 整数 | 标题区域的标题。 |
副标题 | pszHeaderSubTitle | 整数 | 标题区域的副标题。 |
属性表类——结构定义:
中文名字 | 英文名称 | 参数 | 作用解释 |
属性表类 | PROPSHEETHEADERA_V2 | 12 | 定义属性表中的页面。 |
属性表类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
水印 | hbmWatermark | 整数 | 水印位图的句柄。 |
资源 | pszbmWatermark | 整数 | 要用作水印的位图资源标识符或字符串。 |
标头 | hplWatermark | 整数 | 用于绘制水印位图和/或标头位图。 |
图表信息类——结构定义:
中文名字 | 英文名称 | 参数 | 作用解释 |
图表信息类 | IMAGEINFO | 32 | 包含有关图像列表中的图像的信息。 |
图表信息类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
图像 | hbmImage | 整数 | 包含图像的位图的句柄。 |
掩码 | hbmMask | 整数 | 包含图像掩码的单色位图的句柄。 |
预 | Unused1 | 整数 | 未使用。 |
留 | Unused2 | 整数 | 未使用。 |
左 | x | 整数 | 指定图像绘制位置的x坐标。 |
顶 | y | 整数 | 指定图像绘制位置的y坐标。 |
宽 | cx | 整数 | 绘制图像的宽度,宽高是0为原大小 |
高 | cy | 整数 | 绘制图像的宽度,宽高是0为原大小。 |
图表绘制类——结构定义:
中文名字 | 英文名称 | 参数 | 作用解释 |
图表绘制类 | IMAGELISTDRAWPARAMS | 68 | 包含有关图像列表绘制操作的信息。 |
图表绘制类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | 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_NORMAL | 0 | 使用图像列表的背景色绘制图像。 |
ILD_TRANSPARENT | 1 | 使用蒙板以透明方式绘制图像,而不考虑背景色。 |
ILD_BLEND25 | 2 | 绘制图像,将25% 与 rgbFg 指定的混合颜色混合 |
ILD_BLEND50 | 4 | 绘制图像,将50% 与 rgbFg 指定的混合颜色混合 |
ILD_MASK | 0x10 | 绘制蒙板。 |
ILD_IMAGE | 0x20 | 如果覆盖不需要绘制掩码,请设置此标志。 |
ILD_ROP | 0x40 | 使用光栅成员指定的光栅操作代码绘制图像。 |
ILD_OVERLAYMASK | 0xF00 | 若要从样式中提取覆盖图像,请使用逻辑 AND 将此值组合在一起。 |
ILD_PRESERVEALPHA | 0x1000 | 保留目标中的 alpha 通道。 |
ILD_SCALE | 0x2000 | 使映像缩放到指定宽度,而不是被剪裁。 |
ILD_DPISCALE | 0x4000 | 将图像缩放到显示器的当前 dpi。 |
ILD_ASYNC | 0x8000 | 如果缓存中可用。不要自动提取它。 |
图像列表状态标志——常量:
英文名称 | 数值 | 作用解释 |
ILS_NORMAL | 0 | 未修改映像状态。 |
ILS_GLOW | 1 | 不支持。 |
ILS_SHADOW | 2 | 不支持。 |
ILS_SATURATE | 4 | 将图标的颜色饱和度降低到灰度。 |
ILS_ALPHA | 8 | 根据其 alpha 通道的值控制图标的透明度级别。 |
加载图像类型标志——常量:
英文名称 | 数值 | 作用解释 |
LR_DEFAULTCOLOR | 0x0000 | 使用显示器的颜色格式。 |
LR_MONOCHROME | 0x0001 | 加载黑白图像。 |
LR_COLOR | 0x0002 | 作用解释 |
LR_COPYRETURNORG | 0x0004 | 如果原图满足复制条件(即正确的尺寸和颜色深度)则返回原图,否则始终会创建一个新对象。 |
LR_COPYDELETEORG | 0x0008 | 创建副本后删除原始映像。 |
LR_LOADFROMFILE | 0x0010 | 从指定的文件中加载图像。 |
LR_LOADTRANSPARENT | 0x0020 | 检索图像中第一个像素的颜色值,并将颜色表中的相应条目替换为默认窗口颜色 |
LR_DEFAULTSIZE | 0x0040 | 如果宽度设置为零,则使用由游标和图标的系统指标值指定的宽度或高度。 |
LR_VGACOLOR | 0x0080 | 真VGA颜色 |
LR_LOADMAP3DCOLORS | 0x1000 | 在颜色表中搜索图像,并将以下灰色底纹替换为相应的三维颜色:
Dk灰色:0:128.128.128(COLOR_3DSHADOW)灰色:0:192.192.192(COLOR_3DFACE)Lt灰色:0:223.223.223(COLOR_3DLIGHT) |
LR_CREATEDIBSECTION | 0x2000 | DIB节位图。可用于加载位图而不将其映射到显示设备的颜色。 |
LR_COPYFROMRESOURCE | 0x4000 | 尝试从原始资源文件重新加载图标或游标资源。使用LR_SHARED标志加载后适用 |
LR_SHARED | 0x8000 | 如果多次加载映像,则共享映像句柄。 |
滚动属性——常量:
英文名称 | 数值 | 作用解释 |
WSB_PROP_CYVSCROLL | 0x1 | 数值接收垂直滚动条中方向按钮的高度(以像素为单位)。 |
WSB_PROP_CXHSCROLL | 0x2 | 数值接收水平滚动条中方向按钮的宽度(以像素为单位)。 |
WSB_PROP_CYHSCROLL | 0x4 | 数值接收水平滚动条的高度(以像素为单位)。 |
WSB_PROP_CXVSCROLL | 0x8 | 数值接收垂直滚动条的宽度(以像素为单位)。 |
WSB_PROP_CXHTHUMB | 0x10 | 该值接收水平滚动条中滑块的宽度(以像素为单位)。 |
WSB_PROP_CYVTHUMB | 0x20 | 该值接收垂直滚动条中滑块的高度(以像素为单位)。 |
WSB_PROP_VBKGCOLOR | 0x40 | 该值接收垂直滚动条中的背景色。 |
WSB_PROP_HBKGCOLOR | 0x80 | 该值接收水平滚动条中的背景色。 |
WSB_PROP_VSTYLE | 0x100 | 该值接收垂直滚动条的以下视觉效果之一。0普通,1三维滑块,2反色滑块 |
WSB_PROP_HSTYLE | 0x200 | 该值接收水平滚动条的以下视觉效果之一。0普通,1三维滑块,2反色滑块 |
WSB_PROP_WINSTYLE | 0x400 | 该值接收当前窗口包含垂直和水平滚动条的样式位。 |
WSB_PROP_PALETTE | 0x800 | 该值接收滚动条在绘图时使用的调色板。 |
控件类——结构定义:
中文名字 | 英文名称 | 长度 | 作用解释 |
控件类 | INITCOMMONCONTROLSEX | 8 | 从动态链接库加载常见控件类的信息 |
控件类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | dwSize | 整数 | 结构大小(以字节为单位)。 |
标志 | dwICC | 整数 | 公共控件类的位标志集。 |
控件类标志集——常量:
英文名称 | 数值 | 作用解释 |
ICC_LISTVIEW_CLASSES | 0x1 | 加载列表视图和标头控件类。 |
ICC_TREEVIEW_CLASSES | 0x2 | 加载树视图和工具提示控件类。 |
ICC_BAR_CLASSES | 0x4 | 加载工具栏、状态栏、跟踪栏和工具提示控件类。 |
ICC_TAB_CLASSES | 0x8 | 加载选项卡和工具提示控件类。 |
ICC_UPDOWN_CLASS | 0x10 | 加载调节器控件类。 |
ICC_PROGRESS_CLASS | 0x20 | 加载进度栏控件类。 |
ICC_HOTKEY_CLASS | 0x40 | 加载热键控件类。 |
ICC_ANIMATE_CLASS | 0x80 | 加载动画控件类。 |
ICC_WIN95_CLASSES | 0xff | 加载动画控件、标头、热键、列表视图、进度栏、状态栏、选项卡、工具提示、工具栏、跟踪条、树视图和调节器控件类。 |
ICC_DATE_CLASSES | 0x100 | 加载日期和时间选取器控件类。 |
ICC_USEREX_CLASSES | 0x200 | 加载超组合框控件类。 |
ICC_COOL_CLASSES | 0x400 | 加载伸缩条控件类。 |
ICC_INTERNET_CLASSES | 0x800 | 加载IP地址类。 |
ICC_PAGESCROLLER_CLASS | 0x1000 | 加载分页器控件类。 |
ICC_NATIVEFNTCTL_CLASS | 0x2000 | 加载本机字体控件类。 |
ICC_STANDARD_CLASSES | 0x4000 | 用户控件包括按钮、编辑、静态、列表框、组合框和滚动条。 |
ICC_LINK_CLASS | 0x8000 | 加载超链接控件类。 |
1.通用对话框-功能简介
颜色对话框 | 显示可用颜色,并选择性地允许用户创建自定义颜色。用户可以选择基本或自定义颜色。 |
查找对话框 | 显示查找字符串的对话框,用户还可以指定搜索选项,例如搜索方向以及搜索是否区分大小写。 |
字体对话框 | 显示一个对话框,用户可在其中选择字体系列和关联的字体样式、磅号和其他字体属性,如字体颜色、下划线或删除线。 |
打开对话框 | 显示一个对话框,用户可在其中键入或选择要打开的文件或 shell 名称空间对象的名称。 |
页面设置框 | 显示当前页配置。 用户可以选择页面配置选项,例如纸张方向、大小、源和页边距。 |
打印对话框 | 显示有关已安装打印机及其配置的信息。可以选择打印作业选项,例如要打印的页面范围和份数,然后开始打印过程。 |
替换对话框 | 显示查找和替换字符串的对话框,用户可以指定搜索选项(例如搜索是否区分大小写)和替换选项(例如替换范围)。 |
保存对话框 | 显示一个对话框,用户可在其中键入或选择要保存文件或 shell 名称空间对象的名称。 |
通用对话框-comdlg32库函数
中文名称 | 英文名称 | 示例 | 作用 |
颜色选框 | ChooseColorA | 颜色选框(颜色框类) | 创建一个“常用颜色”对话框,使用户可以选择颜色 |
字体选框 | ChooseFontA | 字体选框(字体框类) | 创建一个字体公共对话框,使对话框能够为用户选择逻辑字体的属性。 |
对话错误 | CommDlgExtendedError | 错误=对话错误 | 返回在执行对话框函数时最后出现的错误代码 |
搜索选框 | FindTextA | 搜索选框(查找替换类) | 创建一个系统定义的无模式对话框,允许用户指定要搜索的字符串以及在文档中搜索文本时使用的选项 |
文件选框 | GetOpenFileNameA | 文件选框(文件框类) | 创建一个文件框,允许用户指定要打开的文件或文件集的驱动器,目录和名称。 |
保存选框 | GetSaveFileNameA | 保存选框(文件框类) | 创建一个文件框,允许用户指定要保存的文件的驱动器,目录和名称。 |
页面设置 | PageSetupDlgA | 页面设置(页面框类) | 创建一个页面设置对话框,允许用户可以编辑设置打印页面的属性。 |
打印选项 | PrintDlgA | 打印选项(打印框类) | 创建显示“打印”对话框或“打印设置”对话框。使用户能够指定特定打印作业的属性。 |
打印选框 | PrintDlgExA | 打印选框(打印框类) | 创建显示“打印”对话框或“打印设置”对话框。使用户能够指定特定打印作业的属性。 |
替换选框 | ReplaceTextA | 替换选框(查找替换类) | 创建一个系统定义的无模式对话框,允许用户指定要搜索的字符串以及在文档中搜索文本时使用的选项 |
通用对话框——通知消息 |
中文名字 | 常量 | 英文名称 | 释义 |
对话完成排列 | -601 | CDN_INITDONE | 系统已完成在打开另存为通用对话框中排列控件 |
对话选择改变 | -602 | CDN_SELCHANGE | 用户在对话框文件列表里选择了一个新文件或文件夹 |
对话新文件夹 | -603 | CDN_FOLDERCHANGE | 向钩子函数发送一个新文件夹被打开的消息 |
对话共享冲突 | -604 | CDN_SHAREVIOLATION | 用户选择的文件名发生网络共享冲突 |
对话点击帮助 | -605 | CDN_HELP | 通用对话框中的帮助按钮被按下 |
对话点击确定 | -606 | CDN_FILEOK | 向钩子函数发送确定按钮被按下的消息 |
对话类型改变 | -607 | CDN_TYPECHANGE | 从文件类型列表中选择一个新文件类型 |
对话包含项目 | -608 | CDN_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;④数据:文件框类 |
页面绘图回调消息——常数表 |
对话绘制页面 | 0x400 | WM_PSD_PAGESETUPDLG | 对话框将绘制示例页面的内容。③参数:纸张大小/方向;④数据:页面框类 |
对话页面坐标 | 0x401 | WM_PSD_FULLPAGERECT | 页面矩形在对话框中的坐标。③参数:设备;④数据:矩形 |
对话边距坐标 | 0x402 | WM_PSD_MINMARGINRECT | 边距矩形在对话框中的坐标。③参数:设备;④数据:矩形 |
对话边距矩形 | 0x403 | WM_PSD_MARGINRECT | 对话框将绘制示例页的边距矩形。③参数:设备;④数据:矩形 |
对话绘希腊文 | 0x404 | WM_PSD_GREEKTEXTRECT | 边距矩形在对话框中的坐标。③参数:设备;④数据:矩形 |
对话绘制信封 | 0x405 | WM_PSD_ENVSTAMPRECT | 对话框将绘制示例页的信封戳矩形。③参数:设备;④数据:矩形 |
对话绘制地址 | 0x406 | WM_PSD_YAFULLPAGERECT | 对话框将绘制信封示例页的寄信人地址部分。③参数:设备;④数据:矩形 |
发送消息——文件对话框常数表 |
对话文件名称 | 0x464 | CDM_GETSPEC | 资源管理器样式的文件对话框中检索文件名。③参数:大小;④数据:缓冲区 |
对话文件路径 | 0x465 | CDM_GETFILEPATH | 在资源管理器样式的文件对话框中检索所选文件的路径和文件名。③参数:大小;④数据:缓冲区 |
对话目录路径 | 0x466 | CDM_GETFOLDERPATH | 检索资源管理器样式的文件对话框当前已打开的文件夹或目录的路径。③参数:大小;④数据:缓冲区 |
对话目录列表 | 0x467 | CDM_GETFOLDERIDLIST | 检索资源管理器样式的文件对话框当前已打开的文件夹对应的项目标识符列表的地址。③参数:大小;④数据:缓冲区 |
对话控件文本 | 0x468 | CDM_SETCONTROLTEXT | 在资源管理器样式的文件对话框中设置指定控件的文本。③参数:标识;④数据:新内容 |
对话隐藏控件 | 0x469 | CDM_HIDECONTROL | 隐藏资源管理器样式的文件对话框中的指定控件。③参数:标识;④数据:0 |
对话改扩展名 | 0x46A | CDM_SETDEFEXT | 设置“资源管理器”样式的文件对话框的默认文件扩展名不含点(.) 。③参数:0;④数据:扩展名 |
发送消息——字体对话框常数表 |
对话获取字体 | 0x401 | WM_CHOOSEFONT_GETLOGFONT | 检索有关用户当前字体选择的信息。③参数:0;④数据:逻辑字体类 |
对话设置字体 | 0x465 | WM_CHOOSEFONT_SETLOGFONT | 设置当前逻辑字体信息。③参数:0;④数据:逻辑字体类 |
对话字体选项 | 0x466 | WM_CHOOSEFONT_SETFLAGS | 设置对话框的显示选项。③参数:0;④数据:字体框类 |
对话修改颜色 | "commdlg_SetRGBColor" | SETRGBSTRING | 挂钩过程将注册的消息发送到对话框,以设置当前颜色选择。③参数:0;④数据:颜色 |
通用对话框-回调函数
中文名称 | 英文名称 | 示例 | 作用 |
颜色回调 | Lpcchookproc | 颜色回调(窗口,消息,参数,数据) | 接收用于 “颜色 ”对话框的默认对话框过程的消息或通知。 |
字体回调 | Lpcfhookproc | 字体回调(窗口,消息,参数,数据) | 接收用于 “字体 ”对话框的默认对话框过程的消息或通知。 |
查找回调 | Lpfrhookproc | 查找回调(窗口,消息,参数,数据) | 接收用于 “查找 ”或“ 替换 ”对话框的默认对话框过程的消息或通知。 |
打开另存 | Lpofnhookproc | 打开另存(窗口,消息,参数,数据) | 接收用于 “打开 ”和“ 另存为 ”对话框的默认对话框过程的消息或通知。 |
通用对话框-错误代码
英文名称 | 数值 | 作用解释 |
CDERR_DIALOGFAILURE | 0xFFFF | 无法创建对话框。 |
CDERR_FINDRESFAILURE | 0x0006 | 通用对话框函数未能找到指定的资源。 |
CDERR_INITIALIZATION | 0x0002 | 常见对话框函数在初始化期间失败。当内存不足时,通常会发生此错误。 |
CDERR_LOADRESFAILURE | 0x0007 | 通用对话框函数未能加载指定的资源。 |
CDERR_LOADSTRFAILURE | 0x0005 | 通用对话框函数未能加载指定的字符串。 |
CDERR_LOCKRESFAILURE | 0x0008 | 通用对话框函数未能锁定指定的资源。 |
CDERR_MEMALLOCFAILURE | 0x0009 | 通用对话框函数无法为内部结构分配内存。 |
CDERR_MEMLOCKFAILURE | 0x000A | 通用对话框函数无法锁定与句柄关联的内存。 |
CDERR_NOHINSTANCE | 0x0004 | 但未能提供相应的实例句柄。 |
CDERR_NOHOOK | 0x000B | 但未能提供指向相应挂钩过程的指针。 |
CDERR_NOTEMPLATE | 0x0003 | 但未能提供相应的模板。 |
CDERR_REGISTERMSGFAIL | 0x000C | 对话错误函数在由通用对话框函数调用时返回错误代码。 |
CDERR_STRUCTSIZE | 0x0001 | 相应公共对话框的初始化结构的大小无效。 |
打印选项函数返回以下错误代码。 |
PDERR_CREATEICFAILURE | 0x100A | PrintDlg 函数在尝试创建信息上下文时失败。 |
PDERR_DEFAULTDIFFERENT | 0x100C | 其他结构成员描述的打印机与当前默认打印机不匹配。 |
PDERR_DNDMMISMATCH | 0x1009 | DEVMODE和DEVNAMES结构中的数据描述了两个不同的打印机。 |
PDERR_GETDEVMODEFAIL | 0x1005 | 打印机驱动程序无法初始化DEVMODE 结构。 |
PDERR_INITFAILURE | 0x1006 | 打印选项 函数在初始化期间失败,没有更具体的扩展错误代码来描述失败。 这是函数的通用默认错误代码。 |
PDERR_LOADDRVFAILURE | 0x1004 | 打印选项 函数无法加载指定打印机的设备驱动程序。 |
PDERR_NODEFAULTPRN | 0x1008 | 默认打印机不存在。 |
PDERR_NODEVICES | 0x1007 | 找不到打印机驱动程序。 |
PDERR_PARSEFAILURE | 0x1002 | 打印选项 函数无法分析WIN.INI文件的 [devices] 节中的字符串。 |
PDERR_PRINTERNOTFOUND | 0x100B | WIN.INI文件的 [devices] 部分不包含所请求打印机的条目。 |
PDERR_RETDEFFAILURE | 0x1003 | 打印框类 结构指定了PD_RETURNDEFAULT标志,但 环境 或 名称 成员不是0。 |
PDERR_SETUPFAILURE | 0x1001 | 打印选项 函数无法加载所需的资源。 |
字体选框函数返回以下错误代码。 |
CFERR_MAXLESSTHANMIN | 0x2002 | 字体框类 结构的最小尺寸小于最大尺寸。 |
CFERR_NOFONTS | 0x2001 | 不存在字体。 |
文件/保存选框函数返回以下错误代码。 |
FNERR_BUFFERTOOSMALL | 0x3003 | 文件框类 结构的 路径 成员指向的缓冲区太小。 |
FNERR_INVALIDFILENAME | 0x3002 | 文件名无效。 |
FNERR_SUBCLASSFAILURE | 0x3001 | 尝试将列表框子类化失败,因为没有足够的内存可用。 |
查找/替换选框函数返回以下错误代码。 |
FRERR_BUFFERLENGTHZERO | 0x4001 | 查找替换类 结构的成员指向无效的缓冲区。 |
通用对话框-使用示例
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 值 |
红色 | 0xFF | 0:255.0.0 |
绿色 | 0xFF00 | 0:0.255.0 |
蓝色 | 0xFF0000 | 0:0.0.255 |
青色 | 0xFFFF00 | 0:0.255.255 |
洋红 | 0xFF00FF | 0:255.0.255 |
黄色 | 0xFFFF | 0:255.255.0 |
白色 | 0xFFFFFF | 0:255.255.255 |
黑色 | 0x0 | 0:0.0.0 |
颜色框类
中文名字 | 英文名称 | 长度 | 作用解释 |
颜色框类 | CHOOSECOLOR | 36 | 弹出一个选取颜色的对话框,并得到颜色相关信息。 |
颜色框类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
长度 | 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)};//指定编辑框的字体为新建的字体
结束//本例演示修改编辑框的字体和背景色
字体框类
中文名字 | 英文名称 | 长度 | 作用解释 |
字体框类 | CHOOSEFONT | 60 | 弹出一个选取颜色的对话框,并得到颜色相关信息。函数: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,路径,"选择的文件是",信息图标);//弹出消息框,显示选择的文件完整路径
结束//本例演示了在文件选择对话框中选择路径到指定的文本缓冲区
文件框类
中文名字 | 英文名称 | 长度 | 作用解释 |
文件框类 | OPENFILENAME | 76 | 用来初始化打开或另存为对话框的信息 |
文件框类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
长度 | 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_DOWN | 1 | 如果设置,则选择方向单选按钮的 向下 按钮,指示用户想要从当前位置到文档末尾进行搜索。 如果未设置 向下 ,则选择“ 向上 ”按钮,以便用户想要搜索到文档的开头。 |
全字匹配 | FR_WHOLEWORD | 2 | 如果设置,则选中“匹配整个Word仅检查”框,指示用户只想搜索与搜索字符串匹配的整个单词。 如果未设置全字匹配,则未选中检查框,因此还应搜索与搜索字符串匹配的单词片段。 |
分大小写 | FR_MATCHCASE | 4 | 如果设置,则选中“匹配大小写检查框,指示用户希望搜索区分大小写。 如果未设置分大小写,则取消选中检查框,以便搜索不区分大小写。 |
查下一个 | FR_FINDNEXT | 8 | 用户单击了“查找”或“替换”对话框中的“查找下一个”按钮。 查找 成员指定要搜索的字符串。 |
选中替换 | FR_REPLACE | 0x10 | 用户单击了“ 替换 ”对话框中的“ 替换 ”按钮。 查找 成员指定要替换的字符串,替换 成员指定替换字符串。 |
全部替换 | FR_REPLACEALL | 0x20 | 用户单击了“ 替换 ”对话框中的“全部 替换 ”按钮。 查找 成员指定要替换的字符串,替换 成员指定替换字符串。 |
查找关闭 | FR_DIALOGTERM | 0x40 | 对话框正在关闭。所有者窗口处理此消息后,对话框的句柄不再有效。 |
代码示例:
整数 查换消息;//在窗体消息函数前面申请此整数变量
查找替换类 查换(长度=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为循环搜索并替换
结束//搜索内容和替换内容都是程序段代码,需要使用发送消息函数实现
查找替换类
中文名字 | 英文名称 | 长度 | 作用解释 |
查找替换类 | FINDREPLACE | 40 | 弹出一个查找或替换文本的对话框 |
查找替换类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
长度 | 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的点击事件里弹出目录对话框
整数 项目=目录选框(目录)//使用目录框类调用目录选框弹出对话框
转换路径(项目,路径);//将项目标识符列表转换为文件系统路径。
任务释放(项目);//释放目录选框返回的项目标识符列表。
结束//文本变量"路径"就是选择的文件夹
目录框类
中文名字 | 英文名称 | 长度 | 作用解释 |
目录框类 | BROWSEINFO | 32 | 用来获取用户选择的目录 |
目录框类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
窗口 | 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 | 页面回调(窗口,消息,参数,数据) | 接收用于 “页面设置 ”对话框的默认对话框过程的消息或通知。 |
页面框类
中文名字 | 英文名称 | 长度 | 作用解释 |
页面框类 | PAGESETUPDLG | 84 | 用来显示打印对话框或打印设置对话框。 |
页面框类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
长度 | 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_DEFAULTMINMARGINS | 0x00000000 | 将用户可以为页边距指定的最小值设置为打印机允许的最小页边距。 这是默认值。 如果还指定 了PSD_MARGINS 和 PSD_MINMARGINS 标志,则忽略此标志。 |
PSD_DISABLEMARGINS | 0x00000010 | 禁用边距控件,防止用户设置边距。 |
PSD_DISABLEORIENTATION | 0x00000100 | 禁用方向控件,从而阻止用户设置页面方向。 |
PSD_DISABLEPAGEPAINTING | 0x00080000 | 阻止对话框绘制示例页的内容。 如果启用 页面绘图 挂钩过程,仍可以绘制示例页面的内容。 |
PSD_DISABLEPAPER | 0x00000200 | 禁用纸张控件,防止用户设置页面参数,例如纸张大小和来源。 |
PSD_DISABLEPRINTER | 0x00000020 | 已过时。Windows XP/2000:禁用“ 打印机 ”按钮,防止用户调用包含其他打印机设置信息的对话框。 |
PSD_ENABLEPAGEPAINTHOOK | 0x00040000 | 启用 重绘回调 成员中指定的挂钩过程。 |
PSD_ENABLEPAGESETUPHOOK | 0x00002000 | 启用 设置回调 成员中指定的挂钩过程。 |
PSD_ENABLEPAGESETUPTEMPLATE | 0x00008000 | 指示 实例 和 设置模板名 成员指定要用于替代默认模板的对话框模板。 |
PSD_ENABLEPAGESETUPTEMPLATEHANDLE | 0x00020000 | 指示 设置模板 成员标识包含预加载对话框模板的数据块。 如果指定了此标志,系统将忽略 设置模板名 成员。 |
PSD_INHUNDREDTHSOFMILLIMETERS | 0x00000008 | 指示百分之一毫米是边距和纸张大小的度量单位。可以在输入时设置此标志,以替代用户区域设置的默认度量单位。 |
PSD_INTHOUSANDTHSOFINCHES | 0x00000004 | 指示千分之一英寸是边距和纸张大小的度量单位。函数返回时,对话框会设置此标志以指示使用的单位。 |
PSD_INWININIINTLMEASURE | 0x00000000 | 保留。 |
PSD_MARGINS | 0x00000002 | 使系统使用指定的值作为左、上、右和下边距的初始宽度。如果未设置 PSD_MARGINS ,系统将所有边距的初始宽度设置为 1 英寸。 |
PSD_MINMARGINS | 0x00000001 | 使系统使用指定的值作为左、上、右和下边距的最小允许宽度。系统会阻止用户输入小于指定最小值的宽度。 |
PSD_NONETWORKBUTTON | 0x00200000 | 隐藏和禁用“ 网络 ”按钮。 |
PSD_NOWARNING | 0x00000080 | 防止系统在没有默认打印机时显示警告消息。 |
PSD_RETURNDEFAULT | 0x00000400 | 不显示对话框。将 环境 和 名称 成员设置为为系统默认打印机初始化的 设备环境、名称类 结构的句柄。 |
PSD_SHOWHELP | 0x00000800 | 使对话框显示 “帮助” 按钮。 窗口 成员必须指定窗口,以接收当用户单击“帮助”按钮时对话框发送的 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的点击事件里弹出打印对话框
如果(打印选项(打印))//使用打印框类调用打印选项弹出对话框
删除设备(打印.设备);//打印作业完成,删除设备。
结束//示例代码结束
打印框类
中文名字 | 英文名称 | 长度 | 作用解释 |
打印框类 | PRINTDLG | 66 | 用来显示打印对话框或打印设置对话框。 |
打印框类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
长度 | 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_ALLPAGES | 0x00000000 | 默认标志,指示最初选择了“ 所有” 单选按钮。 |
PD_SELECTION | 0x00000001 | 选择 “选择” 单选按钮。 |
PD_PAGENUMS | 0x00000002 | 选择 “页面” 单选按钮。 |
PD_NOSELECTION | 0x00000004 | 禁用“ 选择” 单选按钮。 |
PD_NOPAGENUMS | 0x00000008 | 禁用 “页面” 单选按钮和关联的编辑控件。还会导致“整理检查”框显示在对话框中。 |
PD_COLLATE | 0x00000010 | 选中整理检查框。 |
PD_PRINTTOFILE | 0x00000020 | 选中“打印到文件检查框。 |
PD_PRINTSETUP | 0x00000040 | 使系统显示“ 打印设置 ”对话框,而不是“ 打印 ”对话框。 |
PD_NOWARNING | 0x00000080 | 防止在发生错误时显示警告消息。 |
PD_RETURNDC | 0x00000100 | 返回与用户在属性表中所做的选择匹配的设备上下文。 |
PD_RETURNIC | 0x00000200 | 与 PD_RETURNDC 标志类似,但此标志返回信息上下文而不是设备上下文。 |
PD_RETURNDEFAULT | 0x00000400 | 不显示属性表。 而是将 名称 和 环境 成员设置为系统默认打印机初始化的结构句柄。 |
PD_SHOWHELP | 0x00000800 | 使对话框显示“ 帮助 ”按钮。 |
PD_ENABLEPRINTHOOK | 0x00001000 | 启用 在 打印回调 成员中指定的挂钩过程。 这将启用“ 打印 ”对话框的挂钩过程。 |
PD_ENABLESETUPHOOK | 0x00002000 | 启用 在 设置回调 成员中指定的挂钩过程。这将启用“ 打印设置 ”对话框的挂钩过程。 |
PD_ENABLEPRINTTEMPLATE | 0x00004000 | 指示 实例 和 模板 成员指定“ 常规 ”页下半部分中默认对话框模板的替换项。 |
PD_ENABLESETUPTEMPLATE | 0x00008000 | 指示 实例 和 设置模板名 成员指定默认 打印设置 对话框模板的替换项。 |
PD_ENABLEPRINTTEMPLATEHANDLE | 0x00010000 | 指示 实例 成员标识包含预加载对话框模板的数据块。 |
PD_ENABLESETUPTEMPLATEHANDLE | 0x00020000 | 指示 设置模板 成员标识包含预加载对话框模板的数据块。 |
PD_USEDEVMODECOPIESANDCOLLATE | 0x00040000 | 此标志指示应用程序是否支持多个副本和排序规则。 |
PD_DISABLEPRINTTOFILE | 0x00080000 | 禁用打印到文件检查框。 |
PD_HIDEPRINTTOFILE | 0x00100000 | 隐藏“打印到文件检查框。 |
PD_NONETWORKBUTTON | 0x00200000 | 隐藏和禁用“ 网络 ”按钮。 |
PD_CURRENTPAGE | 0x00400000 | 选择 “当前页” 单选按钮。 |
PD_NOCURRENTPAGE | 0x00800000 | 禁用 “当前页” 单选按钮。 |
PD_EXCLUSIONFLAGS | 0x01000000 | 指示 排除 成员标识要从打印机驱动程序属性页中排除的项目。 |
PD_USELARGETEMPLATE | 0x10000000 | 强制属性表对 “常规 ”页使用大型模板。 |
9.
打印属性表——打印作业属性
打印属性表是一个标准用户界面,允许用户指定特定打印作业的属性。 属性表由一组属性页组成,这些属性页因打印机或应用程序而异。
对于标准 Windows 属性页的子集,某些打印机可能会添加特定于驱动程序的属性页,而某些应用程序可能会添加特定于应用程序的属性页。
若要创建并显示打印属性表,请初始化
打印选框类 结构并将该结构传递给
打印选框 函数。下图显示了典型的打印属性表。
打印选框类 结构的大多数成员与
打印框类 结构的成员相同。
有关如何使用通用结构成员与对话框控件交互的说明,请参阅
打印对话框。本主题的其余部分介绍与 “打印 ”对话框不同的“ 打印 ”属性表功能。
可以通过为“常规”页的下半部分指定自定义对话框模板以及指定其他属性页以跟随“常规”页来自定义打印属性表。 有关详细信息,请参阅 自定义打印属性表。
可以实现回调对象,以在显示属性表时从
打印选框 函数接收通知和消息。 提供自定义模板或其他页面的应用程序使用回调对象与属性表通信。 有关详细信息,请参阅 打印属性表的回调对象。
打印属性表支持指定要打印的多个不连续页面范围。
打印选框类 结构的 组数 成员指定
打印页类 结构的数组,其中每个结构指定页面范围。
“打印”属性表将“当前页”单选按钮显示为单选按钮的“页面范围”组的一部分。 若要控制“当前页”单选按钮,请使用
打印选框类 结构的 标志 成员中的0x400000和0x800000标志。
示例代码:
打印页类 打印页[10];//申请10个打印面,用来存储页面的首页和末页
打印选框类 打印框(长度=84,标志=$110,页数=10,份数=1,最小=1,最大=1000,始页=0xffffffff);//标志=0x10选中整理检查框+0x100匹配设备
程序段 窗体启动;//以上代码为全局变量,在窗体启动程序段进行赋值
打印框.窗口=窗体;//指定打印对话框的窗口为程序主窗体
打印框.页面=打印页;//指定打印对话框的页面为打印页
结束//换到其它地方书写代码
程序段 按钮2_点击;//在按钮2的点击事件里弹出打印对话框
如果(打印选框(打印框))返回;//打印选框正常返回0,非0就不再执行后面代码
如果(打印框.回值=1);//用户点击了打印选框上面的打印按钮。
窗体~"正在打印文档";//显示正在打印。
结束//例程代码结束
打印选框类
中文名字 | 英文名称 | 长度 | 作用解释 |
打印选框类 | PRINTDLGEXA | 84 | 用来显示打印对话框或打印设置对话框。函数: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应用按钮 |
打印页类
中文名字 | 英文名称 | 长度 | 作用解释 |
打印页类 | PRINTPAGERANGE | 8 | 表示打印作业中的页面范围。 打印作业可以有多个页面范围。 |
打印页类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
首页 | nFromPage | 整数 | 范围的第一页。 |
末页 | nToPage | 整数 | 范围的最后一页。 |
文档类
中文名字 | 英文名称 | 长度 | 作用解释 |
文档类 | DOCINFO | 20 | 用来显示打印对话框或打印设置对话框。函数:PrintDlg(lppd) |
文档类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
长度 | cbSize | 整数 | 指定这个结构的大小,以字节为单位。 |
名称 | lpszDocName | 整数 | 指向指定文档名称的字符串 |
输出 | lpszOutput | 整数 | 指向指定输出文件名称的字符串 |
数据 | lpszDatatype | 整数 | 指定用于记录打印作业的数据类型(已忽略) |
其它 | fwType | 整数 | 指定有关打印作业的其他信息。(已忽略) |
设置模板 | hPageSetupTemplate | 整数 | 包含对话框模板的内存对象的句柄 |
设备环境类
中文名字 | 英文名称 | 长度 | 作用解释 |
设备环境类 | DEVMODEA | 156 | 包含有关打印机或显示设备的初始化和环境的信息。 |
设备环境类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
名称 | 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_LETTER | 1 | 字母,8 1/2- by 11 英寸 |
DMPAPER_LETTERSMALL | 2 | 小写字母,8 1/2- by 11 英寸 |
DMPAPER_TABLOID | 3 | 小报,11- 乘 17 英寸 |
DMPAPER_LEDGER | 4 | 账本,17 by 11 英寸 |
DMPAPER_LEGAL | 5 | 法律,8 1/2- by 14 英寸 |
DMPAPER_STATEMENT | 6 | 语句,5 1/2- by 8 1/2 英寸 |
DMPAPER_EXECUTIVE | 7 | 行政, 7 1/4- by 10 1/2 英寸 |
DMPAPER_A3 | 8 | A3 工作表,297- by 420 毫米 |
DMPAPER_A4 | 9 | A4 工作表,210- by 297 毫米 |
DMPAPER_A4SMALL | 10 | A4 小纸,210 by 297 毫米 |
DMPAPER_A5 | 11 | A5 工作表,148- by 210 毫米 |
DMPAPER_B4 | 12 | B4 工作表,250- by 354 毫米 |
DMPAPER_B5 | 13 | B5 工作表,182- by 257 毫米纸 |
DMPAPER_FOLIO | 14 | Folio, 8 1/2- by 13 英寸纸 |
DMPAPER_QUARTO | 15 | Quarto,215 by 275 毫米纸 |
DMPAPER_10X14 | 16 | 10- 14 英寸工作表 |
DMPAPER_11X17 | 17 | 11- by 17 英寸工作表 |
DMPAPER_NOTE | 18 | 注意,8 1/2- by 11 英寸 |
DMPAPER_ENV_9 | 19 | #9 信封,3 7/8- by 8 7/8 英寸 |
DMPAPER_ENV_10 | 20 | #10 信封,4 1/8- by 9 1/2 英寸 |
DMPAPER_ENV_11 | 21 | #11 信封,4 1/2- by 10 3/8 英寸 |
DMPAPER_ENV_12 | 22 | #12 信封,4 3/4- by 11 英寸 |
DMPAPER_ENV_14 | 23 | #14 信封,5- by 11 1/2 英寸 |
DMPAPER_CSHEET | 24 | C 工作表,17- by 22 英寸 |
DMPAPER_DSHEET | 25 | D 工作表,22 by 34 英寸 |
DMPAPER_ESHEET | 26 | E 工作表,34 by 44 英寸 |
DMPAPER_ENV_DL | 27 | DL 信封,110- by 220 毫米 |
DMPAPER_ENV_C5 | 28 | C5 信封,162- by 229 毫米 |
DMPAPER_ENV_C3 | 29 | C3 信封,324 by 458 毫米 |
DMPAPER_ENV_C4 | 30 | C4 信封,229- by 324 毫米 |
DMPAPER_ENV_C6 | 31 | C6 信封,114- by 162 毫米 |
DMPAPER_ENV_C65 | 32 | C65 信封,114 by 229 毫米 |
DMPAPER_ENV_B4 | 33 | B4 信封,250- by 353 毫米 |
DMPAPER_ENV_B5 | 34 | B5 信封,176- by 250 毫米 |
DMPAPER_ENV_B6 | 35 | B6 信封,176- by 125 毫米 |
DMPAPER_ENV_ITALY | 36 | 意大利信封,110- by 230 毫米 |
DMPAPER_ENV_MONARCH | 37 | 君主信封, 3 7/8- by 7 1/2 英寸 |
DMPAPER_ENV_PERSONAL | 38 | 6 3/4 信封,3 5/8- by 6 1/2 英寸 |
DMPAPER_FANFOLD_US | 39 | US Std Fanfold, 14 7/8- by 11 英寸 |
DMPAPER_FANFOLD_STD_GERMAN | 40 | 德国 Std Fanfold, 8 1/2- by 12 英寸 |
DMPAPER_FANFOLD_LGL_GERMAN | 41 | 德国法律范福尔德, 8 - by 13 英寸 |
DMPAPER_ISO_B4 | 42 | B4 (ISO) 250- by 353 毫米纸张 |
DMPAPER_JAPANESE_POSTCARD | 43 | 日本明信片,100-by 148 毫米 |
DMPAPER_9X11 | 44 | 9- by 11 英寸工作表 |
DMPAPER_10X11 | 45 | 10- 11 英寸工作表 |
DMPAPER_15X11 | 46 | 15- by 11 英寸工作表 |
DMPAPER_ENV_INVITE | 47 | 信封邀请 220 x 220 mm |
DMPAPER_RESERVED_48 | 48 | 预留--请勿使用 |
DMPAPER_RESERVED_49 | 49 | 预留--请勿使用 |
DMPAPER_LETTER_EXTRA | 50 | 字母额外 9 1/2 x 12 英寸。 |
DMPAPER_LEGAL_EXTRA | 51 | 法定额外 9 1/2 x 15 英寸。 |
DMPAPER_TABLOID_EXTRA | 52 | 小报,11.69 x 18 英寸 |
DMPAPER_A4_EXTRA | 53 | A4 工作表,9.27 x 12.69 英寸 |
DMPAPER_LETTER_TRANSVERSE | 54 | 字母横向 8 1/2 x 11 英寸 |
DMPAPER_A4_TRANSVERSE | 55 | A4 横向 210 x 297 毫米 |
DMPAPER_LETTER_EXTRA_TRANSVERSE | 56 | 字母额外横向 9 1/2 x 12 英寸。 |
DMPAPER_A_PLUS | 57 | SuperA/A4 227 x 356 毫米 |
DMPAPER_B_PLUS | 58 | SuperB/A3 305 x 487 毫米 |
DMPAPER_LETTER_PLUS | 59 | 美国字母加号 8.5 x 12.69 in |
DMPAPER_A4_PLUS | 60 | A4 Plus 210 x 330 毫米 |
DMPAPER_A5_TRANSVERSE | 61 | A5 横向 148 x 210 毫米 |
DMPAPER_B5_TRANSVERSE | 62 | B5 (JIS) 横向 182 x 257 mm |
DMPAPER_A3_EXTRA | 63 | A3 额外 322 x 445 毫米 |
DMPAPER_A5_EXTRA | 64 | A5 额外 174 x 235 毫米 |
DMPAPER_B5_EXTRA | 65 | B5 (ISO) 额外 201 x 276 毫米 |
DMPAPER_A2 | 66 | A2 工作表,420 x 594 毫米 |
DMPAPER_A3_TRANSVERSE | 67 | A3 横向 297 x 420 mm |
DMPAPER_A3_EXTRA_TRANSVERSE | 68 | A3 额外横向 322 x 445 毫米 |
DMPAPER_DBL_JAPANESE_POSTCARD | 69 | 双日明信片,200 by 148 毫米 |
DMPAPER_A6 | 70 | A6 工作表,105- 乘 148 毫米 |
DMPAPER_JENV_KAKU2 | 71 | 日语信封 Kaku #2 |
DMPAPER_JENV_KAKU3 | 72 | 日语信封 Kaku #3 |
DMPAPER_JENV_CHOU3 | 73 | 日语信封周 #3 |
DMPAPER_JENV_CHOU4 | 74 | 日语信封 Chou #4 |
DMPAPER_LETTER_ROTATED | 75 | 字母旋转 11 by 8 1/2 英寸 |
DMPAPER_A3_ROTATED | 76 | A3 旋转纸,420 乘 297 毫米 |
DMPAPER_A4_ROTATED | 77 | A4 旋转纸,297 乘 210 毫米 |
DMPAPER_A5_ROTATED | 78 | A5 旋转纸,210 乘 148 毫米 |
DMPAPER_B4_JIS_ROTATED | 79 | B4 (JIS) 旋转工作表,364 乘 257 毫米 |
DMPAPER_B5_JIS_ROTATED | 80 | B5 (JIS) 旋转工作表,257 乘 182 毫米 |
DMPAPER_JAPANESE_POSTCARD_ROTATED | 81 | 日本明信片旋转,148 乘 100 毫米 |
DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED | 82 | 双日本明信片旋转,148 乘 200 毫米 |
DMPAPER_A6_ROTATED | 83 | A6 旋转纸,148 乘 105 毫米 |
DMPAPER_JENV_KAKU2_ROTATED | 84 | 日语信封 Kaku #2 旋转 |
DMPAPER_JENV_KAKU3_ROTATED | 85 | 日语信封 Kaku #3 旋转 |
DMPAPER_JENV_CHOU3_ROTATED | 86 | 日本信封 Chou #3 旋转 |
DMPAPER_JENV_CHOU4_ROTATED | 87 | 日本信封周 #4 旋转 |
DMPAPER_B6_JIS | 88 | B6 (JIS) 纸,128 乘 182 毫米 |
DMPAPER_B6_JIS_ROTATED | 89 | B6 (JIS) 旋转工作表,182 乘 128 毫米 |
DMPAPER_12X11 | 90 | 12- by 11 英寸工作表 |
DMPAPER_JENV_YOU4 | 91 | 日语信封 You #4 |
DMPAPER_JENV_YOU4_ROTATED | 92 | 日语信封你 #4 旋转 |
DMPAPER_P16K | 93 | 中国 16K,146- by 215 毫米 |
DMPAPER_P32K | 94 | 中国 32K,97- by 151 毫米 |
DMPAPER_P32KBIG | 95 | 中国 32K (大) 97- 乘 151 毫米 |
DMPAPER_PENV_1 | 96 | 中国信封 #1, 102- by 165 毫米 |
DMPAPER_PENV_2 | 97 | 中国信封 #2, 102- by 176 毫米 |
DMPAPER_PENV_3 | 98 | 中国信封 #3, 125- by 176 毫米 |
DMPAPER_PENV_4 | 99 | 中国信封 #4, 110- by 208 毫米 |
DMPAPER_PENV_5 | 100 | 中国信封 #5, 110- by 220 毫米 |
DMPAPER_PENV_6 | 101 | 中国信封 #6, 120- by 230 毫米 |
DMPAPER_PENV_7 | 102 | 中国信封 #7, 160- by 230 毫米 |
DMPAPER_PENV_8 | 103 | 中国信封 #8,120- x 309 毫米 |
DMPAPER_PENV_9 | 104 | 中国信封 #9,229- x 324 毫米 |
DMPAPER_PENV_10 | 105 | 中国信封 #10,324- x 458 毫米 |
DMPAPER_P16K_ROTATED | 106 | 中国 16K 旋转,215 by 146 毫米 |
DMPAPER_P32K_ROTATED | 107 | 中国 32K 旋转,151 乘 97 毫米 |
DMPAPER_P32KBIG_ROTATED | 108 | 中国 32K (大) 旋转,151- by 97 毫米 |
DMPAPER_PENV_1_ROTATED | 109 | 中国信封 #1 旋转,165- x 102 毫米 |
DMPAPER_PENV_2_ROTATED | 110 | 中国信封 #2 旋转,176- x 102 毫米 |
DMPAPER_PENV_3_ROTATED | 111 | 中国信封 #3 旋转,176- x 125 毫米 |
DMPAPER_PENV_4_ROTATED | 112 | 中国信封 #4 旋转, 208- by 110 毫米 |
DMPAPER_PENV_5_ROTATED | 113 | 中国信封 #5 旋转, 220- x 110 毫米 |
DMPAPER_PENV_6_ROTATED | 114 | 中国信封 #6 旋转, 230- by 120 毫米 |
DMPAPER_PENV_7_ROTATED | 115 | 中国信封 #7 旋转,230- x 160 毫米 |
DMPAPER_PENV_8_ROTATED | 116 | 中国信封 #8 旋转,309- x 120 毫米 |
DMPAPER_PENV_9_ROTATED | 117 | 中国信封 #9 旋转,324 x 229 毫米 |
DMPAPER_PENV_10_ROTATED | 118 | 中国信封 #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 | 路径存在(路径) | 判断目标路径(文件或目录)是否存在 |
内核对象——本地文件系统
文件系统使应用程序能够在存储设备上存储和检索文件。 文件放置在分层结构中。 文件系统指定文件的命名约定和用于指定树结构中文件路径的格式。
每个文件系统由一个或多个驱动程序和动态链接库组成,用于定义文件系统的数据格式和功能。
文件系统可以存在于许多不同类型的存储设备上,包括硬盘、自动存储盒、可移动光盘、磁带备份单元和内存卡。
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)包含对象的标准访问权限,可以是以下预定义标志的组合。
位 | 标志 | 含义 |
16 | DELETE | 删除访问权限。 |
17 | READ_CONTROL |
读取对安全描述符的所有者、组和 任意访问控制列表 (DACL) 的访问权限。 |
18 | WRITE_DAC | 对 DACL 的写入访问权限。 |
19 | WRITE_OWNER | 对所有者的写入访问权限。 |
20 | 同步 | 同步访问。 |
标准访问权限
每种类型的安全对象都有一组访问权限,这些权限对应于特定于该对象类型的操作。
除了这些特定于对象的访问权限外,还有一组标准访问权限,这些权限对应于大多数安全对象类型通用的操作。
英文名称 | 数值 | 作用解释 |
DELETE | 0x10000 | 删除对象的权限。 |
READ_CONTROL | 0x20000 | 读取对象 安全描述符中的信息的权限,不包括 系统访问控制列表中 的信息 (SACL) 。 |
SYNCHRONIZE | 0x100000 | 将对象用于同步的权限。 这使线程能够等待对象处于信号状态。 某些对象类型不支持此访问权限。 |
WRITE_DAC | 0x40000 | 修改 自由访问控制列表 的权限 (DACL 在对象的安全描述符中) 。 |
WRITE_OWNER | 0x80000 | 更改对象安全说明符中的所有者的权限。 |
以下是上面几个值的组合 |
STANDARD_RIGHTS_ALL | 0x1F0000 | 合并 DELETE、READ_CONTROL、WRITE_DAC、WRITE_OWNER 和 SYNCHRONIZE 访问。 |
STANDARD_RIGHTS_EXECUTE | 0x20000 | 当前定义为等于 READ_CONTROL。 |
STANDARD_RIGHTS_READ | 0x20000 | 当前定义为等于 READ_CONTROL。 |
STANDARD_RIGHTS_REQUIRED | 0xF0000 | 合并 DELETE、READ_CONTROL、WRITE_DAC 和 WRITE_OWNER 访问。 |
STANDARD_RIGHTS_WRITE | 0x20000 | 当前定义为等于 READ_CONTROL。 |
通用访问权限
可以使用通用访问权限来指定打开对象句柄时所需的访问类型。 这通常比指定所有相应的标准和特定权限更简单。
英文名称 | 数值 | 作用解释 |
GENERIC_ALL | 0x10000000 | 所有可能的访问权限 |
GENERIC_EXECUTE | 0x20000000 | 执行访问权限 |
GENERIC_READ | 0x80000000 | 读取权限 |
GENERIC_WRITE | 0x40000000 | 写入权限 |
文件访问权限常量
文件和目录的有效访问权限包括标准访问权限。 下表列出了特定于文件和目录的访问权限。
英文名称 | 数值 | 作用解释 |
FILE_ADD_FILE | 2 | 对于目录,有权在目录中创建文件。 |
FILE_ADD_SUBDIRECTORY | 4 | 对于目录,是创建子目录的权限。 |
FILE_ALL_ACCESS | 0x1F03FF | 文件的所有可能的访问权限。 |
FILE_APPEND_DATA | 4 | 对于文件对象,是将数据追加到文件的权限。 (对于本地文件,如果未指定此标志,写入操作将不会覆盖现有数据 FILE_WRITE_DATA。) 对于目录对象,创建子目录 (的权限 FILE_ADD_SUBDIRECTORY) 。 |
FILE_CREATE_PIPE_INSTANCE | 4 | 对于命名管道,是创建管道的权限。 |
FILE_DELETE_CHILD | 64 (0x40) | 对于目录,有权删除目录及其包含的所有文件,包括只读文件。 |
FILE_EXECUTE | 32 (0x20) | 对于本机代码文件,是执行该文件的权利。 授予脚本的此访问权限可能会导致脚本可执行,具体取决于脚本解释器。 |
FILE_LIST_DIRECTORY | 1 | 对于目录,是列出目录内容的权限。 |
FILE_READ_ATTRIBUTES | 128 (0x80) | 读取文件属性的权利。 |
FILE_READ_DATA | 1 | 对于文件对象,读取相应文件数据的权限。 对于目录对象,是读取相应目录数据的权限。 |
FILE_READ_EA | 8 | 读取扩展文件属性的权利。 |
FILE_TRAVERSE | 32 (0x20) | 对于目录,是遍历目录的权限。 默认情况下,会向用户分配 BYPASS_TRAVERSE_CHECKING权限,这会忽略 FILE_TRAVERSE访问权限。 有关详细信息,请参阅 文件安全和访问权限 中的备注。 |
FILE_WRITE_ATTRIBUTES | 256 (0x100) | 写入文件属性的权利。 |
FILE_WRITE_DATA | 2 | 对于文件对象,是将数据写入文件的权限。 对于目录对象,在目录中创建文件的权限 (FILE_ADD_FILE) 。 |
FILE_WRITE_EA | 16 (0x10) | 写入扩展文件属性的权利。 |
STANDARD_RIGHTS_READ | 0x20000 | 包括 READ_CONTROL,这是读取文件或目录对象的安全描述符中信息的权限。 这不包括 SACL 中的信息。 |
STANDARD_RIGHTS_WRITE | 0x20000 | 与 STANDARD_RIGHTS_READ 相同。 |
文件安全和访问权限
英文名称 | 数值 | 作用解释 |
FILE_GENERIC_EXECUTE | 0x1200A0 | FILE_EXECUTE|FILE_READ_ATTRIBUTES|STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE |
FILE_GENERIC_READ | 0x120089 | FILE_READ_ATTRIBUTES|FILE_READ_DATA|FILE_READ_EA|STANDARD_RIGHTS_READ|SYNCHRONIZE |
FILE_GENERIC_WRITE | 0x120116 | FILE_APPEND_DATA|FILE_WRITE_ATTRIBUTES|FILE_WRITE_DATA|FILE_WRITE_EA|STANDARD_RIGHTS_WRITE|SYNCHRONIZE |
文件属性类型
英文名称 | 数值 | 作用解释 |
FILE_ATTRIBUTE_READONLY | 1 (0x00000001) | 只读文件。 应用程序可以读取文件,但不能写入或删除该文件。 在目录上不遵循此属性。 有关详细信息,请参阅 无法在 Windows Server 2003、Windows XP、Windows Vista 或 Windows 7 中查看或更改文件夹的只读或系统属性。 |
FILE_ATTRIBUTE_HIDDEN | 2 (0x00000002) | 文件或目录处于隐藏状态。 它不包括在普通目录列表中。 |
FILE_ATTRIBUTE_SYSTEM | 4 (0x00000004) | 操作系统使用其中的一部分或独占使用的文件或目录。 |
FILE_ATTRIBUTE_DIRECTORY | 16 (0x00000010) | 标识目录的句柄。 |
FILE_ATTRIBUTE_ARCHIVE | 32 (0x00000020) | 作为存档文件或目录的文件或目录。 应用程序通常使用此属性来标记要备份或删除的文件。 |
FILE_ATTRIBUTE_DEVICE | 64 (0x00000040) | 此值保留供系统使用。 |
FILE_ATTRIBUTE_NORMAL | 128 (0x00000080) | 未设置其他属性的文件。 此属性仅在单独使用时才有效。 |
FILE_ATTRIBUTE_TEMPORARY | 256 (0x00000100) | 用于临时存储的文件。 如果有足够的缓存内存可用,文件系统会避免将数据写回到大容量存储,因为通常情况下,应用程序在句柄关闭后会删除临时文件。 在这种情况下,系统可以完全避免写入数据。 否则,在句柄关闭后写入数据。 |
FILE_ATTRIBUTE_SPARSE_FILE | 512 (0x00000200) | 是稀疏文件的文件。 |
FILE_ATTRIBUTE_REPARSE_POINT | 1024 (0x00000400) | 具有关联的重新分析点的文件或目录,或作为符号链接的文件。 |
FILE_ATTRIBUTE_COMPRESSED | 2048 (0x00000800) | 压缩的文件或目录。 对于文件,将压缩该文件中的所有数据。 对于目录,压缩是新建文件和子目录的默认设置。 |
FILE_ATTRIBUTE_OFFLINE | 4096 (0x00001000) | 文件的数据不会立即可用。 此属性指示文件数据以物理方式移动到脱机存储。 此属性由远程存储(分层存储管理软件)使用。 应用程序不应随意更改此属性。 |
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED | 8192 (0x00002000) | 内容索引服务不会为文件或目录编制索引。 |
FILE_ATTRIBUTE_ENCRYPTED | 16384 (0x00004000) | 加密的文件或目录。 对于文件,文件中的所有数据流都已加密。 对于目录,加密是新创建的文件和子目录的默认加密。 |
FILE_ATTRIBUTE_INTEGRITY_STREAM | 32768 (0x00008000) | 目录或用户数据流配置了完整性 (仅在 ReFS 卷) 上受支持。 它不包括在普通目录列表中。 如果文件已重命名,完整性设置将一直保留。 如果复制了某个文件,则如果源文件或目标目录设置了完整性,则目标文件将具有完整性设置。在Windows Server 2012之前,不支持此标志。 |
FILE_ATTRIBUTE_VIRTUAL | 65536 (0x00010000) | 此值保留供系统使用。 |
FILE_ATTRIBUTE_NO_SCRUB_DATA | 131072 (0x00020000) | 后台数据完整性扫描程序不读取的用户数据流 (AKA 清理器) 。 在目录上设置时,它仅提供继承。 此标志仅在 存储空间 和 ReFS 卷上受支持。 它不包括在普通目录列表中。在Windows 8和Windows Server 2012之前,不支持此标志。 |
FILE_ATTRIBUTE_EA | 262144 (0x00040000) | 具有扩展属性的文件或目录。重要: 此常量仅供内部使用。 |
FILE_ATTRIBUTE_PINNED | 524288 (0x00080000) | 此属性指示用户意图,即即使未主动访问文件或目录,也应在本地保持完全存在。 此属性用于分层存储管理软件。 |
FILE_ATTRIBUTE_UNPINNED | 1048576 (0x00100000) | 此属性指示,除非主动访问文件或目录,否则不应在本地完全存在。 此属性用于分层存储管理软件。 |
FILE_ATTRIBUTE_RECALL_ON_OPEN | 262144 (0x00040000) | 此属性仅出现在目录枚举类 (FILE_DIRECTORY_INFORMATION、FILE_BOTH_DIR_INFORMATION等) 中。 设置此属性时,这意味着文件或目录在本地系统上没有物理表示形式;项是虚拟的。 打开该项目的成本将比平常要高,例如,它会导致至少从远程存储中提取其中一部分。 |
FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS | 4194304 (0x00400000) | 如果设置了此属性,则意味着文件或目录在本地未完全存在。 对于表示并非所有数据都位于本地存储 (的文件,例如,它可能稀疏,某些数据仍位于远程存储) 中。 对于目录,这意味着某些目录内容正在从另一个位置虚拟化。 读取文件/枚举目录的成本将比平常要高,例如,这会导致至少从远程存储中提取一些文件/目录内容。 只有内核模式调用方可以设置此位。文件系统微型筛选器低于 180000 – 189999高度范围 (FSFilter HSM 加载顺序组) 不得对设置了此属性的文件发出目标缓存读取或写入。 这可能会导致缓存污染和潜在的文件损坏。 有关详细信息,请参阅 处理占位符。 |
文件属性标志
英文名称 | 数值 | 作用解释 |
FILE_FLAG_BACKUP_SEMANTICS | 0x02000000 | 正在为备份或还原操作打开或创建文件。 当进程具有 SE_BACKUP_NAME 和 SE_RESTORE_NAME 权限时,系统将确保调用进程替代文件安全检查。 有关详细信息,请参阅 更改令牌中的特权。 |
FILE_FLAG_DELETE_ON_CLOSE | 0x04000000 | 文件在其所有句柄都关闭后立即被删除,其中包括指定的句柄和任何其他打开或重复的句柄。如果存在文件的现有打开句柄,则调用会失败,除非它们都以 FILE_SHARE_DELETE 共享模式打开。针对文件的后续打开请求将失败,除非指定 FILE_SHARE_DELETE 共享模式。 |
FILE_FLAG_NO_BUFFERING | 0x20000000 | 正在打开文件或设备,没有系统缓存用于数据读取和写入。 此标志不会影响硬盘缓存或内存映射文件。 |
FILE_FLAG_OPEN_NO_RECALL | 0x00100000 | 文件数据已请求,但应继续位于远程存储中。 不应将其传输回本地存储。 此标志供远程存储系统使用。 |
FILE_FLAG_OPEN_REPARSE_POINT | 0x00200000 | 不会进行正常的 重分析点 处理; CreateFile 将尝试打开重新分析点。 打开文件时,无论控制重分析点的筛选器是否正常运行,都返回文件句柄。此标志不能与 CREATE_ALWAYS 标志一起使用。 |
FILE_FLAG_OVERLAPPED | 0x40000000 | 正在为异步 I/O 打开或创建文件或设备。在此句柄上完成后续 I/O 操作时, OVERLAPPED 结构中指定的事件将设置为信号状态。如果指定了此标志,则文件可用于同时读取和写入操作。 |
FILE_FLAG_POSIX_SEMANTICS | 0x01000000 | 将根据 POSIX 规则进行访问。 这包括允许多个具有名称的文件(仅在大小写上不同)用于支持该命名的文件系统。 使用此选项时请小心,因为为 MS-DOS 或 16 位 Windows 编写的应用程序可能无法访问使用此标志创建的文件。 |
FILE_FLAG_RANDOM_ACCESS | 0x10000000 | 访问应是随机的。 系统可将此选项用作优化文件缓存的提示。如果文件系统不支持缓存的 I/O 且 FILE_FLAG_NO_BUFFERING,则此标志无效。 |
FILE_FLAG_SESSION_AWARE | 0x00800000 | 正在使用会话感知打开文件或设备。 如果未指定此标志,则会话 0 中运行的进程无法打开每个会话 (设备,例如使用 RemoteFX USB 重定向) 的设备。 此标志对不在会话 0 中的调用方无效。 此标志仅在服务器版本的 Windows 上受支持。 |
FILE_FLAG_SEQUENTIAL_SCAN | 0x08000000 | 访问旨在从头到尾按顺序进行。 系统可将此选项用作优化文件缓存的提示。如果读取隐藏 (即使用反向扫描) ,则不应使用此标志。如果文件系统不支持缓存的 I/O 且 FILE_FLAG_NO_BUFFERING,则此标志无效。 |
FILE_FLAG_WRITE_THROUGH | 0x80000000 | 写入操作不会通过任何中间缓存,它们将直接转到磁盘。有关其他信息,请参阅本主题的 缓存行为 部分。 |
文件安全标志
SECURITY_SQOS_PRESENT 标志指定为 属性 的一部分时,它还可以包含以下一个或多个值。
英文名称 | 数值 | 作用解释 |
SECURITY_ANONYMOUS | 0 | 在匿名模拟级别模拟客户端。 |
SECURITY_CONTEXT_TRACKING | 0x40000 | 安全跟踪模式是动态的。 如果未指定此标志,则安全跟踪模式为静态。 |
SECURITY_DELEGATION | 0x30000 | 在委派模拟级别模拟客户端。 |
SECURITY_EFFECTIVE_ONLY | 0x80000 | 服务器只能使用客户端安全上下文中已启用的方面。 |
SECURITY_IDENTIFICATION | 0x10000 | 在标识模拟级别模拟客户端。 |
SECURITY_IMPERSONATION | 0x20000 | 在模拟级别模拟客户端。 如果未将其他标志与 SECURITY_SQOS_PRESENT 标志一起指定,则这是默认行为。 |
SECURITY_SQOS_PRESENT | 0x00100000 | SECURITY_SQOS_PRESENT |
SECURITY_VALID_SQOS_FLAGS | 0x001F0000 | SECURITY_VALID_SQOS_FLAGS |
文件共享模式
英文名称 | 数值 | 作用解释 |
0 | 0x00000000 | 阻止其他进程在请求删除、读取或写入访问权限时打开文件或设备。 |
FILE_SHARE_DELETE | 0x00000004 | 启用文件或设备上的后续打开操作以请求删除访问权限。否则,如果其他进程请求删除访问权限,则无法打开文件或设备。 |
FILE_SHARE_READ | 0x00000001 | 启用文件或设备上的后续打开操作以请求读取访问权限。否则,如果其他进程请求读取访问权限,则无法打开文件或设备。 |
FILE_SHARE_WRITE | 0x00000002 | 启用文件或设备上的后续打开操作以请求写入访问权限。否则,如果其他进程请求写入访问权限,则无法打开文件或设备。 |
文件创建方式
英文名称 | 数值 | 作用解释 |
CREATE_ALWAYS | 2 | 始终创建新文件。如果指定的文件存在且可写,则函数将截断文件,函数成功,最后错误代码设置为 ERROR_ALREADY_EXISTS (183) 。否则为0 |
CREATE_NEW | 1 | 仅当文件尚不存在时,才创建新文件。如果指定的文件存在,则函数将失败,最后一个错误代码设置为 ERROR_FILE_EXISTS (80) 。否则会创建一个新文件。 |
OPEN_ALWAYS | 4 | 始终打开文件。如果指定的文件存在,则函数成功,并将最后一个错误代码设置为 ERROR_ALREADY_EXISTS (183) 。否则为0 |
OPEN_EXISTING | 3 | 仅当文件或设备存在时才打开它。如果指定的文件或设备不存在,则函数将失败,并将最后一个错误代码设置为 ERROR_FILE_NOT_FOUND (2) 。 |
TRUNCATE_EXISTING | 5 | 打开一个文件并截断它,使其大小为零字节,仅当它存在时。如果指定的文件不存在,则函数将失败,最后一个错误代码设置为 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 |
文件类型 | GetFileType | t=文件类型(文件) | 返回指定文件的类型,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)位置移动到文件指针的当前位置 |
坐标值
中文名字 | 英文名称 | 长度 | 作用解释 |
坐标值 | COORD | 4 | 用来存储16位坐标位置的信息 |
坐标值——成员表 |
中文 | 英文 | 类型 | 作用解释 |
左 | x | 整形 | 水平坐标位置。 |
顶 | y | 整形 | 垂直坐标位置。 |
查找文件类
中文名字 | 英文名称 | 长度 | 作用解释 |
查找文件类 | FINDDATA | 318 | 用来获取文件名称和时间等属性。 |
查找文件类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
属性 | dwFileAttributes | 整数 | 表示文件的属性:$20(存档)、2(隐藏)、$80(正常) 1(只读)、$10(文件夹)、4(系统)$100(临时) |
创建时间 | ftCreationTime.dwLowDateTime | 整数 | 文件被创建的时间 |
创建高位 | ftCreationTime.dwHighDateTime | 整数 | 创建时间的高位。 |
最后访问 | ftLastAccessTime.dwLowDateTime | 整数 | 最后一次访问的时间 |
访问高位 | ftLastAccessTime.dwHighDateTime | 整数 | 最后访问时间的高位 |
最后修改 | ftLastWriteTime.dwLowDateTime | 整数 | 最后一次修改的时间 |
修改高位 | ftLastWriteTime.dwHighDateTime | 整数 | 最后修改时间的高位 |
大小 | nFileSizeHigh | 整数 | 文件大小的高位 |
长度 | nFileSizeLow | 整数 | 文件大小的低位 |
预留1 | dwReserved0 | 整数 | 保留占位 |
预留2 | dwReserved1 | 整数 | 保留占位 |
名称 | cFileName | 文本 | 260字节长度的文件名称 |
备用名 | cAlternateFileName | 文本 | 14字节长度的备用文件名 |
文件传输回调
中文名字 | 英文名称 | 长度 | 作用解释 |
文件传输回调 | LpoverlappedCompletionRoutine | 3 | 当异步输入和输出 (I/O) 操作完成或取消,并且调用线程处于可警报状态 |
文件传输回调——参数表 |
状态 | dwErrorCode | 整数 | I/O 完成状态。 |
已传 | dwNumberOfBytesTransfered | 整数 | 已传输的字节数。 如果发生错误,此参数为零。 |
数据 | lpOverlapped | 整数 | 指向异步 I/O 函数指定的 重叠类 结构的指针。 |
复制进度
中文名字 | 英文名称 | 参数 | 作用解释 |
复制进度 | CopyProgressRoutine | 9 | 当复制或移动操作的一部分完成时,将调用它。 |
复制进度 参数表 |
中文 | 英文 | 类型 | 作用解释 |
总大小 | TotalFileSize | 整数 | 文件的总大小(以字节为单位)。 |
总传送 | TotalBytesTransferred | 整数 | 自复制操作开始以来从源文件传输到目标文件的字节总数。 |
流大小 | StreamSize | 整数 | 当前文件流的总大小(以字节为单位)。 |
流传送 | StreamBytesTransferred | 整数 | 自复制操作开始以来,当前流中从源文件传输到目标文件的字节总数。 |
流号 | dwStreamNumber | 整数 | 当前流的句柄。 首次调用时,流号为 1。 |
原因 | dwCallbackReason | 整数 | 0=复制了数据文件的另一部分。1=另一个流已创建,即将复制。 |
源文件 | hSourceFile | 整数 | 源文件的句柄。 |
目标 | hDestinationFile | 整数 | 目标文件的句柄 |
附加 | hDestinationFile | 整数 | 传递的附加参数 |
复制进度返回值
英文名称 | 参数 | 作用解释 |
PROGRESS_CANCEL | 1 | 取消复制操作并删除目标文件。 |
PROGRESS_CONTINUE | 0 | 继续复制操作。 |
PROGRESS_QUIET | 3 | 继续复制操作,但停止调用 复制进度 来报告进度。 |
PROGRESS_STOP | 2 | 停止复制操作。 它可以在以后重新启动。 |
文件属性类
中文名字 | 英文名称 | 长度 | 作用解释 |
文件属性类 | WIN32_FILE_ATTRIBUTE_DATA | 32 | 包含文件或目录的属性信息。 |
文件属性类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
属性 | 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_INFORMATION | 44 | 包含文件或目录的属性信息。 |
开件属性类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
属性 | 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_BINARY | 0 | 基于 32 位 Windows 的应用程序 |
SCS_64BIT_BINARY | 6 | 基于 64 位 Windows 的应用程序。 |
SCS_DOS_BINARY | 1 | 基于 MS-DOS 的应用程序 |
SCS_OS216_BINARY | 5 | 基于 16 位 OS/2 的应用程序 |
SCS_PIF_BINARY | 3 | 执行基于 MS-DOS 的应用程序的 PIF 文件 |
SCS_POSIX_BINARY | 4 | 基于 POSIX 的应用程序 |
SCS_WOW_BINARY | 2 | 基于 16 位 Windows 的应用程序 |
打开文件类
中文名字 | 英文名称 | 长度 | 作用解释 |
打开文件类 | OFSTRUCT | 136 | 包含有关 打开文件 函数打开的或尝试打开的文件的信息。 |
复制文件类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | cBytes | 字节 | 结构的大小(以字节为单位)。 |
硬盘 | fFixedDisk | 字节 | 如果此成员为非零,则该文件位于固定磁盘 (硬) 。 否则就不是架构拥有的。 |
错误 | nErrCode | 整形 | 如果 打开文件 函数失败,则返回 MS-DOS 错误代码。 |
预留 | Reserved1 | 整形 | 保留值;请勿使用。 |
备用 | Reserved2 | 整形 | 保留值;请勿使用。 |
名称 | szPathName[OFS_MAXPATHNAME] | 文本 | 文件的路径和文件名。 |
文件执行操作
英文名称 | 数值 | 作用解释 |
OF_CANCEL | 0x00000800 | 已忽略。若要生成包含 “取消 ”按钮的对话框,请使用 OF_PROMPT。 |
OF_CREATE | 0x00001000 | 创建新文件。如果文件存在,则将其截断为零, (0) 长度。 |
OF_DELETE | 0x00000200 | 删除文件。 |
OF_EXIST | 0x00004000 | 打开一个文件,然后将其关闭。使用它来测试文件是否存在。 |
OF_PARSE | 0x00000100 | 填充 OFSTRUCT 结构,但不执行任何其他操作。 |
OF_PROMPT | 0x00002000 | 如果请求的文件不存在,则显示一个对话框。对话框通知用户系统找不到文件,其中包含 “重试” 和“ 取消 ”按钮。 “ 取消 ”按钮指示 OpenFile 返回找不到文件的错误消息。 |
OF_READ | 0x00000000 | 打开文件以供只读。 |
OF_READWRITE | 0x00000002 | 使用读/写权限打开文件。 |
OF_REOPEN | 0x00008000 | 使用重新打开缓冲区中的信息打开文件。 |
OF_SHARE_COMPAT | 0x00000000 | 对于基于 MS-DOS 的文件系统,使用兼容模式打开文件,允许指定计算机上的任何进程打开文件任意次数。使用其他共享模式打开文件的其他工作失败。 此标志映射到 CreateFile 函数的|FILE_SHARE_READ FILE_SHARE_WRITE标志。 |
OF_SHARE_DENY_NONE | 0x00000040 | 在不拒绝对其他进程的读取或写入访问权限的情况下打开文件。在基于 MS-DOS 的文件系统上,如果该文件已被任何其他进程以兼容模式打开,则函数将失败。此标志映射到 CreateFile 函数的|FILE_SHARE_READ FILE_SHARE_WRITE标志。 |
OF_SHARE_DENY_READ | 0x00000030 | 打开文件并拒绝对其他进程的读取访问权限。在基于 MS-DOS 的文件系统上,如果文件已在兼容模式下打开,或者由任何其他进程进行读取访问,则函数将失败。此标志映射到 CreateFile 函数的 FILE_SHARE_WRITE 标志。 |
OF_SHARE_DENY_WRITE | 0x00000020 | 打开文件并拒绝对其他进程的写入访问权限。在基于 MS-DOS 的文件系统上,如果某个文件已在兼容模式下打开,或者由任何其他进程进行写入访问,则函数将失败。此标志映射到 CreateFile 函数的 FILE_SHARE_READ 标志。 |
OF_SHARE_EXCLUSIVE | 0x00000010 | 使用独占模式打开文件,并拒绝对其他进程的读/写访问。如果文件已以任何其他模式打开进行读/写访问,即使当前进程也是如此,则函数会失败。 |
OF_VERIFY | 0x00000400 | 验证文件的日期和时间是否与之前打开的时间相同。这对于只读文件的额外检查非常有用。 |
OF_WRITE | 0x00000001 | 只是为了进行写入访问而打开文件。 |
复制文件类
中文名字 | 英文名称 | 长度 | 作用解释 |
复制文件类 | COPYFILE2_EXTENDED_PARAMETERS | 20 | 包含文件或目录的属性信息。 |
复制文件类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | dwSize | 整数 | 结构的大小(以字节为单位)。 |
标志 | dwCopyFlags | 整数 | 包含零个或多个这些标志值的组合。 |
取消 | pfCancel | 整数 | 如果在复制操作期间将此标志设置为 真 ,则取消复制操作。 |
回调 | pProgressRoutine | 整数 | 回调函数的可选地址,每次复制文件的另一部分时调用该函数。 |
附加 | pvCallbackContext | 整数 | 传递给回调函数的应用程序特定上下文信息的指针。 |
复制进度回调
中文名字 | 英文名称 | 参数 | 作用解释 |
复制进度回调 | Pcopyfile2ProgressRoutine | 2 | 与 CopyFile2 函数一起使用的应用程序定义回调函数。 当复制或移动操作的一部分完成时,将调用它。 |
复制进度回调 参数表 |
中文 | 英文 | 类型 | 作用解释 |
信息 | pMessage | 整数 | 指向 复制信息 结构的指针。 |
附加 | pvCallbackContext | 整数 | 传递给回调函数的应用程序特定上下文信息的副本。 |
文件复制标志
英文名称 | 数值 | 作用解释 |
COPY_FILE_FAIL_IF_EXISTS | 0x00000001 | 如果目标文件存在,则复制操作将立即失败。 如果存在具有目标名称的文件或目录,则 CopyFile2 函数调用将失败并出现 HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS) 或 HRESULT_FROM_WIN32(ERROR_FILE_EXISTS)。 如果还指定 了COPY_FILE_RESUME_FROM_PAUSE ,则仅当目标文件没有有效的重启标头时才会触发失败。 |
COPY_FILE_RESTARTABLE | 0x00000002 | 如果再次使用相同的源文件名和目标文件名,则复制文件的方式可以重启。 速度较慢。 |
COPY_FILE_OPEN_SOURCE_FOR_WRITE | 0x00000004 | 复制该文件,并打开源文件以获取写入访问权限。 |
COPY_FILE_ALLOW_DECRYPTED_DESTINATION | 0x00000008 | 即使无法加密目标文件,也会尝试复制。 |
COPY_FILE_COPY_SYMLINK | 0x00000800 | 如果源文件是符号链接,则目标文件也是指向与源符号链接相同的文件的符号链接。 |
COPY_FILE_NO_BUFFERING | 0x00001000 | 复制是使用未缓冲的 I/O 执行的,绕过系统缓存资源。 对于非常大的文件副本,建议使用此标志。 不建议暂停使用此标志的副本。 |
COPY_FILE_REQUEST_SECURITY_PRIVILEGES | 0x00002000 | 尝试复制,并指定 ACCESS_SYSTEM_SECURITY 源文件和 ACCESS_SYSTEM_SECURITY \| WRITE_DAC \| WRITE_OWNER 目标文件。 如果拒绝这些请求,则访问请求将降低到授予访问权限的最高特权级别。 有关详细信息,请参阅 SACL 访问权限。 这可用于允许 CopyFile2ProgressRoutine 回调执行需要更高特权的操作,例如复制文件的安全属性。 |
COPY_FILE_RESUME_FROM_PAUSE | 0x00004000 | 检查目标文件以查看它是否使用 COPY_FILE_RESTARTABLE复制。 如果是这样,则恢复复制。 否则,将完全复制文件。 |
COPY_FILE_NO_OFFLOAD | 0x00040000 | 请勿尝试使用 Windows 复制卸载机制。 通常不建议这样做。 |
COPY_FILE_IGNORE_EDP_BLOCK | 0x00400000 | 如果目标文件系统支持,则应在目标上复制和加密文件,而不是阻止该文件。 在 Windows 10 及更高版本上受支持。 |
COPY_FILE_IGNORE_SOURCE_ENCRYPTION | 0x00800000 | 忽略源文件的加密状态。 在 Windows 10 及更高版本上受支持。 |
COPY_FILE_DONT_REQUEST_DEST_WRITE_DAC | 0x02000000 | 不要请求目标文件访问WRITE_DAC。 在 Windows 10 及更高版本上受支持。 |
COPY_FILE_OPEN_AND_COPY_REPARSE_POINT | 0x00200000 | 无论类型如何,始终复制重新分析点。 调用方有责任了解重新分析点的含义。 支持Windows 10版本 19041 及更高版本。 |
COPY_FILE_DIRECTORY | 0x00000080 | 指示源文件是目录文件。 如果提供 ,则使用 FILE_OPEN_FOR_BACKUP_INTENT打开源文件。 目录文件将具有其备用数据流、重新分析点信息和像普通文件一样复制的 CA。 在 Windows 10 版本 19041 及更高版本中受支持。 |
COPY_FILE_SKIP_ALTERNATE_STREAMS | 0x00008000 | 请勿复制备用数据流。 在 Windows 10 版本 19041 及更高版本中受支持。 |
COPY_FILE_DISABLE_PRE_ALLOCATION | 0x04000000 | 在执行复制之前,请勿预先分配目标文件大小。 在 Windows 10 版本 19041 及更高版本中受支持。 |
COPY_FILE_ENABLE_LOW_FREE_SPACE_MODE | 0x08000000 | 启用 LowFreeSpace 模式。 不使用重叠的 I/O。 不会尝试 ODX 和 SMB 卸载。 在 Windows 10 版本 19041 及更高版本中受支持。 |
COPY_FILE_REQUEST_COMPRESSED_TRAFFIC | 0x10000000 | 请求基础传输通道在复制操作期间压缩数据。 并非所有媒体都支持请求,在这种情况下,它将被忽略。 压缩属性和参数 (计算复杂性、内存使用情况) 无法通过此 API 进行配置,并且可能会在不同的 OS 版本之间发生更改。 在 Windows Server 2022 和 Windows 10 内部版本 1903 及更高版本中受支持。 (Windows 10 上,驻留在 SMB 共享上的文件支持标志,其中协商的 SMB 协议版本为 SMB v3.1.1 或更高版本。) |
COPY_FILE_ENABLE_SPARSE_COPY | 0x20000000 | 在复制期间启用保留文件的稀疏状态。 在 Windows 11 版本 22H2 及更高版本中受支持。 |
重叠类
中文名字 | 英文名称 | 长度 | 作用解释 |
重叠类 | OVERLAPPED | 20 | 包含用于异步 (或 重叠) 输入和输出 (I/O) 的信息。 |
重叠类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
状态 | Internal | 整数 | I/O 请求的状态代码。发出请求时,系统会将此成员设置为 STATUS_PENDING 以指示操作尚未启动。 |
长度 | InternalHigh | 整数 | 为 I/O 请求传输的字节数。 如果请求完成且未出错,系统会设置此成员。 |
位置 | Offset | 整数 | 启动 I/O 请求的文件位置的低顺序部分,由用户指定。 |
偏移 | OffsetHigh | 整数 | 要启动 I/O 请求的文件位置的高序部分,由用户指定。 |
事件 | hEvent | 整数 | 事件的句柄,该句柄将在操作完成后由系统设置为信号状态。 |
移动文件标志
英文名称 | 数值 | 作用解释 |
MOVEFILE_COPY_ALLOWED | 2 | 如果要将文件移动到其他卷,该函数将使用 CopyFile 和 DeleteFile 函数模拟移动。
如果文件已成功复制到其他卷,并且无法删除原始文件,则函数会成功使源文件保持不变。
此值不能与 MOVEFILE_DELAY_UNTIL_REBOOT 一起使用。 |
MOVEFILE_CREATE_HARDLINK | 0x10 | 保留供将来使用。 |
MOVEFILE_DELAY_UNTIL_REBOOT | 4 |
在重新启动操作系统之前,系统不会移动文件。 系统在执行 AUTOCHK 之后、创建任何分页文件之前立即移动文件。 因此,此参数使 函数能够从以前的启动中删除分页文件。
仅当进程位于属于管理员组或 LocalSystem 帐户的用户的上下文中时,才能使用此值。
此值不能与 MOVEFILE_COPY_ALLOWED一起使用。 |
MOVEFILE_FAIL_IF_NOT_TRACKABLE | 0x20 |
如果源文件是链接源,则函数失败,但在移动后无法跟踪该文件。 如果目标是使用 FAT 文件系统格式化的卷,则可能会出现这种情况。
|
MOVEFILE_REPLACE_EXISTING | 1 |
如果存在名为 lpNewFileName 的文件,则函数会将其内容替换为 lpExistingFileName 文件的内容,前提是满足有关访问控制列表 (ACL) 的安全要求。 有关详细信息,请参阅本主题的“备注”部分。
如果 lpNewFileName 命名现有目录,则报告错误。 |
MOVEFILE_WRITE_THROUGH | 8 | 在磁盘上实际移动文件之前, 函数不会返回 。
设置此值可确保作为复制和删除操作执行的移动在函数返回之前刷新到磁盘。 刷新发生在复制操作结束时。
如果设置了 MOVEFILE_DELAY_UNTIL_REBOOT ,则此值无效。 |
复制文件标志
英文名称 | 数值 | 作用解释 |
COPY_FILE_ALLOW_DECRYPTED_DESTINATION | 0x00000008 | 即使无法加密目标复制,复制加密文件也会成功。 |
COPY_FILE_COPY_SYMLINK | 0x00000800 | 如果源文件是符号链接,则目标文件也是指向源符号链接所指向的同一文件的符号链接。 |
COPY_FILE_FAIL_IF_EXISTS | 0x00000001 | 如果目标文件已存在,则复制操作会立即失败。 |
COPY_FILE_NO_BUFFERING | 0x00001000 | 复制操作使用未缓冲的 I/O 执行,绕过系统 I/O 缓存资源。 建议用于非常大的文件传输。 |
COPY_FILE_OPEN_SOURCE_FOR_WRITE | 0x00000004 | 复制该文件,并打开原始文件进行写入访问。 |
COPY_FILE_RESTARTABLE | 0x00000002 | 复制进度在目标文件中跟踪,以防复制失败。 |
COPY_FILE_REQUEST_COMPRESSED_TRAFFIC | 0x10000000 | 请求基础传输通道在复制操作期间压缩数据。 |
文件更改通知条件
英文名称 | 数值 | 作用解释 |
FILE_NOTIFY_CHANGE_FILE_NAME | 0x00000001 | 对受监视的目录或子树中文件名的任意更改都会导致返回一个更改通知等待操作。 这些更改包括重命名、创建或删除文件名。 |
FILE_NOTIFY_CHANGE_DIR_NAME | 0x00000002 | 受监视目录或子树中的任何目录名称更改都会导致更改通知等待操作返回。 更改包括创建或删除目录。 |
FILE_NOTIFY_CHANGE_ATTRIBUTES | 0x00000004 | 对受监视的目录或子树中属性的任意更改都会导致返回一个更改通知等待操作。 |
FILE_NOTIFY_CHANGE_SIZE | 0x00000008 | 对受监视的目录或子树中文件大小的任意更改都会导致返回一个更改通知等待操作。 仅当文件写入磁盘时,操作系统才会检测文件大小的更改。 对于使用大量缓存的操作系统,仅当缓存充分刷新时,才会进行检测。 |
FILE_NOTIFY_CHANGE_LAST_WRITE | 0x00000010 | 对受监视的目录或子树中文件的上次写入时间的任意更改都会导致返回一个更改通知等待操作。 仅当文件写入磁盘时,操作系统才会检测上次写入时间的更改。 对于使用大量缓存的操作系统,仅当缓存充分刷新时,才会进行检测。 |
FILE_NOTIFY_CHANGE_SECURITY | 0x00000100 | 监视目录或子树中的任何安全描述符更改都会导致更改通知等待操作返回。 |
文件查找级别
英文名称 | 数值 | 作用解释 |
FindExInfoStandard | 0 | 检索标准属性信息集。数据返回查找文件类 结构。 |
FindExInfoBasic | 1 | 不查询短文件名,从而提高了整体枚举速度。 数据返回查找文件类 结构和 备用名 |
FindExInfoMaxInfoLevel | 2 | 此值用于验证。支持的值小于此值。 |
文件查找匹配
英文名称 | 数值 | 作用解释 |
FindExSearchNameMatch | 0 | 搜索与指定文件名匹配的文件。条件参数为空 |
FindExSearchLimitToDirectories | 1 | 如果文件系统支持目录筛选,则函数将搜索与指定名称匹配且也是目录的文件。否则会以无提示方式忽略此标志。条件参数为空 |
FindExSearchLimitToDevices | 2 | 此筛选类型不可用。 |
FindExSearchMaxSearchOp | 3 | 此值用于验证。不可用。 |
文件查找选项
英文名称 | 数值 | 作用解释 |
FIND_FIRST_EX_CASE_SENSITIVE | 1 | 搜索区分大小写。 |
FIND_FIRST_EX_LARGE_FETCH | 2 | 对目录查询使用更大的缓冲区,这可以提高查找操作的性能。 |
FIND_FIRST_EX_ON_DISK_ENTRIES_ONLY | 4 | 将结果限制为物理位于磁盘上的文件。 仅当存在文件虚拟化筛选器时,此标志才相关。 |
文件映射——使用示例
文件映射 是文件内容与进程的一部分虚拟地址空间的关联。 系统创建 文件映射对象 (也称为 节对象) 来维护此关联。
文件视图是进程用来访问文件内容的虚拟地址空间部分。 文件映射允许进程使用随机输入和输出 (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_ACCESS | 0xF001F | 映射文件的读/写视图。 文件映射对象必须已创建 PAGE_READWRITE 或 PAGE_EXECUTE_READWRITE 保护。 |
FILE_MAP_READ | 0x0004 | 映射文件的只读视图。 尝试写入文件视图会导致访问冲突。创建文件映射对象时必须具有 PAGE_READONLY、 PAGE_READWRITE、 PAGE_EXECUTE_READ或 PAGE_EXECUTE_READWRITE 保护。 |
FILE_MAP_WRITE | 0x0002 | 映射文件的读/写视图。 文件映射对象必须已创建 PAGE_READWRITE 或 PAGE_EXECUTE_READWRITE 保护。 |
使用按位 OR,可以将上述值与这些值组合在一起。 |
FILE_MAP_COPY | 1 | 映射文件的写入时复制视图。 文件映射对象必须已使用 PAGE_READONLY、 PAGE_READ_EXECUTE、 PAGE_WRITECOPY、 PAGE_EXECUTE_WRITECOPY、 PAGE_READWRITE或 PAGE_EXECUTE_READWRITE 保护创建。
当进程写入写入时复制页时,系统会将原始页面复制到进程专用的新页。 新页面由分页文件提供支持。 对新页面的保护从写入时复制更改为读/写。
指定写入时复制访问权限时,系统将和进程提交费用用于整个视图,因为调用进程可能会写入视图中的每一页,从而使所有页面都成为私有页面。 新页面的内容永远不会写回到原始文件,并在取消映射视图时丢失。 |
FILE_MAP_LARGE_PAGES | 0x20000000 | 从 Windows 10 版本 1703 开始,此标志指定应使用大页面支持映射视图。 视图的大小必须是 GetLargePageMinimum 函数报告的大型页面大小的倍数,并且文件映射对象必须已使用 SEC_LARGE_PAGES 选项创建。 如果为 lpBaseAddress 提供非 null 值,则该值必须是 GetLargePageMinimum 的倍数。
|
FILE_MAP_EXECUTE | 0x0020 | 映射文件的可执行视图 (映射的内存可以作为代码) 运行。 创建文件映射对象时必须具有 PAGE_EXECUTE_READ、 PAGE_EXECUTE_WRITECOPY或 PAGE_EXECUTE_READWRITE 保护。
Windows Server 2003 和 Windows XP: 此值从 Windows XP SP2 和 Windows Server 2003 SP1 开始可用。 |
FILE_MAP_TARGETS_INVALID | 0x40000000 | 将映射文件中的所有位置设置为控制流防护 (CFG) 的无效目标。 此标志类似于 PAGE_TARGETS_INVALID。 将此标志与执行访问权限 FILE_MAP_EXECUTE结合使用。 对这些页面中的位置的任何间接调用都将失败 CFG 检查,并且进程将终止。 分配的可执行页面的默认行为是标记为 CFG 的有效调用目标。 |
页面保护类型
英文名称 | 数值 | 作用解释 |
PAGE_EXECUTE_READ | 0x20 | 允许映射视图,以便进行只读、写入时复制或执行访问。必须使用GENERIC_READ创建 hFile 参数指定的文件句柄,并GENERIC_EXECUTE访问权限。 |
PAGE_EXECUTE_READWRITE | 0x40 | 允许映射视图,以便进行只读、写入时复制、读/写或执行访问。必须使用GENERIC_READ、GENERIC_WRITE和GENERIC_EXECUTE访问权限创建 hFile 参数指定的文件句柄。 |
PAGE_EXECUTE_WRITECOPY | 0x80 | 允许映射视图,以便进行只读、写入时复制或执行访问。必须使用 GENERIC_READ 创建 hFile 参数指定的文件句柄,并GENERIC_EXECUTE访问权限。 |
PAGE_READONLY | 0x02 | 允许映射视图,以便进行只读或写入时复制访问。 尝试写入特定区域会导致访问冲突。必须使用GENERIC_READ访问权限创建 hFile 参数指定的文件句柄。 |
PAGE_READWRITE | 0x04 | 允许映射视图,以便进行只读、写入时复制或读/写访问。必须使用 GENERIC_READ 创建 hFile 参数指定的文件句柄,GENERIC_WRITE访问权限。 |
PAGE_WRITECOPY | 0x08 | 允许映射视图,以便进行只读或写入时复制访问。 此值等效于 PAGE_READONLY。必须使用GENERIC_READ访问权限创建 hFile 参数指定的文件句柄。 |
应用程序可以通过将以下属性与前面的页面保护值之一组合,为文件映射对象指定以下一个或多个属性。
英文名称 | 数值 | 作用解释 |
SEC_COMMIT | 0x8000000 | 如果文件映射对象由操作系统分页文件提供支持, (hfile 参数 INVALID_HANDLE_VALUE) ,则指定当文件的视图映射到进程地址空间时,将提交而不是保留整个页面范围。 系统必须有足够的可提交页来保存整个映射。 否则, 映射文件 将失败。此属性对由可执行映像文件或数据文件支持的文件映射对象无效, (hfile 参数是文件) 的句柄。SEC_COMMIT 不能与 SEC_RESERVE 结合使用。 |
SEC_IMAGE | 0x1000000 | 指定 hFile 参数指定的文件是可执行映像文件。SEC_IMAGE 属性必须与页面保护值(如 PAGE_READONLY)结合使用。 但是,此页面保护值对可执行文件的视图没有影响。 可执行文件的视图的页面保护由可执行文件本身决定。 |
SEC_IMAGE_NO_EXECUTE | 0x11000000 | 指定 hFile 参数指定的文件是不会执行的可执行映像文件,并且加载的映像文件不会运行强制完整性检查。 此外,映射使用 SEC_IMAGE_NO_EXECUTE 属性创建的文件映射对象的视图不会调用使用 PsSetLoadImageNotifyRoutine 内核 API 注册的驱动程序回调。SEC_IMAGE_NO_EXECUTE 属性必须与PAGE_READONLY页保护值结合使用。 SEC_IMAGE_NO_EXECUTE中没有其他属性有效。在 Windows Server 2012 和 Windows 8 之前不支持此值。 |
SEC_LARGE_PAGES | 0x80000000 | 允许将大型页面用于操作系统分页文件支持的文件映射对象, (hfile 参数 INVALID_HANDLE_VALUE) 。 由可执行映像文件或数据文件支持的文件映射对象不支持此属性, (hFile 参数是可执行映像或数据文件的句柄) 。文件映射对象的最大大小必须是 GetLargePageMinimum 函数返回的大页面最小大小的倍数。 否则, 映射文件 将失败。 映射使用 SEC_LARGE_PAGES 创建的文件映射对象的视图时,基址和视图大小也必须是最小大页面大小的倍数。 |
SEC_NOCACHE | 0x10000000 | 将所有页面设置为不可缓存。除非设备明确需要,否则应用程序不应使用此属性。 将互锁函数 与SEC_NOCACHE映射 的内存结合使用可能会导致 EXCEPTION_ILLEGAL_INSTRUCTION 异常。SEC_NOCACHE 要求设置 SEC_RESERVE 或 SEC_COMMIT 属性。 |
SEC_RESERVE | 0x4000000 | 如果文件映射对象由操作系统分页文件提供支持, (hfile 参数 INVALID_HANDLE_VALUE) ,则指定当文件的视图映射到进程地址空间时,将保留整个页面范围供进程以后使用,而不是提交。可以在后续调用 VirtualAlloc 函数时提交保留页。 提交页面后,无法使用 VirtualFree 函数释放或取消提交页面。此属性对由可执行映像文件或数据文件支持的文件映射对象无效, (hfile 参数是文件) 的句柄。SEC_RESERVE 不能与 SEC_COMMIT 结合使用。 |
SEC_WRITECOMBINE | 0x40000000 | 将所有页面设置为写合并。除非设备明确需要,否则应用程序不应使用此属性。 将互锁函数 与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_CURSOR | 1 | 依赖于硬件的游标资源。 |
RT_BITMAP | 2 | 位图资源。 |
RT_ICON | 3 | 依赖于硬件的图标资源。 |
RT_MENU | 4 | 菜单资源。 |
RT_DIALOG | 5 | 对话框。 |
RT_STRING | 6 | 字符串表条目。 |
RT_FONTDIR | 7 | 字体目录资源。 |
RT_FONT | 8 | 字体资源。 |
RT_ACCELERATOR | 9 | 快捷键表。 |
RT_RCDATA | 10 | 应用程序定义的资源 (原始数据)。 |
RT_MESSAGETABLE | 11 | 消息表条目。 |
RT_GROUP_CURSOR | 12 | 与硬件无关的游标资源。 |
RT_GROUP_ICON | 13 | 与硬件无关的图标资源。 |
RT_VERSION | 16 | 版本资源。 |
RT_DLGINCLUDE | 17 | 允许资源编辑工具将字符串与 .rc 文件相关联。 |
RT_PLUGPLAY | 19 | 即插即用资源。 |
RT_VXD | 20 | Vxd。 |
RT_ANICURSOR | 21 | 动画光标。 |
RT_ANIICON | 22 | 动画图标。 |
RT_HTML | 23 | HTML 资源。 |
RT_MANIFEST | 24 | 并行程序集清单。 |
资源语言通常写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 和硬件流控制。 串口命令 仅修改 串口通讯类 结构;它不会重新配置设备。
进程可以使用 串口属性 函数重新配置通信资源,以便从设备驱动程序获取有关其支持的配置设置的信息。 此过程可以使用此信息来避免指定不支持的配置。
状态串口 函数重新配置通信资源,但它不会影响指定驱动程序的内部输出和输入缓冲区。 缓冲区不会刷新,挂起的读取和写入操作不会过早终止。
进程使用 串口大小 函数重新初始化通信资源,该函数执行以下任务:
终止挂起的读取和写入操作,即使它们尚未完成。
放弃未读字符,释放与指定资源关联的驱动程序的内部输出和输入缓冲区。
重新分配内部输出和输入缓冲区。
调用 串口大小 不需要进程。 如果没有,则资源的驱动程序在第一次使用通信资源句柄时使用默认设置初始化设备。
串口通讯类
中文名字 | 英文名称 | 长度 | 作用解释 |
串口通讯类 | DCB | 28 | 包含了串口通讯相关设置的结构 |
串口通讯类——成员表 |
总长度 | 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 | 字节 | 当前未用 |
通信资源配置
串口配置类 结构定义通信资源的配置(串行或其他方式)。 结构的格式因通信资源类型 (提供程序子类型) 而异。
前几个结构成员对所有通信资源通用:为特定提供程序子类型定义其他成员。 特定服务提供商也可以扩展 串口配置类 结构。
应用程序可以使用 查询串口 和 设置串口 函数获取和设置通信资源的 配置 。 打开后,将使用提供程序子类型的默认配置初始化通信资源。
若要获取和设置提供程序子类型的默认配置,请使用 串口默认 和 默认串口 函数。
若要提示用户输入配置信息,请使用 串口设置 函数。 此函数显示由服务提供商定义的对话框,并根据用户输入填充 串口配置类 结构。
串口配置类
中文名字 | 英文名称 | 长度 | 作用解释 |
串口配置类 | COMMCONFIG | 52 | 包含了串口通讯相关配置的结构 |
串口配置类——成员表 |
大小 | dwSize | 整数 | 结构的大小,以字节为单位 |
版本 | wVersion | 整数 | 结构的版本号。可以为 1 |
通讯 | dcb | DCB | 串口通讯类结构体 |
设备 | dwProviderSubType | 整数 | 通信提供程序的设备类型 |
偏移 | dwProviderOffset | 整数 | 数据相对于结构开头的偏移量 |
大小 | dwProviderSize | 整数 | 特定于提供程序的数据的大小 |
数据 | wcProviderData | 整数 | 特定于提供程序的数据,可省略 |
调制解调器配置
使用调制解调器配置功能,可以在建立连接之前配置调制解调器。 应用程序可以设置调制解调器选项并确定调制解调器的功能,
而无需使用特定于任何调制解调器设备的命令。 以下是应用程序在调用前可能设置的一般功能:
主要操作模式 (同步、异步,以及是否) 启用错误控制。
V.42 错误控制 (CCITT 建议 V.42) 定义,包括特定参数。 CCITT 代表国际电报和电话协商委员会。
V.42bis (由 CCITT 建议 V.42bis) 和 MNP5 数据压缩定义。
超时选项,包括呼叫设置、不活动以及缓冲数据传输。
在设置调制解调器的配置之前,应用程序应使用 串口属性 函数确定调制解调器设备的功能。 此函数填充串口程序类结构。
此结构既包含适用于所有通信设备的常规部分,又包含特定于每个提供程序子类型的部分。
对于调制解调器设备, 串口程序类 结构的提供程序特定部分是 猫功能类 结构。
应用程序可以使用 查询串口 和 设置串口 函数获取和设置调制解调器的当前配置,这两个函数都使用 串口配置类 结构。
此结构既包含适用于所有通信设备的常规部分,又包含特定于每个提供程序子类型的部分。 对于调制解调器设备, 串口配置类 结构的提供程序特定部分是 猫功能类 结构。
配置调制解调器后,应用程序可以使用电话应用程序编程接口 (TAPI) 来实际建立连接。
调制解调器配置功能不提供调制解调器的长期管理和维护。 调制解调器服务提供商应为此提供调制解调器配置对话框。
串口程序类
中文名字 | 英文名称 | 长度 | 作用解释 |
串口程序类 | COMMPROP | 64+ | 包含有关通信驱动程序的信息。 |
串口程序类——成员表 |
大小 | 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_075 | 0x00000001 | 75 bps |
BAUD_110 | 0x00000002 | 110 bps |
BAUD_134_5 | 0x00000004 | 134.5 bps |
BAUD_150 | 0x00000008 | 150 bps |
BAUD_300 | 0x00000010 | 300 bps |
BAUD_600 | 0x00000020 | 600 bps |
BAUD_1200 | 0x00000040 | 1200 bps |
BAUD_1800 | 0x00000080 | 1800 bps |
BAUD_2400 | 0x00000100 | 2400 bps |
BAUD_4800 | 0x00000200 | 4800 bps |
BAUD_7200 | 0x00000400 | 7200 bps |
BAUD_9600 | 0x00000800 | 9600 bps |
BAUD_14400 | 0x00001000 | 14400 bps |
BAUD_19200 | 0x00002000 | 19200 bps |
BAUD_38400 | 0x00004000 | 38400 bps |
BAUD_56K | 0x00008000 | 56K bps |
BAUD_57600 | 0x00040000 | 57600 bps |
BAUD_115200 | 0x00020000 | 115200 bps |
BAUD_128K | 0x00010000 | 128K bps |
BAUD_USER | 0x10000000 | 可编程波特率。 |
串口程序类型
英文名称 | 数值 | 作用解释 |
PST_FAX | 0x00000021 | FAX 设备 |
PST_LAT | 0x00000101 | LAT 协议 |
PST_MODEM | 0x00000006 | 调制解调器设备 |
PST_NETWORK_BRIDGE | 0x00000100 | 未指定的网桥 |
PST_PARALLELPORT | 0x00000002 | 并行端口 |
PST_RS232 | 0x00000001 | RS-232 串行端口 |
PST_RS422 | 0x00000003 | RS-422 端口 |
PST_RS423 | 0x00000004 | RS-423 端口 |
PST_RS449 | 0x00000005 | RS-449 端口 |
PST_SCANNER | 0x00000022 | 扫描仪设备 |
PST_TCPIP_TELNET | 0x00000102 | TCP/IP Telnet 协议 |
PST_UNSPECIFIED | 0x00000000 | 未指定 |
PST_X25 | 0x00000103 | X.25 标准 |
串口功能位
英文名称 | 数值 | 作用解释 |
PCF_16BITMODE | 0x0200 | 支持特殊 16 位模式 |
PCF_DTRDSR | 0x0001 | 支持 DTR (data-terminal-ready) /DSR (data-set-ready) |
PCF_INTTIMEOUTS | 0x0080 | 支持的间隔超时 |
PCF_PARITY_CHECK | 0x0008 | 支持奇偶校验检查 |
PCF_RLSD | 0x0004 | 支持 RLSD (receive-line-signal-detect) |
PCF_RTSCTS | 0x0002 | RTS (请求发送) /CTS (支持明文发送) |
PCF_SETXCHAR | 0x0020 | 支持可设置的 XON/XOFF |
PCF_SPECIALCHARS | 0x0100 | 提供特殊字符支持 |
PCF_TOTALTIMEOUTS | 0x0040 | 支持的总已用 () 超时 |
PCF_XONXOFF | 0x0010 | 支持 XON/XOFF 流控制 |
串口通信参数
英文名称 | 数值 | 作用解释 |
SP_BAUD | 0x0002 | 波特率 |
SP_DATABITS | 0x0004 | 数据位 |
SP_HANDSHAKING | 0x0010 | 握手 (流控制) |
SP_PARITY | 0x0001 | 奇偶校验 |
SP_PARITY_CHECK | 0x0020 | 奇偶校验检查 |
SP_RLSD | 0x0040 | RLSD (receive-line-signal-detect) |
SP_STOPBITS | 0x0008 | 停止位 |
串口数据位
英文名称 | 数值 | 作用解释 |
DATABITS_5 | 0x0001 | 5 个数据位 |
DATABITS_6 | 0x0002 | 6 个数据位 |
DATABITS_7 | 0x0004 | 7 个数据位 |
DATABITS_8 | 0x0008 | 8 数据位 |
DATABITS_16 | 0x0010 | 16 个数据位 |
DATABITS_16X | 0x0020 | 通过串行硬件线的特殊宽路径 |
串口奇偶校验
英文名称 | 数值 | 作用解释 |
STOPBITS_10 | 0x0001 | 1 停止位 |
STOPBITS_15 | 0x0002 | 1.5 个停止位 |
STOPBITS_20 | 0x0004 | 2 个停止位 |
PARITY_NONE | 0x0100 | 无奇偶校验位 |
PARITY_ODD | 0x0200 | 奇数奇偶校验 |
PARITY_EVEN | 0x0400 | 偶等奇偶校验 |
PARITY_MARK | 0x0800 | 标记奇偶校验 |
PARITY_SPACE | 0x1000 | 空间奇偶校验 |
猫功能类
中文名字 | 英文名称 | 长度 | 作用解释 |
猫功能类 | MODEMDEVCAPS | 64+ | 包含有关调制解调器功能的信息。 |
猫功能类——成员表 |
实长 | 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_DIAL | 0x200 | MDM_BLIND_DIAL |
MDM_CCITT_OVERRIDE | 0x040 | 设置后,将针对 V.21 和 V.22 或 V.23 启用 CCITT 调制。清除时,为 103 和 212A 启用钟式调制。 |
MDM_CELLULAR | 0x008 | MDM_CELLULAR |
MDM_COMPRESSION | 0x001 | MDM_COMPRESSION |
MDM_DIAGNOSTICS | 0x0800 | MDM_DIAGNOSTICS |
MDM_ERROR_CONTROL | 0x002 | MDM_ERROR_CONTROL |
MDM_FLOWCONTROL_HARD | 0x010 | MDM_FLOWCONTROL_HARD |
MDM_FLOWCONTROL_SOFT | 0x020 | MDM_FLOWCONTROL_SOFT |
MDM_FORCED_EC | 0x004 | MDM_FORCED_EC |
MDM_SPEED_ADJUST | 0x080 | MDM_SPEED_ADJUST |
MDM_TONE_DIAL | 0x100 | MDM_TONE_DIAL |
MDM_V23_OVERRIDE | 0x400 | 设置后,为 V.23 启用 CCITT 调制。清除后,会为 V.21 和 V.22 启用 CCITT 调制。 |
读取和写入操作
Windows 支持同步和异步 (串行通信资源上的重叠) 文件 I/O 操作。 重叠操作使调用线程能够在后台执行操作时执行其他任务。
线程使用 读取文件 或 读入文件 函数从通信资源读取数据,并使用 写出文件 或 写入文件 函数写入通信资源。
读取文件 和 写出文件 可以同步或异步执行。 读入文件 和 写入文件 只能异步执行。
这些读取和写入函数的行为受是否作为重叠操作执行、超时参数是否与句柄关联以及流控制参数是否与句柄关联的影响。
线程还可以使用 串口寄送 函数写入通信资源,该函数在输出缓冲区中任何挂起的数据之前传输指定的字符。
此函数可用于将高优先级信号字符传输到接收系统。 高优先级字符的传输仍受流控制和写入超时的限制,并且操作是同步执行的。
线程可以使用 串口缓冲 函数放弃设备输出或输入缓冲区中的所有字符。 串口缓冲 还可以终止挂起的读取或写入操作,即使操作尚未完成。
如果线程使用 串口缓冲 刷新输出缓冲区,则不会传输已删除的字符。 若要在确保传输内容的同时清空输出缓冲区,线程可以调用 刷新文件 函数 (同步操作) 。
但请注意, 刷新文件 受流控制,但不受写入超时,在传输所有挂起的写入操作之前,它不会返回。
重叠操作
重叠操作使线程能够在后台执行耗时的I/O操作,使线程可以自由执行其他任务。若要在通信资源上启用重叠 I/O 操作,线程必须在创建文件中指定0x40000000标志。
若要将 读取文件 或 写出文件 函数作为重叠操作运行,调用线程必须指定指向重叠类结构的指针。重叠类结构必须包含手动重置 (非自动) 事件对象的句柄。
当对 I/O 函数的调用在操作完成之前返回时,系统会将事件对象的状态设置为未发出信号。系统将事件对象的状态设置为在操作完成时发出信号。
线程使用等待函数来检查事件对象的当前状态或等待其状态发出信号。读入文件 和 写入文件 函数只能作为重叠操作执行。
调用线程指定指向 文件传输回调 函数的指针,该函数在重叠操作完成时执行。 仅当调用线程执行可警报操作时,才会执行完成例程。
有关事件对象、等待函数、可警报等待和完成例程的详细信息,请参阅 关于同步。
超时
通信资源的句柄具有一组关联的超时参数,这些参数会影响读取和写入操作的行为。 超时可能会导致 读取文件、读入文件、写出文件或写入文件 操作在超时间隔过后结束,
即使指定数量的字符尚未读取或写入。 在读取或写入操作期间发生超时 (,即读取或写入函数的返回值指示) 成功时,不会将其视为错误。 实际读取或写入的字节计数由
读取文件或写出文件 (或 操作结果 或 文件传输回调 函数报告(如果 I/O 作为重叠操作执行) )。
当应用程序打开通信资源时,系统会将资源的超时值设置为上次使用该资源时生效的值。 如果从未打开过通信资源,系统会将超时值设置为某个默认值。
在任一情况下,应用程序都应始终在打开资源后确定当前超时值,然后显式设置这些值以满足其要求。若要获取或更改通信资源的当前超时值,请使用 串口超时和超时串口 函数。
超时参数支持两种类型的超时。 当收到任意两个字符之间的时间间隔超过指定的毫秒数时,将发生间隔超时。 计时在收到第一个字符时开始,在收到每个新字符时重启。
当读取操作花费的总时间超过计算的毫秒数时,将发生总超时。当I/O操作开始时,计时会立即开始。写入操作仅支持总超时。读取操作支持间隔和总超时可以单独使用或组合使用。
读取或写入操作的总超时时间是使用 串口超时 或 超时串口 函数中指定的 串口超时类 结构的乘数和常量值计算的,以毫秒为单位。
使用乘数和常量可使总超时期限发生变化,具体取决于请求的数据量。应用程序只能通过将乘数或者常量设置为零来单独使用常量或乘数。如果常量和乘数均为零,则不使用总超时。
如果所有读取超时参数均为零,则不会使用读取超时,并且读取操作在读取请求的字节数或发生错误之前不会完成。同样所有写入超时参数均为零,则在写入之前,写入操作不会完成。
如果读取间隔超时参数是0xffffffff,并且两个读取超时总参数均为零,则读取输入缓冲区中可用的任何字符后,读取操作将立即完成,即使为空也是如此。
当接收中出现平静时,间隔计时会强制读取操作返回。 使用间隔超时的进程可以设置相当短的间隔参数,因此它可以快速响应一个或多个字符的小型隔离突发,
但当在稳定流中接收数据时,它仍可以通过单个调用收集大型字符缓冲区。当某种流控制阻止传输或调用 串口暂停 函数以暂停字符传输时,写入操作的超时非常有用。
下表根据为总超时和间隔超时指定的值汇总了读取操作的行为。
总计 | 间隔 | 行为 |
0 | 0 | 完全填充缓冲区时返回 。 不使用超时。 |
T | 0 | 当缓冲区已完全填充或自操作开始以来经过 T 毫秒时返回 。 |
0 | Y | 当缓冲区已完全填充或 Y 毫秒在收到任意两个字符之间时返回 。 在收到第一个字符之前,计时不会开始。 |
T | Y | 当缓冲区完全填充或发生任一类型的超时时返回 。 |
串口超时类
中文名字 | 英文名称 | 长度 | 作用解释 |
串口超时类 | COMMTIMEOUTS | 20 | 包含通信设备的超时参数。确定设备上 读取文件、读入文件、写出文件或写入文件 操作的行为。 |
串口超时类——成员表 |
间隔 | ReadIntervalTimeout | 整数 | 通信线路上下一个字节到达之前允许经过的最长时间(以毫秒为单位)。 值为零表示不使用间隔超时。 |
读乘 | ReadTotalTimeoutMultiplier | 整数 | 用于计算读取操作的总超时周期的乘数(以毫秒为单位)。 对于每个读取操作,此值乘以要读取的请求字节数。 |
读超 | ReadTotalTimeoutConstant | 整数 | 一个常量,用于计算读取操作的总超时时间(以毫秒为单位)。对于每个读取操作,此值将添加到 读乘 成员的乘积和请求的字节数中。 |
写乘 | WriteTotalTimeoutMultiplier | 整数 | 用于计算写入操作的总超时周期的乘数(以毫秒为单位)。 对于每个写入操作,此值乘以要写入的字节数。 |
写超 | WriteTotalTimeoutConstant | 整数 | 一个常量,用于计算写入操作的总超时时间(以毫秒为单位)。 对于每个写入操作,此值将添加到 写乘 成员的乘积和要写入的字节数。 |
通信错误
在其他情况下,读取或写入操作可以用少于请求的字符数完成,即使尚未发生超时。 以下是一些示例:
某些驱动程序支持使用特殊字符,这些字符可立即完成读取操作,只使用已读到时已读到的字符。
可以调用 串口缓冲 函数以提前终止挂起的读取或写入操作。 此函数还可以删除输出缓冲区或输入缓冲区的内容,或者删除这两者。
如果在读取或写入操作期间发生通信错误,则会终止通信资源上的所有 I/O 操作。 中断条件、奇偶校验错误或帧错误就是此类错误的示例。
发生错误时,进程必须调用 串口刷新 函数以清除错误标志,然后才能开始其他 I/O 操作。 串口刷新 报告发生的特定错误和设备当前状态。
通信事件
进程可以监视通信资源中发生的一组事件。 例如,应用程序可以使用事件监视来确定 CTS 何时 (明确发送) 和 DSR (数据集就绪) 信号更改状态。
进程可以使用 掩码串口 函数创建事件掩码来监视给定通信资源上的事件。要确定通信资源的当前事件掩码,可以使用 串口掩码 函数。 以下值指定可监视的事件。
英文名称 | 数值 | 作用解释 |
EV_RXCHAR | 1 | 接收到了一个字符并将其放入了输入缓冲区。 |
EV_RXFLAG | 2 | 事件字符已收到并放置在输入缓冲区中。 事件字符在设备的 DCB 结构中指定,该结构使用 状态串口 函数应用于串行端口。 |
EV_TXEMPTY | 4 | 输出缓冲区中的最后一个字符已发送。 |
EV_CTS | 8 | CTS (清除发送) 信号更改状态。 |
EV_DSR | 0x0010 | DSR (数据准备好) 信号更改状态。 |
EV_RLSD | 0x0020 | RLSD (接收线路信号检测) 信号更改状态。 |
EV_BREAK | 0x0040 | 在输入上检测到一个中断。 |
EV_ERR | 0x0080 | 发生行状态错误。 行状态错误CE_FRAME、CE_OVERRUN和CE_RXPARITY。 |
EV_RING | 0x0100 | 检测到振铃指示。 |
EV_PERR | 0x0200 | 发生打印机错误 |
EV_RX80FULL | 0x0400 | 接收缓冲区已满80% |
EV_EVENT1 | 0x0800 | 提供程序特定事件1。 |
EV_EVENT2 | 0x1000 | 提供程序特定事件2。 |
指定一组事件后,进程使用 串口等待 函数等待其中一个事件发生。 串口等待 可以同步使用,也可以作为重叠操作使用。 有关以重叠操作的形式执行函数的其他信息,请参阅同步。
发生事件掩码中指定的事件之一时,进程将完成等待操作,并设置事件掩码变量以指示检测到的事件类型。如果在等待该资源等待时为通信资源调用掩码串口。
串口等待 函数检测自上次调用 掩码串口 或 串口等待 以来发生的事件。 例如将 EV_RXCHAR 事件指定为满足等待的事件,则如果驱动程序的输入缓冲区中自上次调用
串口等待 或 掩码串口 以来存在字符,则将满足对 串口等待 的调用。 因此,给定以下伪代码,在 T1 和 T2 之间接收的任何字符都将满足对 串口等待 的下一次调用。
循环(完成)
{串口等待(参数)
T1:
//读取数据过程
T2:}
监视当信号 (CTS、DSR 等) 更改状态时发生的事件时, 串口等待 报告更改,但不会报告当前状态。 若要查询 CTS (明确发送) 、DSR (数据集就绪) 、RLSD (接收线路信号检测) 和环形指示器信号的当前状态,进程可以使用 串口调制 函数。
扩展函数
可以使用 串口信号 函数为设备调用某些通信函数。 此函数发送代码以指示设备执行扩展功能。
例如,应用程序可以使用 SETBREAK 代码暂停字符传输,并使用 CLRBREAK 代码恢复传输。
还可以通过调用 串口暂停 和 串口还原 函数来启动这些特定操作。 串口信号 还可用于实现手动调制解调器控制。
例如,CLRDTR 和 SETDTR 代码可用于实现手动 DTR (数据终端就绪) 流控制。 但请注意,如果进程在设备配置为启用
DTR 握手时使用 串口信号 操作 DTR 行,或者 RTS (请求发送) 行(如果启用了 RTS 握手),则会发生错误。
串口扩展
英文名称 | 数值 | 作用解释 |
SETXOFF | 1 | 模拟接收到XOFF |
SETXON | 2 | 模拟接收到XON |
SETRTS | 3 | 设置RTS高 |
CLRRTS | 4 | 设置RTS低 |
SETDTR | 5 | 设置DTR高 |
CLRDTR | 6 | 设置DTR低 |
RESETDEV | 7 | 如果可能,重置设备 |
SETBREAK | 8 | 设置设备断线。 |
CLRBREAK | 9 | 清除设备断线。 |
硬件控制 函数使进程能够将扩展函数代码直接发送到指定的设备驱动程序,从而使设备执行给定的操作。 硬件控制 为设备提供与标准串行通信函数不支持的通信资源功能关联的设备。
它使应用程序能够使用该设备特有的参数配置设备,以及调用任何特定于设备的函数。
配置通信资源
整数 串口;串口通讯类 通讯(总长度=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 | 操作结果(文件,重叠类,@长度,等待) | 检索指定文件、命名管道或通信设备上的重叠操作的结果。 |
串口状态类
中文名字 | 英文名称 | 长度 | 作用解释 |
串口状态类 | COMSTAT | 12 | 包含了串口通讯时间设置的结构 |
串口状态类——成员表 |
信号 | 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_BREAK | 0x0010 | 硬件检测到中断条件。 |
CE_FRAME | 0x0008 | 硬件检测到一个组帧错误。 |
CE_OVERRUN | 0x0002 | 发生字符缓冲区溢出。 下一个字符将丢失。 |
CE_RXOVER | 0x0001 | 发生输入缓冲区溢出。 输入缓冲区空间不足,或在文件尾 (EOF) 字符之后接收到字符。 |
CE_RXPARITY | 0x0004 | 硬件检测到奇偶校验错误。 |
进程线程——使用示例
应用程序由一个或多个进程组成。 用最简单的术语来说, 进程是一个执行程序。 一个或多个线程在进程的上下文中运行。
线程是操作系统分配处理器时间的基本单元。 线程可以执行进程代码的任何部分,包括当前由另一个线程执行的部件。
作业对象允许将进程组作为一个单元进行管理。 作业对象是可活动、安全、可共享的对象,用于控制与其关联的进程的属性。 对作业对象执行的操作会影响与作业对象关联的所有进程。
线程池是代表应用程序高效执行异步回调的工作线程集合。 线程池主要用于减少应用程序线程数并提供工作线程的管理。
纤程是必须由应用程序手动安排的执行单元。 光纤在计划它们的线程的上下文中运行。
用户模式计划 (UMS) 是一种轻型机制,应用程序可以使用该机制来计划自己的线程。 UMS 线程与 光纤 的不同之处在于,每个 UMS 线程都有自己的线程上下文,而不是共享单个线程的线程上下文。
每个 进程 都提供执行程序所需的资源。 进程具有虚拟地址空间、可执行代码、系统对象的开放句柄、安全上下文、唯一进程标识符、环境变量、优先级类、最小和最大工作集大小以及至少一个执行线程。
每个进程都使用单个线程(通常称为 主线程)启动,但可以从其任何线程创建其他线程。
线程是进程内可计划执行的实体。 进程的所有线程共享其虚拟地址空间和系统资源。 此外,每个线程都维护异常处理程序、计划优先级、线程本地存储、唯一线程标识符以及系统将用于保存线程上下文的一组结构,
直到计划线程上下文为止。线程上下文包括线程的计算机寄存器集、内核堆栈、线程环境块以及线程进程的地址空间中的用户堆栈。 线程还可以有自己的安全上下文,可用于模拟客户端。
Microsoft Windows 支持 抢占式多任务处理,这会产生同时执行多个进程中多个线程的效果。 在多处理器计算机上,系统可以同时执行与计算机上存在处理器一样多的线程。
作业对象允许将进程组作为一个单元进行管理。 作业对象是可访问的、安全的、可共享的对象,用于控制与其关联的进程的属性。 对作业对象执行的操作会影响与作业对象关联的所有进程。
应用程序可以使用 线程池 来减少应用程序线程数并提供工作线程的管理。 应用程序可以对工作项进行排队、将工作与可等待句柄相关联、基于计时器自动排队,并使用 I/O 绑定。
用户模式计划 (UMS) 是一种轻型机制,应用程序可以使用该机制来计划自己的线程。 应用程序可以在用户模式下的 UMS 线程之间切换,而无需涉及 系统计划程序 ,
并在内核中阻止 UMS 线程时重新获得对处理器的控制。 每个 UMS 线程都有自己的线程上下文,而不是共享单个线程的线程上下文。
在用户模式下在线程之间切换的功能使 UMS 比线程池更高效,适合需要少量系统调用的短持续时间工作项。
光纤是必须由应用程序手动安排的执行单元。 光纤在计划它们的线程的上下文中运行。 每个线程可以计划多个光纤。 通常,与设计良好的多线程应用程序不一样,光纤没有优势。
但是,使用光纤可以更轻松地移植设计为计划其自己的线程的应用程序。
线程纤程 ——相关函数
中文名称 | 英文名称 | 示例 | 作用 |
远程线程 | CreateRemoteThread | 远程线程(进程,属性,堆栈,@函数,参数,标志,标识) | 创建一个在指定进程的地址空间内运行的线程 |
创建线程 | CreateThread | 创建线程(属性,堆栈,@函数,参数,标志,标识) | 创建一个在调用进程的地址空间内执行的线程 |
创建纤程 | CreateFiber | 创建纤程(堆栈,@函数,地址) | 分配一个光纤对象,为其分配一个堆栈,并设置执行以从指定的起始地址开始,通常是光纤函数。 |
线程转纤 | ConvertThreadToFiber | 线程转纤(指针地址) | 将当前线程转换为光纤。 必须先将线程转换为光纤,然后才能计划其他光纤。 |
端口关联 | CreateIoCompletionPort | 端口关联(文件,端口,键,线程数) | 创建完成端口并将其与指定的文件句柄关联 |
删除纤程 | DeleteFiber | 删除纤程(指针) | 删除现有纤程 |
退出线程 | ExitThread | 退出线程(0) | 强制结束一个线程 |
当前线程 | GetCurrentThread | tid=当前线程 | 获得当前线程的句柄 |
线程标识 | GetCurrentThreadId | tid=线程标识 | 获得当前线程的标识符 |
切换线程 | 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的句柄 |
当前进程 | GetCurrentProcess | pro=当前进程 | 获得当前进程的句柄 |
进程标识 | GetCurrentProcessId | pid=进程标识 | 获得当前进程的标识符PID |
终止进程 | TerminateProcess | 终止进程(进程,退出码) | 终止指定的进程及其所有线程 |
模块名称 | GetModuleFileNameA | 长度=模块名称(模块,路径,长度) | 获取指定模块的可执行文件的完整路径和文件名,模块为0获取本进程 |
模块地址 | GetModuleHandleA | 模块=模块地址(模块名) | 获取指定模块(dll)的模块句柄,模块名为0获取本进程句柄 |
函数地址 | GetProcAddress | 函数1=函数地址(模块,函数名) | 获取指定的动态链接库(DLL)函数的地址,可使用 调用 函数1(参数..)来执行 |
进程状态 | GetExitCodeProcess | 进程状态(进程,@状态) | 获得指定进程的终止状态 |
取优先级 | GetPriorityClass | lv=取优先级(进程) | 获取指定进程的优先级 |
改优先级 | SetPriorityClass | 改优先级(进程,lv) | 设置指定进程的优先级 |
最后错误 | GetLastError | 错误=最后错误 | 返回调用线程的最后一个错误代码值 |
设置错误 | SetLastError | 设置错误(错误号) | 设置本程序的最后一个错误代码 |
运行 | WinExec | 运行(命令,显示) | 命令是程序路径,若有参数加空格.显示参见窗口显示方式 |
运行类
中文名字 | 英文名称 | 长度 | 作用解释 |
运行类 | LOADPARMS32 | 16 | 用来运行一个外部程序。相关函数LoadModule |
运行类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
环境 | lpEnvAddress | 整数 | 指向运行环境的字符串。为空则与调用进程相同的环境启动 |
参数 | lpCmdLine | 整数 | 指向运行程序的命令行参数字符串 |
显示 | lpCmdShow | 整数 | 运行程序显示的模式 |
备用 | dwReserved | 整数 | 必须是0 |
进程类
中文名字 | 英文名称 | 长度 | 作用解释 |
进程类 | PROCESSENTRY32 | 296 | 用来获取系统进程的相关信息。 |
进程类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
长度 | dwSize | 整数 | 指定这个结构的大小,以字节为单位。 |
引用 | cntUsage | 整数 | 此进程的引用计数(已不再使用,总是零。) |
编号 | th32ProcessID | 整数 | 进程ID(任务管理器里进程的PID) |
默认 | th32DefaultHeapID | 整数 | 进程默认堆ID(已不再使用,总是零。) |
模块 | th32ModuleID | 整数 | 进程模块ID(已不再使用,总是零。) |
线程 | cntThreads | 整数 | 此进程开启的线程计数 |
父进程 | th32ParentProcessID | 整数 | 父进程的ID |
优先级 | pcPriClassBase | 整数 | 线程优先权 |
标识 | dwFlags | 整数 | 已不再使用,总是零。 |
名称 | szexeFile | 文本 | 260字节长度的进程名称(不含路径) |
模块类
中文名字 | 英文名称 | 长度 | 作用解释 |
模块类 | MODULEENTRY32 | 1316 | 用来获取指定进程加载模块(dll)的相关信息。 |
模块类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
长度 | dwSize | 整数 | 指定这个结构的大小,以字节为单位。 |
模组 | th32ModuleID | 整数 | (已不再使用,总是1。) |
进程 | th32ProcessID | 整数 | 进程ID(任务管理器里进程的PID) |
载入 | GlblcntUsage | 整数 | 全局模块的载入次数(已不再使用,总是-1。) |
引用 | ProccntUsage | 整数 | 当前模块的引用次数(已不再使用,总是-1。) |
基址 | modBaseAddr | 整数 | 模块的基址,在其所属的进程范围内。 |
大小 | modBaseSize | 整数 | 模块的大小,单位字节。 |
模块 | hModule | 整数 | 所属进程的范围内,模块句柄。 |
名称 | szModule | 文本 | 256字节长度的模块名称 |
路径 | szExePath | 文本 | 1024字节长度的模块完整路径 |
进程基址类
中文名字 | 英文名称 | 长度 | 作用解释 |
进程基址类 | PROCESS_BASIC_INFORMATION | 24 | 包含了某个进程的相关信息。函数NtQueryInformationProcess |
进程基址类——成员表 |
状态 | ExitStatus | 整数 | 进程终止状态 |
基址 | PebBaseAddress | 整数 | 进程环境块地址 |
掩码 | AffinityMask | 整数 | 进程关联掩码 |
优先级 | BasePriority | 整数 | 进程的优先级 |
进程 | UniqueProcessId | 整数 | 进程ID |
父进程 | InheritedFromUniqueProcessId | 整数 | 父进程ID |
加载模块操作标志
英文名称 | 数值 | 作用解释 |
DONT_RESOLVE_DLL_REFERENCES | 0x00000001 | 如果使用此值,并且可执行模块是 DLL,则系统不会调用 DllMain 进行进程和线程初始化和终止。 此外,系统不会加载指定模块引用的其他可执行模块。 |
LOAD_IGNORE_CODE_AUTHZ_LEVEL | 0x00000010 | 如果使用此值,则系统不会检查 AppLocker 规则或对 DLL 应用软件限制策略。 此操作仅适用于正在加载的 DLL,不适用于其依赖项。 建议在安装程序中使用此值,这些安装程序必须在安装过程中运行提取的 DLL。 |
LOAD_LIBRARY_AS_DATAFILE | 0x00000002 | 如果使用此值,系统会将文件映射到调用进程的虚拟地址空间,就像它是数据文件一样。 执行或准备执行映射文件没有任何操作。 因此,不能使用此 DLL 调用 GetModuleFileName、 GetModuleHandle 或 GetProcAddress 等函数。 使用此值会导致写入只读内存引发访问冲突。 如果只想加载 DLL 以从中提取消息或资源,请使用此标志。 |
LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE | 0x00000040 | 与 LOAD_LIBRARY_AS_DATAFILE类似,只不过 DLL 文件是使用调用进程的独占写入访问权限打开的。 其他进程在使用 DLL 文件时无法打开该文件进行写入访问。 但是,DLL 仍可由其他进程打开。 |
LOAD_LIBRARY_AS_IMAGE_RESOURCE | 0x00000020 | 如果使用此值,系统会将文件作为图像文件映射到进程的虚拟地址空间中。 但是,加载程序不会加载静态导入或执行其他常规初始化步骤。 如果只想加载 DLL 以从中提取消息或资源,请使用此标志。 |
LOAD_LIBRARY_SEARCH_APPLICATION_DIR | 0x00000200 | 如果使用此值,则会在应用程序的安装目录中搜索 DLL 及其依赖项。 不搜索标准搜索路径中的目录。 此值不能与 LOAD_WITH_ALTERED_SEARCH_PATH组合使用。 |
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | 0x00001000 | 此值是 LOAD_LIBRARY_SEARCH_APPLICATION_DIR、 LOAD_LIBRARY_SEARCH_SYSTEM32和 LOAD_LIBRARY_SEARCH_USER_DIRS的组合。 不搜索标准搜索路径中的目录。 此值不能与 LOAD_WITH_ALTERED_SEARCH_PATH组合使用。 |
LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR | 0x00000100 | 如果使用此值,则包含 DLL 的目录将暂时添加到要搜索 DLL 依赖项的目录列表的开头。 不搜索标准搜索路径中的目录。 |
LOAD_LIBRARY_SEARCH_SYSTEM32 | 0x00000800 | 如果使用此值,则会搜索 %windows%\system32 来查找 DLL 及其依赖项。 不搜索标准搜索路径中的目录。 此值不能与 LOAD_WITH_ALTERED_SEARCH_PATH组合使用。 |
LOAD_LIBRARY_SEARCH_USER_DIRS | 0x00000400 | 如果使用此值,则使用 AddDllDirectory 或 SetDllDirectory 函数添加的目录将搜索 DLL 及其依赖项。 如果已添加多个目录,则未指定搜索目录的顺序。 不搜索标准搜索路径中的目录。 此值不能与 LOAD_WITH_ALTERED_SEARCH_PATH组合使用。 |
LOAD_WITH_ALTERED_SEARCH_PATH | 0x00000008 | 如果使用此值并且 lpFileName 指定绝对路径,则系统会使用“备注”部分中讨论的备用文件搜索策略来查找指定模块导致加载的关联可执行模块。 如果使用此值,并且 lpFileName 指定相对路径,则行为未定义。 |
LOAD_LIBRARY_REQUIRE_SIGNED_TARGET | 0x00000080 | 指定必须在加载时检查二进制映像的数字签名。 |
LOAD_LIBRARY_SAFE_CURRENT_DIRS | 0x00002000 | 如果使用此值,则仅当 DLL 位于“安全加载”列表中的某个目录下时,才允许从当前目录加载要执行 |
进程信息类
中文名字 | 英文名称 | 长度 | 作用解释 |
进程信息类 | PROCESS_INFORMATION | 16 | 包含有关新创建的进程及其主线程的信息。 |
进程信息类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
进程 | hProcess | 整数 | 新创建进程的句柄。句柄用于指定对进程对象执行操作的所有函数中的进程。 |
线程 | hThread | 整数 | 新创建的进程的主线程的句柄。句柄用于指定对线程对象执行操作的所有函数中的线程。 |
进程号 | dwProcessId | 整数 | 一个值,可用于标识进程。 值从创建进程时起有效,直到关闭进程的所有句柄并释放进程对象;此时,可以重复使用标识符。 |
线程号 | dwThreadId | 整数 | 可用于标识线程的值。值从创建线程时起有效,直到关闭线程的所有句柄并释放线程对象;此时,可以重复使用标识符。 |
启动进程类
中文名字 | 英文名称 | 长度 | 作用解释 |
启动进程类 | STARTUPINFOEXA | 72 | 指定新进程的窗口工作站、桌面、标准句柄和属性。 |
启动进程类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
信息 | StartupInfo | 启动信息类 | STARTUPINFO 结构。 |
属性 | lpAttributeList | 整数 | 属性列表。此列表由 InitializeProcThreadAttributeList 函数创建。 |
启动信息类
中文名字 | 英文名称 | 长度 | 作用解释 |
启动信息类 | STARTUPINFOA | 68 | 指定创建时进程的窗口工作站、桌面、标准句柄和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_FORCEONFEEDBACK | 0x00000040 | 指示在调用 创建进程 后光标处于反馈模式两秒钟。 显示“在后台工作”光标 (查看鼠标控制面板实用工具) 中的“指针”选项卡。如果在这两秒内进程进行第一次 GUI 调用,则系统会再给进程 5 秒。 如果在这五秒内进程显示一个窗口,则系统再给进程 5 秒以完成绘制窗口。系统在第一次调用 获取消息 后关闭反馈光标,无论进程是否正在绘制。 |
STARTF_FORCEOFFFEEDBACK | 0x00000080 | 指示在进程启动时强制关闭反馈光标。 将显示“普通选择”光标。 |
STARTF_PREVENTPINNING | 0x00002000 | 指示进程创建的任何窗口都不能固定在任务栏上。此标志必须与 STARTF_TITLEISAPPID 组合使用。 |
STARTF_RUNFULLSCREEN | 0x00000020 | 指示进程应在全屏模式下运行,而不是在窗口模式下运行。此标志仅对 x86 计算机上运行的控制台应用程序有效。 |
STARTF_TITLEISAPPID | 0x00001000 | lpTitle 成员包含 AppUserModelID。 此标识符控制任务栏和 “开始” 菜单呈现应用程序的方式,并使它能够与正确的快捷方式和跳转列表相关联。 通常,应用程序将使用 SetCurrentProcessExplicitAppUserModelID 和 GetCurrentProcessExplicitAppUserModelID 函数,而不是设置此标志。 有关详细信息,请参阅 应用程序用户模型 ID。如果使用STARTF_PREVENTPINNING,则应用程序窗口不能固定在任务栏上。 应用程序使用与 AppUserModelID 相关的任何窗口属性仅覆盖该窗口的此设置。此标志不能与STARTF_TITLEISLINKNAME一起使用。 |
STARTF_TITLEISLINKNAME | 0x00000800 | lpTitle 成员包含用户为启动此过程而调用的快捷方式文件 (.lnk) 的路径。 这通常是在调用指向已启动应用程序的 .lnk 文件时由 shell 设置的。 大多数应用程序不需要设置此值。此标志不能与STARTF_TITLEISAPPID一起使用。 |
STARTF_UNTRUSTEDSOURCE | 0x00008000 | 命令行来自不受信任的源。 有关详细信息,请参阅“备注”。 |
STARTF_USECOUNTCHARS | 0x00000008 | dwXCountChars 和 dwYCountChars 成员包含其他信息。 |
STARTF_USEFILLATTRIBUTE | 0x00000010 | dwFillAttribute 成员包含其他信息。 |
STARTF_USEHOTKEY | 0x00000200 | hStdInput 成员包含其他信息。此标志不能与 STARTF_USESTDHANDLES一起使用。 |
STARTF_USEPOSITION | 0x00000004 | dwX 和 dwY 成员包含其他信息。 |
STARTF_USESHOWWINDOW | 0x00000001 | wShowWindow 成员包含其他信息。 |
STARTF_USESIZE | 0x00000002 | dwXSize 和 dwYSize 成员包含其他信息。 |
STARTF_USESTDHANDLES | 0x00000100 | hStdInput、hStdOutput 和 hStdError 成员包含其他信息。如果在调用其中一个进程创建函数时指定此标志,则句柄必须是可继承的,并且函数的 bInheritHandles 参数必须设置为 TRUE。 有关详细信息,请参阅 处理继承。如果在调用 GetStartupInfo 函数时指定此标志,则这些成员要么是在进程创建期间指定的句柄值,要么INVALID_HANDLE_VALUE。当不再需要句柄时,必须使用 CloseHandle 关闭这些句柄。此标志不能与 STARTF_USEHOTKEY一起使用。 |
线程执行状态。可使用以下一个或多个值。
英文名称 | 数值 | 作用解释 |
ES_AWAYMODE_REQUIRED | 0x00000040 | 启用离开模式。 必须使用 ES_CONTINUOUS 指定此值。离开模式只能由媒体录制和媒体分发应用程序使用,这些应用程序必须在计算机似乎处于睡眠状态时在台式计算机上执行关键后台处理。 |
ES_CONTINUOUS | 0x80000000 | 通知系统正在设置的状态应保持有效,直到使用 ES_CONTINUOUS 的下一次调用和清除其他状态标志之一。 |
ES_DISPLAY_REQUIRED | 0x00000002 | 通过重置显示空闲计时器强制显示处于打开状态。 |
ES_SYSTEM_REQUIRED | 0x00000001 | 通过重置系统空闲计时器强制系统处于工作状态。 |
ES_USER_PRESENT | 0x00000004 | 不支持此值。 如果 ES_USER_PRESENT 与其他值组合使用,则调用将失败,并且不会设置任何指定的状态。 |
进程错误模式。可使用以下一个或多个值。
英文名称 | 数值 | 作用 |
所有错误 | 0 | 使用系统默认值,即显示所有错误对话框。 |
SEM_FAILCRITICALERRORS | 0x0001 | 系统不显示严重错误处理程序消息框。 相反,系统会将错误发送到调用进程。最佳做法是,所有应用程序在启动时调用参数为 SEM_FAILCRITICALERRORS 的进程范围的 SetErrorMode 函数。 这是为了防止错误模式对话框挂起应用程序。 |
SEM_NOALIGNMENTFAULTEXCEPT | 0x0004 | 系统自动修复内存对齐错误,并使它们对应用程序不可见。 它为调用进程和任何后代进程执行此操作。 此功能仅受某些处理器体系结构支持。为进程设置此值后,将忽略后续尝试清除该值。 |
SEM_NOGPFAULTERRORBOX | 0x0002 | 系统不显示Windows 错误报告对话框。 |
SEM_NOOPENFILEERRORBOX | 0x8000 | OpenFile 函数在找不到文件时不显示消息框。 相反,错误将返回到调用方。 此错误模式将替代 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_DUPLEX | GENERIC_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_DUPLEX | 0x00000003 | 管道是双向的;服务器和客户端进程都可以从管道读取和写入管道。 此模式为服务器提供 对管道的等效GENERIC_READ 和 GENERIC_WRITE 访问权限。 当客户端使用 CreateFile 函数连接到管道时,可以指定GENERIC_READ或GENERIC_WRITE,或者同时指定这两者。 |
PIPE_ACCESS_INBOUND | 0x00000001 | 管道中的数据流仅从客户端流向服务器。 此模式为服务器提供对管道 的等效GENERIC_READ 访问权限。 连接到管道时,客户端必须指定 GENERIC_WRITE 访问。 如果客户端必须通过调用 GetNamedPipeInfo 或 GetNamedPipeHandleState 函数来读取管道设置,则客户端必须在连接到管道时指定 GENERIC_WRITE 并 FILE_READ_ATTRIBUTES 访问。 |
PIPE_ACCESS_OUTBOUND | 0x00000002 | 管道中的数据流仅从服务器流向客户端。 此模式为服务器提供等效于 GENERIC_WRITE 访问管道的权限。 连接到管道时,客户端必须指定 GENERIC_READ 访问。 如果客户端必须通过调用 SetNamedPipeHandleState 函数更改管道设置,则客户端必须在连接到管道时指定 GENERIC_READ 和 FILE_WRITE_ATTRIBUTES 访问。 |
此参数还可以包括以下一个或多个标志,这些标志启用写通模式和重叠模式。 |
FILE_FLAG_FIRST_PIPE_INSTANCE | 0x00080000 | 如果尝试使用此标志创建管道的多个实例,则创建第一个实例会成功,但创建下一个实例会失败并 ERROR_ACCESS_DENIED。 |
FILE_FLAG_WRITE_THROUGH | 0x80000000 | 已启用写通模式。 此模式仅影响对字节类型管道的写入操作,并且仅当客户端和服务器进程位于不同计算机上时才影响写入操作。 如果启用此模式,则写入命名管道的函数不会返回,直到写入的数据通过网络传输并且位于远程计算机上的管道缓冲区中。 如果未启用此模式,系统会通过缓冲数据,直到最小字节数累积或最长时间结束,来提高网络操作的效率。 |
FILE_FLAG_OVERLAPPED | 0x40000000 | 已启用重叠模式。 如果启用此模式,执行读取、写入和连接操作(可能需要很长时间才能完成)的函数会立即返回。 此模式使启动操作的线程能够在后台执行耗时操作时执行其他操作。 例如,在重叠模式下,线程可以处理同时输入和输出 (多个管道实例上的 I/O) 操作,或在同一管道句柄上同时执行读取和写入操作。 如果未启用重叠模式,则在操作完成之前,对管道句柄执行读取、写入和连接操作的函数不会返回。 ReadFileEx 和 WriteFileEx 函数只能与重叠模式下的管道句柄一起使用。 ReadFile、WriteFile、ConnectNamedPipe 和 TransactNamedPipe 函数可以同步执行,也可以作为重叠操作执行。 |
此参数可以包括以下安全访问模式的任意组合。 对于同一管道的不同实例,这些模式可能不同。 |
WRITE_DAC | 0x00040000 | 调用方将具有对命名管道的任意访问控制列表 (ACL) 的写入访问权限。 |
WRITE_OWNER | 0x00080000 | 调用方将具有对命名管道所有者的写入访问权限。 |
ACCESS_SYSTEM_SECURITY | 0x01000000 | 调用方将具有对命名管道的 SACL 的写入访问权限。 有关详细信息,请参阅 访问控制列表 (ACL) 和 SACL 访问权限。 |
管道模式——使用标志
英文名称 | 数值 | 作用 |
可以指定以下类型模式之一。 必须为管道的每个实例指定相同的类型模式。 |
PIPE_TYPE_BYTE | 0x00000000 | 数据作为字节流写入管道。 此模式不能与PIPE_READMODE_MESSAGE一起使用。 管道不区分在不同写入操作期间写入的字节。 |
PIPE_TYPE_MESSAGE | 0x00000004 | 数据作为消息流写入管道。 管道将每次写入操作期间写入的字节视为消息单元。 GetLastError 函数在未完全读取消息时返回ERROR_MORE_DATA。 此模式可与 PIPE_READMODE_MESSAGE 或 PIPE_READMODE_BYTE 一起使用。 |
可以指定以下读取模式之一。同一管道的不同实例可以指定不同的读取模式。 |
PIPE_READMODE_BYTE | 0x00000000 | 数据作为字节流从管道中读取。 此模式可用于 PIPE_TYPE_MESSAGE 或 PIPE_TYPE_BYTE。 |
PIPE_READMODE_MESSAGE | 0x00000002 | 数据作为消息流从管道中读取。 仅当还指定 了PIPE_TYPE_MESSAGE 时,才能使用此模式。 |
可以指定以下等待模式之一。 同一管道的不同实例可以指定不同的等待模式。 |
PIPE_WAIT | 0x00000000 | 启用阻止模式。 在 ReadFile、 WriteFile 或 ConnectNamedPipe 函数中指定管道句柄时,在有要读取的数据、写入所有数据或连接客户端之前,这些操作不会完成。 在某些情况下,使用此模式意味着无限期等待客户端进程执行操作。 |
PIPE_NOWAIT | 0x00000001 | 启用非阻止模式。 在此模式下, ReadFile、 WriteFile 和 ConnectNamedPipe 始终立即返回。 |
可以指定以下远程客户端模式之一。 同一管道的不同实例可以指定不同的远程客户端模式。 |
PIPE_ACCEPT_REMOTE_CLIENTS | 0x00000000 | 可以接受来自远程客户端的连接,并对照管道的安全描述符进行检查。 |
PIPE_REJECT_REMOTE_CLIENTS | 0x00000008 | 来自远程客户端的连接将自动被拒绝。 |
作业要查询的限制的信息类
英文名称 | 数值 | 作用解释 |
JobObjectBasicAccountingInformation | 1 | 信息 参数是指向JOBOBJECT_BASIC_ACCOUNTING_INFORMATION结构的指针。 |
JobObjectBasicAndIoAccountingInformation | 8 | 信息 参数是指向JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION结构的指针。 |
JobObjectBasicLimitInformation | 2 | 信息 参数是指向JOBOBJECT_BASIC_LIMIT_INFORMATION结构的指针。 |
JobObjectBasicProcessIdList | 3 | 信息 参数是指向JOBOBJECT_BASIC_PROCESS_ID_LIST结构的指针。 |
JobObjectBasicUIRestrictions | 4 | 信息 参数是指向JOBOBJECT_BASIC_UI_RESTRICTIONS结构的指针。 |
JobObjectCpuRateControlInformation | 15 | 信息 参数是指向JOBOBJECT_CPU_RATE_CONTROL_INFORMATION结构的指针。 |
JobObjectEndOfJobTimeInformation | 6 | 信息 参数是指向JOBOBJECT_END_OF_JOB_TIME_INFORMATION结构的指针。 |
JobObjectExtendedLimitInformation | 9 | 信息 参数是指向JOBOBJECT_EXTENDED_LIMIT_INFORMATION结构的指针。 |
JobObjectGroupInformation | 11 | 信息 参数是指向接收作业当前分配到的处理器组列表的缓冲区的指针。 lpReturnLength 参数指向的变量设置为组数据的大小。 将此值除以 sizeof(USHORT) 可确定组数。 |
JobObjectGroupInformationEx | 14 | 信息 参数是指向缓冲区的指针,该缓冲区接收GROUP_AFFINITY结构数组,这些结构指示作业当前分配到的处理器组中作业的相关性。 lpReturnLength 参数指向的变量设置为组相关性数据的大小。 将此值除以结构长度可确定组数。 |
JobObjectLimitViolationInformation | 13 | 信息 参数是指向JOBOBJECT_LIMIT_VIOLATION_INFORMATION结构的指针。 |
JobObjectLimitViolationInformation2 | 34 | 信息 参数是指向JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2结构的指针。 |
JobObjectNetRateControlInformation | 32 | 信息 参数是指向JOBOBJECT_NET_RATE_CONTROL_INFORMATION结构的指针。 |
JobObjectNotificationLimitInformation | 12 | 信息 参数是指向JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION结构的指针。 |
JobObjectNotificationLimitInformation2 | 33 | 信息 参数是指向JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2结构的指针。 |
JobObjectSecurityLimitInformation | 5 | 不支持此标志。 应用程序必须为每个进程单独设置安全限制。 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 来自创建者的主令牌或模拟令牌。
若要获取或设置事件、互斥体、信号灯或可等待计时器对象的安全描述符,请调用 取名安全、改名安全、取安全符 或 改安全符 函数。
创建事件、创建互斥、创建信号 或 创建延时 返回的句柄对新对象具有完全访问权限。 调用 打开事件、打开互斥、打开信号 或 打开延时 函数时,
系统会根据对象的安全描述符检查请求的访问权限。进程间同步对象的有效访问权限包括 标准访问权限 和某些特定于对象的访问权限。
下表列出了所有对象使用的标准访问权限。
英文名称 | 数值 | 作用 |
DELETE | 0x00010000 | 删除对象所必需的。 |
READ_CONTROL | 0x00020000 | 需要读取对象的安全描述符中的信息,不包括 SACL 中的信息。 若要读取或写入 SACL,必须请求 0x01000000 访问权限。 |
WRITE_DAC | 0x00040000 | 需要修改对象的安全描述符中的 DACL。 |
WRITE_OWNER | 0x00080000 | 需要更改对象的安全描述符中的所有者。 |
SYNCHRONIZE | 0x00100000 | 将对象用于同步的权限。 这使线程能够等待对象处于信号状态。 |
下表列出了事件对象的特定对象访问权限。 除了标准访问权限外,还支持这些权限。
英文名称 | 数值 | 作用 |
EVENT_ALL_ACCESS | 0x1F0003 | 事件对象的所有可能访问权限。 仅当应用程序需要超出标准访问权限和2 EVENT_MODIFY_STATE授予的访问权限时,才使用此权限。 使用此访问权限会增加必须由管理员运行应用程序的可能性。 |
EVENT_MODIFY_STATE | 0x0002 | 修改 SetEvent、ResetEvent 和 PulseEvent 函数所需的状态访问。 |
下表列出了互斥对象的特定对象访问权限。 除了标准访问权限外,还支持这些权限。
英文名称 | 数值 | 作用 |
MUTEX_ALL_ACCESS | 0x1F0001 | 互斥对象的所有可能访问权限。 仅当应用程序需要超出标准访问权限授予的访问权限时,才使用此权限。 使用此访问权限会增加必须由管理员运行应用程序的可能性。 |
MUTEX_MODIFY_STATE | 0x0001 | 保留供将来使用。 |
下表列出了信号灯对象的特定于对象的访问权限。 除了标准访问权限外,还支持这些权限。
英文名称 | 数值 | 作用 |
SEMAPHORE_ALL_ACCESS | 0x1F0003 | 信号灯对象的所有可能访问权限。 仅当应用程序需要超出标准访问权限和 SEMAPHORE_MODIFY_STATE授予的访问权限时,才使用此权限。 使用此访问权限会增加必须由管理员运行应用程序的可能性。 |
SEMAPHORE_MODIFY_STATE | 0x0002 | 修改 信号增量 函数所需的状态访问。 |
下表列出了可等待计时器对象的特定于对象的访问权限。 除了标准访问权限外,还支持这些权限。
英文名称 | 数值 | 作用 |
TIMER_ALL_ACCESS | 0x1F0003 | 可等待计时器对象的所有可能访问权限。 仅当应用程序需要超出标准访问权限和 TIMER_MODIFY_STATE授予的访问权限时,才使用此权限。 使用此访问权限会增加必须由管理员运行应用程序的可能性。 |
TIMER_MODIFY_STATE | 0x0002 | 修改 设置延时 和 取消延时 函数所需的状态访问。 |
TIMER_QUERY_STATE | 0x0001 | 保留供将来使用。 |
进程间同步
多个进程可以具有同一事件、互斥体、信号量或计时器对象的句柄,因此这些对象可用于完成进程间同步。 创建对象的过程可以使用
创建事件、创建互斥、创建信号 或 创建延时 函数返回的句柄。 其他进程可以使用对象名称或通过继承或复制来打开对象的句柄。
对象名称
命名对象为进程提供了一种简单的方法来共享对象句柄。 进程创建命名事件、互斥体、信号灯或计时器对象后,其他进程可以使用名称调用相应的函数,
(打开事件、打开互斥、打开信号 或 打开延时) 打开对象的句柄。 名称比较区分大小写。
事件、信号灯、互斥体、可等待计时器、文件映射和作业对象的名称共享相同的命名空间。 如果尝试使用由另一种类型的对象使用的名称创建对象,该函数将失败,
并且 最后错误 将返回 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 纳秒)。周期和延时为毫秒。 |
进出回调
中文名字 | 英文名称 | 参数 | 作用解释 |
进出回调 | IoCompletionCallback | 6 | 如果应用程序启动 I/O 完成对象的工作线程,则实现此回调。 |
进出回调 参数表 |
中文 | 英文 | 类型 | 作用解释 |
实例 | Instance | 整数 | 定义回调实例的TP_CALLBACK_INSTANCE结构。应用程序不会修改此结构的成员。 |
附加 | Context | 整数 | 应用程序定义的数据。 |
重叠 | Overlapped | 整数 | 重叠类 |
结果 | IoResult | 整数 | I/O 操作的结果。如果 I/O 成功,则此参数为0。否则,此参数是系统错误代码之一。 |
字数 | NumberOfBytesTransferred | 整数 | 在已完成的 I/O 操作期间传输的字节数。 |
进出 | Io | 整数 | 一个TP_IO结构,用于定义生成回调的 I/O 完成对象。 |
计时回调
中文名字 | 英文名称 | 参数 | 作用解释 |
计时回调 | Ptimerapcroutine | 3 | 应用程序定义的计时器完成例程。 |
计时回调 参数表 |
中文 | 英文 | 类型 | 作用解释 |
附加 | lpArgToCompletionRoutine | 整数 | 传递给回调函数的附加参数。 |
低时 | dwTimerLowValue | 整数 | 发出计时器信号的基于 UTC 的时间的低序部分。 |
高时 | dwTimerHighValue | 整数 | 计时器发出信号的基于 UTC 的时间的高阶部分。 |
工作回调
中文名字 | 英文名称 | 参数 | 作用解释 |
工作回调 | WorkCallback | 3 | 应用程序启动工作对象的工作线程,则实现此回调。 |
工作回调 参数表 |
中文 | 英文 | 类型 | 作用解释 |
实例 | Instance | 整数 | 定义回调实例的TP_CALLBACK_INSTANCE结构。应用程序不会修改此结构的成员。 |
附加 | Context | 整数 | 应用程序定义的数据。 |
工作 | Work | 整数 | 一个TP_WORK结构,用于定义生成回调的工作对象。 |
等待回调
中文名字 | 英文名称 | 参数 | 作用解释 |
等待回调 | WorkCallback | 4 | 应用程序启动工作对象的工作线程,则实现此回调。 |
等待回调 参数表 |
中文 | 英文 | 类型 | 作用解释 |
实例 | Instance | 整数 | 定义回调实例的TP_CALLBACK_INSTANCE结构。应用程序不会修改此结构的成员。 |
附加 | Context | 整数 | 应用程序定义的数据。 |
等待 | Wait | 整数 | 一个TP_WAIT结构,用于定义生成回调的等待对象。 |
结果 | WaitResult | 整数 | 等待操作的结果。0结果对象,0x102超时 |
超时回调
中文名字 | 英文名称 | 参数 | 作用解释 |
超时回调 | WaitOrTimerCallback | 3 | 应用程序定义的函数,用作计时器回调或已注册等待回调的起始地址。 |
超时回调 参数表 |
中文 | 英文 | 类型 | 作用解释 |
附加 | lpParameter | 整数 | 传递给回调函数的线程数据。 |
超时 | TimerOrWaitFired | 整数 | 如果此参数为 TRUE,则等待超时。如果此参数为 FALSE,则表示已发出等待事件信号。(对于计时器回调,此参数始终为 TRUE。 |
异步回调
中文名字 | 英文名称 | 参数 | 作用解释 |
异步回调 | APCProc | 1 | 应用程序定义的完成例程。 |
异步回调 参数表 |
中文 | 英文 | 类型 | 作用解释 |
附加 | Parameter | 整数 | 传递给回调函数的可选参数。 |
一次回调
中文名字 | 英文名称 | 参数 | 作用解释 |
一次回调 | InitOnceCallback | 3 | 返回真,则块标记为已初始化。 |
一次回调 参数表 |
中文 | 英文 | 类型 | 作用解释 |
一次 | InitOnce | 整数 | 指向一次性初始化结构的指针。 |
附加 | Parameter | 整数 | 传递给回调函数的可选参数。 |
数据 | Context | 整数 | 要使用一次性初始化结构存储的数据。 |
电源请求类
中文名字 | 英文名称 | 长度 | 作用解释 |
电源请求类 | REASON_CONTEXT | 16 | 包含有关电源请求的信息。 |
电源请求类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
版本 | Version | 整数 | 结构的版本号。此参数必须设置为 0。 |
格式 | Flags | 整数 | 电源请求原因的格式。1=包含一个简单的不可本地化字符串,2标识可本地化的字符串资源 |
本地 | Reason.Detailed | 整数 | 用于标识可本地化的字符串资源,用于描述电源请求的原因。
Reason.Detailed.LocalizedReasonModule包含字符串资源的模块。
Reason.Detailed.LocalizedReasonId字符串资源的 ID。
Reason.Detailed.ReasonStringCount ReasonStrings 参数中的字符串数。
Reason.Detailed.ReasonStrings运行时字符串资源中要替换的字符串数组。 |
非本 | Reason.SimpleReasonString | 整数 | 描述电源请求原因的非本地化字符串。 |
线程池回调标志
英文名称 | 参数 | 作用解释 |
WT_EXECUTEDEFAULT | 0x00000000 | 默认情况下,回调函数将排队到非 I/O 工作线程。 |
WT_EXECUTEINIOTHREAD | 0x00000001 | 未使用此标志。 |
WT_EXECUTEINPERSISTENTTHREAD | 0x00000080 | 回调函数将排队到永不终止的线程。 它不保证每次都使用相同的线程。 此标志应仅用于短任务,否则可能会影响其他等待操作。 |
WT_EXECUTEINWAITTHREAD | 0x00000004 | 回调函数由等待线程本身调用。 此标志应仅用于短任务,否则可能会影响其他等待操作。 |
WT_EXECUTELONGFUNCTION | 0x00000010 | 回调函数可以执行长时间的等待。 此标志可帮助系统确定是否应创建新线程。 |
WT_EXECUTEONLYONCE | 0x00000008 | 调用回调函数一次后,线程将不再等待句柄。 否则,每次等待操作完成时,计时器都会重置,直到取消等待操作。 |
WT_TRANSFER_IMPERSONATION | 0x00000100 | 回调函数将使用当前访问令牌,无论是进程令牌还是模拟令牌。 如果未指定此标志,则回调函数仅使用进程令牌执行。 |
同步屏障阻塞
英文名称 | 参数 | 作用解释 |
SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY | 1 | 指定进入屏障的线程应立即阻塞,直到最后一个线程进入屏障。。 |
SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY | 2 | 指定进入屏障的线程应旋转,直到最后一个线程进入屏障,即使旋转线程超过屏障的最大旋转计数。 |
SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE | 4 | 指定函数可以跳过所需的工作,以确保安全删除屏障,从而提高性能。仅当永远不会删除屏障时,才应使用此标志。 |
磁盘分区——使用示例
磁盘分区 ——相关函数
定义盘符 | 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_PARAMETERS | 28 | 描述磁带驱动器中的磁带。 |
磁盘参数类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
分区低数 | Capacity.LowPart | 整数 | 当前磁带分区上的字节总数。 |
分区高数 | Capacity.HighPart | 整数 | 当前磁带分区上的字节总数。 |
剩余低数 | Remaining.LowPart | 整数 | 当前位置与当前磁带分区结束之间的字节数。 |
剩余高数 | Remaining.HighPart | 整数 | 当前位置与当前磁带分区结束之间的字节数。 |
分块 | BlockSize | 整数 | 每个块的字节数。 |
区数 | PartitionCount | 整数 | 磁带上的分区数。 |
写保护 | WriteProtected | 整数 | 如果此成员为 TRUE,则磁带受写保护。 否则,就不是架构拥有的。 |
磁盘准备
英文名称 | 数值 | 作用解释 |
TAPE_FORMAT | 5 | 执行磁带的低级别格式。 目前,只有 QIC117 设备支持此功能。 |
TAPE_LOAD | 0 | 加载磁带并将磁带移到开头。 |
TAPE_LOCK | 3 | 锁定磁带弹出机制,以便不会意外弹出磁带。 |
TAPE_TENSION | 2 | 通过将磁带移到磁带的末尾并移回开头来调整紧张度。 并非所有设备都支持此选项。 如果不支持此值,则忽略此值。 |
TAPE_UNLOAD | 1 | 将磁带移到开始处,以便从设备中删除。 成功卸载操作后,设备会将错误返回给尝试访问磁带的应用程序,直到再次加载磁带。 |
TAPE_UNLOCK | 4 | 解锁磁带弹出机制。 |
定义盘符——使用标志
中文名称 | 英文名称 | 数值 | 作用 |
DDD_EXACT_MATCH_ON_REMOVE | 0x00000004 | 如果此值与 DDD_REMOVE_DEFINITION一起指定,则函数将使用完全匹配来确定要删除的映射。 使用此值可确保不会删除未定义的内容。 |
DDD_NO_BROADCAST_SYSTEM | 0x00000008 | 不要广播 WM_SETTINGCHANGE 消息。 默认情况下,将广播此消息以通知 shell 和应用程序更改。 |
DDD_RAW_TARGET_PATH | 0x00000001 | 按原样使用 lpTargetPath 字符串。 否则,它将从 MS-DOS 路径转换为路径。 |
DDD_REMOVE_DEFINITION | 0x00000002 | 删除指定设备的指定定义。 为了确定要删除的定义,函数将遍查设备的映射列表,查找 lpTargetPath 与与此设备关联的每个映射的前缀的匹配项。 匹配的第一个映射是删除的映射,然后函数返回。 |
文件系统关联标志
英文名称 | 数值 | 作用解释 |
FILE_CASE_SENSITIVE_SEARCH | 0x00000001 | 指定的卷支持区分大小写的文件名。 |
FILE_CASE_PRESERVED_NAMES | 0x00000002 | 指定卷在磁盘上放置名称时支持保留文件名大小写。 |
FILE_UNICODE_ON_DISK | 0x00000004 | 指定的卷支持在磁盘上显示的文件名中的 Unicode。 |
FILE_PERSISTENT_ACLS | 0x00000008 | 指定的卷保留并强制实施 ACL) (访问控制列表。 例如,NTFS 文件系统保留并强制实施 ACL,而 FAT 文件系统则不保留。 |
FILE_FILE_COMPRESSION | 0x00000010 | 指定的卷支持基于文件的压缩。 |
FILE_VOLUME_QUOTAS | 0x00000020 | 指定的卷支持磁盘配额。 |
FILE_SUPPORTS_SPARSE_FILES | 0x00000040 | 指定的卷支持稀疏文件。 |
FILE_SUPPORTS_REPARSE_POINTS | 0x00000080 | 指定的卷支持重新分析点。 |
FILE_SUPPORTS_REMOTE_STORAGE | 0x00000100 | 文件系统支持远程存储。 |
FILE_RETURNS_CLEANUP_RESULT_INFO | 0x00000200 | 在成功的清理操作后,文件系统将返回描述清理期间执行的其他操作的信息,例如删除文件。 文件系统筛选器可以在其清理后回调中检查此信息。 |
FILE_SUPPORTS_POSIX_UNLINK_RENAME | 0x00000400 | 文件系统支持 POSIX 样式的删除和重命名操作。 |
FILE_VOLUME_IS_COMPRESSED | 0x00008000 | 指定的卷是压缩卷,例如 DoubleSpace 卷。 |
FILE_SUPPORTS_OBJECT_IDS | 0x00010000 | 指定的卷支持对象标识符。 |
FILE_SUPPORTS_ENCRYPTION | 0x00020000 | 指定的卷支持加密文件系统 (EFS) 。 有关详细信息,请参阅 文件加密。 |
FILE_NAMED_STREAMS | 0x00040000 | 指定的卷支持命名流。 |
FILE_READ_ONLY_VOLUME | 0x00080000 | 指定的卷是只读的。 |
FILE_SEQUENTIAL_WRITE_ONCE | 0x00100000 | 指定的卷支持单个顺序写入。 |
FILE_SUPPORTS_TRANSACTIONS | 0x00200000 | 指定的卷支持事务。 有关详细信息,请参阅 关于 KTM。 |
FILE_SUPPORTS_HARD_LINKS | 0x00400000 | 指定的卷支持硬链接。 有关详细信息,请参阅 硬链接和交汇点。 |
FILE_SUPPORTS_EXTENDED_ATTRIBUTES | 0x00800000 | 指定的卷支持扩展属性。 扩展属性是应用程序特定的元数据片段,应用程序可与文件关联,并且不属于文件数据。 |
FILE_SUPPORTS_OPEN_BY_FILE_ID | 0x01000000 | 文件系统支持通过 FileID 打开。 有关详细信息,请参阅 FILE_ID_BOTH_DIR_INFO。 |
FILE_SUPPORTS_USN_JOURNAL | 0x02000000 | 指定的卷支持更新序列号 (USN) 日志。 有关详细信息,请参阅 更改日记记录。 |
FILE_SUPPORTS_INTEGRITY_STREAMS | 0x04000000 | 文件系统支持 完整性流。 |
FILE_SUPPORTS_BLOCK_REFCOUNTING | 0x08000000 | 指定的卷支持在同一卷上的文件之间共享逻辑群集。 文件系统在写入共享群集时重新分配。 指示 FSCTL_DUPLICATE_EXTENTS_TO_FILE 是受支持的操作。 |
FILE_SUPPORTS_SPARSE_VDL | 0x10000000 | 文件系统跟踪文件的每个群集是否包含来自显式文件写入或自动零的有效数据 () 或无效数据 (尚未写入或归零) 。 使用稀疏的有效数据长度 (VDL) 的文件系统不会存储有效的数据长度,也不需要有效数据在文件中连续。 |
FILE_DAX_VOLUME | 0x20000000 | 指定的卷是 DAX) 卷 (直接访问。 |
FILE_SUPPORTS_GHOSTING | 0x40000000 | 文件系统支持重影。 |
系统时间——使用示例
系统时间 ——相关函数
中文名称 | 英文名称 | 示例 | 作用 |
枚举日历 | 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 | 获取版本(版本信息类) | 获取操作系统信息的版本信息类结构数据。 |
文件时间类
中文名字 | 英文名称 | 长度 | 作用解释 |
文件时间类 | FILETIME | 8 | 包含一个 64 位值,表示自 1601 年 1 月 1 日 (UTC) 以来的 100 纳秒间隔数。 |
文件时间类——成员表 |
低值 | dwLowDateTime | 整数 | 文件时间的低序部分。 |
高值 | dwHighDateTime | 整数 | 文件时间的高序部分。 |
货币类
中文名字 | 英文名称 | 长度 | 作用解释 |
货币类 | CURRENCYFMTA | 32 | 包含定义货币字符串格式的信息。 |
货币类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
点数 | 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-4 | 1-31 | 月中的某一天 |
5-8 | 1-12 | 月份 |
9-15 | 0-127 | 从1980年算起的年数 |
DOS时间
位 | 数值 | 说明 |
0-4 | 0-30 | 秒除以 2 |
5-10 | 0-59 | 分钟 |
11-15 | 0-23 | 24小时制 |
时区类
中文名字 | 英文名称 | 长度 | 作用解释 |
时区类 | TIME_ZONE_INFORMATION | 108 | 指定时区的设置。 |
时区类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
时差 | Bias | 整数 | 此计算机上本地时间转换的当前偏差(以分钟计)。UTC = 本地时间 + 偏差 |
标名 | StandardName[32] | 文本 | 标准时间的说明。 例如,“EST”可能表示东部标准时间。 |
标时 | StandardDate | 时间类 | 一个 时间类 结构,包含从夏令时到标准时间在此操作系统上发生转换的日期和本地时间。 |
标差 | StandardBias | 整数 | 在标准时间发生的本地时间转换期间使用的偏差值。在大多数时区中,此成员的值为零。 |
夏名 | DaylightName[32] | 文本 | 夏令时的说明。 例如,“PDT”可能表示太平洋夏令时。 |
夏时 | DaylightDate | 时间类 | 一个 SYSTEMTIME 结构,包含从标准时间到夏令时在此操作系统上发生转换的日期和本地时间。 |
夏差 | DaylightBias | 整数 | 在夏令时发生的本地时间转换期间使用的偏差值。在大多数时区中,此成员的值为 –60。 |
时间类
中文名字 | 英文名称 | 长度 | 作用解释 |
时间类 | SYSTEMTIME | 16 | 用来存储日期时间的一种结构数据,对应函数: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_STATUS | 12 | 包含有关系统电源状态的信息。 |
电源状态类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
电源 | 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。 |
系统信息类
中文名字 | 英文名称 | 长度 | 作用解释 |
系统信息类 | SYSTEMINFO | 36 | 包含了当前计算机的信息。函数GetSystemInfo |
系统信息类——成员表 |
处理器 | wProcessorArchitecture | 整数 | 指定系统中的中央处理器的体系结构 |
页面大小 | dwPageSize | 整数 | 指定页面的大小和页面保护和委托的颗粒。 |
最低内存 | lpMinimumApplicationAddress | 整数 | 指向应用程序和动态链接库(DLL)可以访问的最低内存地址。 |
最高内存 | lpMaximumApplicationAddress | 整数 | 指向应用程序和动态链接库(DLL)可以访问的最高内存地址。 |
掩码 | dwActiveProcessorMask | 整数 | 指定一个用来代表这个系统中装配了的中央处理器的掩码。 |
数目 | dwNumberOfProcessors | 整数 | 指定系统中的处理器的数目。 |
种类 | dwProcessorType | 整数 | 指定系统中中央处理器的类型。 |
分配 | dwAllocationGranularity | 整数 | 指定已经被分配的虚拟内存空间的粒度。分配内存时最小值 |
级别 | wProcessorLevel | 整形 | 指定系统体系结构依赖的处理器级别。例如:3=Intel 80386,4=Intel 80486,5=Pentium |
修订 | wProcessorRevision | 整形 | 指定系统体系结构依赖的处理器修订版本号。 |
版本信息类
中文名字 | 英文名称 | 长度 | 作用解释 |
版本信息类 | OSVERSIONINFO | 148 | 载入与平台和操作系统有关的版本信息。函数GetVersionExA |
版本信息类——成员表 |
长度 | dwOSVersionInfoSize | 整数 | 初始化为结构的大小 |
主版本 | dwMajorVersion | 整数 | 系统主版本号 |
次版本 | dwMinorVersion | 整数 | 系统次版本号 |
构建号 | dwBuildNumber | 整数 | 系统构建号 |
平台号 | dwPlatformId | 整数 | 系统支持的平台号。2=WinNT |
系统平台 | szCSDVersion | 文本 | 128字节的系统支持的平台名称 |
处理器功能
英文名称 | 数值 | 作用解释 |
PF_ARM_64BIT_LOADSTORE_ATOMIC | 25 | 可以使用 64 位加载/存储原子指令。 |
PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE | 24 | 可以使用除法指令。 |
PF_ARM_EXTERNAL_CACHE_AVAILABLE | 26 | 外部缓存可用。 |
PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE | 27 | 浮点乘积指令可用。 |
PF_ARM_VFP_32_REGISTERS_AVAILABLE | 18 | VFP/Neon:存在 32 x 64 位寄存器库。 |
PF_3DNOW_INSTRUCTIONS_AVAILABLE | 7 | 3D-Now 指令集可用。 |
PF_CHANNELS_ENABLED | 16 | 处理器通道已启用。 |
PF_COMPARE_EXCHANGE_DOUBLE | 2 | 可以使用 (cmpxchg) 的原子比较和交换操作。 |
PF_COMPARE_EXCHANGE128 | 14 | 可以使用 128 位原子比较和交换操作 (cmpxchg16b) 。 |
PF_COMPARE64_EXCHANGE128 | 15 | 可以使用原子比较 64 和交换 128 位操作 (cmp8xchg16) 。 |
PF_FASTFAIL_AVAILABLE | 23 | _fastfail () 可用。 |
PF_FLOATING_POINT_EMULATED | 1 | 浮点运算是使用软件模拟器模拟的。 |
PF_FLOATING_POINT_PRECISION_ERRATA | 0 | 在Pentium上,在极少数情况下可能会出现浮点精度误差。 |
PF_MMX_INSTRUCTIONS_AVAILABLE | 3 | MMX 指令集可用。 |
PF_NX_ENABLED | 12 | 已启用数据执行防护 。 |
PF_PAE_ENABLED | 9 | 处理器已启用 PAE。对于此功能,所有 x64 处理器始终返回非零值。 |
PF_RDTSC_INSTRUCTION_AVAILABLE | 8 | RDTSC 指令可用。 |
PF_RDWRFSGSBASE_AVAILABLE | 22 | 提供 RDFSBASE、RDGSBASE、WRFSBASE 和 WRGSBASE 指令。 |
PF_SECOND_LEVEL_ADDRESS_TRANSLATION | 20 | 硬件支持二级地址转换。 |
PF_SSE3_INSTRUCTIONS_AVAILABLE | 13 | SSE3 指令集可用。 |
PF_SSSE3_INSTRUCTIONS_AVAILABLE | 36 | SSSE3 指令集可用。 |
PF_SSE4_1_INSTRUCTIONS_AVAILABLE | 37 | SSE4_1指令集可用。 |
PF_SSE4_2_INSTRUCTIONS_AVAILABLE | 38 | SSE4_2指令集可用。 |
PF_AVX_INSTRUCTIONS_AVAILABLE | 39 | AVX 指令集可用。 |
PF_AVX2_INSTRUCTIONS_AVAILABLE | 40 | AVX2 指令集可用。 |
PF_AVX512F_INSTRUCTIONS_AVAILABLE | 41 | AVX512F 指令集可用。 |
PF_VIRT_FIRMWARE_ENABLED | 21 | 虚拟化在固件中启用,并由操作系统提供。 |
PF_XMMI_INSTRUCTIONS_AVAILABLE | 6 | SSE 指令集可用。 |
PF_XMMI64_INSTRUCTIONS_AVAILABLE | 10 | SSE2 指令集可用。 |
PF_XSAVE_ENABLED | 17 | 处理器实现 XSAVE 和 XRSTOR 指令。 |
PF_ARM_V8_INSTRUCTIONS_AVAILABLE | 29 | 此 Arm 处理器实现 Arm v8 指令集。 |
PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE | 30 | 此 Arm 处理器实现 Arm v8 的额外加密指令 (例如 AES、SHA1 和 SHA2) 。 |
PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE | 31 | 此 Arm 处理器实现 Arm v8 额外的 CRC32 指令。 |
PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE | 34 | 此 Arm 处理器实现 Arm v8.1 原子指令 (例如 CAS、SWP) 。 |
PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE | 43 | 此 Arm 处理器实现 Arm v8.2 DP 指令 (例如 SDOT、UDOT) 。 此功能在 Arm v8.2 实现中是可选的,在 Arm v8.4 实现中是必需的。 |
PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE | 44 | 此 Arm 处理器实现 Arm v8.3 JSCVT 指令 (例如 FJCVTZS) 。 |
PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE | 45 | 此 Arm 处理器实现 Arm v8.3 LRCPC 指令 (例如 LDAPR) 。 请注意,某些 Arm v8.2 CPU 可以选择性地支持 LRCPC 指令。 |
ERROR_BEGINNING_OF_MEDIA | 1102 | 尝试在中开始标记之前访问数据失败。 |
ERROR_BUS_RESET | 1111 | 在总线上检测到重置条件。 |
ERROR_DEVICE_NOT_PARTITIONED | 1107 | 加载磁带时找不到分区信息。 |
ERROR_DEVICE_REQUIRES_CLEANING | 1165 | 磁带机能够报告它需要清洁,并报告它确实需要清洁。 |
ERROR_END_OF_MEDIA | 1100 | 操作期间到达了磁带结束标记。 |
ERROR_FILEMARK_DETECTED | 1101 | 操作期间已达到文件标记。 |
ERROR_INVALID_BLOCK_LENGTH | 1106 | 在多卷分区中的新磁带上,块大小不正确。 |
ERROR_MEDIA_CHANGED | 1110 | 已更换或删除驱动器中的磁带。 |
ERROR_NO_DATA_DETECTED | 1104 | 操作期间到达了数据结束标记。 |
ERROR_NO_MEDIA_IN_DRIVE | 1112 | 驱动器中没有媒体。 |
ERROR_NOT_SUPPORTED | 50 | 磁带驱动程序不支持请求的函数。 |
ERROR_PARTITION_FAILURE | 1105 | 无法对磁带进行分区。 |
ERROR_SETMARK_DETECTED | 1103 | 操作期间已达到设置标记。 |
ERROR_UNABLE_TO_LOCK_MEDIA | 1108 | 尝试锁定弹出机制失败。 |
ERROR_UNABLE_TO_UNLOAD_MEDIA | 1109 | 尝试卸载磁带失败。 |
ERROR_WRITE_PROTECT | 19 | 介质受写入保护。 |
语言版本类
中文名字 | 英文名称 | 长度 | 作用解释 |
语言版本类 | NLSVERSIONINFOEX | 32 | 包含有关 NLS 功能的版本信息。 |
语言版本类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | dwNLSVersionInfoSize | 整数 | 结构的大小(以字节为单位)。 |
版本 | dwNLSVersion | 整数 | 版本。 此值用于跟踪对具有特定区域设置的指定功能的代码点集的更改和添加。 该值特定于区域设置,并在功能更改时递增。 |
定义 | dwDefinedVersion | 整数 | 定义的版本。 此值用于跟踪 Unicode 码位的更改。 |
顺序 | dwEffectiveId | 整数 | 用于表示版本的输入区域设置的排序顺序的标识符。 |
行为 | guidCustomVersion[16] | 文本 | 表示所表示版本的区域设置使用的自定义排序行为的唯一 GUID。 |
区域文字比较——使用标志
英文名称 | 数值 | 作用 |
LINGUISTIC_IGNORECASE | 0x10 | 在语言上适当时忽略大小写。 |
LINGUISTIC_IGNOREDIACRITIC | 0x10 | 在语言上适当时忽略非节奏字符。 |
NORM_IGNORECASE | 1 | 忽略大小写。 对于许多脚本 (尤其是拉丁语脚本) 。 |
NORM_IGNOREKANATYPE | 0x10000 | 不要区分平假名和片假名字符。 对应的平假名和片假名字符比较相等。 |
NORM_IGNORENONSPACE | 2 | 忽略非节奏字符。 对于许多脚本 (尤其是拉丁语脚本) 。 |
NORM_IGNORESYMBOLS | 4 | 忽略符号和标点。 |
NORM_IGNOREWIDTH | 0x20000 | 忽略半角字符和全角字符之间的差异。 全角窗体是中文和日文脚本中使用的格式差异。 |
NORM_LINGUISTIC_CASING | 0x08000000 | 使用默认语言规则进行大小写,而不是文件系统规则。 |
SORT_DIGITSASNUMBERS | 8 | Windows 7:在排序过程中,将数字视为数字,例如,在“10”前排序“2”。 |
SORT_STRINGSORT | 0x1000 | 将标点视为符号。 |
配置文件——使用示例
配置文件 ——相关函数
中文名称 | 英文名称 | 示例 | 作用 |
读取整数 | 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 | 局部释放(内存) | 释放指定的局部内存对象并使其空间无效 |
局部锁定 | LocalLock | buf=局部锁定(内存) | 返回指定的局部内存对象第一个字节的指针 |
局部更改 | LocalReAlloc | 局部更改(内存,大小,方式) | 更改指定的局部内存对象的大小或方式:0固定,2可移动,0x40初始化为零 |
局部大小 | LocalSize | ln=局部大小(内存) | 获取指定的局部内存对象的当前大小 |
局部解锁 | LocalUnlock | 局部解锁(内存) | 取消指定的局部内存对象关联的内存分配空间 |
全局内存 | GlobalMemoryStatus | 全局内存(内存信息类) | 获取当前可用的物理和虚拟内存信息 |
全局分配 | GlobalAlloc | 内存=全局分配(方式,大小) | 从堆中分配指定的字节数内存。0固定,2可移动,$40初始化零 |
全局释放 | GlobalFree | 全局释放(内存) | 释放指定的全局内存对象并使其空间无效 |
全局锁定 | GlobalLock | buf=全局锁定(内存) | 返回指定的全局内存对象第一个字节的指针 |
全局更改 | 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 | 写入内存(进程,地址,内容,长度,@已写) | 把数据写入指定进程的指定地址 |
内存信息类
中文名字 | 英文名称 | 长度 | 作用解释 |
内存信息类 | MEMORYSTATUS | 32 | 包含了当前计算机的信息。函数GlobalMemoryStatus |
内存信息类——成员表 |
长度 | dwiLength | 整数 | 结构的大小,初始设置为32长度 |
使用率 | dwMemoryLoad | 整数 | 返回一个介于0~100之间的值,用来指示当前系统内存的使用率。 |
物理内存 | dwTotalPhys | 整数 | 返回总的物理内存大小,以字节(byte)为单位。 |
可用内存 | dwAvailPhys | 整数 | 返回可用的物理内存大小,以字节(byte)为单位。 |
交换文件 | dwTotalPageFile | 整数 | 显示可以存在页面文件中的字节数。 |
空闲文件 | dwAvailPageFile | 整数 | 返回可用的页面文件大小,以字节(byte)为单位。 |
可用地址 | dwTotalVirtual | 整数 | 返回调用进程的用户模式部分的全部可用虚拟地址空间 |
空闲地址 | dwAvailVirtual | 整数 | 返回调用进程的用户模式部分的实际自由可用的虚拟地址空间 |
堆表类
中文名字 | 英文名称 | 长度 | 作用解释 |
堆表类 | HEAPLIST32 | 16 | 描述列表中枚举指定进程使用的堆的条目。 |
堆表类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | dwSize | 整数 | 结构大小(以字节为单位)。 |
程号 | th32ProcessID | 整数 | 使用堆的进程标识符。 |
堆号 | th32HeapID | 整数 | 堆标识符。这不是句柄,仅对工具帮助函数有意义。 |
标志 | dwFlags | 整数 | 1默认堆。 |
堆块类
中文名字 | 英文名称 | 长度 | 作用解释 |
堆块类 | HEAPENTRY32 | 36 | 描述堆(块)正在检查的堆的一个条目。 |
堆块类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | dwSize | 整数 | 结构大小(以字节为单位)。 |
指针 | hHandle | 整数 | 堆块的句柄。 |
地址 | dwAddress | 整数 | 块开头的线性地址。 |
块长 | dwBlockSize | 整数 | 堆块的大小(以字节为单位)。 |
标志 | dwFlags | 整数 | | 1固定 (不可移动)。2不使用内存块。4可以移动。
锁数 | 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宽字符串映射到新字符串。 |
数字类
中文名字 | 英文名称 | 长度 | 作用解释 |
数字类 | CURRENCYFMTA | 24 | 包含定义数字字符串格式的信息。 |
数字类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
点数 | 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 | 整数 | 负数模式。 |
代码类
中文名字 | 英文名称 | 长度 | 作用解释 |
代码类 | CPINFO | 18 | 包含有关代码页的信息。 |
代码类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
字长 | MaxCharSize | 整数 | 代码页中字符的最大长度(以字节为单位)。SBCS=1 DBCS=2 |
默认 | DefaultChar[2] | 文本 | 将字符串转换为特定代码页时使用的默认字符。 |
前导 | LeadByte[12] | 文本 | 前导字节范围的固定长度数组,前导字节范围的数量是可变的。 |
代码页类
中文名字 | 英文名称 | 长度 | 作用解释 |
代码页类 | CPINFOEXA | 284 | 包含有关代码页的信息。 |
代码页类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
字长 | MaxCharSize | 整数 | 代码页中字符的最大长度(以字节为单位)。SBCS=1 DBCS=2 |
默认 | DefaultChar[2] | 文本 | 将字符串转换为特定代码页时使用的默认字符。 |
前导 | LeadByte[12] | 文本 | 前导字节范围的固定长度数组,前导字节范围的数量是可变的。 |
默字 | UnicodeDefaultChar | 整形 | 特定代码页的翻译中使用的 Unicode 默认字符。 默认值通常是“?”字符或片假名中间点字符。= |
码页 | CodePage | 整数 | 代码页值。 |
名称 | CodePageName[260] | 文本 | 代码页的全名。 |
映射转换类型标志
指定在字符串映射期间使用的转换类型或要生成的排序键类型的标志。此参数可以具有以下值。
英文名称 | 数值 | 作用解释 |
LCMAP_BYTEREV | 0x00000800 | 使用字节反转。 例如,如果应用程序传入0x3450 0x4822,则结果为0x5034 0x2248。 |
LCMAP_FULLWIDTH | 0x00800000 | 如果适用,请使用 Unicode (宽) 字符。 此标志和LCMAP_HALFWIDTH是互斥的。 使用此标志时,即使输入字符已经是全角字符,映射也可以使用规范化形式。 |
LCMAP_HALFWIDTH | 0x00400000 | 在适用的情况下使用窄字符。 此标志和LCMAP_FULLWIDTH互斥。 |
LCMAP_HIRAGANA | 0x00100000 | 将所有片假名字符映射到平假名。 此标志和LCMAP_KATAKANA是互斥的。 |
LCMAP_KATAKANA | 0x00200000 | 将所有平假名字符映射到片假名。 此标志和LCMAP_HIRAGANA是互斥的。 |
LCMAP_LINGUISTIC_CASING | 0x01000000 | 使用语言规则进行大小写,而不是文件系统规则 (默认) 。 此标志仅对 LCMAP_LOWERCASE 或 LCMAP_UPPERCASE 有效。 |
LCMAP_LOWERCASE | 0x00000100 | 对于能够处理大写和小写的区域设置和脚本,请将所有字符映射到小写。 |
LCMAP_HASH | 0x00040000 | 返回字符串的原始排序权重的哈希。要求输出缓冲区的大小为 (int) |
LCMAP_SIMPLIFIED_CHINESE | 0x02000000 | 将繁体中文映射到简体中文字符。 此标志和LCMAP_TRADITIONAL_CHINESE是互斥的。 |
LCMAP_TRADITIONAL_CHINESE | 0x04000000 | 将简体中文字符映射到繁体中文。 此标志和LCMAP_SIMPLIFIED_CHINESE是互斥的。 |
LCMAP_SORTHANDLE | 0x20000000 | 返回表示区域设置的标记,以便将来的调用可以传递 NULL 排序名称,并将以前查询的排序句柄作为最后一个参数传递。要求输出缓冲区的大小为 (lparam) |
LCMAP_SORTKEY | 0x00000400 | 生成规范化排序键。 如果未指定LCMAP_SORTKEY标志,函数将执行字符串映射。 有关排序键生成和字符串映射的详细信息,请参阅备注部分。 |
LCMAP_TITLECASE | 0x00000300 | Windows 7: 将所有字符映射到标题大写,其中每个主要单词的第一个字母都大写。 |
LCMAP_UPPERCASE | 0x00000200 | 对于能够处理大写和小写的区域设置和脚本,将所有字符映射到大写。 |
以下标志可以单独或相互使用,也可以与LCMAP_SORTKEY和/或LCMAP_BYTEREV标志一起使用。 |
NORM_IGNORENONSPACE | 0x00000002 | 忽略非节奏字符。对于许多脚本 (尤其是拉丁语脚本) ,与LINGUISTIC_IGNOREDIACRITIC一致。 |
NORM_IGNORESYMBOLS | 0x00000004 | 忽略符号和标点。 |
下面列出的标志仅与 LCMAP_SORTKEY 标志一起使用。 |
LINGUISTIC_IGNORECASE | 0x00000010 | 在语言上适当时忽略大小写。 |
LINGUISTIC_IGNOREDIACRITIC | 0x00000020 | 在语言上适当时忽略非节奏字符。 |
NORM_IGNORECASE | 0x00000001 | 忽略大小写。 对于许多脚本 (尤其是拉丁语脚本) ,NORM_IGNORECASE与LINGUISTIC_IGNORECASE一致。 |
NORM_IGNOREKANATYPE | 0x00010000 | 不要区分平假名和片假名字符。 对应的平假名和片假名字符比较相等。 |
NORM_IGNOREWIDTH | 0x00020000 | 忽略半角字符和全角字符之间的差异,例如 C a t == cat。 全角窗体是中文和日文脚本中使用的格式差异。 |
NORM_LINGUISTIC_CASING | 0x08000000 | 使用语言规则进行大小写,而不是文件系统规则 (默认) 。 |
SORT_DIGITSASNUMBERS | 0x00000008 | Windows 7:在排序过程中,将数字视为数字,例如,在“10”前排序“2”。 |
SORT_STRINGSORT | 0x00001000 | 将标点视为符号。 |
映射转换类型
英文名称 | 数值 | 作用解释 |
MAP_COMPOSITE | 0x00000040 | 将重音字符映射到分解字符,即基字符和一个或多个非节奏字符各自具有不同的码位值的字符。 例如,Ä 由 A + ̈:拉丁文大写字母 A (U+0041) + 组合分音 (U+0308) 。 此标志等效于 Windows Vista 中的规范化形式 D。 请注意,此标志不能与MB_PRECOMPOSED一起使用。 |
MAP_EXPAND_LIGATURES | 0x00002000 | 展开所有连字字符,使其由两个字符等效表示。 例如,连字“æ” (U+00e6) 扩展为两个字符“a” (U+0061) + “e” (U+0065) 。 此值不能与MAP_PRECOMPOSED或MAP_COMPOSITE结合使用。 |
MAP_FOLDCZONE | 0x00000010 | 将兼容区域字符折叠到标准 Unicode 等效项中。 如果还设置了MAP_COMPOSITE标志,则此标志等效于 Windows Vista 中的规范化形式 KD。 如果未 (默认) 设置组合标志,则此标志等效于 Windows Vista 中的规范化形式 KC。 |
MAP_FOLDDIGITS | 0x00000080 | 将所有数字映射到 Unicode 字符 0 到 9。 |
MAP_PRECOMPOSED | 0x00000020 | 将重音字符映射到预组合字符,其中重音符和基字符合并为单个字符值。 此标志等效于 Windows Vista 中的规范化形式 C。 此值不能与 MAP_COMPOSITE 组合使用。 |
格式消息设置选项
格式设置选项以及如何解释 来源 参数。 选项 的低序字节指定函数如何处理输出缓冲区中的换行符。
低序字节可以指定格式化输出行的最大宽度。 下面是低序字节的可能值。
0 没有输出行宽度限制。 函数将消息定义文本中的换行符存储在输出缓冲区中。
0xFF 函数忽略消息定义文本中的常规换行符。 函数将消息定义文本中的硬编码换行符存储在输出缓冲区中。 该函数不生成新的换行符。
此参数可使用以下一个或多个值。
英文名称 | 数值 | 作用解释 |
FORMAT_MESSAGE_ALLOCATE_BUFFER | 0x00000100 | 函数分配一个足够大的缓冲区(最大128K) 来保存格式化的消息,并将指向分配的缓冲区的指针放在 lpBuffer 指定的地址处。 lpBuffer 参数是指向 LPTSTR 的指针;必须将指针强制转换为 LPTSTR (例如, (LPTSTR)&lpBuffer) 。 nSize 参数指定要为输出消息缓冲区分配的最小 TCHAR 数。 调用方应使用 LocalFree 函数在不再需要缓冲区时释放缓冲区。 |
FORMAT_MESSAGE_ARGUMENT_ARRAY | 0x00002000 | Arguments 参数不是va_list结构,而是指向表示参数的值数组的指针。此标志不能与 64 位整数值一起使用。 如果使用 64 位整数,则必须使用 va_list 结构。 |
FORMAT_MESSAGE_FROM_HMODULE | 0x00000800 | lpSource 参数是一个模块句柄,其中包含要搜索的消息表资源 () 。 如果此 lpSource 句柄为 NULL,则将搜索当前进程的应用程序映像文件。 此标志不能与 FORMAT_MESSAGE_FROM_STRING 一起使用。 |
FORMAT_MESSAGE_FROM_STRING | 0x00000400 | lpSource 参数是指向包含消息定义的以 null 结尾的字符串的指针。 消息定义可能包含插入序列,就像消息表资源中的消息文本一样。 此标志不能与 FORMAT_MESSAGE_FROM_HMODULE 或 FORMAT_MESSAGE_FROM_SYSTEM一起使用。 |
FORMAT_MESSAGE_FROM_SYSTEM | 0x00001000 | 函数应搜索系统消息表资源 () 请求的消息。 如果使用 FORMAT_MESSAGE_FROM_HMODULE 指定此标志,则函数在 lpSource 指定的模块中找不到该消息时搜索系统消息表。 此标志不能与 FORMAT_MESSAGE_FROM_STRING 一起使用。 |
FORMAT_MESSAGE_IGNORE_INSERTS | 0x00000200 | 消息定义中的插入序列(如 %1)将被忽略,并传递到未更改的输出缓冲区。 此标志可用于提取消息以供以后进行格式设置。 如果设置了此标志,则忽略 Arguments 参数。 |
格式消息定义的位置
英文名称 | 数值 | 作用解释 |
FORMAT_MESSAGE_FROM_HMODULE | 0x00000800 | 包含要搜索的消息表的模块的句柄。 |
FORMAT_MESSAGE_FROM_STRING | 0x00000400 | 指向由未格式化消息文本组成的字符串的指针。 将扫描它以进行插入并相应地设置格式。 |
格式组,这些值在格式化的消息中用作插入值。 格式字符串中的 %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_EXTENDED | 0x0100 | 操作扩展键标志。 |
KF_DLGMODE | 0x0800 | 操作对话框模式标志,该标志指示对话框是否处于活动状态。 |
KF_MENUMODE | 0x1000 | 操作菜单模式标志,该标志指示菜单是否处于活动状态。 |
KF_ALTDOWN | |
0x2000 | 操作上下文代码标志。 |
KF_REPEAT | 0x4000 | 操作上一个键状态标志。 |
KF_UP | 0x8000 | 操作转换状态标志。 |
键盘输入通知
中文名字 | 常量数值 | 英文名称 | 释义 |
窗口激活 | 6 | WM_ACTIVATE | 一个窗口被激活或失去激活状态。③参数:0关闭,1非鼠标激活,2鼠标激活;④数据:参数为0是激活窗口,非0是停用的窗口 |
获得焦点 | 7 | WM_SETFOCUS | 将键盘焦点转向一个窗口。③参数:失去焦点的窗口,可为0;④数据:0 |
失去焦点 | 8 | WM_KILLFOCUS | 使一个窗口失去焦点。③参数:接收焦点的窗口,可为0;④数据:0 |
键盘按下 | $0100 | WM_KEYDOWN | 当一个非系统按键被按下时(键没有被按下),会发送本消息给拥有键盘焦点的窗口。③参数:键码;④数据:扫描码 |
键盘松开 | $0101 | WM_KEYUP | 当一个非系统按键被释放弹起时(键没有被按下),会发送本消息给拥有键盘焦点的窗口。③参数:键码;④数据:扫描码 |
键入字符 | $0102 | WM_CHAR | 按下某按键,并已发出按下、松开消息,本消息包含被按下的按键的字符码。③参数:字码;④数据:扫描码 |
敲击按键 | $0103 | WM_DEADCHAR | \"死字符\"消息,当使用翻译消息函数翻译WM_KEYUP消息时,发送本消息给拥有键盘焦点的窗口。③参数:键码;④数据:扫描码 |
ALT键按下 | $0104 | WM_SYSKEYDOWN | 当用户按住键的同时又按下其它键时,发送本消息给拥有焦点的窗口。③参数:键码;④数据:扫描码 |
ALT键松开 | $0105 | WM_SYSKEYUP | 当用户释放一个按键的同时键还按着时,发送本消息给拥有焦点的窗口。③参数:键码;④数据:扫描码 |
ALT键字符 | $0106 | WM_SYSCHAR | 当WM_SYSKEYDOWN消息被翻译消息函数翻译后,发送本消息给拥有焦点的窗口,注:键被按下。③参数:键码;④数据:扫描码 |
ALT敲字符 | $0107 | WM_SYSDEADCHAR | \"死字符\"消息,当使用翻译消息函数翻译WM_SYSKEYDOWN消息时,发送本消息给拥有键盘焦点的窗口。③参数:键码;④数据:扫描码 |
键入宽字 | $0109 | WM_UNICHAR | 此消息包含按下的键的字符代码。类似于键入字符,但它使用宽字符转换格式UTF-32,而键入字符使用 UTF-16。③参数:键码;④数据:扫描码 |
系统命令 | $0112 | WM_SYSCOMMAND | 当用户选择一条系统菜单命令、用户最大化或最小化或还原或关闭时。③参数:命令;④数据:点菜单时鼠标位置 |
热键消息 | $312 | WM_HOTKEY | 当用户按下由注册热键函数注册的热键时。③参数:-1窗口,-2桌面;④数据:低字=1Alt,2CTRL,4SHIFT,8WIN;高字=键码 |
程序命令 | $319 | WM_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 键在鼠标事件发生时的状态的标志。 可以是以下值的组合。
英文名字 | 数值 | 释义 |
MK_LBUTTON | 1 | 按下了鼠标左键。
MK_RBUTTON | 2 | 按下了鼠标右键。
MK_SHIFT | 4 | 按下了 Shift 键。
MK_CONTROL | 8 | 按下了 Ctrl 键。
MK_MBUTTON | 16 | 按下了鼠标中键。
MK_XBUTTON1 | 32 | 按下了第一个 X 按钮。
MK_XBUTTON2 | 64 | 按下了第二个 X 按钮。
非工作区鼠标消息
当鼠标事件发生在窗口的任何部分(工作区除外)时,窗口会收到非工作区鼠标消息。 窗口的非工作区由边框、菜单栏、标题栏、滚动条、窗口菜单、最小化按钮和最大化按钮组成。
系统生成非工作区消息,主要供其自身使用。 例如,当光标热点移动到窗口的边框时,系统使用非工作区消息将光标更改为双向箭头。 窗口必须将非工作区鼠标消息传递到 处理窗口 函数,才能利用内置鼠标接口。
非工作区鼠标消息的 ④数据 参数是一个包含光标热点的 x 和 y 坐标的结构。 与工作区鼠标消息的坐标不同,坐标以屏幕坐标而不是工作区坐标指定。 在屏幕坐标系中,屏幕上的所有点都是相对于屏幕左上角坐标 (0,0) 指定。
③参数 参数包含一个命中测试值,该值指示鼠标事件在非工作区中发生的位置。每当发生鼠标事件时,系统都会向包含光标热点的窗口或捕获鼠标的窗口发送 光标离开 消息。
③参数:命中测试值可以是以下值之一。
英文名字 | 数值 | 释义 |
HTERROR | 在屏幕背景上或窗口之间的分割线上(处理窗口 函数会生成系统蜂鸣音以指示错误)。 |
HTTRANSPARENT | -1 | 在当前被同一线程中的另一窗口覆盖的窗口中。 |
HTNOWHERE | 0 | 在屏幕背景上,或在窗口之间的分隔线上。 |
HTCLIENT | 1 | 在工作区中。 |
HTCAPTION | 2 | 在标题栏中。 |
HTSYSMENU | 3 | 在子窗口的“系统”菜单或“关闭”按钮中。 |
HTGROWBOX | 4 | 在大小框中(与 HTSIZE 相同)。 |
HTSIZE | 4 | 在大小框中(与 HTGROWBOX 相同)。 |
HTMENU | 5 | 在菜单中。 |
HTHSCROLL | 6 | 在水平滚动条中。 |
HTVSCROLL | 7 | 在垂直滚动条中。 |
HTMINBUTTON | 8 | 在“最小化”按钮中。 |
HTREDUCE | 8 | 在“最小化”按钮中。 |
HTZOOM | 9 | 在“最大化”按钮中。 |
HTMAXBUTTON | 9 | 在“最大化”按钮中。 |
HTLEFT | 10 | 在窗口的左边框中。 |
HTRIGHT | 11 | 在窗口的右边框中。 |
HTTOP | 12 | 在窗口的上水平边框中。 |
HTTOPLEFT | 13 | 在窗口边框的左上角。 |
HTTOPRIGHT | 14 | 在窗口边框的右上角。 |
HTBOTTOM | 15 | 在窗口的下水平边框中。 |
HTBOTTOMLEFT | 16 | 在窗口边框的左下角。 |
HTBOTTOMRIGHT | 17 | 在窗口边框的右下角。 |
HTBORDER | 18 | 在没有大小调整边框的窗口边框中。 |
HTOBJECT | 19 | 对象。 |
HTCLOSE | 20 | 在“关闭”按钮中。 |
HTHELP | 21 | 在“帮助”按钮中。 |
鼠标输入通知
中文名字 | 常量数值 | 英文名称 | 释义 |
捕获光标 | $0020 | WM_SETCURSOR | 若鼠标光标在某窗口内移动且鼠标没被捕获时,就会发送本消息给某个窗口。③参数:窗口;④数据:命中消息 |
拖曳后窗 | $0021 | WM_MOUSEACTIVATE | 当鼠标光标在某个未激活窗口内,而用户正按着鼠标的某个键时,会发送本消息给当前窗口。③参数:父窗;④数据:命中消息; 返回值:1激活窗口不丢弃鼠标,2激活丢弃鼠标,3不激活不丢弃,4不激活丢弃鼠标 |
点击右键 | $007B | WM_CONTEXTMENU | 当用户在某窗口中点击右键就发送本消息给该窗口,设置右键菜单。③参数:窗口;④数据:屏幕坐标x/y |
命令事件 | $0111 | WM_COMMAND | 用户选择一条菜单命令项或某控件发送一条通知消息给其父窗,或某快捷键被翻译时,本消息被发送。③参数:低位=编号,高位=事件;④数据:控件;菜单高位0,快捷键高位1,两者数据都是0 |
系统命令 | $0112 | WM_SYSCOMMAND | 当用户选择一条系统菜单命令、用户最大化或最小化或还原或关闭时。③参数:命令;④数据:点菜单时鼠标位置 |
程序命令 | $319 | WM_APPCOMMAND | 用户点击应用程序命令按钮或键盘命令键(如导航刷新搜索)③参数:窗口;④数据:命令/设备/按键 |
鼠标移动 | $0200 | WM_MOUSEMOVE | 当鼠标在窗口客户区移动时。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
按下左键 | $0201 | WM_LBUTTONDOWN | 当鼠标左键在窗口客户区按下。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
释放左键 | $0202 | WM_LBUTTONUP | 当鼠标左键在窗口客户区放开。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
双击左键 | $0203 | WM_LBUTTONDBLCLK | 当鼠标左键在窗口客户区双击。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
按下右键 | $0204 | WM_RBUTTONDOWN | 当鼠标右键在窗口客户区按下。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
释放右键 | $0205 | WM_RBUTTONUP | 当鼠标右键在窗口客户区放开。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
双击右键 | $0206 | WM_RBUTTONDBLCLK | 当鼠标右键在窗口客户区双击。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
按下中键 | $0207 | WM_MBUTTONDOWN | 当鼠标中键在窗口客户区按下。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
释放中键 | $0208 | WM_MBUTTONUP | 当鼠标中键在窗口客户区放开。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
双击中键 | $0209 | WM_MBUTTONDBLCLK | 当鼠标中键在窗口客户区双击。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
滚轮转动 | $020A | WM_MOUSEWHEEL | 当滚动鼠标滚轮时发送。③参数:高位120向后,-120向前;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
侧键按下 | $020B | WM_XBUTTONDOWN | 用户按下X按钮时发布。③参数:高位1第一个X按钮,2第二个X按钮;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
侧键松开 | $020C | WM_XBUTTONUP | 用户松开X按钮时发布。③参数:高位1第一个X按钮,2第二个X按钮;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
侧键双击 | $020D | WM_XBUTTONDBLCLK | 用户双击X按钮时发布。③参数:高位1第一个X按钮,2第二个X按钮;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
鼠标滚轮 | $020E | WM_MOUSEHWHEEL | 当鼠标的水平滚轮倾斜或旋转时发送。③参数:高位120向后,-120向前;低位1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
失去鼠标 | $215 | WM_CAPTURECHANGED | 当它失去捕获的鼠标时,发送本消息给窗口。③参数:0;④数据:窗口 |
移动消息 | $216 | WM_MOVING | 当用户在移动窗口时发送本消息,通过本消息应用程序以监视窗口大小和位置,也可修改它们。③参数:0;④数据:矩形类 |
拖放文件 | $233 | WM_DROPFILES | 鼠标拖放时,放下事件产生时发送本消息,比如:文件拖放功能。③参数:文件;④数据:0 |
鼠标经外 | $2A0 | WM_NCMOUSEHOVER | 当光标悬停在窗口的非工作区上的达到指定时间发送本消息。③参数:命中值;④数据:坐标类; |
鼠标经过 | $2A1 | WM_MOUSEHOVER | 当光标悬停在窗口的工作区上的达到指定时间发送本消息。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
鼠标离外 | $2A2 | WM_NCMOUSELEAVE | 当光标离开之前调用 TrackMouseEvent 中指定的窗口的非工作区时发送本消息。③参数:0;④数据:0; |
鼠标离开 | $2A3 | WM_MOUSELEAVE | 鼠标离开控件时,触发发送本消息。③参数:1左键,2右键,4SHIFT,8CTRL,$10中键,$20=X1,$40=X2;④数据:坐标x/y; |
键盘鼠标——结构类型
中文名字 | 英文名称 | 长度 | 作用解释 |
鼠标点类 | MOUSEINPUT | 24 | 用来表示鼠标点位置。 |
鼠标点类——成员表 |
左 | 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 | 整数 | 与此坐标关联的其他信息。 |
中文名字 | 英文名称 | 长度 | 作用解释 |
移动点类 | MOUSEMOVEPOINT | 16 | 用来表示鼠标移动位置。 |
移动点类——成员表 |
左 | x | 整数 | 鼠标的 x 坐标。 |
顶 | y | 整数 | 鼠标的 y 坐标。 |
时间 | time | 整数 | 鼠标坐标的时间戳。(以毫秒为单位) |
扩展 | dwExtraInfo | 整数 | 与此坐标关联的其他信息。 |
中文名字 | 英文名称 | 长度 | 作用解释 |
键盘类 | KEYBDINPUT | 16 | 包含有关模拟键盘事件的信息。 |
键盘类——成员表 |
键码 | wVkScan | 整数 | 虚拟密钥代码和密钥的硬件扫描代码。如果 标志 指定 4或8 则低位是0,高位宽字符 |
标志 | dwFlags | 整数 | 指定击键的各个方面。1扫描码两字节(E0xx),2释放密钥(否则按键),4合成宽字符键,8扫描码 |
时间 | time | 整数 | 鼠标坐标的时间戳。(以毫秒为单位) |
扩展 | dwExtraInfo | 整数 | 与此坐标关联的其他信息。 |
中文名字 | 英文名称 | 长度 | 作用解释 |
硬件输入类 | HARDWAREINPUT | 8 | 包含有关由键盘或鼠标以外的输入设备生成的模拟消息的信息。 |
硬件输入类——成员表 |
消息 | 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 | 等待输入(进程,毫秒) | 等待指定的进程完成对其初始输入以及用户输入,直到超时间隔过去。 |
中文名字 | 英文名称 | 长度 | 作用解释 |
坐标类 | POINT | 8 | 用来存储坐标位置的信息 |
坐标类——成员表 |
中文 | 英文 | 类型 | 作用解释 |
左 | x | 整数 | 水平坐标位置。 |
顶 | y | 整数 | 垂直坐标位置。 |
中文名字 | 英文名称 | 长度 | 作用解释 |
矩形类 | RECT | 16 | 用来表示一个矩形框的四条边位置。 |
矩形类——成员表 |
左 | left | 整数 | 指定矩形框左上角的x坐标 |
顶 | top | 整数 | 指定矩形框左上角的y坐标 |
宽 | right | 整数 | 指定矩形框右下角的x坐标 |
高 | bottom | 整数 | 指定矩形框右下角的y坐标 |
中文名字 | 英文名称 | 长度 | 作用解释 |
快捷键类 | ACCEL | 6 | 包含有显示一个消息(对话框信息)的数据结构。 |
快捷键类——成员表 |
行为 | 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_GETACCESSTIMEOUT | 0x003C | 检索有关与辅助功能关联的超时期限的信息。⑶数据 参数必须指向接收信息的 ACCESSTIMEOUT 结构。 将此 结构的 cbSize 成员和⑵附加 参数设置为 sizeof(ACCESSTIMEOUT)。 |
SPI_GETAUDIODESCRIPTION | 0x0074 | 确定是启用还是禁用音频说明。⑶数据 参数是指向 AUDIODESCRIPTION 结构的指针。 将此 结构的 cbSize 成员和⑵附加 参数设置为 sizeof(AUDIODESCRIPTION)。虽然有视觉障碍的用户可能会听到视频内容中的音频,但视频中有很多没有相应音频的操作。 视频中发生情况的特定音频说明可帮助这些用户更好地了解内容。 此标志使你能够确定是否启用了音频说明以及使用哪种语言。Windows Server 2003 和 Windows XP/2000: 不支持此参数。 |
SPI_GETCLIENTAREAANIMATION | 0x1042 | 确定是启用还是禁用动画。⑶数据 参数必须指向一个 BOOL 变量,该变量在启用动画时接收 真,否则为 假。显示功能(如闪烁、闪烁、闪烁和移动内容)可能会导致照片敏感癫痫用户癫痫发作。 通过此标志,可以确定是否在工作区中禁用了此类动画。Windows Server 2003 和 Windows XP/2000: 不支持此参数。 |
SPI_GETDISABLEOVERLAPPEDCONTENT | 0x1040 | 确定是启用还是禁用重叠内容。⑶数据 参数必须指向一个 BOOL 变量(如果启用)接收 真;否则,该变量必须指向 假。背景图像、纹理背景、文档上的水印、alpha 混合和透明度等显示功能会降低前景和背景之间的对比度,使视力不佳的用户更难看到屏幕上的对象。 此标志使你能够确定此类重叠内容是否已禁用。Windows Server 2003 和 Windows XP/2000: 不支持此参数。 |
SPI_GETFILTERKEYS | 0x0032 | 检索有关 FilterKeys 辅助功能的信息。⑶数据 参数必须指向接收信息的 FILTERKEYS 结构。 将此 结构的 cbSize 成员和⑵附加 参数设置为 sizeof(FILTERKEYS)。 |
SPI_GETFOCUSBORDERHEIGHT | 0x2010 | 检索使用 DrawFocusRect 绘制的焦点矩形的上边缘和下边缘的高度(以像素为单位)。⑶数据 参数必须指向 UINT 值。Windows 2000: 不支持此参数。 |
SPI_GETFOCUSBORDERWIDTH | 0x200E | 检索使用 DrawFocusRect 绘制的焦点矩形的左右边缘的宽度(以像素为单位)。⑶数据 参数必须指向 UINT。Windows 2000: 不支持此参数。 |
SPI_GETHIGHCONTRAST | 0x0042 | 检索有关 HighContrast 辅助功能的信息。⑶数据 参数必须指向接收信息的 HIGHCONTRAST 结构。 将此 结构的 cbSize 成员和⑵附加 参数设置为 sizeof(HIGHCONTRAST)。有关一般讨论,请参阅备注。 |
SPI_GETLOGICALDPIOVERRIDE | 0x009E | 检索一个值,该值确定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_GETMESSAGEDURATION | 0x2016 | 检索应显示通知弹出窗口的时间(以秒为单位)。⑶数据 参数必须指向接收消息持续时间的 ULONG。有视觉障碍或认知障碍(如 ADHD 和阅读障碍)的用户可能需要更长的时间才能阅读通知消息中的文本。 此标志使你能够检索消息持续时间。Windows Server 2003 和 Windows XP/2000: 不支持此参数。 |
SPI_GETMOUSECLICKLOCK | 0x101E | 检索鼠标 ClickLock 功能的状态。⑶数据 参数必须指向一个 BOOL 变量(如果启用)接收 真;否则,该变量必须指向 假。 有关详细信息,请参阅 鼠标输入概述。Windows 2000: 不支持此参数。 |
SPI_GETMOUSECLICKLOCKTIME | 0x2008 | 检索锁定主鼠标按钮之前的时间延迟。⑶数据 参数必须指向接收时间延迟(以毫秒为单位)的 DWORD。 仅当 SPI_SETMOUSECLICKLOCK 设置为 真 时,才会启用此功能。 有关详细信息,请参阅 鼠标输入概述。Windows 2000: 不支持此参数。 |
SPI_GETMOUSEKEYS | 0x0036 | 检索有关 MouseKeys 辅助功能的信息。⑶数据 参数必须指向接收信息的 MOUSEKEYS 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(MOUSEKEYS)。 |
SPI_GETMOUSESONAR | 0x101C | 检索鼠标声纳功能的状态。⑶数据 参数必须指向一个 BOOL 变量,如果启用,则接收 真,否则接收 假。 有关详细信息,请参阅 鼠标输入概述。Windows 2000: 不支持此参数。 |
SPI_GETMOUSEVANISH | 0x1020 | 检索鼠标消失功能的状态。⑶数据 参数必须指向一个 BOOL 变量,如果启用,则接收 真,否则接收 假。 有关详细信息,请参阅 鼠标输入概述。Windows 2000: 不支持此参数。 |
SPI_GETSCREENREADER | 0x0046 | 确定屏幕审阅者实用工具是否正在运行。 屏幕审阅者实用工具将文本信息定向到输出设备,例如语音合成器或盲文显示器。 设置此标志后,应用程序应在以图形方式呈现信息的情况下提供文本信息。⑶数据 参数是指向 BOOL 变量的指针,如果屏幕审阅者实用工具正在运行,则接收 真,否则接收 假。注意 Windows 附带的屏幕阅读器“讲述人”未设置 SPI_SETSCREENREADER 或 SPI_GETSCREENREADER 标志。 |
SPI_GETSERIALKEYS | 0x003E | 不支持此参数。Windows Server 2003 和 Windows XP/2000: 用户应通过控制面板控制此设置。 |
SPI_GETSHOWSOUNDS | 0x0038 | 确定“显示声音”辅助功能标志是打开还是关闭。 如果它处于打开状态,则用户要求应用程序在仅以声音形式呈现信息的情况下直观显示信息。⑶数据 参数必须指向一个 BOOL 变量,如果功能处于打开状态,则接收 真;如果关闭,则为 假。使用此值等效于使用 SM_SHOWSOUNDS 调用 GetSystemMetrics。 这是建议的调用。 |
SPI_GETSOUNDSENTRY | 0x0040 | 检索有关 SoundSentry 辅助功能的信息。⑶数据 参数必须指向接收信息的 SOUNDSENTRY 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(SOUNDSENTRY)。 |
SPI_GETSTICKYKEYS | 0x003A | 检索有关 StickyKeys 辅助功能的信息。⑶数据 参数必须指向接收信息的 STICKYKEYS 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(STICKYKEYS)。 |
SPI_GETTOGGLEKEYS | 0x0034 | 检索有关 ToggleKeys 辅助功能的信息。⑶数据 参数必须指向接收信息的 TOGGLEKEYS 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(TOGGLEKEYS)。 |
SPI_SETACCESSTIMEOUT | 0x003D | 设置与辅助功能关联的超时期限。⑶数据 参数必须指向包含新参数的 ACCESSTIMEOUT 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(ACCESSTIMEOUT)。 |
SPI_SETAUDIODESCRIPTION | 0x0075 | 打开或关闭音频说明功能。⑶数据 参数是指向 AUDIODESCRIPTION 结构的指针。虽然有视力障碍的用户可能会听到视频内容中的音频,但视频中有很多没有相应音频的操作。 视频中发生情况的特定音频说明可帮助这些用户更好地了解内容。 通过此标志,可以启用或禁用其提供的语言的音频说明。Windows Server 2003 和 Windows XP/2000: 不支持此参数。 |
SPI_SETCLIENTAREAANIMATION | 0x1043 | 打开或关闭工作区动画。⑶数据 参数是 BOOL 变量。 将⑶数据 设置为 真 以在工作区中启用动画和其他暂时性效果,或 将 假 设置为禁用它们。显示功能(如闪烁、闪烁、闪烁和移动内容)可能会导致照片敏感型癫痫用户癫痫发作。 使用此标志可以启用或禁用所有此类动画。Windows Server 2003 和 Windows XP/2000: 不支持此参数。 |
SPI_SETDISABLEOVERLAPPEDCONTENT | 0x1041 | 打开或关闭重叠的内容 (,例如背景图像和水印) 。⑶数据 参数是 BOOL 变量。 将⑶数据 设置为 真 可禁用重叠内容,将 假 设置为启用重叠内容。背景图像、纹理背景、文档上的水印、alpha 混合和透明度等显示功能会降低前景和背景之间的对比度,使视力不佳的用户更难在屏幕上看到对象。 通过此标志,可以启用或禁用所有此类重叠内容。Windows Server 2003 和 Windows XP/2000: 不支持此参数。 |
SPI_SETFILTERKEYS | 0x0033 | 设置 FilterKeys 辅助功能的参数。⑶数据 参数必须指向包含新参数的 FILTERKEYS 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(FILTERKEYS)。 |
SPI_SETFOCUSBORDERHEIGHT | 0x2011 | 将 使用 DrawFocusRect 绘制的焦点矩形的上边缘和下边缘的高度设置为⑶数据 参数的值。Windows 2000: 不支持此参数。 |
SPI_SETFOCUSBORDERWIDTH | 0x200F | 将 使用 DrawFocusRect 绘制的焦点矩形的左边缘和右边缘的高度设置为⑶数据 参数的值。Windows 2000: 不支持此参数。 |
SPI_SETHIGHCONTRAST | 0x0043 | 设置 HighContrast 辅助功能的参数。⑶数据 参数必须指向包含新参数的 HIGHCONTRAST 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(HIGHCONTRAST)。 |
SPI_SETLOGICALDPIOVERRIDE | 0x009F | 请勿使用。 |
SPI_SETMESSAGEDURATION | 0x2017 | 设置通知弹出窗口应显示的时间(以秒为单位)。⑶数据 参数指定消息持续时间。有视觉障碍或认知障碍(如 ADHD 和阅读障碍)的用户可能需要更长的时间才能阅读通知消息中的文本。 使用此标志可以设置消息持续时间。Windows Server 2003 和 Windows XP/2000: 不支持此参数。 |
SPI_SETMOUSECLICKLOCK | 0x101F | 打开或关闭鼠标 ClickLock 辅助功能。 当单击鼠标主按钮并按住 SPI_SETMOUSECLICKLOCKTIME指定的时间时,此功能会暂时锁定该按钮。⑶数据 参数为真开启。 默认值为 off。 有关详细信息,请参阅备注和 AboutMouse 输入。Windows 2000: 不支持此参数。 |
SPI_SETMOUSECLICKLOCKTIME | 0x2009 | 调整锁定主鼠标按钮之前的时间延迟。⑵附加 参数应设置为 0。⑶数据 参数指向指定以毫秒为单位的时间延迟的 DWORD。 例如,为 1 秒延迟指定 1000。 默认值为 1200。 有关详细信息,请参阅 鼠标输入概述。Windows 2000: 不支持此参数。 |
SPI_SETMOUSEKEYS | 0x0037 | 设置 MouseKeys 辅助功能的参数。⑶数据 参数必须指向包含新参数的 MOUSEKEYS 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(MOUSEKEYS)。 |
SPI_SETMOUSESONAR | 0x101D | 打开或关闭 Sonar 辅助功能。 当用户按下并释放 Ctrl 键时,此功能简要显示鼠标指针周围的几个同心圆。⑶数据 参数为真开启。 默认值为 off。 有关详细信息,请参阅 鼠标输入概述。Windows 2000: 不支持此参数。 |
SPI_SETMOUSEVANISH | 0x1021 | 打开或关闭“消失”功能。 此功能在用户键入时隐藏鼠标指针;当用户移动鼠标时,指针再次出现。⑶数据 参数为真开启。 默认值为 off。 有关详细信息,请参阅 鼠标输入概述。Windows 2000: 不支持此参数。 |
SPI_SETSCREENREADER | 0x0047 | 确定屏幕评审实用工具是否正在运行。⑵附加 参数为真开启。注意 Windows 附带的屏幕阅读器“讲述人”未设置 SPI_SETSCREENREADER 或 SPI_GETSCREENREADER 标志。 |
SPI_SETSERIALKEYS | 0x003F | 不支持此参数。Windows Server 2003 和 Windows XP/2000: 用户应通过控制面板控制此设置。 |
SPI_SETSHOWSOUNDS | 0x0039 | 打开或关闭 ShowSounds 辅助功能。⑵附加 参数为真开启。 |
SPI_SETSOUNDSENTRY | 0x0041 | 设置 SoundSentry 辅助功能的参数。⑶数据 参数必须指向包含新参数的 SOUNDSENTRY 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(SOUNDSENTRY)。 |
SPI_SETSTICKYKEYS | 0x003B | 设置 StickyKeys 辅助功能的参数。⑶数据 参数必须指向包含新参数的 STICKYKEYS 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(STICKYKEYS)。 |
SPI_SETTOGGLEKEYS | 0x0035 | 设置 ToggleKeys 辅助功能的参数。⑶数据 参数必须指向包含新参数的 TOGGLEKEYS 结构。 将此结构的 cbSize 成员和⑵附加 参数设置为 sizeof(TOGGLEKEYS)。 |
|