创建组件窗口组件基础

2021-6-18 大约 30 分钟

# 创建组件窗口组件基础

# 帮助说明

**“窗口组件”类位于“MFC 界面基本类”**模块中,添加此模块才能使用本类中的功能。

但是本类中的功能并不能单独使用,必须基于窗口组件进行操作,例如:编辑框、按钮等。

# 可停留焦点(读写)

帮助文档如下图:

本属性的主要作用可以决定在使用 TAB 按键进行焦点切换时,当前组件是否允许获得焦点。

img

界面设计如下图:

在窗口中放三个编辑框。

img

代码编写如下图:

给编辑框 2 设置当前属性为假。

img

运行效果如下图:

左图:设置前按 TAB 键的效果。

右图:设置后按 TAB 键的效果。

可以看到,当设置当前属性为假后,按 tab 键时会跳过编辑框 2 组件。

img img

# 可视(读写)

帮助文档如下图:

本组的作用可用于设置组件的显示和隐藏状态,同名的读属性可用于判断当前组件是否显示。

img

界面设计如下图:

在窗口中放一个按钮和一个编辑框组件用于演示。

img

代码编写如下图:

当按钮点击后,判断编辑框的可视状态,来绝对编辑框是否显示。

img

运行效果如下图:

当按钮点击后,组件可以在显示和不显示之间任意切换。

img

# 宽度 (读写)

帮助文档如下图:

本属性可用于设置组件宽度,单位像素。同名读属性可用于读取宽度。

img

界面设计如下图:

设计界面时让编辑框组件的尺寸小于按钮尺寸。

img

代码编写如下图:

按钮点击后,设置编辑框的宽度等于按钮宽度。

img

运行效果如下图:

最终编辑框尺寸将会和按钮尺寸一致。

img

# 高度(读写)

帮助文档如下图:

本属性用于设置组件高度,单位像素。同名读属性可用于读取组件高度。

img

界面设计如下图:

设计界面时让编辑框组件的尺寸小于按钮尺寸。

img

代码编写如下图:

取出按钮的高度赋值给编辑框的高度。

img

运行效果如下图:

最终两个组件的高度将一致。

img

# 左边(读写)

帮助文档如下图:

本属性可修改组件左边距离父组件左边的距离,单位像素。

如果当前组件无父组件时,将以窗口为准。

img

界面设计如下图:

img

代码编写如下图:

当按钮点击后,修改编辑框的左边等于按钮的左边位置。

img

运行效果如下图:

最终可看到编辑框的左边与按钮左边对齐。

img

# 顶边(读写)

帮助文档如下图:

本属性可修改组件顶边距离父组件顶边的距离,单位像素。

如果当前组件无父组件时,将以窗口为准。

img

代码编写如下图:

当按钮点击后,修改编辑框的顶边等于按钮顶边。

img

运行效果如下图:

最终编辑框顶边位置等于按钮顶边。

img

# 标题 (读写)

帮助文档如下图:

通过本属性可设置组件标题,但并非所有组件都具备标题显示,例如:画板、进度条等组件就不具备标题显示。

注意:如果需要在组件上显示&符号,则需要输入两个符号才能显示出来。

img

界面设计如下图:

在窗口上放置一些可以设置标题的组件。

img

代码编写如下图:

按钮点击后修改这些标题。

img

运行效果如下图:

最终可以看到所有组件的标题内容都被修改。

并且可以看到单独使用&符号时并不会显示,只有使用了两个&&符号后才会显示出来。

img

# 禁止(读写)

帮助文档如下图:

通过本属性可以让组件禁止操作,同名读属性可以判断组件是否被禁止。

img

界面设计如下图:

在窗口中放两个组件,分别是按钮和编辑框。

img

代码编写如下图:

按钮点击后判断编辑框的禁止状态,并执行是否对编辑框进行禁止操作。

img

运行效果如下图:

当按钮点击后编辑框将被禁止,禁止后将不能操作编辑框组件,取消禁止后可继续操作。

img

# 组件位置(读写)

帮助文档如下图:

