预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

MFC消息映射及MFC入门 一、MFC消息映射机制 在前面Win32Class工程中,我们进行了Win32环境下的“消息映射”。其实,通过前面的过程,我们已经不知不觉的接触到了MFC消息映射的核心。 MFC环境下的消息映射,其原理和我们讲解过的Win32下的消息映射是类似的。简单地讲,就是让程序员指定要某个MFC类(有消息处理能力的类)处理某个消息。MFC提供了工具ClassWizard来帮助实现消息映射,在处理消息的类中添加一些有关消息映射的内容和处理消息的成员函数。程序员负责编写消息处理函数的代码,实现所希望的功能。 可以通过如下的3个重要的宏来实现MFC消息映射,这些宏功能强大,其实现相对也比较复杂。这里只要求我们会用就可以。稍后我们会用其实际代码替换这些宏,就能理解了。 DECLARE_MESSAGE_MAP:初始化消息映射表,实际上是给所在类添加几个用于消息处理的静态成员变量和静态或虚拟函数。 BEGIN_MESSAE_MAP:开始消息映射。 END_MESSAE_MAP:结束消息映射。 其他常见的、用于实现MFC消息的宏还有: 前缀为“ON_WM_”的宏:用于Windows消息的宏(不带参数)如:ON_WM_PAINT()把消息WM_PAINT映射到OnPaint函数。 ON_COMMAND宏:通过参数指定命令ID和消息处理函数。 如ON_COMMAND(ID_EDIT_PASTE,OnEditPaste),其中第二个参数OnEditPaste的原型说明为:voidCView::OnEditPaste()。 ON_UPDATE_COMMAND_UI宏:用于更新菜单的状态。 前缀为”ON_”控件通知消息宏:这类宏可能带有三个参数,如ON_CONTROL,就需要指定控制窗口ID,通知码和消息处理函数;也可能带有两个参数,如具体处理特定通知消息的宏ON_BN_CLICKED、ON_LBN_DBLCLK、ON_CBN_EDITCHANGE等,需要指定控制窗口ID和消息处理函数。 实现用户自定义消息的ON_MESSAGE宏:ON_MESSAGE(message,memberFxn)。第一个参数为消息号,第二个参数为消息处理函数。 二、手工进行消息映射 上面是使用类向导工具自动进行的消息映射,下面我们通过手工的方式来实现同样的功能,以加深对消息映射的理解。 手工映射的主要步骤是: 在.h头文件中:声明消息响应函数、声明消息映射。如: afx_msgvoidOnPaint(); //声明消息响应函数 DECLARE_MESSAGE_MAP() //声明消息映射 在.cpp文件中:进行消息映射。如: BEGIN_MESSAGE_MAP(CMyWnd,CFrameWnd) //消息映射开始 ON_WM_PAINT() //WM_PAINT消息映射宏 END_MESSAGE_MAP() //结束消息映射 详见下例(工程1Win32MFC): 使用VC6.0建立一个Win32应用程序空工程Win32MFC,按Alt+F7调出工程设置界面,或者点击菜单-->Project-->Settings-->General-->MicrosoftFoundationClasses-->选择UseMFCinaSharedDLL,使该工程支持MFC类库。 如果使用VS2008,则还需要另外进行如下的设置:将项目属性链接器高级入口点的值设置为WinMainCRTStartup 然后添加如下2个文件:(其中用到了MFC中的CWinApp和CFrameWnd类,后面会讲,这里只是为了理解消息映射,先不用理会这2个类) 头文件: //Win32MFC.h #include<afxwin.h> classCMyApp:publicCWinApp { public: virtualBOOLInitInstance(); }; classCMyWnd:publicCFrameWnd { public: CMyWnd(); protected: afx_msgvoidOnPaint(); //手工声明消息响应函数 DECLARE_MESSAGE_MAP() //手工声明消息映射 }; 实现文件: //Win32MFC.cpp #include"Win32MFC.h" CMyApptheApp; BEGIN_MESSAGE_MAP(CMyWnd,CFrameWnd) //消息映射开始 ON_WM_PAINT() //WM_PAINT消息映射宏 END_MESSAGE_MAP() //结束消息映射 BOOLCMyApp::InitInstance() { m