如何解决将BEGIN_MESSAGE_MAP编写为BEGIN_MESSAGE_MAPClass,GrandParentClass会发生什么?
我遇到了一段代码,其中某个类的BEGIN_MESSAGE_MAP将其祖父母类作为第二个参数。我知道当它是父类时,如果子类不处理消息,它将检查父类是否处理该消息。我找不到有关祖父母类的文档。行为是否相似?它会跳过检查父类的消息映射并签入祖父母类的情况吗?
解决方法
BEGIN_MESSAGE_MAP
是一个宏,因此您可以查看扩展的代码并查看其作用。确切的定义可能会因版本而异,但可能有所不同:
#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[] = \
{ \
不太容易阅读...但是baseClass
仅用于返回基本图的非虚函数_GetBaseMessageMap
中。作为回报,它用于构建真实的theClass::messageMap
的第一部分,即完整消息映射的指针列表(另一部分是此类的映射)。
TL; DR;是的,对于此类未处理的任何消息,它将跳过父类的映射并直接转到祖父母类的映射。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。