极语言2-1 窗口(对话框/控件)——发送/接收消息,读写控件文本/字体/热键——控制消息
窗口(对话框/控件)——发送/接收消息:
窗口消息可以使用发送消息向窗口发送消息,也可以在窗体消息这里处理接收的消息
初级程序默认的代码都有窗体消息这个程序段,在这里可以控制键盘鼠标等各种消息
程序段 窗体消息(窗口,消息,参数,数据)
文本 内容[16]="数值"-数据;
判断(消息)为 窗口创建{信息框(0,"创建")}
为 程序关闭{停止(0)}
为 窗口移动{窗体~内容}
为 窗口缩放{窗体~内容}
为 单击左键{左键点击(参数)}
否则 处理窗口(窗口,消息,参数,数据)
结束
上面这段代码是在收到窗口创建消息时, 弹出信息框;在收到程序关闭消息时停止程序运行
在收到窗口移动消息时,显示窗口的位置(左顶);在收到窗口缩放消息时,显示窗口的大小(宽高)
当然也可以使用发送消息给窗口,让程序来处理;发送消息(窗体,窗口关闭,0,0)
有些消息主要常用来接收处理,例如窗口改变或键盘鼠标等;有些消息就常用来发送,如获取设置文本等
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就能激活主窗口 当用户按下热键时,系统会生成一条 单击窗口 消息,交给处理窗口函数,会弹出该窗口;设置热键不能指定子窗口
窗口消息可以使用发送消息向窗口发送消息,也可以在窗体消息这里处理接收的消息
初级程序默认的代码都有窗体消息这个程序段,在这里可以控制键盘鼠标等各种消息
程序段 窗体消息(窗口,消息,参数,数据)
文本 内容[16]="数值"-数据;
判断(消息)为 窗口创建{信息框(0,"创建")}
为 程序关闭{停止(0)}
为 窗口移动{窗体~内容}
为 窗口缩放{窗体~内容}
为 单击左键{左键点击(参数)}
否则 处理窗口(窗口,消息,参数,数据)
结束
上面这段代码是在收到窗口创建消息时, 弹出信息框;在收到程序关闭消息时停止程序运行
在收到窗口移动消息时,显示窗口的位置(左顶);在收到窗口缩放消息时,显示窗口的大小(宽高)
当然也可以使用发送消息给窗口,让程序来处理;发送消息(窗体,窗口关闭,0,0)
有些消息主要常用来接收处理,例如窗口改变或键盘鼠标等;有些消息就常用来发送,如获取设置文本等
| 中文名字 | 常量数值 | 英文名称 | 释义 |
| 窗口创建 | 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 |
| 拖放小窗 | $0037 | WM_QUERYDRAGICON | 本消息发送给最小化的窗口,当该窗口将被拖放而其窗口类中没有定义图标,应用程序能返回一个图标或光标的句柄。③参数:0;④数据:0 |
| 显存不足 | $0041 | WM_COMPACTING | 显示内存已经很少了。③参数:时间比;④数据:0。例如,0x8000表示压缩内存所用的 CPU 时间的 50%。 |
| 首创窗口 | $0081 | WM_NCCREATE | 当某窗口首次被创建时,本消息在WM_CREATE消息发送前发送。③参数:0;④数据:创建窗口的全部数据 |
| 窗口初始 | $0110 | WM_INITDIALOG | 在某对话框程序被显示前发送本消息给该对话框程序,通常用本消息对控件进行一些初始化工作和执行其它任务。③参数:控件;④数据:其它 |
| 循环调整 | $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绘所有窗口 |
发送消息(窗体,设置文本,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;高字=键码 |
| 命令消息 | $319 | WM_APPCOMMAND | 用户点击应用程序命令按钮或键盘命令键(如导航刷新搜索)③参数:窗口;④数据:命令/设备/按键 |

浙公网安备 33010602011771号