MFC编程入门之九(对话框:为控件添加消息处理函数)
这一节讲的主要内容是如何为控件添加消息处理函数。
MFC为对话框和控件定义了诸多消息,我们对他们操作时会触发消息,这些消息最终由消息处理函数处理,比如我们点击按钮时就会产生BN_CLICKED消息,
修改编辑框内容时会产生EN_CHANGE消息等。一般为了让某种操作达到效果,我们只需要实现某个消息的消息处理函数。
一、添加消息处理函数
仍然以前面的计算器程序为例,说明怎样为“计算”按钮添加消息处理函数,添加方法列出4中:
1、使用Class Wizard添加消息处理函数
用过VC++6.0的朋友应该对Class Wizard很熟悉了,添加类、消息处理函数等经常会用到它,可以说是一个很核心的功能。但从VS2002开始就见不到Class
Wizard了,大部分功能都集成到对话框和控件等的属性了,使用很方便。到VS2010,久违的Class Wizard又回来了。
大家应该记得,“计算”按钮的ID为IDC_CALCULATE_BUTTON。上图中Commands标签下,Object IDs列表中有此ID,因为我们是想实现点击按钮后的消息处理
函数,所以在Message列表中选择BN_CLIECKED消息,然后点右上方的Add Handler就可以添加BN_CALCULATE_CLICKED消息处理函数OnClickedAddButton了。当然你
也可以改名,但一般用的默认的就可以。
2、通过”Add Event Handler...“添加消息处理函数
在”计算“按钮上点右键,然后在右键菜单中选择菜单项”Add Event Handler...“,弹出”Event Handler Wizard“对话框,如下图:
可见"Message type"中默认选中的就是BN_CLICKED消息,函数名和所在类都已经自动给出,直接点”Add and Edit“就可以了。
3、在按钮的属性视图中添加消息处理函数
上面说过,从VS2002开始就主要从属性视图添加消息处理函数了。我们在”计算“按钮上点击邮件,在右键菜单中选择”Properties“,右侧面板中会显示按钮
的属性视图。
我们可以像上图中那样,点属性视图的"Control Events"按钮(类似闪电标志),下面列出了”计算“按钮的所有消息。我们要处理的是BN_ClICKED消息,点其
右侧空白列表项,会出现一个带下箭头的按钮,再点此按钮会出现"<Add> OnBnClickedAdd"选项,最后选中这个选项会自动添加BN_CLICKED处理函数了。
4、双击按钮添加消息处理函数
最直接最简单的方法就是,双击”计算“按钮,MFC会自动为其在CAdditionDlg类中添加BN_CLICKED消息的处理函数OnBnClickedAddButton()。
二、在消息处理函数中添加自定义功能
在我们使用任意一种方法添加了消息处理函数以后,都只能得到一个空的OnBnClickedAddButton()函数的函数体,要实现我们想要的功能,还需要在函数体中加
入自定义功能代码。
在加法计算器程序中,我们想要“计算”按钮实现的功能是,获取被加数和加数的数值,然后计算它们的和并显示到编辑框里。那么,OnBnClickedAddButton()
的函数体就应该修改为:
C++代码:
对于UpdateData()函数的说明在上一节中已经介绍过了,如果忘了可以在回上一节了解了解。
接下来我们运行下此应用程序。在运行结果界面中,输入被加数5.1,加数2.3,然后点“计算”:
在上图中可以看到,点“计算”按钮后,和的编辑框中显示了正确结果:7.4.
简单分析一下运行过程:输入被加数和加数,点“计算”按钮后产生点击消息,从而调用OnBnClickedAddButton()函数。进入此函数后,首先由UpdateData(TRUE)
函数将被加数的值5.1和加数的值2.3分别保存到变量m_summand和m_addend,然后通过语句m_sum=m_summand+m_addend;计算出被加数和加数的和7.4,并把7.4的值赋
给m_sum。最后调用UpdateData(FALSE)根据被加数、加数、和的值更新三个编辑框的显示值,就得到了上面图中的结果。
到此,一个具有简单的加法计算功能的加法计算器应用程序就基本完成了。如果大家想实现其他功能,可以修改控件资源和消息处理函数来联系下。
MFC编程入门之九(对话框:为控件添加消息处理函数)的更多相关文章
- VS2010/MFC编程入门之九(对话框:为控件添加消息处理函数)
创建对话框类和添加控件变量在上一讲中已经讲过,这一讲的主要内容是如何为控件添加消息处理函数. MFC为对话框和控件等定义了诸多消息,我们对它们操作时会触发消息,这些消息最终由消息处理函数处理.比如我们 ...
- VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)
上一节中鸡啄米讲了为Ribbon Bar添加控件的方法.本节教程鸡啄米将继续完善前面的实例,讲解一些稍复杂的控件的添加方法,及如何为它们添加消息处理函数. 一.为Ribbon Bar添加更多Ribbo ...
- VS2010/MFC对话框四:为控件添加消息处理函数
为控件添加消息处理函数 创建对话框类和添加控件变量在上一讲中已经讲过,这一讲的主要内容是如何为控件添加消息处理函数. MFC为对话框和控件等定义了诸多消息,我们对它们操作时会触发消息,这些消息最终由消 ...
- VS2010-MFC(对话框:为控件添加消息处理函数)
转自:http://www.jizhuomi.com/software/156.html MFC为对话框和控件等定义了诸多消息,我们对它们操作时会触发消息,这些消息最终由消息处理函数处理.比如我们点击 ...
- VS2010-MFC(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)
转自:http://www.jizhuomi.com/software/255.html 上一节讲了为Ribbon Bar添加控件的方法.本节教程将继续完善前面的实例,讲解一些稍复杂的控件的添加方法, ...
- VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)
前面一节讲了树形控件Tree Control的简介.通知消息以及相关数据结构,本节继续讲下半部分,包括树形控件的创建.CTreeCtrl类的主要成员函数和应用实例. 树形控件的创建 MFC为树形控件提 ...
- VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下)
上一节中鸡啄米讲了标签控件知识的上半部分,本节继续讲下半部分. 标签控件的创建 MFC为标签控件的操作提供了CTabCtrl类. 与之前的控件类似,创建标签控件可以在对话框模板中直接拖入Tab Con ...
- VS2010/MFC编程入门之三十(常用控件:树形控件Tree Control 上)
前面两节为大家讲了列表视图控件List Control,这一节开始介绍一种特殊的列表--树形控件Tree Control. 树形控件简介 树形控件在Windows系统中是很常见的,例如资源管理器左侧的 ...
- MFC编程入门之八(对话框:创建对话框类和添加控件变量)
创建好对话框资源后要做的就是生成对话框类了.生成对话框类主要包括新建对话框类.添加控件变量和控件的消息处理函数. 例程Addition是基于对话框的程序,所以程序自动创建了对话框模板IDD_ADDIT ...
随机推荐
- MongoShell中的一些命令总结
mongo 127.0.0.1 可以连接到本地的mongo数据库并进入shell exit可以退出shell show dbs 可以查看当前数据库中所有的数据库名称 use [数据库名称] 可以进入指 ...
- JS脚本文件的位置对页面加载性能影响以及无阻塞脚本(javascript)模式
JS的阻塞特性:当<script>出现的时候,页面必须等待脚本文件的加载.解析.执行完毕后才能继续进行页面的渲染.不管脚本文件是以内联形式还是外部引入的形式出现在<script> ...
- vscode 编写python如何禁止 flake8 提示 line too long
使用vscode编写python还是挺舒服的,但是如果给vscode安装了语法校验插件,例如flake8,会常常提示一些非常苛刻的语法问题,其中最让人不能忍受的就是line to long. 一行仅能 ...
- Python开发【第七章】:Python异常处理
一.异常处理 1.异常基础 在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!! #异常处理 list = [&qu ...
- Android 自定义spinner下拉框实现的实现
请支持原创:http://blog.csdn.NET/geniuseoe2012/article/details/8723702 说到Android下拉框spineer,框架中虽有现成的控件,但实际效 ...
- BI系统与KPI指标的整合分析
今天我们要说的是信息化时代下关于企业运营的两个热词:BI系统和KPI指标.一直到现在,企业运营的方方面面都在被数据化,成为庞大信息流的一部分,这一庞大的信息流,正以我们自己都尚未完全意识到的速度和规模 ...
- ELK+kafka构建日志收集系统
ELK+kafka构建日志收集系统 原文 http://lx.wxqrcode.com/index.php/post/101.html 背景: 最近线上上了ELK,但是只用了一台Redis在 ...
- Mysql乱码
MySql字符集 1.系统默认的.数据库默认的.表格默认的.列的 真正决定权在列定义上 2.latin1 系统默认字符编码 字符范围是0x00-0xff,可以存放任意编码的字符序列. 3.utf8编码 ...
- dotnetnuke peek. glance.
/**** 15:59:39.05 ***/ use dotnetnuke to create websites: 1. install 2. create webpage template 3. c ...
- js实现发送短信验证码后的倒计时功能(无视页面刷新)
[1].[代码] 这是页面上的发送验证码按钮 跳至 [1] [2] [3]<input id="second" type="button" value=& ...