我在ActiveX控件中有一个对话框,其中有一个CEidt控件,我想在Edit控件中输入一段内容后按回车键之后弹出一个提示对话框,处理代码如下:BOOL CPortalDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
{
AfxMessageBox("Hello,world.");
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}但是,测试之后上面的代码没有起作用,调试发现在ActiveX控件中居然不能接收到任何的Windows消息。但是放了一个Button,鼠标点击button之后,会出发button的处理过程,但是没有截取到相应的鼠标的Windows消息。为啥?
如果要在OCX中接收并处理Windows消息,该怎么做呢。
不知道原因出在那里,望高手指教,解决问题全部分数奉上,3x.
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
{
AfxMessageBox("Hello,world.");
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}但是,测试之后上面的代码没有起作用,调试发现在ActiveX控件中居然不能接收到任何的Windows消息。但是放了一个Button,鼠标点击button之后,会出发button的处理过程,但是没有截取到相应的鼠标的Windows消息。为啥?
如果要在OCX中接收并处理Windows消息,该怎么做呢。
不知道原因出在那里,望高手指教,解决问题全部分数奉上,3x.
所以ocx内是不会调用PreTranslateMessage的。
但ocx是窗口的话,它会来窗口消息,重载DefWindowProc,你直接在内处理就行了。
if (message == WM_KEYDOWN)
{
AfxMessageBox("Hey");
OnBtnMakecall();
return 0L;
}
//AfxMessageBox("Hey1"); return CDialog::DefWindowProc(message, wParam, lParam);还是没能处理到WM_KEYDOWN消息。ps:这个过程是要在系统不能处理到的Windows默认调用的吧。
{
// TODO: Add your message handler code here and/or call default
AfxMessageBox("Heyyyy");
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
BOOL PreTranslateAccelerator(LPMSG pMsg, HRESULT& hRet)
{
if(pMsg->message == WM_KEYDOWN || pMsg->message == VK_RETURN)
{
if (GetKeyState(VK_CONTROL) < 0 && m_tc.IsTXT() && (pMsg->wParam == 'B' || pMsg->wParam == 'I' ||pMsg->wParam == 'U'))
{
hRet = S_OK;
return true;
}
}
return CComCompositeControl<CItinEx>::PreTranslateAccelerator( pMsg, hRet );
}