消息反射机制可以使对消息的处理都集中在控件类中,以CEdit的EN_CHANGE消息为例:
/*MyEdit.h*/
class CMyEdit:public CWindowImpl<CMyEdit, CEdit> {
BEGIN_MSG_MAP(CMyEdit)
REFLECTED_COMMAND_CODE_HANDLER(EN_CHANGE, OnTextChange)
DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()
LRESULT OnTextChange(UINT code, UINT id, HWND hCtrl, BOOL &bHandled) {
MessageBox("TextChanged");
return 0;
}
}
为了能让消息反射到控件,控件的父窗口的消息映射中还需要加上:BEGIN_MSG_MAP(CxxxDlg)....REFLECT_NOTIFICATIONS()END_MSG_MAP()