早教吧作业答案频道 -->其他-->
请问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...的网友还看了以下:
6(m-n)³-12(n-m)²=6(m-n)^2[(m-n)+2]=6(m-n)^2(m-n+2 2020-04-09 …
6(m-n)³-12(n-m)²=6(m-n)^2[(m-n)+2]=6(m-n)^2(m-n+2 2020-04-09 …
C(n+1,m)=C(n,m)+C(n,m+1)好像是这个公式吧,我也不是很熟,这个公式究竟是怎么 2020-04-26 …
把m个不同的球放到n个不同的盒子中(不可空),有多少种方法?注意是不同的盒子与不同的球等价于求从m 2020-05-13 …
有理数概念中为什么有理数可以写成M/N且M,M互质?整数和分数统称为有理数,任何一个有理数都可以写 2020-05-16 …
甲乙两同学分解因式x^2+mx+n,甲看错了n,分解结果为(x+2)(x+4);乙看错了m,分解结 2020-05-20 …
一个城市铁路系统只卖从一站出发到达另一站的单程车票,每一张票说明起点站和终点站.若原有m个站点,现 2020-06-17 …
N个一样的球,放到M个有编号的箱子里,有多少种放法?举例N=3,M=2,有4种方法:3,0,;2, 2020-07-14 …
排列数与组合数m等于0时的情况1.首先排列数有Am.n,如果m=0.n>0则Am.n=n×(n-1) 2020-11-18 …
高一数学题,很难得,求请教,要有过程!若集合A={(m,n)丨(m+1)分之n,m,n∈R},B={ 2020-12-14 …