本属性可用于调整组件位置,并且在调整位置的同时设置组件尺寸。

注意:针对父组件的左上角为准。

img

代码编写如下图:

1、定义类型为**“矩形类”**的变量,分别设置矩形区域属性。

2、给编辑框组件设置本属性值为此变量。

img

运行效果如下图:

最终编辑框组件位置和尺寸均被改变。

img

# 首组件(读写)

帮助文档如下图:

本属性可设置一组组件的首组件,通常用于单选框操作。

img

界面设计如下图:

在界面中设置两组单选框组件。

第一组:直接放置在窗口中。

第二组:放置在分组框容器内。

img

代码编写如下图:

分别给第一组和第二组的第一个组件都设置首组件属性。

img

运行效果如下图:

左图:没设置本属性之前的效果,可以看到两组组件之间冲突。

右图:设置后可以看到两组组件可以正常操作。

img img

# 字体 (写)

帮助文档如下图:

通过本属性可以设置组件字体样式,共有 7 个选项,每个选项之间用英文逗号隔开。

例如:"宋体, 10, 0, 1, 1, 0, 100"

img

界面设计如下图:

在窗口中放一个按钮和编辑框。

img

代码编写如下图:

第一种方式:按照帮助页的注释规则,直接设置本属性值。

img

第二种方式:在属性栏可以点击打开字体选择器,手动选择字体样式。

img

运行效果如下图:

最终编辑框的字体将会被改变。

img

# 标准鼠标指针(写)

帮助文档如下图:

通过本属性可设置当前组件鼠标经过时的鼠标指针样式。

属性值调用方式:标准鼠标指针类型.XXX。

img

界面设计如下图:

在窗口中放一个按钮和两个编辑框。

img

代码编写如下图:

按钮点击后,分别给编辑框设置不同的鼠标样式。

img

运行效果如下图:

最终可以看到,当按钮点击后,鼠标经过编辑框时样式会发生变化。

img

# 组件边框 (写)

帮助文档如下图:

本属性用于设置组件边框效果,调用方式**“组件边框类型.XXX”**.

注意:本属性对窗口无效。

img

代码编写如下图:

按钮 1 被点击后,分别设置两个编辑框组件的边框效果。

img

运行效果如下图:

最终可看到编辑框样式发生改变。

img

# 自定义鼠标指针(写)

帮助文档如下图:

通过本属性可以给当前组件设置一个外部的指针文件,后缀名通常为 cur 格式。

注意:使用本属性会覆盖**“标准鼠标指针”**属性。

img

界面设计如下图:

在窗口上放两个编辑框,给其中一个编辑框设置本属性,引入一个鼠标指针文件。

img

运行效果如下图:

运行后可以看到当前**“编辑框 1”“编辑框 2”**显示的鼠标指针不同。

img

# 标记(变)

帮助文档如下图:

本变量是窗口组件的成员变量,任何窗口组件都可以使用,用于设置一个标记文本。

img

界面设计如下图:

在窗口中放一个按钮和编辑框。

img

代码编写如下图:

1、在表格属性中设置标记文本。

2、按钮点击后取出设置的标记文本。

img

运行效果如下图:

最终按钮的标记文本被取出。

img

# 获得焦点 (事件)

**“失去焦点”**帮助文档如下图:

当组件失去焦点的时候将会触发本事件。

img

**“获得焦点”**帮助文档如下图:

当组件获得焦点后会触发本事件。

img

代码编写如下图:

分别添加这两个事件,并给编辑框的内容赋值。

img

运行效果如下图:

最终可以看到,当编辑框失去和获得输入焦点时,编辑框的内容将会被随之改变。

img

# 字符输入(事件)

帮助文档如下图:

当任意字符被输入时,将会触本事件,其中也包含退格键,回车键。

img

界面设计如下图:

打开设计器在窗口上方两个编辑框组件。

img

代码编写如下图:

添加字符输入事件,将编辑框 1 输入的字符显示在编辑框 2 中。

img

运行效果如下图:

最终可看到编辑框 1 的字符出现在了编辑框 2 中。

img

# 放开某键(事件)

