当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 >  第7章 Windows标准控件在可视化编程中的应用 >  7-2 按钮控件及其应用 >  128B12447816EEF99C33DC5901307461

返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表

128B12447816EEF99C33DC5901307461在线视频

128B12447816EEF99C33DC5901307461

下一节:7-3

返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表

128B12447816EEF99C33DC5901307461课程教案、知识点、字幕

我们下面介绍按钮控件及其使用

按钮控件分为普通按钮、圆按钮、复选框按钮、组框按钮和自绘按钮

按钮控件的创建过程是这样的

我们可以用CButton类的成员函数Create负责创建按钮控件

Create和前面一样,不再细说

具体可以看MSDN,网址放在这里

按钮控件的样式有这些

比如说,CHECKBOX,AUTOCHECKBOX

这是自动复选按钮

这是自动单选按钮,等等

按钮样式比较丰富

按钮控件的消息,主要的有单击和双击

通过刚才我们简单的创建一个测试按钮

大家已经看到它的消息主要有单击和双击

还有CAMMAND消息

按钮是最常见的控件之一

复选框按钮常用于只有两种完全相反状态的情况

选上,或者不选上

而单选按钮适用于同一组属性相同的数据中选一个数据

下压式按钮适用于消息的发送

分组框按钮没有太多的操作

它只是在窗口中划分区域范围

用来对窗口中的空间进行按功能布局,或者按属性布局等等

它用来画框的,实际上它没有太多的操作

CButton类的成员函数有这么一些

比如说,GetCheck,SetCheck,GetBitmap,设置SetBitmap

也就是按钮上面我们看到的,比如说测试、确定、取消种种文字

实际上

大家玩过游戏都知道

很多按钮下面不设文字

而是位图

所以我们可以设置位图按钮

还有按钮的样式

我们既然可以获取

就可以设置

所以Get和Set在C的系列里面

经常是成对出现的

获取光标

获取图标

获取状态等等

这些大家去看一下Cbutton类

这个类的定义就可以了

那么这个类的定义也可以在微软网站上找到

在知道按钮ID的前提下

还可使用与按钮有关的CWnd成员函数

来设置或者查询按钮状态

MFC还提供了一个CBitmapButton类

允许用户以图标的方式显示按钮

实际上它是CButton下派生的

所以类的层次构架是CButton类下面的CBitmapButton

MFC调用方法DrawItem

方法就是所谓的函数

在按钮上绘制一个位图

实际上这就是自定义的按钮

然后调用LoadBitmaps方法为一个CBitmapButton对象附上位图

把这个位图附上去

通常最多附4个位图

我们下面通过一个例子看看按钮控件的使用

左边这个图

就是程序一执行

它显示的画面

然后我按下第一个按钮

在按钮上的文字就变成“你已按下了按钮”

第二个按钮按下

文字显示为“按钮已被按下”

然后我选择单选、自动单选、复选、自动复选

然后它就变成这样一个界面

这是程序执行之前和执行之后的区别

首先我们创建一个工程文件

工程文件可以在VC++文件夹下面创建

我们选择VC++

选择文件夹

这里的路径就变成VC++

我的工程文件的名字就起成7_1

因为这是这一章第一个例题

选择MFC应用程序

然后“确定”

选择“下一步”

我们选择基于对话框的应用程序

然后我们选择

其它的都是缺省的

我们选择“下一步”

目前没有菜单

把系统菜单去掉

然后现在没有多媒体的内容

暂时还没讲到

我们把ActiveX去掉

因为不去掉的话

系统会给你生成一大堆的文件内容

一大堆的代码

代码实际上我们目前用不到

选择“下一步”

仍然系统这时候由于我们例题的名字叫7_1

所以它就给你生成了CMy7_1App这个类

类的名字就是这一个

它生成两个类

我们就选择它缺省的这个类

然后选择完成就可以了

这个时候我们把这一句提示去掉

把这个“确定”、“取消”,缺省的东西都去掉

这时候大家看到的是一个空的对话框

现在根据这个界面的要求

我们来安下按钮

这个按钮第一个是“这里是一个按钮,按下吧”

这个我们就这个拿过来

