首页 > 解决方案 > 为什么 DECLARE_MESSAGE_MAP 受保护但消息处理程序是公开的?

问题描述

例子:

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意思,所以派生类仍然可以访问它。但为什么是这种混合物?

标签: visual-c++

解决方案


推荐阅读