**“按下某件”**帮助文档如下图:

当按下键盘某个按键时可触发本事件,并返回两个参数。

参数 1:调用方式**“按键码.XX”**,包含了键盘上所有的按键。

参数 2:调用方式**“辅助键状态.XX”,主要用于组合按键操作,包含了“Ctrl”“Shift”“Alt”**按键。。

img

**“放开某键”**帮助文档如下图:

当键盘上的按键被放开时触发本事件,返回的两个参数与**“按下某件”**一致。

img

代码编写如下图:

分别添加这两个事件,并判断 ctrl 键被按下和放开。

img

运行效果如下图:

最终可看到编辑框 2 中输出了相关字符,证明 ctrl 监听成功。

img

实现组合按键代码:

组合按键通常使用**“放开某键”**事件。

添加事件后,判断**“键代码”“辅助键状态”**是否等于指定按键,如果相等就输出内容。

img

运行效果如下图:

最终当键盘放开 Ctrl+B 按键后,将会在编辑框 2 中输出信息。

img

# 滚轮被滚动(事件)

帮助文档如下图:

当鼠标滚轮被滚动后触发本事件,共返回两个参数。

参数 1:用于判断滚动方向。

参数 2:用于组合键判断。

img

代码编写如下图:

添加本事件后判断**“滚动距离”**并输出对应内容。

img

运行效果如下图:

最终当在编辑框 1 中滚动鼠标滚轮滚轮时,编辑框 2 会输出内容。

img

# 被双击(事件)

帮助文档如下图:

当组件被双击时,会触发本事件并返回三个参数。

参数 1、2:返回鼠标所在位置。

参数 3:用于组合键判断。

img

代码编写如下图:

当编辑框 1 被双击时,在编辑框 2 中输出内容。

img

运行效果如下图:

最终可看到编辑框内容中输出了不同的坐标位置。

img

# 鼠标位置被移动(事件)

帮助文档如下图:

当组件鼠标指针位置发生移动时,会触发本事件并返回三个参数。

参数 1、2:返回鼠标所在位置。

参数 3:用于组合键判断。

img

代码编写如下图:

判断编辑框 2 鼠标移动时,在编辑框 1 中输出坐标信息。

img

运行效果如下图:

可以看到坐标被实时显示在编辑框 1 中。

img

# 鼠标右键被放开(事件)

**“鼠标右键被按下”**帮助文档如下图:

当组件鼠标右键被按下时,会触发本事件并返回三个参数。

参数 1、2:返回鼠标所在位置。

参数 3:用于组合键判断。

img

**“鼠标右键被放开”**帮助文档如下图:

当组件鼠标右键被放开时,会触发本事件并返回三个参数。

参数 1、2:返回鼠标所在位置。

参数 3:用于组合键判断。

img

代码编写如下图:

分别添加这两个事件,并在编辑框中输出内容。

img

运行效果如下图:

最终当鼠标右键按下和放开时会分别显示不同的信息。

img

# 鼠标左键被放开(事件)

**“鼠标左键被按下”**帮助文档如下图:

当组件鼠标左键被按下时,会触发本事件并返回三个参数。

参数 1、2:返回鼠标所在位置。

参数 3:用于组合键判断。

img

**“鼠标左键被放开”**帮助文档如下图:

当组件鼠标左键被放开时,会触发本事件并返回三个参数。

参数 1、2:返回鼠标所在位置。

参数 3:用于组合键判断。

img

代码编写如下图:

分别添加这两个事件,并在编辑框中输出内容。

img

运行效果如下图:

最终当鼠标左键按下和放开时会触发本事件。

img

# 信息框

帮助文档如下图:

本方法在使用时可以不依赖窗口组件,但是必须保证调用本方法时,当前所处类是窗口。

参数 1:提供要显示的信息。

参数 2:提供按钮或图标类型,例如**“信息框按钮.取消是否钮 + 信息框按钮.信息图标”**。

参数 3:提供信息框标题。

img

界面设计如下图:

打开窗口后放一个按钮。

img

代码编写如下图:

1、定义类型为**“返回按钮类型”**的局部变量用来存储信息框返回值。

