具体的原因和做法可以参考这一篇博客
MFC DLL如何响应PreTranslateMessage消息
需要注意的是,钩子函数是在整个dll的app进入时统一设置的。因此,在每个具体的对话框类中响应PreTranslateMessage函数时需要注意消息的窗口是不是当前的窗口,即在该函数里面需要做如下判断
BOOL MyDlg::PreTranslateMessage(MSG *pMsg)
{
if (pMsg->hwnd != GetSafeHwnd())
{
return FALSE;
}