ATL编写的ATL控件在IE7,8,9,10(兼容性视图)中无法创建窗口,m_hWnd一直为NULL

fly4free 2015-06-24 02:18:13
开发环境是 Win7 64位 + VS2010 + IE10, 建立的是ATL项目,选择了支持MFC。

我的控件功能之一,就是js捕获控件的事件,然后进行响应处理。
控件在 IE10 默认情况下运行正常。

但是在标题中提到的各种情况下都不正常了,直接效果就是 控件对象的 m_hWnd 为 NULL.
(一开始是在纯IE8中发现的不正常,后来在IE10里切换模式,问题重现了。。)

我调试了一下,发现在正常的情况下,会调用 IOleObjectImpl::DoVerb 这个方法,进而传递 OLEIVERB_INPLACEACTIVATE,想是在这个case下创建了窗口。
但在不正常的情况下,不会调用那个方法。

我也只能找到这里了,哪位大侠指导一下?感谢!
...全文
455 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
myseemydog 2015-08-27
  • 打赏
  • 举报
回复
把plugin html代码嵌入到iframe里面加载
绿建科技 2015-07-07
  • 打赏
  • 举报
回复
//解决m_hWnd为空的问题 if (pClientSite) { RECT rc = {0,0,0,0}; HWND hWnd = CreateControlWindow(::GetDesktopWindow(),rc); _ASSERT (hWnd); } 这个问题我也遇到了,解决了,不过现在我的空间在IE11上位置显示异常,方便加我QQ:2850363663探讨研究吗
fly4free 2015-06-30
  • 打赏
  • 举报
回复
虽然不知道为什么,不过我新建立了一个接口方法,在里面判断如果m_hWnd为NULL的话, 我就调用 DoVerb 方法里 OLEIVERB_INPLACEACTIVATE 这个case 所调用的代码,自己来创建这个窗口。 目前来看,这种方式还没遇其他问题。
fly4free 2015-06-25
  • 打赏
  • 举报
回复
引用 3 楼 redui 的回复:
控件分两种:一种是有窗口的,一种是无窗口的,控件可自己决定实现哪种,看看控件自己实现的接口类型就能决定,有些控件两种都实现了。但容器有权决定使用哪种方式创建控件,也许IE不同版本采用了不同策略。你这个问题提供的信息不充分,难以决定错误原因。
利用用向导添加的“ATL控件”,除了类名,其余算是默认设置。是有窗口的。 并且也加入了:
m_bWindowOnly = TRUE;
redui 2015-06-25
  • 打赏
  • 举报
回复
控件分两种:一种是有窗口的,一种是无窗口的,控件可自己决定实现哪种,看看控件自己实现的接口类型就能决定,有些控件两种都实现了。但容器有权决定使用哪种方式创建控件,也许IE不同版本采用了不同策略。你这个问题提供的信息不充分,难以决定错误原因。
redui 2015-06-25
  • 打赏
  • 举报
回复
OLEIVERB_INPLACEACTIVATE这个动作是必须调用的,除非之前的初始化出问题了
fly4free 2015-06-24
  • 打赏
  • 举报
回复
引用 1 楼 shenyi0106 的回复:
多数情况下,是由于权限问题导致的。 可以尝试把UAC关掉,或者用管理员权限运行IE试试看。
我现在就是关闭了UAC,做开发的打开UAC多麻烦啊
shenyi0106 2015-06-24
  • 打赏
  • 举报
回复
多数情况下,是由于权限问题导致的。 可以尝试把UAC关掉,或者用管理员权限运行IE试试看。

3,245

社区成员

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

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