如何使用类向导mfc添加消息响应函数数

从Generic Class创建的类怎么添加消息映射及响应函数 - VC/MFC当前位置:& &&&从Generic Class创建的类怎么添加消息映射及响应函数从Generic Class创建的类怎么添加消息映射及响应函数&&网友分享于:&&浏览:18次从Generic Class创建的类如何添加消息映射及响应函数?有的类(如CDialogBar类)从Class Wizard里面的基类不能创建用Generic Class创建的话 有不能添加消息映射及响应函数如何手动添加?& 在线等!!------解决方案--------------------
Windows系统中的程序大部分都是通过消息和事件驱动的。在windows下的应用程序主要工作是进行消息的循环处理,通过循环等待消息的到来和事件的发生,然后对不同的消息和事件运行相关的代码,完成相应的操作。Windows提供了大量的消息,主要包括3种类型:标准消息、通知消息和命令消息。当然也可以根据用户的需要自定义一些消息。这些消息在MFC中有统一的处理框架,即消息映射机制。消息映射机制将消息及其处理函数表示成一一对应的表,并对这张表进行分析处理。总的来说,MFC消息映射机制的具体实现方法是:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。在消息映射表中,消息与对应的消息处理函数指针是成对出现的。某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中。当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就可以知道该类能否处理此消息。如果能处理该消息,则同样依照静态表能很容易找到并调用对应的消息处理函数。无论时利用MFC向导还是手动添加消息处理时,都需要在源文件中增加三处代码:1、在类的定义中添加消息处理成员函数的函数声明。2、在类的消息映射表中加入相应的消息映射表项。3、在类的实现中加入该消息处理成员函数的函数实现。如果时自定义消息,则还需要在头文件中定义自定义消息的宏。例如:要在ABC类中添加个自定义消息UM_AAA的处理,当消息产生的时候,响应OnAAA( )函数。可以按照下面四个步骤来实现:1、在头文件ABC.H中定义自定义消息的宏。#define UM_AAA
WM_USER+1在windows系统中提供了大量的消息的同时可以给用户自定义消息提供了空间,我们在自定义消息的宏的时,只有选择WM_USER以上的数值就不会与系统提供的消息冲突了。2、在头文件ABC.H中声明消息响应函数的OnAAA( )。protected:
//{{AFX_MSG (ABC)
//}}AFX_MSG
DECLARE_MESSAGE_MAP( )消息响应函数应该放在DECLARE_MESSAGE_MAP( )之前,AFX_MSG注释宏之间。该函数声明前不有一个afx_msg限定符,这也是一个宏,这个宏表面这个函数是一个消息响应函数的声明。3、进行消息映射BEIGIN_MESSAGE_MAP(ABC)//{{AFX_MSG_MAP(ABC)ON_MESSAGE(UM_AAA, OnAAA)//}}AFX_MSG_MAPEND_MESSAGE_MAP( )在END_MESSAGE_MAP( )之前的AFX_MSG_MAP注释宏之间用ON_MESSAGE( )将UM_AAA和OnAAA响应函数相关联起来。4、在ABC.CPP中将消息响应函数的实现void
OnAAA( ){……}只有按照上面的4个步骤,就可以根据自己的需要,在系统程序中添加合适的消息和响应函数了。
------解决方案--------------------
在三处地方修改,头文件的声明部分,源文件的“BEGIN MESSAGEMAP 与 END MESSAGE之间,源文件中添加对应函数
------解决方案--------------------
应该从接近的类继承再来改,比如可以从CDialog类继承再将基类改成CDialogBar,这样工作量少很多。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有VS2013/MFC编程入门之八(对话框:为控件添加消息处理函数) - 博客频道 - CSDN.NET
zhaoyinhui0802的博客
分类:MFCVS2013C++
&在上一讲中已经讲过,这一讲的主要内容是如何为控件添加消息处理函数。
&&&&&&&为对话框和控件等定义了诸多,我们对它们操作时会触发消息,这些消息最终由消息处理函数处理。比如我们点击按钮时就会产生BN_CLICKED消息,修改编辑框内容时会产生EN_CHANGE消息等。一般为了让某种操作达到效果,我们只需要实现某个消息的消息处理函数。
&&&&&&&一.添加消息处理函数
& & & &仍以前面的加法计算器的程序为例,说明怎样为“计算”按钮控件添加消息处理函数。添加方法列出4种:
&&&&&&&1.使用类向导添加消息处理函数
& & & &在添加、消息处理函数等经常会用到类向导,可以说是一个很核心的功能。
&&&&&& 大家应该记得,“计算”按钮的ID为IDC_ADD_BUTTON,Oject IDs列表中有此ID,因为我们是想实现点击按钮后的消息处理函数,所以在Messages列表中选择BN_CLICKED消息,然后点右上方的添加处理程序r就可以添加BN_CLICKED消息处理函数OnClickedAddButton了。当然你也可以改名,但一般用的默认的就可以。
&&&&&&&2.通过“Add Event Handler...”添加消息处理函数
&&&&&&&在“计算”按钮上点右键,然后在右键菜单中选择菜单项“Add Event Handler...”,弹出“Event Handler Wizard”对话框,如下图:
&&&&&&&可见“消息类型”中默认选中的就是BN_CLICKED消息,函数名和所在类都已经自动给出,直接点“添加编辑”就可以了。
&&&&&&&3.在按钮的属性视图中添加消息处理函数
& & & &我们在“计算”按钮上点右键,在右键菜单中选择“Properties”,右侧面板中会显示按钮的属性视图。
&&&&&&&我们可以像上图中那样,点属性视图的“控制时间”按钮(类似闪电标志),下面列出了“计算”按钮的所有消息。我们要处理的是BN_CLICKED消息,点其右侧空白列表项,会出现一个带下箭头的按钮,再点此按钮会出现“&Add& OnBnClickedAddButton”选项,最后选中这个选项就会自动添加BN_CLICKED处理函数了。
&&&&&&&4.双击按钮添加消息处理函数
&&&&&& 最直接最简单的方法就是,双击“计算”按钮,MFC会自动为其在CAdditionDlg类中添加BN_CLICKED消息的处理函数OnBnClickedAddButton()。
&&&&&&&二.在消息处理函数中添加自定义功能
&&&&&& 在我们使用任意一种方法添加了消息处理函数以后,都只能得到一个空的OnBnClickedAddButton()函数的函数体,要实现我们想要的功能,还需要在函数体中加入自定义功能代码。
&&&&&&&在加法计算器程序中,我们想要“计算”按钮实现的功能是,获取被加数和加数的数值,然后计算它们的和并显示到和的编辑框里。那么,OnBnClickedAddButton()的函数体就应修改为:
void&CAdditionDlg::OnBnClickedAddButton() &&{ &&
&&&&&&&&&&&&
&&&&UpdateData(TRUE); &&&&
&&&&&&&&&&m_editSum&=&m_editSummand&+&m_editA &&
&&&&UpdateData(FALSE); &&}&&
& & & &对于UpdateData()函数的说明在上一讲中已经介绍过,如果忘了可以再回上一讲了解了解。
&&&&&& 接下来我们运行下此应用程序。在运行结果界面中,输入被加数5.1,加数2.3,然后点“计算”:
&&&&&&&在上图中可以看到,点“计算”按钮后,和的编辑框中显示了正确结果:7.4。
& & & &简单分析下运行过程:输入被加数和加数,点“计算”按钮后产生点击消息,从而调用OnBnClickedAddButton()函数。进入此函数后,首先由UpdateData(TRUE)函数将被加数的&#和加数的&#分别保存到变量m_editSummand和m_editAddend,然后通过语句m_editSum&=&m_editSummand&+&m_editA计算出被加数和加数的和为7.4,并把7.4赋值给m_editSum。最后调用UpdateData(FALSE)根据被加数、加数、和的值更新三个编辑框的显示值,就得到了上图中的结果。
&&&&&& 到此,一个具有简单的加法运算功能的加法计算器应用程序就基本完成了。如果大家想实现其他功能,可以修改控件资源和消息处理函数来练习下。本节就讲到这里了,有问题欢迎到博客留言讨论。
zhaoyinhui0802
排名:千里之外
(61)(6)(1)(39)(4)(0)(38)使用类向导
Class Wizzard
第一步,使用类向导(Class Wizzard)在CMmapView 中增加一个地图消息响应函数。
基于6个网页-
使用类向导添加 CMyApp::ExitInstance() 成员函数。
Add a CMyApp::ExitInstance() member function using the Class Wizard.
如果你使用类向导来生成继承自CView或其衍生类的新类,则动态创建所需的一切都已经为你准备好了。
If you use the Class Wizard to derive your classes from any CView or its derivate, the necessary steps for implementing a dynamic creation are done for you.
向导生成命令类和用户记录类,如 使用者向导生成的类中所示。
The wizard generates a command class and a user record class, as shown in Consumer Wizard-Generated Classes.
$firstVoiceSent
- 来自原声例句
请问您想要如何调整此模块?
感谢您的反馈,我们会尽快进行适当修改!
请问您想要如何调整此模块?
感谢您的反馈,我们会尽快进行适当修改!2007年4月 总版技术专家分月排行榜第一2007年3月 总版技术专家分月排行榜第一2007年2月 总版技术专家分月排行榜第一2007年1月 总版技术专家分月排行榜第一2006年12月 总版技术专家分月排行榜第一
2009年8月 总版技术专家分月排行榜第三2007年5月 总版技术专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 添加成员函数向导 的文章

 

随机推荐