早教吧作业答案频道 -->其他-->
请问mfc组件中如何使PreTranslateMessage函数有作用,望给个明确易懂的步骤dll组件:BOOLCDlg::PreTranslateMessage(MSG*pMsg){\x09if(pMsg->message==WMKEYDOWN)\x09{\x09\x09MessageBox("您按下了rt");\x09}\x09returnCDialog::Pr
题目详情
请问mfc组件中如何使PreTranslateMessage函数有作用,望给个明确易懂的步骤
dll组件:
BOOL CDlg::PreTranslateMessage(MSG* pMsg)
{
\x09if (pMsg->message==WM_KEYDOWN)
\x09{
\x09\x09 MessageBox("您按下了rt");
\x09}
\x09return CDialog::PreTranslateMessage(pMsg);
}
如上面,我在程序中添着,没反应,在exe程序中可以的,希望给个方法,理论我不大懂
dll组件:
BOOL CDlg::PreTranslateMessage(MSG* pMsg)
{
\x09if (pMsg->message==WM_KEYDOWN)
\x09{
\x09\x09 MessageBox("您按下了rt");
\x09}
\x09return CDialog::PreTranslateMessage(pMsg);
}
如上面,我在程序中添着,没反应,在exe程序中可以的,希望给个方法,理论我不大懂
▼优质解答
答案和解析
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了.
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了.
看了 请问mfc组件中如何使Pre...的网友还看了以下:
将下列成语按(A)聪明、(B)技高、(C)机敏、(D)住那个心;四个方面归类耳聪目明目无全牛眼明手 2020-05-21 …
不会有用按键精灵,求按键精灵高手帮忙。如何用按键精灵,使我当按下Q时,就等于“按住A,再按住S,再 2020-07-23 …
喜羊羊喜欢学数学,它用计算器求3个正整数(a+b)÷c的值,当它依次按了a,+,b,÷,c,=,得到 2020-11-06 …
小琳用计算器求3个正整数a、b、c的表达式a+bc的值,她依次按下a,+,b,÷,c,=,得到数值1 2020-11-16 …
1.xx用计算器求三个正整数a,b,c的表达式(a+b)/c的值.他依次按了a+b/c=,得到数11 2020-11-16 …
明明用计算器求三个正整数a,b,c的表达式a+bc的值,她依次按了a+b÷c=,得到数值11.而当她 2020-11-16 …
费尔巴哈在对各国的神进行认真的考察后指出:“自然神不是别的,就是自然本身;人神不是别的,就是人本身。 2020-12-07 …
按明代规制,地方四品以上宫员禁止经商。然面明代中叶以后,地方臣子们纷纷“下海”。嘉庆时期,首辅徐阶就 2020-12-10 …
将下列成语按(A)聪明、(B)技高、(C)机敏、(D)住那个心;四个方面归类耳聪目明目无全牛眼明手快 2020-12-13 …
1.xx用计算器求三个正整数a,b,c的表达式(a+b)/c的值.他依次按了a+b/c=,得到数11 2021-01-05 …