ATL控件如何屏蔽ESC键啊?

onestation 2007-12-18 10:14:35
1. 用vc2005创建一个ATL复合控件,不写任何代码直接编译后在容器中运行,按下ESC键窗口消失,点一下鼠标又出现窗口.
跟踪发现反复调用UIDeactivate, 不知道该如何屏蔽啊?

2. ATL控件中所有消息是从哪个函数中转发过来的呢?能不能重写, 就像MFC中的PreTranslateMessage一样,可以在传递消息前过滤, 而不是在各个窗口分开处理?
...全文
124 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2007-12-19
  • 打赏
  • 举报
回复
1 ESC键是容器处理的,不能在控件中屏蔽
2 ATL控件中所有消息是从容器发过来的,不能在传递消息前过滤,因为你没有办法控制容器的消息循环。
oldmanzhao 2007-12-19
  • 打赏
  • 举报
回复
没有ATL的经验,哪位大侠来解释一下。
leixuejun 2007-12-19
  • 打赏
  • 举报
回复
同意楼上的说法,那是容器的事,你把控件放在其他容器中的就不会有这种情况了.
jameshooo 2007-12-19
  • 打赏
  • 举报
回复
ActiveX测试容器是已经写好的,当然无法屏蔽消息,而且也无需屏蔽消息。在你的控件实际使用中肯定要使用其它容器,比如IE浏览器,你可以实现IDocHostUIHandlerDispatch接口,并把这个接口通过调用SetExternalUIHandler方法连接到浏览器容器控件上,在TranslateAccelerator方法里实现消息屏蔽。

我提供的基于ATL的CDHtmlDialog类里面已经实现了此功能,可以参考一下代码
eduyu 2007-12-19
  • 打赏
  • 举报
回复
ATL没有消息过滤机制,要自己写,但WTL有,就是PreTranslateMessage。

3,248

社区成员

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

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