090907(星期一)项目进展:学习MFC的消息映射

一、MFC消息映射

1 Message Mapping中重要的数据结构

l         AFX_MSGMAP

struct AFX_MSGMAP

{

         AFX_MSGMAP* pBaseMessageMap;       //指向其基类MessageMap的指针,串化及上溯Message

 

         AFX_MSGMAP_ENTRY* lpEntries;          //Message Mapping的节点

};

 

 

l         AFX_MSGMAP_ENTRY

struct AFX_MSGMAP_ENTRY   // MFC 4.0

{

         UINT nMessage;          // windows message

         UINT nCode;                // control code or WM_NOTIFY code

         UINT nID;                     // control ID (or 0 for windows messages)

         UINT nLastID;              // used for entries specifying a range of control id's

         UINT nSig;                   // signature type (action) or pointer to message #

         AFX_PMSG pfn;          // routine to call (or special value)

};

 

 

l         AFX_PMSG

typedef void (CCmdTarget::*AFX_PMSG)(void);  //前面加上CCmdTarget:: 表示所指函数属于该类

 

 

2 Message Mapping中重要的宏

l         DECLARE_MESSAGE_MAP()

#define DECLARE_MESSAGE_MAP() /   //用在类的Declear之中

       static AFX_MSGMAP_ENTRY _messageEntries[]; /   //给类加一个static的数组变量

       static AFX_MSGMAP messageMap; /  //给类加一个static messageMap变量

       virtual AFX_MSGMAP* GetMessageMap() const; //给类加一个返回messageMapGet函数

 

 

l         BEGIN_MESSAGE_MAP(theClass, baseClass)

#define BEGIN_MESSAGE_MAP(theClass, baseClass) / //用于实现,.cpp

       AFX_MSGMAP* theClass::GetMessageMap() const / //实现该类的Get MessageMap函数

       { return &theClass::messageMap; } /

       AFX_MSGMAP theClass::messageMap = /

       { &(baseClass::messageMap), / //messageMap属性赋值,第一参数是改类父类的messageMap属性

       (AFX_MSGMAP_ENTRY*) &(theClass::_messageEntries) }; / //把自己的一个数据变量_messageEntries[]这个数组的指针给messageMap作为第二个变量值

       AFX_MSGMAP_ENTRY theClass::_messageEntries[] = /

       { //对该类的_messageEntries[]数组赋值,以下将马上有ON_COMMAND宏装载其他的Message handle函数

 

 

l         ON_COMMAND(id, memberFxn)

#define ON_COMMAND(id, memberFxn) / //用于实现,.cpp中,添加到该类的_messageEntries[]数组中,各种命令的添加就在这儿

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

 

 

l         END_MESSAGE_MAP()

#define END_MESSAGE_MAP() / //是上面两个宏的结尾,用于循环的结束

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

       };

 

 

3 Message Mapping用法的理解,优点的体会,以及MFC处理思想的学习

每个类利用宏定义的一个静态的属性static AFX_MSGMAP_ENTRY _messageEntries[]      

来保存记录它要处理的命令,而且另一个静态的属性static AFX_MSGMAP messageMap 还有该类父类的messageMap指针,以便上溯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值