【很详细】mfc消息映射到自定义类的疑惑。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
本人刚刚接触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.是不是消息的映射不能映射到自定义的类啊?还是理论上可以的,只是消息被某个类给截获了
东西有点多哦。。。真的是麻烦各位了。。。