消息映射机制

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

消息映射机制

任何需要消息映射的类,在其定义中必须加入DECLARE_MESSAGE_MAP()。

宏DECLARE_MESSAGE_MAP() 的定义如下:

#ifdef _AFXDLL

#define DECLARE_MESSAGE_MAP() private: static const AFX_MSGMAP_ENTRY _messageEntries[]; \ //采用登录AFX_MSGMAP_ENTRY的私有数组_messageEntries,称为登录消息

protected: static AFX_DATA const AFX_MSGMAP messageMap; \ //指向登录消息数组的消息映射

static const AFX_MSGMAP* PASCAL _GetBaseMessageMap(); \ //返回消息映射的地址

virtual const AFX_MSGMAP* GetMessageMap() const; #else

#define DECLARE_MESSAGE_MAP() private: static const AFX_MSGMAP_ENTRY _messageEntries[]; protected: static AFX_DATA const AFX_MSGMAP messageMap; virtual const AFX_MSGMAP* GetMessageMap() const; #endif

AFX_MSGMAP_ENTRY定义如下:

struct AFX_MSGMAP_ENTRY

{

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)

};

AFX_MSGMAP 定义如下: //是个动态链表,每个节点包含指向下一节点的指针和指向AFX_MSGMAP_ENTRY 的指针

struct AFX_MSGMAP

{

#ifdef _AFXDLL

const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)();

#else

const AFX_MSGMAP* pBaseMap;

#endif

const AFX_MSGMAP_ENTRY* lpEntries;

};

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航