【很详细】mfc消息映射到自定义类的疑惑。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

guyue35 2013-12-28 04:14:15
本人刚刚接触mfc,在学习消息映射时候发现了一个问题。,,我随便新建了一个对话框的mfc工程,一开始并没有使用类向导添加类,而是直接自己新建了一个my.h,my.cpp的文件,手动编写了一个my的类,然后再使用类向导为my类添加消息映射,想着在对话框中的双击(OnLButtonDblClk)就相应到my类中,发现类向导中根本不可以为为my类添加消息映射,查了资料发现,原来自定义的类要直接或者间接继承CCmdTarget类才会有消息映射功能。
然后我就手动的为my类添加CCmdTarget基类,这次类向导的确可以为my类进行OnLButtonDblClk的消息映射了,但是实际测试中发现根本没有响应OnLButtonDblClk的函数(断点测试的),就疑惑了啊。。
后来又重新新建mfc对话框工程,这次就是采用类向导添加继承自CCmdTarget类的自定义类my类,再用类向导添加my类的OnLButtonDblClk映射,发现还是没有响应这个OnLButtonDblClk函数。。。晕了。。就试着再用类向导新建my2类,继承自CWnd类(因CWnd继承自CCmdTarget类呗),为my2类添加双击映射,还是响应不了啊!!!
再后来,我又重新新建mfc对话框工程,这次不新建my类了。直接在本来自带的那个C123Dlg类(ps:我的工程名字就是123哦),在这个类中建立OnLButtonDblClk映射,结果这次终于响应双击事件了,感动并疑惑了。。此时留意到了C123Dlg类其实是继承自CDialogEx类的,而CDialogEx又继承自CDialog类,所以我就想是不是要响应OnLButtonDblClk映射就一定要继承自CDialog呢?所以我就在此基础上新建了my3类,继承自CDialog类,添加单击映射(区别于之前的双击呗),发现还是响应不了啊。。。而且发现一旦自定义的类继承自CDialog类,vs2010就会自动的添加一个与自定义类同名的窗体,这与初衷不同啊,我是想着为原来的窗体添加映射到自定义的类啊。。。

写到这里,终于把我的悲惨经历写完了,这里有以下疑惑:
1.我是在vs2010+win8.1测试的,后来试了在vs2013+win8.1也是一样的结果
2.为什么我在mfc中,不能把例如单击,双击等事件映射到自定义的类,无论这个类是继承自CCmdTarget,还是CWnd。
3.是不是消息的映射不能映射到自定义的类啊?还是理论上可以的,只是消息被某个类给截获了

东西有点多哦。。。真的是麻烦各位了。。。
...全文
922 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
guyue35 2014-11-19
  • 打赏
  • 举报
回复
引用 22 楼 u011033348 的回复:
[quote=引用 17 楼 guyue35 的回复:] [quote=引用 16 楼 GLSC_CENA 的回复:] [quote=引用 15 楼 guyue35 的回复:] [quote=引用 14 楼 tiger9991 的回复:] 汗,你my和Dlg有啥关系呢?? 你dlg怎么呈现my的??你在123的dlg上面随便怎么点都不会触发my的东西的
引用 13 楼 hdt 的回复:
[quote=引用 12 楼 guyue35 的回复:] [quote=引用 10 楼 hdt 的回复:] 你那个界面是my的么?你是如何启动他的?
用类向导添加了my类后,,就直接按F5啊,调试运行啊,发现不成功后,又试着到工程的文件夹中直接点击那个生成的123.exe啊,还是没有afxmessagebox出来。。。[/quote] 这样就会把my创建出来了? 建议你还是把win32基础好好看看!!![/quote] 好吧,,,我大概知道了,,,看来是我对mfc的理解不够透彻啊,,, 谢谢两位版主哈。。 怪不得我用spy++看了,的确有点击事件传进来的,就是不触发my类,看来是没有创建好my类的问题啊。。 以后还要努力学习mfc啊。。。 不过可以再发问下,那么我应该怎么样修改工程,才能把dlg关联到my类,达到原来的效果啊?[/quote] [/quote] 你好啊,请问你知道问题的答案吗?就是怎么才能把dlg关联到my类呢?[/quote] 同问,我现在遇到同样的问题了,请问这个问题应该如何解决呢,我是自己定义了一个类继承自CWND,想要在里面使用定时器,但是定时器响应函数就是没反应,另外还要在里面使用自己的消息和映射函数。[/quote] 想不到几百年后竟然还有人回复啊 不知道你的问题解决了吗? 这个问题我是很久以前提出来的 后来就看其他人的源码解决了
精分患者 2014-10-16
  • 打赏
  • 举报
