我在 VisualC++10 中使用 ATL 来托管浏览器控件。
我的代码与此示例类似:http://msdn.microsoft.com/en-us/library/9d0714y1(v=vs.80).aspx http://msdn.microsoft.com/en-us/library/9d0714y1(v=vs.80).aspx
不同之处在于我有主窗口,然后子窗口托管浏览器控件。
2 分钟后,我必须完全关闭浏览器,杀死浏览器 activeX,但这个子窗口应该处于活动状态并执行其他操作。但不知何故,这个浏览器控件仍然留在那里,我可以看到滚动条或其他东西。
我还尝试通过创建子窗口到现有的子窗口,然后在关闭浏览器时销毁子窗口的这个子窗口 - 但它仍然不起作用!
这就是我的关闭方式:
CLOSE()
{
m_spIWebBrowser2->Navigate(bstrURL, &vEmpty, &vEmpty, &vEmpty, &vEmpty);
m_spIWebBrowser2->Stop();
m_spIWebBrowser2->put_Visible(VARIANT_FALSE);
m_spIWebBrowser2->Quit();
DestroyWindow(m_wndChild.m_hWnd);
}
Thanks!
关闭网络浏览器控件时,我遇到了许多“访问冲突”问题,这些是对我有用的步骤:
- 取消建议任何先前建议的事件(在我的例子中为 DWebBrowserEvents2)。
- 如果您已附加点击事件,请像这样取消附加它们:
_variant_t v; v.vt = VT_DISPATCH; v.pdispVal = 0; IHTMLDocument2->put_onclick(v);
IWebBrowser2->Stop()
-
IWebBrowser2->ExecWB(OLECMDID_CLOSE, OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
- 通过 window.external.CloseWindow() 关闭浏览器窗口时,我遇到了未处理的异常,并且 OLECMDID_CLOSE 修复了它。
IWebBrowser2->put_Visible(VARIANT_FALSE)
IWebBrowser2->Release()
IOleInPlaceObject->InPlaceDeactivate()
IOleInPlaceObject->Release()
IOleObject->DoVerb(OLEIVERB_HIDE, NULL, IOleClientSite, 0, windowHandle_, NULL)
IOleObject->Close(OLECLOSE_NOSAVE)
OleSetContainedObject(IOleObject, FALSE)
IOleObject->SetClientSite(NULL)
CoDisconnectObject(IOleObject, 0)
IOleObject->Release()
IWebBrowser2->Quit()
不应为 WebBrowser 控件 (CLSID_WebBrowser) 调用,它仅适用于 Internet Explorer 对象 (CLSID_InternetExplorer)。
为什么一定要这么难?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)