当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 > 第7章 Windows标准控件在可视化编程中的应用 > 7-1 概述 > 7-1-2
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表
设置了按钮之后 是要为控件添加消息映射的
不论我们添加的是按钮控件也好
包括前面从控件工具箱里面看到的
编辑框、组合框、还有滚动条 等等
这些控件要使它能够正常地工作
都要为控件添加消息映射
为控件添加消息映射,涉及三个部分的内容
第一,在对话框对应的头文件中申明处理事件的函数
这个函数的前缀是afx_msg
afx通常代表的是全局的含义
从这里一下就可以识别出这是全局的消息
而且是无返回的
ClickedButton就是单击按钮
第二,在控件处理的类的成员定义的文件中,找到消息映射部分
消息映射通常以BEGIN_MESSAGE_MAP开头,以END_MAP_MESSAGE_MAP结束
第三,我们要相应它的消息处理函数 通常是在ON_BN_CLICKED这个地方
因为是单击按钮,然后对这个按钮响应的函数是这个东西
然后,我们要注意,在类的成员函数定义中
定义该事件发生时,执行的代码的成员函数体
这三个内容说起来比较抽象
后面我们通过具体的例子来体验三个步骤的完成情况
控件实际上有相应的通知代码
比如按钮控件
它的通知代码通常是单击或双击
编辑框控件,通常是在编辑框中要输入数据
当编辑框里输入的内容超出一定的宽度和高度的时候
宽度和高度就是设置的编辑框的宽度和高度
通常需要通过水平滚动条或者垂直滚动条来显示其他部分的内容
因为设置的编辑框的大小毕竟是有限的
输入的内容可能在设置的有限区域里面是不能够全部显示出来的
这个时候就要使用水平或者垂直滚动条
这里通知代码比较多
大家可以去详细地看一下这张表
在这里就不一一介绍了
这个表的内容可以在微软提供的MSDN上找到
也可以在我们的教材里面看到
在类的成员函数中定义事件发生时执行的代码以后
应用程序窗口可以调用SendMessage向特定的子窗口发送消息
以指示其动作
如用户单击圆按钮时,也就是单选按钮时
应用程序可以调用SendMessage向按钮发送SETCHECK这个消息
消息的格式就是这样的
这个是一个按钮的句柄
向这个按钮发送SETCHECK消息
这样就是为这个对象发送什么消息
在使用对话框控件时,应用程序也可以调用SendDlgItemMessage
向指定的对话框控件发送消息
这个是对话框的句柄,这个是指定的控件的ID
发送的消息,消息的字参数和长字参数
处理消息的窗口应用程序或对话框接收到消息
从消息映射中找到对应项
然后执行消息映射项中确定的成员函数代码
为控件的事件添加消息的步骤
我们看怎么做
我们现在加一个这个按钮
我们设置其属性
属性可以叫test,测试
然后这里有一个ID,可以使用ID_BUTTON1
系统缺省的建议的名字
就用ID_BUTTON1
这个时候我们可以添加一个时间处理程序
比如单击,就会建立一个函数处理程序名称
消息类型叫BN_CLICKED
它就是OnBnClicked,这个实际上是ID
去掉了ID的前缀
如果选择DOUBLECLICKED
消息类型叫BNDOUBLECLICKED
函数名叫OnBnDoubleclicked后面是Button1
Button1实际上就是属性里面ID里面的Button1
这个时候,生成的应用程序里面
就产生了一个BnDoubleclied(函数)
我们选择单击也可以
这个时候再回过头看前面的内容
有一个全局的消息处理,在对话框的头文件里面
这个是对话框头文件
这个时候,会产生一个这个消息
这行代码叫afx_msg 全局的消息
消息处理函数是OnBnDoubleclickedButton1
这个是系统在定义对话框类的时候
因为创建的是基于对话框的应用程序
应用程序的工程文件名叫7_1
就会生成一个CMy7_1Dlg
基于对话框的应用程序 就会生成一个Dialog的类
在类里面 public的地方
我们响应了Button1的双击的操作
我们设置了Button1的双击的操作
就会产生这一行代码
回过头看,我们添加消息映射,涉及三部分的第一块
通过刚才的界面操作它自动生成的
第二,在控件处理的类的成员定义中
我们可以看到它指定的消息类型
我们看一下这个地方
刚才我们在CMy7_1Dlg类的定义中增加了这一行
而生成类的定义是在对话框的头文件中
现在我们来看对话框的执行文件
这里就有一个消息映射
消息映射就出现了ON_BN_DOUBLECLICKED
这是消息类型,双击
对哪一个双击?对IDC_BUTTON1
就是我们刚才定义的测试这个按钮
它的属性里面设置了IDC_BUTTON!
操作的相应函数是哪一个
是基于这个类下面的
因为我们是在对话框里面创建了按钮
这个按钮一定是在对话框里面
所以这是对话框类里面的OnBnDoubleclickedButton1
这样就等于建立了基于双击这个消息的消息映射函数
这个消息映射函数绑定的是这个ID
当你对BUTTON1也就是测试按钮进行双击操作的时候
它会启动这个函数来响应你的双击操作
这里只是定义了控件对象与响应函数之间的关联
那响应函数在什么地方呢
响应函数也在这个cpp里面,在后面
他给你生成了一个响应函数的空壳
这里你想怎么响应
你就在注释行“TODO:在此添加控件通知处理程序代码”的下面
需要怎么响应,就输入你相应的内容
这个就是刚才讲的
在第二条里面出现的消息映射的部分
绑定了相应的执行函数
然后我们在第三步里面定义事件发生时执行的代码的函数体
这个函数体实际上就是写这个函数
这样通过这么一个界面操作回过头又把为控件添加消息映射
这么一个机制给大家介绍了
这是我们在MFC里面牵涉到的第一个例子
所以给大家讲得比较细
类的定义在这个地方
增加了全局函数的定义
全局函数或者也叫消息处理函数
Button1的消息处理函数
消息映射是在这个地方进行了双击的操作的映射
这个函数映射到这个ID上
然后在最后完成映射函数的操作
内容的编写
-讨论实录
--0-0
-6-1 MFC概述
-6-2 C++的基本知识
--6-2-1 类
--6-2-2 对象
--6-2-6 重载
--6-2-9 指针
-6-3 MFC类的组织结构及主要的类的简介
--6-3-2 根类
-6-4 MFC中全局函数和全局变量
-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-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-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-1 利用音频函数实现多媒体程序设计
--10-1-1
--10-1-2
--10-1-3
--10-1-4
-10-2 利用Windows Media Player控件实现多媒体程序设计
--10-2
-课堂示例源代码
--html
-例11-1
--例1
-例11-2
--例11-2
-例11-3
--例11-3
-例11-4
--例11-4
-11-1 ODBC介绍与引用
--11-1
-课堂示例源代码
--html
-第三次作业及答题链接