回复
你的my类里根本就没有消息响应机制,也就是说根本不可能有消息传到你的类中!所以投机取巧的方法是在你的Dialog类的左键点击响应函数中调用你my类中的方法。不投机取巧的方法,就是楼上各位说的,好好研究下win32基础,看看孙鑫教程,然后你就明白了
丨1943 2014-10-15
  • 打赏
  • 举报
回复
引用 13 楼 hdt 的回复:
[quote=引用 12 楼 guyue35 的回复:] [quote=引用 10 楼 hdt 的回复:] 你那个界面是my的么?你是如何启动他的?
用类向导添加了my类后,,就直接按F5啊,调试运行啊,发现不成功后,又试着到工程的文件夹中直接点击那个生成的123.exe啊,还是没有afxmessagebox出来。。。[/quote] 这样就会把my创建出来了? 建议你还是把win32基础好好看看!!![/quote] 请教下能否讲得更详细点呢?
丨1943 2014-10-15
  • 打赏
  • 举报
回复
引用 17 楼 guyue35 的回复:
[quote=引用 16 楼 GLSC_CENA 的回复:] [quote=引用 15 楼 guyue35 的回复:] [quote=引用 14 楼 tiger9991 的回复:] 汗,你my和Dlg有啥关系呢?? 你dlg怎么呈现my的??你在123的dlg上面随便怎么点都不会触发my的东西的
引用 13 楼 hdt 的回复:
[quote=引用 12 楼 guyue35 的回复:] [quote=引用 10 楼 hdt 的回复:] 你那个界面是my的么?你是如何启动他的?
用类向导添加了my类后,,就直接按F5啊,调试运行啊,发现不成功后,又试着到工程的文件夹中直接点击那个生成的123.exe啊,还是没有afxmessagebox出来。。。[/quote] 这样就会把my创建出来了? 建议你还是把win32基础好好看看!!![/quote] 好吧,,,我大概知道了,,,看来是我对mfc的理解不够透彻啊,,, 谢谢两位版主哈。。 怪不得我用spy++看了,的确有点击事件传进来的,就是不触发my类,看来是没有创建好my类的问题啊。。 以后还要努力学习mfc啊。。。 不过可以再发问下,那么我应该怎么样修改工程,才能把dlg关联到my类,达到原来的效果啊?[/quote] [/quote] 你好啊,请问你知道问题的答案吗?就是怎么才能把dlg关联到my类呢?[/quote] 同问,我现在遇到同样的问题了,请问这个问题应该如何解决呢,我是自己定义了一个类继承自CWND,想要在里面使用定时器,但是定时器响应函数就是没反应,另外还要在里面使用自己的消息和映射函数。
AnswerCode 2014-01-03
  • 打赏
  • 举报
回复
my类不知道应该响应哪个dlg的消息 若直接为dlg添加类就可以看到有这么一句: // 对话框数据 enum { IDD = IDD_... };
lm_whales 2013-12-31
  • 打赏
  • 举报
回复
分别建两个工程,一个手写,一个自动生成,对比一下,结果就一目了然了。
傻X 2013-12-30
  • 打赏
  • 举报
回复
要么VS没装好 要么你自己写的映射有问题
这个娜戒海了 2013-12-30
  • 打赏
  • 举报
回复
贴代码吧,从你的描述上来看,看不出什么问题 描述不清楚,建议先看下孙鑫老师的书,前几张就有
challengerhawk 2013-12-30
  • 打赏
  • 举报
回复
你创建的类是c++类还是mfc类,消息映射一般要选后者吧!
这个娜戒海了 2013-12-30
  • 打赏
  • 举报
回复
请看孙鑫的教程,别无他法
guyue35 2013-12-30
  • 打赏
  • 举报
回复
引用 16 楼 GLSC_CENA 的回复:
[quote=引用 15 楼 guyue35 的回复:] [quote=引用 14 楼 tiger9991 的回复:] 汗,你my和Dlg有啥关系呢?? 你dlg怎么呈现my的??你在123的dlg上面随便怎么点都不会触发my的东西的
引用 13 楼 hdt 的回复:
[quote=引用 12 楼 guyue35 的回复:] [quote=引用 10 楼 hdt 的回复:] 你那个界面是my的么?你是如何启动他的?
用类向导添加了my类后,,就直接按F5啊,调试运行啊,发现不成功后,又试着到工程的文件夹中直接点击那个生成的123.exe啊,还是没有afxmessagebox出来。。。[/quote] 这样就会把my创建出来了? 建议你还是把win32基础好好看看!!![/quote] 好吧,,,我大概知道了,,,看来是我对mfc的理解不够透彻啊,,, 谢谢两位版主哈。。 怪不得我用spy++看了,的确有点击事件传进来的,就是不触发my类,看来是没有创建好my类的问题啊。。 以后还要努力学习mfc啊。。。 不过可以再发问下,那么我应该怎么样修改工程,才能把dlg关联到my类,达到原来的效果啊?[/quote] [/quote] 你好啊,请问你知道问题的答案吗?就是怎么才能把dlg关联到my类呢?
这个娜戒海了 2013-12-30
  • 打赏
  • 举报
