ocx控件中的消息映射问题

我在OCX中建立了一个FORMVIEW,FORMVIEW中有一个对话框,对话框中建立了一个属性页。程序执行的一切正常。
但是程序中的一切消息处理和响应都和普通MFC程序不一样。我在VIEW中、属性页中的PreTranslateMessage函数中一个消息也捕获不到。只有通过classwizard映射的键盘消息才能捕获。我之所以要用到PreTranslateMessage函数,是因为我需要捕获属性页中的各个控件的消息。
还有,属性页中的EDIT控件只能输入字符,却不能响应上下左右键和回退键。我想这可能也是消息的问题。
我想问问,是不是OCX控件的消息处理有什么特殊步骤?我也看了MSDN的控件事件的文章,但我的英语水平不高,没看明白,按照MSDN说的,为控件添加了键盘事件,可是系统只为键盘事件自动添加了一个事件映射,却没有相应的处理函数,是不是有什么其它步骤?
...全文
298 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
kulukyo 2003-12-01
  • 打赏
  • 举报
回复
今天误打误撞,试了一种方法,把我自己的问题解决了,不知道对大家有没有帮助,
假设在ocx中加入一个对话框m_dlg,作为ocx的child
BOOL CMyCtrl::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class

//其实方法很简单,就是ocx控件捕获到消息后,然后手工把消息分发给需要这些消息的控件。
//这里可以进行消息的过滤,比如只要键盘消息等等,还可以加入一些判断,把不同的消息
//发给不同的目的地
SendMessage(m_dlg.GetSafeHwnd(),pMsg->message,pMsg->wParam,pMsg->lParam);

return COleControl::PreTranslateMessage(pMsg);
}



kulukyo 2003-12-01
  • 打赏
  • 举报
回复
经典老问题,再up一下
yushulei 2003-08-28
  • 打赏
  • 举报
回复
up!
steve_shun 2003-08-28
  • 打赏
  • 举报
回复
gan zhu UP!
warmchang 2003-08-20
  • 打赏
  • 举报
回复
我没有做过,呵呵,gz....................
yushulei 2003-08-19
  • 打赏
  • 举报
回复
给你up一下吧,我也在郁闷呢!
chineseoldghost 2003-08-13
  • 打赏
  • 举报
回复
可否在active复合控件中使用动态创建控件呢,哥哥们
不知道啊,我都不知道什么叫复合控件。
SeaSurf 2003-08-12
  • 打赏
  • 举报
回复
GZ
还没呢?真不知该怎么办。
godwei 2003-08-08
  • 打赏
  • 举报
回复
我也遇到了这个问题,现在解决了没有?
taianmonkey 2003-07-18
  • 打赏
  • 举报
回复
to wzfree(肿眼泡) :

看看派生类:

COleControl::PreTranslateMessage(pMsg);
masx 2003-07-18
  • 打赏
  • 举报
回复
gz
wenn 2003-07-18
  • 打赏
  • 举报
回复
这个问题还没有解决吧,解决之后总结出来,感激不尽
rowanrowan(rowan)兄的办法我试过了,
rowanrowan 2003-07-16
  • 打赏
  • 举报
回复
把要收消息的控件加上notify属性
蒋晟 2003-07-16
  • 打赏
  • 举报
回复
不行的话就Hook消息吧,但是可能造成宿主程序消息处理出错
to jiangsheng(蒋晟.Net) :
我已经在CMyEditCtrl类中重载了PreTranslateMessage,但别说是WM_KEYDOWN消息,
我在调试中,根本就无法进入PreTranslateMessage,也就是说,包括OnPant消息都无法截获。
这是怎么回事呢?
蒋晟 2003-07-11
  • 打赏
  • 举报
回复
// Trap keys and forward on to the control.
BOOL CMyEditCtrl::PreTranslateMessage(MSG* pMsg)
{
switch (pMsg->message)
{
case WM_KEYDOWN:
case WM_KEYUP:
switch (pMsg->wParam)
{
case VK_UP:
case VK_DOWN:
case VK_LEFT:
case VK_RIGHT:
case VK_HOME:
case VK_END:
SendMessage (pMsg->message, pMsg->wParam, pMsg->lParam);
// Windowless controls won't be able to call SendMessage.
// Instead, just respond to the message here.
return TRUE;
}
break;
}
return COleControl::PreTranslateMessage(pMsg);
}
因为容器处理了一些本来是控件应该处理的消息,所以PreTranslateMessage没有被调用
以上转自
Q180402 PRB: MFC ActiveX Control Ignores ARROW Keys on VB Container
现在的人连MSDN都不看……


kulukyo 2003-07-10
  • 打赏
  • 举报
回复
这个问题我也遇到过,真是很头疼,弄了好久也没有解决。

最后只能避开它,

如果你是在做项目,建议你不要使用PropertySheet和PropertPage,换成TabCtrl和Dialog来自己控制吧,

如果单单是研究,我也很想知道解决办法,关注中................
加载更多回复(15)

3,245

社区成员

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

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