有关在ActiveX控件中接收并处理Windows消息的问题。

yoyoung 2006-04-07 12:55:04
我在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.
...全文
333 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shaoqiang 2006-04-13
  • 打赏
  • 举报
回复
可能消息映射没有定义
sunmz_wjxy 2006-04-10
  • 打赏
  • 举报
回复
对话框中需要重载下面的这个函数,下面是我的用法,你可以参考一下.
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 );
}
yoyoung 2006-04-10
  • 打赏
  • 举报
回复
这些方法都试过了,还是不行。:(
xiaoqiqixiao 2006-04-08
  • 打赏
  • 举报
回复
重载你的CEdit,在你的CMyEdit里处理WM_KEYDOWN消息
yoyoung 2006-04-07
  • 打赏
  • 举报
回复
麻烦各位大虾给出具体的方法,多谢。。。

要在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);
}
wlwlxj 2006-04-07
  • 打赏
  • 举报
回复
窗口没有setfocus,请在窗口OnLbuttonDown里面设置SetFocuse,然后才可以接受OnChar消息,
syy64 2006-04-07
  • 打赏
  • 举报
回复
要在Activex建立响应Window消息的事件函数。
yoyoung 2006-04-07
  • 打赏
  • 举报
回复
按照yongdu的方法,重载了DefWindowProc函数,在其中增加处理过程如下:
if (message == WM_KEYDOWN)
{
AfxMessageBox("Hey");
OnBtnMakecall();
return 0L;
}
//AfxMessageBox("Hey1");

return CDialog::DefWindowProc(message, wParam, lParam);

还是没能处理到WM_KEYDOWN消息。

ps:这个过程是要在系统不能处理到的Windows默认调用的吧。
yongdu 2006-04-07
  • 打赏
  • 举报
回复
你要看看在PreTranslateMessage是在什么时候调用的。PreTranslateMessage是在CWinThread::PumpMessage内调用的,而ocx内本就没有CWinThread线程。
所以ocx内是不会调用PreTranslateMessage的。
但ocx是窗口的话,它会来窗口消息,重载DefWindowProc,你直接在内处理就行了。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