MFC 消息映射

窗口需要处理的消息很多, 如果将每个消息处理过程都设计成虚函数, 则每次类的继承将附带一个庞大的虚函数表, 不适合现实操作。

现在采用的是维护一个消息与处理函数的清单,当产生消息时,搜索该清单找到处理程序运行。

消息映射机制的三个部分

描述 位置 示例
消息响应函数原型 .h //{{AFX_MSG(CCopyexDlg)
afx_msg void Onsave();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
消息映射宏 .cpp BEGIN_MESSAGE_MAP(CCopyexDlg, CDialog)
//{{AFX_MSG_MAP(CCopyexDlg)
ON_COMMAND(IDM_save, Onsave)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
消息响应函数定义 .cpp void CCopyexDlg::Onsave()
{
   return;
}

处理多对一

多个消息对应一个处理过程的方法。

ON_COMMAND_RANGE(ID_P1, ID_P10, OnChangeP)
描述 位置
ID_P1 最小的消息
ID_P2 最大的消息,消息号必须连续
OnChangeP 处理函数,void OnChangeP(UINT nID)

nID 即为原来的消息 ID