回复
引用 15 楼 guyue35 的回复:
[quote=引用 14 楼 tiger9991 的回复:] 汗,你my和Dlg有啥关系呢?? 你dlg怎么呈现my的??你在123的dlg上面随便怎么点都不会触发my的东西的
引用 13 楼 hdt 的回复:
[quote=引用 12 楼 guyue35 的回复:] [quote=引用 10 楼 hdt 的回复:] 你那个界面是my的么?你是如何启动他的?
用类向导添加了my类后,,就直接按F5啊,调试运行啊,发现不成功后,又试着到工程的文件夹中直接点击那个生成的123.exe啊,还是没有afxmessagebox出来。。。[/quote] 这样就会把my创建出来了? 建议你还是把win32基础好好看看!!![/quote] 好吧,,,我大概知道了,,,看来是我对mfc的理解不够透彻啊,,, 谢谢两位版主哈。。 怪不得我用spy++看了,的确有点击事件传进来的,就是不触发my类,看来是没有创建好my类的问题啊。。 以后还要努力学习mfc啊。。。 不过可以再发问下,那么我应该怎么样修改工程,才能把dlg关联到my类,达到原来的效果啊?[/quote]
guyue35 2013-12-30
  • 打赏
  • 举报
回复
引用 14 楼 tiger9991 的回复:
汗,你my和Dlg有啥关系呢?? 你dlg怎么呈现my的??你在123的dlg上面随便怎么点都不会触发my的东西的
引用 13 楼 hdt 的回复:
[quote=引用 12 楼 guyue35 的回复:] [quote=引用 10 楼 hdt 的回复:] 你那个界面是my的么?你是如何启动他的?
用类向导添加了my类后,,就直接按F5啊,调试运行啊,发现不成功后,又试着到工程的文件夹中直接点击那个生成的123.exe啊,还是没有afxmessagebox出来。。。[/quote] 这样就会把my创建出来了? 建议你还是把win32基础好好看看!!![/quote] 好吧,,,我大概知道了,,,看来是我对mfc的理解不够透彻啊,,, 谢谢两位版主哈。。 怪不得我用spy++看了,的确有点击事件传进来的,就是不触发my类,看来是没有创建好my类的问题啊。。 以后还要努力学习mfc啊。。。 不过可以再发问下,那么我应该怎么样修改工程,才能把dlg关联到my类,达到原来的效果啊?
傻X 2013-12-30
  • 打赏
  • 举报
回复
汗,你my和Dlg有啥关系呢?? 你dlg怎么呈现my的??你在123的dlg上面随便怎么点都不会触发my的东西的
真相重于对错 2013-12-30
  • 打赏
  • 举报
回复
引用 12 楼 guyue35 的回复:
[quote=引用 10 楼 hdt 的回复:] 你那个界面是my的么?你是如何启动他的?
用类向导添加了my类后,,就直接按F5啊,调试运行啊,发现不成功后,又试着到工程的文件夹中直接点击那个生成的123.exe啊,还是没有afxmessagebox出来。。。[/quote] 这样就会把my创建出来了? 建议你还是把win32基础好好看看!!!
guyue35 2013-12-30
  • 打赏
  • 举报
回复
引用 10 楼 hdt 的回复:
你那个界面是my的么?你是如何启动他的?
用类向导添加了my类后,,就直接按F5啊,调试运行啊,发现不成功后,又试着到工程的文件夹中直接点击那个生成的123.exe啊,还是没有afxmessagebox出来。。。
guyue35 2013-12-30
  • 打赏
  • 举报
回复
引用 6 楼 hdt 的回复:
建议楼主把win32基础先了解清楚,再用mfc
其实我前段时间就是学习sdk开发了,但是学校的课程设计需要我们用mfc开发,没办法只好直接上mfc了。。。 之前的学习中也大概知道了win32的一些原理,什么消息之类的也大概知道的,, 但是这次为什么my类接受不到点击事件就真是无解了。。。
真相重于对错 2013-12-30
  • 打赏
  • 举报
回复
你那个界面是my的么?你是如何启动他的?
guyue35 2013-12-30
  • 打赏
  • 举报
回复
引用 4 楼 hdt 的回复:
my运行时 界面有了么?他能接收消息么?
已经有界面了,,,3楼最后一幅图片就是调试运行的界面了,,,但是怎么点击都没有反应,,没有指定到my类中的单击映射啊。。
guyue35 2013-12-30
  • 打赏
  • 举报
回复
引用 2 楼 tiger9991 的回复:
要么VS没装好 要么你自己写的映射有问题
你好,请看看3,5楼吧,已经贴出来了。。。麻烦看看吧
加载更多回复(5)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