Почему DECLARE_MESSAGE_MAP защищен, но обработчики сообщений общедоступны?

#visual-c

Вопрос:

Пример:

 protected:

    // Protected Virtual Overrides
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

    DECLARE_MESSAGE_MAP()

public:

    // Public Virtual Overrides
    virtual BOOL OnInitDialog();

    // Message handlers
    afx_msg void OnBnClickedOk();
    afx_msg void OnBnClickedCheckUpdateCalendar();
    afx_msg void OnCheckChangeListWeeks();
    afx_msg void OnBnClickedRadioSyncAllWeeks();
    afx_msg void OnBnClickedRadioSyncSingleWeek();
 

Почему система MFC последовательно размещает обработчики событий в этой public области вместо этого? Я спрашиваю, потому что в свое время мы бы увидели такой код:

 //{{AFX_VIRTUAL(CTitleTip)
public:
virtual BOOL PreTranslateMessage(MSG* pMsg) override;
virtual BOOL DestroyWindow() override;
//}}AFX_VIRTUAL
 

Или:

 protected:
    //{{AFX_MSG(CTitleTip)
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
 

Два приведенных выше фрагмента находятся в одном файле. Я понимаю, что protected это значит, чтобы производный класс все еще имел к нему доступ. Но зачем эта смесь?