MFC消息映像与消息路由网络构建及仿真(图文)_第1页
MFC消息映像与消息路由网络构建及仿真(图文)_第2页
MFC消息映像与消息路由网络构建及仿真(图文)_第3页
MFC消息映像与消息路由网络构建及仿真(图文)_第4页
MFC消息映像与消息路由网络构建及仿真(图文)_第5页
已阅读5页,还剩3页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MFC消息映像与消息路由网络构建及仿真(图文)论文导读:本文提出了MFC消息映像与消息路由网络构建与仿真的实施方案。通过构建仿真平台功能模块,建造类别型录仿真网络与MFC消息映像表与映像链,重点论述了MFC消息路由仿真的具体实施方案,给出仿真的框架并进行仿真。从而验证了MFC的消息映像与消息路由机制。ClassTypeNetwork处于技术的中枢位置,在此基础上,我们可以完成运行时类型识别(RTTI),进而可以动态创建对象(DynamicCreation),后者又为数据的永久存储(Persistence)提供了可能。关键词:消息映像,消息路由,动态创建,网络仿真,MFC1. 引言信息化的发展,

2、对软件开发提出了更高的要求。Microsoft MFC应用程序框架为程序员提供了高效的开发平台,但也隐藏了很多细节。消息传递和路由网络是一个典型的范例。下面构造仿真平台,构建消息映像与消息路由网络,并给出console仿真。2. 仿真平台功能模块微软定义了若干宏,完成了对类别型录的封装,形成了一张巨大的类别型录网络(Class Type Network)。图1给出了几种技术的关系。Class Type Network处于技术的中枢位置,在此基础上,我们可以完成运行时类型识别(RTTI),进而可以动态创建对象(Dynamic Creation),后者又为数据的永久存储(Persistence)提

3、供了可能。Windows借助于消息映像(Message Mapping)构造出消息映像表与消息映像链。消息路由(Message Routing) 描述了消息在各个对象之间的流动路径。发表论文。本文首先给出MFC型录网络的构建过程,然后完成Message Mapping和Message Routing的软件仿真。图1 仿真平台功能模块3. 仿真过程3.1 类别型录仿真网络构建类别型录网络记载MFC类库中所有类的信息,包括类的名称,类的大小,版本号,类的创建函数指针,及类的基类指针。发表论文。使用一个结构体CRuntimeClass表示,该结构体构成如下:struct CRuntimeClass

4、LPCTSTR m_strClsName; /类名UINTm_ObjSize; /类大小UINTm_version; /类版本号CObject*( *m_pfnCreateObj)(); /创建类的回调函数指针CRuntimeClass* m_pBaseClass; /基类指针staticCRuntimeClass* pFirstClass; /类链表表头CRuntimeClass*m_pNextClass; /结构的next指针域;为每一个类都定义一个CRuntimeClass类型的静态结构成员。如为MFC的根类CObject类定义静态结构成员CObject:classCObject,为窗口

5、类的根类CWnd定义静态结构成员CWnd:classCWnd,等等。每加入一个类均为该类定义这么一个静态结构成员。发表论文。终而,构成一个由CRuntimeClass:pFirstClass打头的类别型录网络。图2 类别型录网络基于类别型录网络,可以完成RTTI,即运行时类型识别,并可完成对象的动态创建(Dynamic Creation),水到渠成,Persistence是必然的结果。在MFC中,类别型录网络是通过宏DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC创建出来,类别型录网络的建立为消息映像和消息路由仿真奠定了基础。3.2 MFC消息映像表与映像链的建立为每一个类定

6、义一个具有messageMap结构的消息映像表,如图3所示。该结构包括两个指针项,其一指向父类的消息映像表messageMap结构,另一个指针项指向一个数据类型为AFX_MSGMAP_ENTRY的结构数组,数组中的每一项均包含一个消息函数指针,指向一个类型为CCmdTarget的成员函数指针的消息回调函数。然后,我们定义宏#define DECLARE_MESSAGE_MAP()staticAFX_MSGMAP_ENTRY _messageEntries;staticAFX_MSGMAP messageMap;virtualAFX_MSGMAP* GetMessageMap() ;这样就声明了

