MFC-CObject关于消息映射

消息映射是MFC程序框架中最重要的一个特点.为了实现这一特点,首先我们来看其中两个关键的结构体.

 

struct AFX_MSGMAP

{

    AFX_MSGMAP * pBaseMessageMap;

    AFX_MSGMAP_ENTRY * lpEntries;

};

 

struct AFX_MSGMAP_ENTRY

{

    UNIT nMessage;

    UNIT nCode;

    UNIT nID;

    UNIT nLastID;

    UNIT nSig;

    AFX_PMSG pfn;

};

 

其中从以下定义我们已经可以看出映射的实现,先定义了一个AFX_MSGMAP对象messageMap以及AFX_MSGMAP_ENTRY对象_messageEntries,并且在BEGIN_MESSAGE_MAP中对messageMap进行初始化,将_messageEntries赋值为messageMap的成员.另这几个宏还定义了派生类和基类之间的联系.最后定义了在_messageEntries中给出了另外两个重要的宏定义ON_COMMAND和END_MESSAGE_MAP的具体实现

#define DECLARE_MESSAGE_MAP()  /

     static AFX_MSGMAP_ENTRY _messageEntries[]; /

     static AFX_MSGMAP messageMap;   /

     virtual AFX_MSGMAP *GetMessageMap() const;

 

#define BEGIN_MESSAGE_MAP(theClass,baseClass)  /

    AFX_MSGMAP *theClass::GetMessageMap() const/

    {return &theClass::messageMap;}  /

    AFX_MSGMAP theClass::messageMap= {&(baseClass::messageMap,/

    (AFX_MSGMAP_ENTRY *) &(theclass::_messageEntries)};   /

    AFX_MSGMAP_ENTRY theClass::_messageEntries[]=   /

    {

    #define ON_COMMAND(id,memberFxn) /

        {WM_COMMAND,0,(WORD)id,(WORD) id,AfxSig_vv,(AFX_PMSG)memberFxn},

    #define END_MESSAGE_MAP()  /

        {0,0,0,0,AfxSig_end,(AFX_PMSG)0}   /

    };

其中AfxSig_end定义为:

enum AfxSig

{

     AfxSig_end=0;

     AfxSig_vv,

};

 

至此,我们已经可以很清楚的看出了消息映射的实现

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值