转自:http://blog.csdn.net/eddy_liu/article/details/8474677
目前,用MFC设计的Windows应用程序几乎都采用文档/视图结构。这种程序框架与简单程序框架之间的重要区别就在于形成应用程序的主窗口不只需要一个类的对象,而是需要3个对象:
- 框架窗口类(CFrameWnd)对象
- 视图类(CView)对象
- 文档类(CDocument)对象
框架窗口类(CFrameWnd)对象作为窗口的框架,视图类(CView)的对象作为贴附在框架窗口上的用户区,二者共同形成了应用程序的界面;而文档类对象CDocument对象则在幕后专门对数据进行存储和管理。在应用程序类CWinApp中,使用文档模板把3个类的对象组装在一起,从而形成一个完整的程序实体。在文档/视图结构的应用程序中,对于消息响应的添加和管理是至关重要的,这里我们通过一个简单的例子介绍在MFC中如何添加消息响应函数。
- 首先,我们建立一个简单的文档/视图结构的应用程序esayApp(在应用向导中基本遵从默认即可),如图所示:

- 在菜单的资源编辑器中添加“testMessage”选项,如下图所示:

在添加的选项上右键,然后点击属性,注意其ID(当添加新选项是,系统会默认生成一个ID),在这里我们为了强调,将默认ID改为”ID_TESTMESSAGE“。然后打开Resource.h文件,在其中会发现系统自动为新添加项增加了序号,如下图所示:(如果没有需要自己手动添加)

- 现在,我们在视图类中添加该菜单的消息映射和消息响应函数。
- 在simpleAppView.cpp中添加新的消息映射:

- 在simpleAppView.h中添加消息响应函数的声明:

- 最后在simpleAppView.cpp中添加消息响应函数是实现:

至此,具有消息响应功能的视图/文档结构的MFC应用程序就设计完成了,单击“文件-->testMessage”效果如下:

总结下消息响应函数添加的过程:
- 设置事件触发的ID,并在Resource.h中指定具体值(有些版本会自动生成)。
- 在xxxView.cpp中添加新的消息映射:ON_COMMAND( , )。
- 在xxxView.h中添加消息响应函数的声明:afx_msg void fun_xxx()
- 在xxxView.cpp中添加新的消息响应函数的具体实现:void fun_xxx()