窗口需要处理的消息很多, 如果将每个消息处理过程都设计成虚函数, 则每次类的继承将附带一个庞大的虚函数表, 不适合现实操作。
现在采用的是维护一个消息与处理函数的清单,当产生消息时,搜索该清单找到处理程序运行。
描述 | 位置 | 示例 |
---|---|---|
消息响应函数原型 | .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 |