给一个CDialog添加 WM_CHAR -- OnChar 的响应:
void Clearn_WMCHARDlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(::isdigit(nChar) || '.' == nChar)
{
}
else
{
return;
}
CDialog::OnChar(nChar, nRepCnt, nFlags);
}
在函数体中加断点,然后运行程序,你会发现,无论点什么按键,都不能进入函数。
随后添加PreTranslateMessage函数:
BOOL Clearn_WMCHARDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if(WM_CHAR == pMsg->message)
{
SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
return 0;
}
return CDialog::PreTranslateMessage(pMsg);
}
重复前面的动作,这次成功进入短点。可见,PreTranslateMessage在消息机制里面起到“过滤器”的作用。消息产生后,首先要经过它。连它都过不去,是无法被响应的。
参考文章:
http://zhidao.baidu.com/link?url=4CTjHpfxy7OUjyvgKc68gUTTYal0vgoKC1M84ueAzdcDkv9FDEZ6mVNNDNLPbi5zqJw0lwDhdcQfifKaD-OfMLT3HaqPRranImVDDBXCrHi