2、调用信息框方法,设置相关参数后赋值给定义的变量。

3、判断被点击的按钮类型。

img

运行效果如下图:

最终可看到当信息框按钮被点击后,窗口标题也会随之修改。

img

# 禁止重画

**“允许重画”**帮助文档如下图:

本方法配合**“禁止重画()”**方法,可以实现快速加载数据。

同样也可以防止数据加载过快发生的组件闪烁现象。

img

**“禁止重画”**帮助文档如下图:

调用本方法可让组件禁止绘制,提升组件加载数据效率,防止组件闪烁。

img

界面设计如下图:

在窗口上放三个组件分别是:按钮,列表框和标签。

img

代码编写如下图:

1、按钮点击后首先记录启动时间。

2、调用禁止重画后循环加载 1000 条数据到列表框。

3、循环结束后调用允许重画。

4、最后计算耗时。

img

运行效果如下图:

左图:未使用禁止重画方法耗时**“0.22 秒”**。

右图:使用后仅耗时**“0.03”**秒,快了 7 倍。

img img

# 创建组件

帮助文档如下图:

通过本方法可以动态创建窗口组件,成功返回真。

注意:创建窗口组件时务必使用成员变量。

img

代码编写如下图:

1、定义类型为**“按钮”的成员变量,起名“按钮 1”**。

2、添加**“创建完毕”窗口事件,通过“按钮 1”**调用本方法创建组件。

img

运行效果如下图:

软件运行后将会在窗口左上角看见一个 100*100 尺寸的按钮组件。

img

# 取屏幕位置

帮助文档如下图:

通过本方法可以取出当前组件在屏幕中的位置,如果单独调用本方法则会取出窗口在屏幕中的位置。

img

界面设计如下图:

在窗口中放一个按钮和编辑框。

img

代码编写如下图:

分别取出窗口位置和按钮 1 的位置信息。

img

运行效果如下图:

最终可看到位置信息被成功取出。

img

# 取用户区宽度

帮助文档如下图:

可用于取出组件宽度或者当前窗口用户区宽度。

注意:窗口用户区宽度不等于窗口宽度。

img

代码编写如下图:

分别取出窗口用户区宽度和按钮宽度。

img

运行效果如下图:

按钮宽度和窗口用户区宽度被成功取出。

img

# 取用户区高度

帮助文档如下图:

本方法可用于取出窗口用户区高度或组件高度。

注意:窗口用户区高度不等于窗口高度。

img

代码编写如下图:

按钮点击后分别取出窗口用户区高度或按钮高度。

img

运行效果如下图:

最终两个高度尺寸均被取出。

img

# 取用户区矩形

帮助文档如下图:

通过本方法可取出组件或者窗口的矩形区域。

注意:并非坐标信息。

img

代码编写如下图:

按钮点击后分别取出窗口和按钮的矩形区域。

img

运行效果如下图:

最终两个矩形区域被分别取出。

img

# 取窗口句柄

帮助文档如下图:

在使用 mfc 界面库时,任何一个窗口组件都有句柄,通过本方法可以取出句柄信息。

img

代码编写如下图:

窗口句柄可用于投递消息判断。

1、按钮点击后通过按钮组件投递消息。

2、添加**“消息过滤”**窗口虚拟方法,可以获取按钮组件投递的消息。

3、判断消息值和窗口句柄,可以确定是否为**“按钮 1”**投递的消息。

img

运行效果如下图:

最终编辑框 1 将会输出内容。

img

# 可有焦点

帮助文档如下图:

本方法可用于判断当前组件是否获得焦点。

img

代码编写如下图:

按钮点击后调用本方法判断。

img

运行效果如下图:

因为当按钮点击后,焦点会转移到按钮上,因此会提示编辑框 1 没有焦点。

img

# 销毁

**“是否为空”**帮助文档如下图:

通过本方法可用于判断窗口组件是否被创建。

img

**“销毁”**帮助文档如下图:

调用当前方法可销毁当前组件,销毁后窗口组件将会消失在窗口上。

img

界面设计如下图:

在窗口中放两个按钮和一个编辑框组件。

img

代码编写如下图:

1、按钮 1 点击后执行销毁方法。

2、按钮 2 点击后判断当前组件是否存在。

img

运行效果如下图:

最终可以看到编辑框 1 销毁前后弹出的信息框不一样。

img

# 组件截图

以上两个方法用法一致,不同之处在于**“用户区截图”**不会截图菜单标题栏边框等信息。

而组件截图会将组件完整的元素进行截图操作。

**“组件截图”**帮助文档如下图:

调用本方法会将组件所有区域完整截图,单独调用则截图窗口。

参数 1:提供一个类型为**“位图对象类”**的变量。

参数 2、3:提供要输出的尺寸、可留空。

img

界面设计如下图:

在窗口中放一个按钮,一个编辑框和一个图片框组件。

img

代码编写如下图:

1、定义类型为**“位图对象类”,并将变量放入到“组件截图”**方法的参数中。

2、取出位图对象的字节集数据。

3、将取出的字节集数据设置在图片框上。

img

运行效果如下图:

最终可看到当前整个窗口所有内容被截图并显示在图片框上。

img

# 移动

帮助文档如下图:

调用本方法可以进行组件移动操作。

参数 1、2:相对于父组件设置当前组件的左边和顶边位置,。

参数 3、4:设置组件的宽度和高度。

img

界面设计如下图:

在窗口中放一个按钮和编辑框组件。

img

代码编写如下图:

按钮点击后移动编辑框组件到窗口左上角。

img

运行效果如下图:

最终编辑框组件出现在窗口左上角区域。

img

# 置字体

帮助文档如下图:

调用本方法可以设置组件字体信息,参数为字体对象类。

img

代码编写如下图:

在窗口创建完毕下,调用**“从描述文本创建字体()”方法就可以创建“字体对象类”**。

本方法所提供的文本参数与**“字体”**写属性的文本一致。

img

运行效果如下图:

最终 软件运行后编辑框的字体会被修改。

img

# 删除到回收站

帮助文档如下图:

调用本方法可实现删除文件到系统回收站。

注意:本方法只能在窗口或者 MDI 主窗口中使用,通过窗口组件调用无效。

img

代码编写如下图:

按钮点击后,调用本方法删除一个文件。

img

运行效果如下图:

可以看到当按钮点击后,系统回收站会出现刚删除的文件。

img

# 置父窗口

帮助文档如下图:

通过本方法可以调整当前组件的父组件,参数填写目标父组件。

img

界面设计如下图:

在窗口中放一个按钮和分组框。

img

代码编写如下图:

按钮点击后,设置当前按钮组件的父组件为分组框 1.

img

运行效果如下图:

最终可以看到按钮的父组件由窗口变成了分组框。

img

# 获取焦点

帮助文档如下图:

调用本方法可以让指定组件获得焦点。

img

界面设计如下图:

在窗口中放一个按钮和两个编辑框组件。

img

代码编写如下图:

1、按钮点击后编辑框 2 调用本方法获得焦点。

2、添加**“编辑框_获得焦点”**事件验证编辑框是否获得焦点。

img

运行效果如下图:

最终编辑框 2 的内容被改变,证明获取焦点成功。

img

# 调整层次

帮助文档如下图:

调用本方法可调整组件层次,参数调用方式**“组件层次.XX”**.

img

界面设计如下图:

在窗口中放四个按钮,其中让**“按钮 1”实现覆盖“按钮 2”**的效果。

img

代码编写如下图:

调整按钮被点击后,将**“按钮 2”**调整到顶层。

img

运行效果如下图:

最终按钮 2 将会被调整到所有组件顶层显示。

img

# 输入框

帮助文档如下图:

通过本方法可以弹出一个输入文本的对话框。

参数 1:用来存放输入结果。

参数 2、3:填写提示信息和标题。

参数 4:设置输入框内的初始文本。

参数 5:调用方式**“输入框输入方式.XX”**.

img

界面设计如下图:

在窗口中放一个按钮和一个编辑框组件。

img

代码编写如下图:

按钮点击后弹出一个输入框并将输入结果显示在编辑框中。

img

运行效果如下图:

最终结果显示在编辑框中。

img

# 取字体

帮助文档如下图:

调用本方法可取出设置的字体信息,返回值为**“字体对象类”**。

如果没有设置过字体,会返回默认字体信息。

img

代码编写如下图:

按钮点击后调用本方法取出编辑框的字体信息。

img

运行效果如下图:

编辑框组件的字体信息被取出。

img

# 弹出实例菜单

帮助文档如下图:

在屏幕指定位置弹出一个菜单。

注意:本方法不能通过窗口组件调用,否则菜单点击命令会失效。

img

代码编写如下:

1、定义一个基础类为**“菜单类”**的类,右键可以打开设计器。

img

2、在设计器中简单的设计三个菜单。

img

3、设计完毕后效果如图。

img

4、定义类型为**“菜单按钮”**的变量,此变量类型名称要和定义的菜单类名称一致。

5、按钮点击后调用本方法弹出此实例菜单。

img

6、添加**“接收到命令”**事件,可以判断菜单被点击,当菜单点击后取菜单标题显示在编辑框中。

img

运行效果如下图:

当按钮点击后可弹出菜单,菜单点击后编辑框会显示菜单标题。

img

# 弹出菜单

帮助文档如下图:

本方法和**“弹出实例菜单”**的区别在于,使用本方法弹出菜单可以不定义菜单变量。

img

代码编写如下图:

1、按钮点击后,调用本方法弹出菜单。

img

2、在菜单被点击后,如果想要取出菜单标题依然可以通过定义菜单变量的形式取出。

img

运行效果如下图:

img

# 执行

帮助文档如下图:

通过本方法可以打开指定文件。

参数 1:提供要打开的文件路径。

参数 2:调用方式**“所执行命令类型.XXX”**。

参数 3:如果打开的文件是可执行文件,本参数可提供传入命令行。

参数 4:提供一下默认路径。

注意:本方法只能在窗口或者 MDI 主窗口中使用。

img

代码编写如下图:

当按钮点击后调用本方法打开一个 txt 文件。

img

运行效果如下图:

最终可看到 txt 文件被打开。

img

# 提到前方

帮助文档如下图:

调用本方法可将组件提到前方,如果在窗口类中直接调用,将会把当前窗口提到最前方。

img

界面设计如下图:

在窗口中放三个按钮,其中按钮 2 覆盖按钮 3.

img

代码编写如下图:

当按钮点击后,将按钮 3 提到前方。

img

运行效果如下图:

最终按钮 3 将会覆盖按钮 2。

img

# 浏览文件夹

帮助文档如下图:

调用本方法可以实现文件夹选择功能,通过调整参数 2 还可以实现选择文件功能。

注意:本方法不支持窗口组件调用。

img

界面设计如下图:

在窗口上放一个按钮和一个编辑框。

img

代码编写如下图:

按钮点击后调用本方法将结果赋值给编辑框。

img

运行效果如下图:

最终选择结果会显示在编辑框中。

img

# 置为前台窗口

上述两个方法用法和作用基本一致,此处讲解**“激活”**方法。

帮助文档如下图:

调用本方法可激活窗口,注意本方法只能通过窗口或 MDI 窗口调用。

img

代码编写如下图:

1、定义一个新的窗口类。

2、在主窗口中定义的窗口 2 变量。

3、主窗口创建完毕后载入窗口 2.

4、主窗口按钮点击后,激活窗口 2.

img

运行效果如下图:

最终可看到窗口 2 被激活到前面。

img

# 进度复制文件

帮助文档如下图:

调用本方法可进行文件复制操作,并同时会显示一个进度对话框。

注意:本方法不支持窗口组件调用,同时如果复制的文件过小不会显示进度。

img

代码编写如下图:

按钮点击后调用本方法将 D 盘的文件复制到 G 盘中。

img

运行效果如下图:

最终可看到文件出现在 G 盘中,因复制的文件过小因此没有出现进度提示。

img

上次编辑于: 2021年6月18日 19:35