Button拿过来

布局上可以放大一点

然后我们选择属性

属性的文字可以修改

修改成我们需要的文字内容

“这里是一个按钮,按下吧”

我们给它改成“这里是一个按钮,按下吧”

好,这一刻这个按钮就生成了

我们先把界面做好

然后一步一步的设置它的相关属性

第二个是“这是缺省按钮,按下看看吧”

我们再安一个按钮

属性里面

“这是缺省按钮,按下看看吧”

好,我们第二个按钮做好了

这时候

我们有一个主框

设置了一个主框

主框刚才给大家说了

它只是用来区域分割

所以没有具体的操作

所以我们就不管它

那么只是把文字属性修改一下

因为我们这个地方要设置单选按钮组

单选按钮组

好,单选按钮

那这个时候我就要放一些单选按钮在这个上面了

单选按钮叫Radio Button

抓一个过来

那么这里面它缺省给你写上Radio

Radio文字我们要改一下

然后我们也是通过属性这个地方去改它

比如说我们改成“单选按钮,你喜欢吗”

我们的文字就改过来了

我们再拉一个单选按钮过来

我们把文字改一下

给它改成“自动单选按钮,看看有何区别”

好,我们把文字改一下

大家看到这里面两个都是按钮

都是单选按钮

所以我这里用一个组框圈起来

叫做单选按钮组

然后我们再安放两个复选按钮

同样我定义一个组框

这个组框叫做复选按钮组

复选按钮组

好,这是组框

这个时候我就要拉出两个复选按钮,叫CheckBox

然后我们再选一个按钮

叫做自动复选按钮

这个时候我们界面就做好了

保存一下

实际上我们把界面做完以后

我们只是改变了它的Caption

实际上它的每个ID

我们是要设置的

我们看这个

看看它属性里面

ID是Button1

这个属性ID是Button2

这个复选系统属性是Radio1

这个是Radio2

这个复选框是Check1

这个是Check2

也就是说这时候

系统为我们定义了每一个控件的ID

但是这些ID你现在可以使用

系统预定义的

当然如果你认为你有更好的定义方式

或者更有利于你识别

或者说其他的需求

你可以改ID

在这个例子里面我们就不去改它的ID了

要注意的一个问题就是

在我们建立了基于对话框的项目或者叫工程文件之后

我们对Radio和Check类型的按钮

如果设置了Auto风格

那么开发者不需要相应按钮的点击消息

按钮会自动响应

如果没有设置这个风格

它就不会自动响应

这个时候我们要把这两个设成自动属性

我们看这个自动属性

那么属性里面什么地方设置自动呢?

这里有Auto

Auto里面这是True

它已经设自动了

那么这个也是给它设成自动

那大家注意这个地方

这个属性就不能给它设成True

那么就不是True

不是自动的

给它设成False

这个复选按钮我们也设成False

那么False意思就是说你要自己去编写它的响应代码

然后我们还有一个地方要注意的就是

这个单选按钮,大家知道

两个单选按钮之间是互斥的

如果三个按钮,四个按钮,五个按钮怎么办呢

那就是说,只要ID是连续的

然后从连续的第一个开始

设置成Group属性

那么这几个ID连续的按钮就产生了互斥的作用

我们设置一下它的Group属性

在属性里面设置一个Group

这里Group属性里面false改成True

那么第一个改成了True

我们仍然保存一下

好了,我们刚才讲到了这两个按钮它们之间要产生互斥作用的话

那两个按钮ID是要连续

ID连续到底是怎么个连续呢?

我们看一下这个文件

resource文件

resource文件里面我们看

Radio1和Radio2

所谓它的ID连续是指这个ID的宏定义的值是连续的

那么这里系统里面由于我们是同时做下来的

正好是连续的

实际上也可能是

你不是同时挨着顺序做下来它不会连续

如果不会连续

你要使若干个Radio单选按钮产生互斥

那么你得把产生互斥的几个单选按钮的值改成连续的

所以这个地方是可以改的

没有关系

大家只要改成连续的就可以了

所以刚才说的ID要连续是指这个地方

resource文件里面的宏定义的整型数要连续

比如这里1002、1003就是连续的