7、虚线框“”中的数据结构。图3 消息映像表数据结构接着,需要填充图3虚框“”中的数据结构内容,即要完成Item_1,Item_2,Item_n等的填充工作。同样,可以定义宏来完成,定义如下:#defineBEGIN_MESSAGE_MAP(theClass, baseClass)AFX_MSGMAP*theClass:GetMessageMap() const /return &theClass:messageMap; AFX_MSGMAPtheClass:messageMap = /&(baseClass:messageMap),(AFX_MSGMAP_ENTRY* ) &(theClass:

8、_messageEntries );AFX_MSGMAP_ENTRY theClass:_messageEntries = /BEGIN_MESSAGE_MAP宏结束#defineON_COMMAND(id, memF)WM_COMMAND,0, (WORD)id, (WORD)id, AfxSig_vv, (AFX_PMSG)memF,/ON_COMMAND宏结束#defineEND_MESSAGE_MAP()0,0,0,0,Afxsig_end, (AFX_PMSG)0 ;/END_MESSAGE_MAP宏结束定义了3个宏,实现了对消息映像表中数据结构内容的填充。其中第一个和第三个宏是必不

9、可少的,而中间的宏ON_COMMAND(id,memFn)实现了对消息映射项Item_1的填充,是可选宏。但该宏实现了消息ID和处理函数memF的关联。所以,MFC程序员只需要在类的头文件中声明DECLARE_MESSAGE_MAP()宏,便建立了图3虚框“”中的数据结构。然后,在类的实现文件中加入:BEGIN_MESSAGE_MAP(theClass,baseClass)ON_COMMAND(id,memFn)END_MESSAGE_MAP()便完成了图3虚框“”中的数据结构的填充。故而,在MFC的类层次结构中的所有可允许接收和处理消息的类中都加入相应的宏便可完成消息映像表和消息映像链的建立

10、。3.3 MFC消息路由仿真现在消息映像表与消息映像链已经建立起来。消息进来之后,需要搞清楚在消息泵推动下的消息流动机制。 MFC对消息循环的处理规定MFC对消息循环的处理是如下规定的:如果是一般的Windows消息(WM_xxx),则一定是由派生类流向基类。如果是WM_COMMAND消息,则有如下路线:若WM_COMMAND消息接收者为Frame窗口,则处理次序为:View窗口Frame窗口本身CWinApp对象若WM_COMMAND消息接收者为View窗口,则处理次序为:View本身Document若WM_COMMAND消息接收者为Document,则处理次序为:Document本身Doc

11、ument Template消息路由仿真方案基于3.2消息映像表及映像链的定义,依据3.3MFC对消息循环的处理规定,设计消息路由仿真方案。图4给出了整个框架。图4 消息路由仿真框架图4分两类分别阐述了普通Window消息及WM_COMMAND命令消息的处理机制,给出了两类消息的路由过程。说明如下:对于普通Windows消息,处理非常简单,仅需要遍历整个消息映像链。从派生类到基类,依次遍历类的消息映像表,查询消息映射项。若存在与消息对应的消息处理函数,则调用该消息处理函数,若无,则调用默认的消息处理函数DefWindowProc(),然后返回。对于WM_COMMAND消息,处理起来,稍显复杂。

12、视接收消息的对象不同,消息路由路径也不相同。若是CMyFrame框架窗口接收到命令消息,则需要分别从CMyView、CMyDocment、CMyFrame、CMyWinApp开始遍历消息映像链4次。图4已从CMyFrame开始标出了路由路径。若是CMyView视对象接收到命令消息,则需要分别从CMyView、CMyDocment开始遍历消息映像链2次。同样,图4已从CMyView开始标出了路由路径。若是CMyDocument接收到消息,则需从CMyDocment开始遍历消息映像链1次即可。 MFC console程序编写首先,类别型录仿真网络;然后,建立消息映像表与映像链;接着,依据消息路由仿真方案编写MFC console仿真程序。经过仿真,实现了MFC运行时动态类型识别,实现了一般Windows消息的路由,并按规划方案实现了WM_COMMAND消息的消息路由,验证了MFC的消息路由机制。4. 结论通过设计类别型录仿真网络,构造消息映像表与映像链,并依据消息路由仿真方案设计console仿真程序。完成了对MFC的消息映像与消息路由的仿真,验证了MFC的消息映像与消息路由机制。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论