为了在一个处理消息的类中加消息映射表,就必须在该类的声明中添加下面的宏调用:
DECLARE_MESSAGE_MAP()
这个宏展开后如下:
#ifdef _AFXDLL
#define DECLARE_MESSAGE_MAP() /
private: /
static const 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_MAGMAP messageMap; /
virtual const AFX_MSGMAP* GetMessageMap() const; /
#endif
然后,还要在该类的实现文件(.cpp)中添加下面两个宏:
BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
END_MESSAGE_MAP()
在上面的两个宏中添加消息映射入口。
其中CXXXDlg中的XXX是新建的工程名。
BEGIN_MESSAGE_MAP() 和END_MESSAGE_MAP() 展开如下:
#ifdef _AFXDLL
#define BEGIN_MESSAGE_MAP(theClass, baseClass) /
const AFX_MSGMAP* PASCAL theClass::_GetBaseMessageMap() /
{ return &baseClass::messageMap; } /
const AFX_MSGMAP* theClass::GetMessageMap() const /
{ return &theClass::messageMap; } /
AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap= /
{ &baseClass::messageMap, &theClass::_messageEntries[0] }; /
AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[]= /
{ /
#else
#define BEGIN_MESSAGE_MAP(theClass, baseClass) /
const AFX_MSGMAP* theClass::GetMessageMap() const /
{ return &theClass::messageMap; } /
AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap= /
{ &baseClass::messageMap, &theClass::_messageEntries[0] }; /
AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[]= /
{ /
#endif
#define END_MESSAGE_MAP() /
{ 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } /
}; /