关于《深入浅出MFC》中模拟消息映射部分中的一个指针的疑问,该怎么处理
关于《深入浅出MFC》中模拟消息映射部分中的一个指针的疑问
在候老师的书中,模拟了消息映射部分,其中有代码如下:
请问,其中的(AFX_MSGMAP_ENTRY *) &(theClass::_messageEntries)是否可以改成:theClass::_messageEntries? ?候老师这样写的目的是为什么呢?
------解决方案--------------------
1.这些代码是微软写的,
2.不可以改成:theClass::_messageEntries
(AFX_MSGMAP_ENTRY *) &(theClass::_messageEntries)
这个只是改变了theClass::_messageEntries的解释,把该值作为指向AFX_MSGMAP_ENTRY的值来解释。。
------解决方案--------------------
在候老师的书中,模拟了消息映射部分,其中有代码如下:
- C/C++ code
#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), \ [color=#FF0000](AFX_MSGMAP_ENTRY *) &(theClass::_messageEntries) }[/color]; \ AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \ { #define END_MESSAGE_MAP() \ { 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \ };
请问,其中的(AFX_MSGMAP_ENTRY *) &(theClass::_messageEntries)是否可以改成:theClass::_messageEntries? ?候老师这样写的目的是为什么呢?
------解决方案--------------------
1.这些代码是微软写的,
2.不可以改成:theClass::_messageEntries
(AFX_MSGMAP_ENTRY *) &(theClass::_messageEntries)
这个只是改变了theClass::_messageEntries的解释,把该值作为指向AFX_MSGMAP_ENTRY的值来解释。。
------解决方案--------------------
- C/C++ code
#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 = \ { &theClass::_GetBaseMessageMap, &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