使用MFC消息机制.ppt
《使用MFC消息机制.ppt》由会员分享,可在线阅读,更多相关《使用MFC消息机制.ppt(21页珍藏版)》请在三一办公上搜索。
1、第二章 使用MFC消息机制,学习目标,MFC的六大关键技术,MFC的六大关键技术,是六大黑箱技术。使开发者只要做简单的局部修改,即可处理大部分窗口事物。其他复杂处理过程被完美的封装起来,这样的技术使程序员不需要懂太多,即可进行窗口软件的开发。具体的MFC的六大技术,包括:(1)MFC程序的初始化过程:建立一个最简单的MFC程序只用两步。从CWinApp派生一个应用程序类(CMyApp),然后建立对象(theApp)。之后整个程序的编写,就只需要改写一个InitInstance()函数。(2)运行时类型识别(RTTI)运行时类型识别(RTTI)即是程序执行过程中知道某个对象属于某个类,参见CRu
2、ntimeClass类。(3)动态创建:动态创建就是运行时创建指定类的对象,而创建的对象在MFC内部能够被动态识别。在MFC中大量使用。如框架窗口对象、视对象,还有文档对象等等。参见CFrameWnd,CView和CDocument等类,按F12查阅相关的宏定义,例如:DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE。,使用AppWizard,(4)永久保存(串行化):MFC的连续存储(serialize)机制俗称串行化,参见CDocument类。网上流传“弄懂它以后,你就越来越像个程序员了!”。MFC刚发布的开始阶段,好多软件开发者都将文件存储方式,改到了串行化的模
3、式上去。实际上,串行化存储模式也有一定的局限性,因此目前也有很多软件又脱离开串行化,使用自定义的文件存储模式。(5)消息映射:消息映射机制,就是将窗口消息与窗口类函数地址进行对应。当消息发生时,自动调用该类对应的类成员函数的机制。参见BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP宏定义(6)命令传递:命令传递机制,主要处理WM_COMMAND消息在不同窗口之间的传递。例如,主窗口接收消息后传递给相应的子窗口。最常用于CMainFrame类的OnCmdMsg函数。参见 CCmdTarget:OnCmdMsg函数,,MFC系统消息分类,一般程序员在做2-3年的VC开发后,会
4、自动进入阅读MFC源代码以及剖析以上VC内部技术。但是对于初学者我们建议,应该重点放在使用MFC提供的关键技术。Windows提供了大量的窗口消息,开发者可以在对应的消息函数下,编写代码来修饰窗口的属性。常用的窗口消息如下:(1)键盘消息:WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN、WM_SYSKEYUP和WM_CHAR等(2)鼠标消息:左:WM_LBUTTONDOWN、WM_LBUTTONUP和WM_LBUTTONDBLCLK中:WM_MBUTTONDOWN、WM_MBUTTONUP和WM_MBUTTONDBLCLK 右:WM_RBUTTONDOWN、WM_RBUTT
5、ONUP和WM_RBUTTONDBLCLK(3)窗口创建和摧毁:普通窗口:WM_CREATE、WM_DESTROY和WM_CLOSEMDI窗口:WM_MDICREATE、WM_MDIDESTROY对话框:WM_INITDIALOG,MFC系统消息分类,(4)客户区消息:WM_PAINT、WM_ERASEBKGND、WM_CTLCOLOR、WM_CTLCOLORBTN和WM_SIZE等(5)非客户区消息:WM_NCPAINT、WM_NCCREATE和WM_NCLBUTTONDOWN等(6)事件消息:WM_COMMAND、WM_SYSCOMMAND、WM_TIMER和WM_HOTKEY等,使用MF
6、C系统消息,建立一个基于对话框的MFC工程,按ALT+W打开ClassWizard。在Messages消息列表中选择WM_LBUTTONDOWN双击。在下面生成OnLButtonDown函数处双击。,编辑消息映射函数,查看ClassWizard生成的消息函数代码除了生成OnLButtonDown成员函数外,在BEGIN_MESSAGE_MAP下面还生成了映射宏。按F12查看ON_WM_LBUTTONDOWN的定义,了解该宏建立的关联。#define ON_WM_LBUTTONDOWN()WM_LBUTTONDOWN,0,0,0,AfxSig_vwp,(AFX_PMSG)(AFX_PMSGW)(
7、void(AFX_MSG_CALL CWnd:*)(UINT,CPoint)删除消息映射函数打开ClassWizard选择OnLButtonDown成员函数,再点删除函数按钮。查看删除消息函数后的代码,消息映射宏和头文件中的函数声明已经被删除,一般ClassWizard会保留函数体中的代码,以备开发者保存。,关闭时的系统消息,点击标题栏上的关闭按钮,或者系统菜单中的关闭菜单时,系统内会触发多种与关闭有关的系统消息。例如:WM_SYSCOMMAND:该消息不只支持处理关闭消息,而且支持最大化、最小化、移动、拉伸以及系统菜单等多种消息。在对应的消息函数中参数nID代表系统消息的种类,例如:SC_C
8、LOSE,SC_MINIMIZE等。参见CWnd:OnSysCommand函数。WM_CLOSE:相当于WM_SYSCOMMAND关于SC_CLOSE类型的专用处理。WM_DESTROY:通用于任何窗口在摧毁时发出的消息。WM_NCDESTROY:通用于窗口在摧毁时,发出的最后一个消息。在对话框窗口中,在WM_CLOSE消息之后还会发出WM_COMMAND消息,调用OnCancel函数。但是在点击取消按钮(IDCANCEL)后,并不会发出WM_SYSCOMMAND消息和WM_CLOSE消息。,建立自定义消息,从消息的来源来看,可以分为:系统定义的消息和应用程序定义的消息。系统消息ID的范围是从
9、0到WM_USER-1,或0X80000到0XBFFFF应用程序消息从 WM_USER(0X0400)到0X7FFF,或0XC000到0XFFFFFF,范围内的消息由应用程序自己使用;在MFC窗口类中定义消息成员函数:函数的格式:LRESULT MsgProc(WPARAM wParam,LPARAM lParam)定义消息映射宏:在BEGIN_MESSAGE_MAP下面加入ON_MESSAGE(WM_USER+1,MsgProc)在其他函数中发送自定义消息:SendMessage(WM_USER+1,3,9);或者PostMessage(WM_USER+1,22,11);在MsgProc消息
10、函数中设置断点,运行并调试:查看是否接收到该消息,SendMessage和PostMessage,、首先是返回值意义的区别,我们先看一下 MSDN 里的声明:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);WBOOL PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);其中 4 个参数的意义是一样的,返回值类型不同(其实从数据上看他们一样是一个 32 位的数,只是意义不一样),LRESULT 表示的是消息被处理后的返回值,BOOL 表示的是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 MFC 消息 机制
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-4951895.html