请问mfc组件中如何使PreTranslateMessage函数有作用,望给个明确易懂的步骤

dll组件:BOOLCDlg::PreTranslateMessage(MSG*pMsg){if(pMsg->message==WM_KEYDOWN){MessageBo... dll组件:
BOOL CDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message==WM_KEYDOWN)
{
MessageBox("您按下了rt");
}
return CDialog::PreTranslateMessage(pMsg);
}
如上面,我在程序中添着,没反应,在exe程序中可以的,希望给个方法,理论我不大懂
展开
 我来答
bhtzu
2014-02-12 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4234万
展开全部
PreTranslateMessage是标准窗口的消息预处理响应函数,在任何标准窗口有效。
DLL中窗口的创建是在一个导出函数中,并在调用CWnd::Create这前调用了
AFX_MANAGE_STATE(AfxGetStaticModuleState())来切换模块线程状态,导致该窗口所在的模块线程状态和MFC调用CWinApp::PreTranslateMessage时的不同,所以DLL中的窗口就无法响应PreTranslateMessage函数了。
解决方案:
1.dll导出一条函数 DllPreTranslateMessage
BOOL PASCAL DllPreTranslateMessage(MSG *pMsg)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return theApp.PreTranslateMessage(pMsg);
}
2.在主程序的CWinApp的PreTranslateMessage中直接调用DLL的DllPreTranslateMessage函数。但记住要先调用DLL中的函数。
BOOL CMyApp::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(DllPreTranslateMessage(pMsg))
return TRUE;
return CWinApp::PreTranslateMessage(pMsg);
}
经过以上两步,DLL中的窗口就可以响应PreTranslateMessage了。
ccvoid
2014-02-12
知道答主
回答量:51
采纳率:0%
帮助的人:22.7万
展开全部
一般DLL中,使用 WindowProc
用法和PreTranslateMessage基本一样,试试吧。

另外,菜鸟大道期待你的加入哦。
菜鸟大道是专为新人入门而开设的~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式