我在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.

解决方案 »

  1.   

    你要看看在PreTranslateMessage是在什么时候调用的。PreTranslateMessage是在CWinThread::PumpMessage内调用的,而ocx内本就没有CWinThread线程。
    所以ocx内是不会调用PreTranslateMessage的。
    但ocx是窗口的话,它会来窗口消息,重载DefWindowProc,你直接在内处理就行了。
      

  2.   

    按照yongdu的方法,重载了DefWindowProc函数,在其中增加处理过程如下:
    if (message == WM_KEYDOWN)
    {
    AfxMessageBox("Hey");
    OnBtnMakecall();
    return 0L;
    }
    //AfxMessageBox("Hey1"); return CDialog::DefWindowProc(message, wParam, lParam);还是没能处理到WM_KEYDOWN消息。ps:这个过程是要在系统不能处理到的Windows默认调用的吧。
      

  3.   

    要在Activex建立响应Window消息的事件函数。
      

  4.   

    窗口没有setfocus,请在窗口OnLbuttonDown里面设置SetFocuse,然后才可以接受OnChar消息,
      

  5.   

    麻烦各位大虾给出具体的方法,多谢要在Activex建立响应Window消息的事件函数?我已经设置了相应的Windows处理函数的呀。void CPortalDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    // TODO: Add your message handler code here and/or call default
             AfxMessageBox("Heyyyy");

    CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
    }
      

  6.   

    重载你的CEdit,在你的CMyEdit里处理WM_KEYDOWN消息
      

  7.   

    对话框中需要重载下面的这个函数,下面是我的用法,你可以参考一下.
    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 );
       }