您的位置:首页 > 其它

自己对PretranslateMessage的一点理解

2015-12-17 21:37 357 查看
给一个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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: