MFC编程中,BEGIN_MESSAGE_MAP、END_MESSAGE_MAP可以为空吗?
In MFC programming, can BEGIN_MESSAGE_MAP, END_MESSAGE_MAP be empty?
如果 BEGIN_MESSAGE_MAP/END MESSAGE 对之间没有要处理的事件,我可以安全地删除它们吗?
我可以
class 我的列表视图:public 列表视图
class 我的专业列表视图 : public 我的列表视图
而MySpecialisedListView有事件需要处理,而MyListView没有。
我能否删除 MyListView 的 BEGIN_MESSAGE_MAP/END MESSAGE 对,并确保 MySpecialisedListView 中未处理的任何事件仍将由 ListView 事件处理程序提供服务,尽管继承 class 之间没有事件处理程序?
Microsoft 的 MSDN 和 MFC 文档未涵盖此内容。
谢谢
我认为你是安全的。请记住也要从 .h
文件中删除 DECLARE_MESSAGE_MAP()
。
之所以有效,是因为这些宏基本上创建了此函数的覆盖:
virtual const AFX_MSGMAP* GetMessageMap() const
{ return GetThisMessageMap(); }
以及隐藏继承基类的静态成员函数 class。
static const AFX_MSGMAP* GetThisMessageMap()
{
static AFX_MSGMAP messageMap =
{ baseClass::GetThisMessageMap(), <mapped_messages>... };
return &messageMap;
}
如果您不覆盖它,那么它将使用从基础 class 继承的那些,并且一切都会按预期工作。
如果 BEGIN_MESSAGE_MAP/END MESSAGE 对之间没有要处理的事件,我可以安全地删除它们吗?
我可以
class 我的列表视图:public 列表视图
class 我的专业列表视图 : public 我的列表视图
而MySpecialisedListView有事件需要处理,而MyListView没有。 我能否删除 MyListView 的 BEGIN_MESSAGE_MAP/END MESSAGE 对,并确保 MySpecialisedListView 中未处理的任何事件仍将由 ListView 事件处理程序提供服务,尽管继承 class 之间没有事件处理程序?
Microsoft 的 MSDN 和 MFC 文档未涵盖此内容。
谢谢
我认为你是安全的。请记住也要从 .h
文件中删除 DECLARE_MESSAGE_MAP()
。
之所以有效,是因为这些宏基本上创建了此函数的覆盖:
virtual const AFX_MSGMAP* GetMessageMap() const
{ return GetThisMessageMap(); }
以及隐藏继承基类的静态成员函数 class。
static const AFX_MSGMAP* GetThisMessageMap()
{
static AFX_MSGMAP messageMap =
{ baseClass::GetThisMessageMap(), <mapped_messages>... };
return &messageMap;
}
如果您不覆盖它,那么它将使用从基础 class 继承的那些,并且一切都会按预期工作。