我对CEdit
控件 ( CCheckeEdit
) 进行了子类化。
我需要捕捉ON_CHANGE
这个类并将消息发送到对话框(EN_CHANGE
也可以在对话框中捕捉)。
在 subclassedCCheckeEdit
中,我遵循了钩子程序:
BEGIN_MESSAGE_MAP(CCheckedEdit, CEdit)
ON_WM_CHAR()
ON_WM_CTLCOLOR_REFLECT()
ON_CONTROL_REFLECT(EN_CHANGE, &CCheckedEdit::OnEnChange)
ON_WM_TIMER()
ON_WM_NCMOUSEMOVE()
END_MESSAGE_MAP()
//....
//....
void CCheckedEdit::OnEnChange()
{
Validing();
int res = ::SendMessage(GetParent()->m_hWnd, WM_COMMAND, (WPARAM)MAKELONG(3, EN_CHANGE), (LPARAM)GetParent()->m_hWnd);
}
在对话框中我有:
BEGIN_MESSAGE_MAP(CProjMfcDlg, CMjAcDialog)
ON_EN_CHANGE(IDC_EDIT, &CProjMfcDlg::OnEnChangeEdit)
END_MESSAGE_MAP()
void CProjMfcDlg::OnEnChangeEdit()
{
CString str;
GetDlgItemText(str);
if(str==....)
// some validating code
// set some button disable or enable
}
但CProjMfcDlg::OnEnChangeEdit()
不会处理(我在那里有断点)。
我究竟做错了什么?
OnEnChange
上述程序是完整的。是的,我使用 MFC 反射:
BEGIN_MESSAGE_MAP(CCheckedEdit, CEdit)
ON_WM_CHAR()
ON_WM_CTLCOLOR_REFLECT()
ON_CONTROL_REFLECT(EN_CHANGE, &CCheckedEdit::OnEnChange)
ON_WM_TIMER()
ON_WM_NCMOUSEMOVE()
END_MESSAGE_MAP()