如果这里是1002,这个是1005

这两个不连续

那这样的话,它们两个不起互斥作用

即使你定义了Group

这个组框第一层

把第一个定义成Group

它也不连续

那么也不会互斥

这个问题重点给大家提一下

下面我们就要为这个变量添加消息响应函数

我们要为btn1、btn2、rad1、chk1添加成员变量

用auto风格的控件是不需要添加成员变量的

我们现在要为这个按钮、这个按钮、这个按钮、这个按钮增加成员变量

因为这个是自动的

Auto类型是不需要增加成员变量的

我们看怎么添加成员变量

我们这里单击右键

添加一个变量

这个变量叫m_btn1

我们看一下因为添加这个变量

这个类这个地方有什么变化

我们看一下这个类

就是CMy7_1Dlg里面多了一个这个变量

CButton类的成员m_btn1

我们如法炮制再加一个变量

我们再来观察这个地方的变化

我再增加一个变量

添加变量

这个叫m_btn2,完成

这个时候我们再回过头看一下这个文件

这里又多了一个基于CButton类的m_btn2

同理,我接着增加

我们找到这个单选按钮

我为这个单选按钮添加一个变量

我们为这个单选按钮设置一个变量叫做rad1

我们仍然是设置完成

然后再为复选框设置一个变量

也是添加变量叫m_chk1,完成

这个时候我们再回过头来看一下

我们增加的东西在这个地方

那么大家就弄清楚了

下面我们要做什么呢?

我们要给它映射消息处理函数

为它映射一个消息处理函数

添加事件处理程序

我们现在都是单击

所以我们选的是BN_CLICKED

添加编辑

这个时候我就要编写消息处理的代码

在这里添加直接就上去了

这时候大家看到在这里添加的是SetWindowText“你已经按下按钮”

现在是对哪一个按钮添加这个消息呢?

大家看到我是对Button1

Button1刚才连接了一个变量是m_btn1

好了,我们现在不妨给它测试一下

那这个时候我们回过头来看一下

它生成了m_btn1

然后我们编译一下

我们编译成功了

成功了!我们执行一下

这时候我们按下这个按钮

它显示“你已按下按钮”

但这个时候我如果按这个按钮会有完成吗?

它不会做任何工作

为什么呢?

因为我们还没给它设置消息响应的函数

那我们回过头来看一下

由于我这里添加了一个变量btn1

然后添加了为btn1消息响应的函数

那么在Dlg里面

我们再消息映射的构架里面

就可以看到它对单击的消息针对btn1这个按钮响应的是这个函数OnBnClickedButton1

然后我们在这个地方

在生成的空壳函数里面添加了这么一行代码

m_btn1实际上指的是Button1这个按钮

因为我们为Button1这个按钮添加了这个变量

这个指向的就是Button1的对象

对象里面执行了它的成员函数SetWindowText显示这个字符串

_T这个宏来显示这个字符串

这个字符串就显示在按钮上面了

所以大家看到第一个按钮已经能操作了

我们如法炮制对其它按钮进行消息响应

我们先添加事件处理程序

这时候还是单击

消息类型里面是单击

推荐的函数名是OnBnClickedButton2

我们就不管它了

直接编辑

我们在这里添加响应的代码

好了,我们针对第二个按钮btn2也是给一个提示“按钮已被按下”

同理我们对RadioButton也进行设置消息响应的函数

我们对这个RadioButton添加事件响应程序

缺省的不管了

这时候我给它增加的代码是

m_rad1指向第一个单选按钮

因为单选按钮选上以后有一个黑圈显示它已经选上了

所以是SetCheck(1)

我们不妨执行一下

这时候我们单选按钮就选上了

选上它就变成黑圈了

所以这里SetCheck这个“1”是“真”

真就变成黑圈

然后我们继续为复选按钮添加事件处理函数

大家知道复选按钮选上了再按一下是不选上

所以两者是“真”/“假”关系

也就是说对m_chk1复选按钮选择它的成员函数GetCheck

GetCheck如果大于0

GetCheck就是获取当前状态

如果当前状态处于选上

它的值是大于0的

说明它是“真”

然后就给它变成0

