C++ 在MFC编程中,开始消息映射、结束消息映射是否可以为空?
如果开始消息映射/结束消息对之间没有要处理的事件,我可以安全地删除它们吗C++ 在MFC编程中,开始消息映射、结束消息映射是否可以为空?,c++,mfc,C++,Mfc,如果开始消息映射/结束消息对之间没有要处理的事件,我可以安全地删除它们吗 我本来可以的 类MyListView:公共ListView 类MySpecialisedListView:公共MyListView MySpecialisedListView有需要处理的事件,但MyListView没有。 我是否可以删除MyListView的BEGIN_MESSAGE_MAP/END MESSAGE对,并确保任何未在MySpecialisedListView中处理的事件仍将由ListView事件处理程序提供
谢谢我想你很安全。只需记住从
.h
文件中删除DECLARE\u MESSAGE\u MAP()
这是因为这些宏基本上创建了此函数的覆盖:
virtual const AFX_MSGMAP* GetMessageMap() const
{ return GetThisMessageMap(); }
以及静态成员函数,该函数对继承的基类隐藏该成员函数
static const AFX_MSGMAP* GetThisMessageMap()
{
static AFX_MSGMAP messageMap =
{ baseClass::GetThisMessageMap(), <mapped_messages>... };
return &messageMap;
}
static const AFX_MSGMAP*GetThisMessageMap()
{
静态AFX\U MSGMAP消息映射=
{baseClass::GetThisMessageMap(),…};
return&messageMap;
}
如果您不重写它,那么它将使用从基类继承的类,所有这些都将按预期工作。我认为您是安全的。只需记住从
.h
文件中删除DECLARE\u MESSAGE\u MAP()
这是因为这些宏基本上创建了此函数的覆盖:
virtual const AFX_MSGMAP* GetMessageMap() const
{ return GetThisMessageMap(); }
以及静态成员函数,该函数对继承的基类隐藏该成员函数
static const AFX_MSGMAP* GetThisMessageMap()
{
static AFX_MSGMAP messageMap =
{ baseClass::GetThisMessageMap(), <mapped_messages>... };
return &messageMap;
}
static const AFX_MSGMAP*GetThisMessageMap()
{
静态AFX\U MSGMAP消息映射=
{baseClass::GetThisMessageMap(),…};
return&messageMap;
}
如果不重写它,那么它将使用从基类继承的代码,所有这些都将按预期工作。为什么要这样做?因为这样会使代码更小。原则是,如果类不需要某些东西,那么就不要添加它(附带安全和正确的条件)。在我的例子中,BEGIN_MESSAGE_MAP/END MESSAGE(为空)中的一个用于大约TDLG,当我在创建新项目时取消选中它时,它在代码中不存在。为什么要这样做?因为它使代码变小了。原则是,如果类不需要某些东西,那么就不要添加它(附带安全和正确的条件)。在我的例子中,BEGIN_MESSAGE_MAP/END MESSAGE(为空)中的一个用于AboutDlg,当我在创建新项目时取消选中它时,它在代码中不存在