C++ 在MFC编程中,开始消息映射、结束消息映射是否可以为空?

C++ 在MFC编程中,开始消息映射、结束消息映射是否可以为空?,c++,mfc,C++,Mfc,如果开始消息映射/结束消息对之间没有要处理的事件,我可以安全地删除它们吗 我本来可以的 类MyListView:公共ListView 类MySpecialisedListView:公共MyListView MySpecialisedListView有需要处理的事件,但MyListView没有。 我是否可以删除MyListView的BEGIN_MESSAGE_MAP/END MESSAGE对,并确保任何未在MySpecialisedListView中处理的事件仍将由ListView事件处理程序提供

如果开始消息映射/结束消息对之间没有要处理的事件,我可以安全地删除它们吗

  • 我本来可以的

    类MyListView:公共ListView

    类MySpecialisedListView:公共MyListView

  • MySpecialisedListView有需要处理的事件,但MyListView没有。 我是否可以删除MyListView的BEGIN_MESSAGE_MAP/END MESSAGE对,并确保任何未在MySpecialisedListView中处理的事件仍将由ListView事件处理程序提供服务,尽管其间的继承类没有事件处理程序

    微软的MSDN和MFC文档没有涵盖这一点


    谢谢

    我想你很安全。只需记住从
    .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,当我在创建新项目时取消选中它时,它在代码中不存在