就是变成不选上

else,否则的话

否则也就是说GetCheck是“假”

“假”的话就给它变成“真”就完了

我们再编译运行一下

这时候复选再点上就不复选了

因为这是自动的

我们不要去响应它

它自己会响应

所以不理它了

那么这个应用程序实际上到这儿我们就做完了

做完之后我们再回头来复习一遍

因为第一次给大家讲的细一点

我们对Button2、Radio1、Check1增加的消息响应函数之后

都在这个类里面CMy7_1Dlg都增加了关于响应对象的方法

而这些方法的映射机制同样在这里都可以看到了

也就是说在这里大家看到

这个大家已经熟悉了

对第一个按钮加的是这个函数

第二个按钮加的是这个函数

对第一个单选按钮加的这个函数

对这个复选按钮加的这个函数

两个自动的单选按钮和复选按钮

因为系统完成消息响应的映射

我们就不编写它的映射代码

所以这里就不再生成

所以四个函数分别在后面都编写完了

从第一个是Button1的函数

这是Button2的函数

这是Radio1的函数

这是Check1的函数

我们这个例子就讲到这

VC++面向对象与可视化程序设计(下):MFC编程基础课程列表:

第0章 课前讨论

-讨论实录

--0-0

第6章 MFC基础知识

-6-1 MFC概述

--6-1 MFC基础知识

-6-2 C++的基本知识

--6-2-1 类

--6-2-2 对象

--6-2-3 类的方法

--6-2-4 内联函数

--6-2-5 构造函数和析构函数

--6-2-6 重载

--6-2-7 友元函数

--6-2-8 友元类

--6-2-9 指针

--6-2-10 类的继承

--6-2-11 多态性和虚拟函数

-6-3 MFC类的组织结构及主要的类的简介

--6-3-1 MFC类的组织结构

--6-3-2 根类

--6-3-3 应用程序结构类

--6-3-4 可视对象类

--6-3-5 通用类

--6-3-6 OLE类

--6-3-7 ODBC数据库

-6-4 MFC中全局函数和全局变量

--6-4 MFC中全局函数和全局变量

第7章 Windows标准控件在可视化编程中的应用

-7-1 概述

--7-1-1

--7-1-2

-7-2 按钮控件及其应用

--128B12447816EEF99C33DC5901307461

-7-3 按钮控件及其应用

--7-3

-7-4 静态控件

--7-4

-7-5 列表框控件

--7-5-1

--7-5-2

-7-6 编辑框控件

--7-6

-7-7 组合框控件

--7-7

-7-8 对话框通用控件

--7-8-1

--7-8-2

-讲义源代码

--html

第8章 在MFC中创建应用程序的资源

-8-1&2 资源的应用以及菜单资源的使用

--8-1-1

--8-1-2

-8-3 快捷菜单的创建及其应用

--8-3

-8-4 加速键资源的创建及其使用

--8-4

-8-5 工具条资源的创建及其使用

--8-5

-8-6 字符串资源的使用

--8-6

-8-7 位图资源的创建及其使用

--8-7

-课堂示例源代码

--html

-第一次作业内容及要求

--html

--第一次作业及答题链接--作业

第9章 单文档与多文档

-9-1 概述

--9-1

-9-2 Doc/View框架的主要成员

--Video

-9-3 文档操作中的一些重要概念

--Video

-9-4 SDI编程实例

--Video

-9-5 MDI编程实例

--9-5-1

--9-5-2

-课堂示例源代码

--html

-第二次作业内容及要求

--html

--第二次作业及答题链接--作业

第10章 多媒体应用程序的设计

-10-1 利用音频函数实现多媒体程序设计

--10-1-1

--10-1-2

--10-1-3

--10-1-4

-10-2 利用Windows Media Player控件实现多媒体程序设计

--10-2

-课堂示例源代码

--html

第11章

-例11-1

--例1

-例11-2

--例11-2

-例11-3

--例11-3

-例11-4

--例11-4

-11-1 ODBC介绍与引用

--11-1

-课堂示例源代码

--html

第三次作业及答题链接

-第三次作业及答题链接

128B12447816EEF99C33DC5901307461笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。