如何再IE的控件里来关闭IE窗口?
我的代码如下:
LRESULT CPlayer::MyCloseWindow()
{
CComPtr<IOleContainer>spIE;
m_spClientSite->GetContainer(&spIE);
CComPtr<IHTMLWindow2>spWnd;
CComQIPtr<IHTMLDocument2,&IID_IHTMLDocument2>spDoc(spIE);
if(spDoc){
spDoc->get_parentWindow(&spWnd);
if(spWnd){
spWnd->close();
}
}
return 0;
}
发现m_spClientSite->GetContainer(&spIE);返回的spIE为空,不知是何原因?
是不是只支持IE4.0?但我用ActiveX Container Tester测试也不成呀
问题点数:0、回复次数:9Top
1 楼sdwalnut1(豆浆加油条)回复于 2004-11-03 08:55:26 得分 0
关注Top
2 楼newkey007(无限天空 www.xDrv.com)回复于 2004-11-03 09:29:54 得分 0
在 olesetclientsite 中获取
Top
3 楼dropingleaf(叶孤飞云)回复于 2004-11-03 09:35:44 得分 0
学习Top
4 楼wwwsq(wwwsq)回复于 2004-11-03 09:47:17 得分 0
gzTop
5 楼g_ongtian(奇怪吸引子)回复于 2004-11-03 10:18:06 得分 0
先得到IWebBrowser2对象然后调用Quit();
IWebBrowser2 &mWebBrowser2
mWebBrowser2->Quit();Top
6 楼vinci(vinci)回复于 2004-11-03 10:40:25 得分 0
现在是Container都没有获取到呀
有没有完整一些代码?
谢谢!Top
7 楼weiziyuner(烂人)回复于 2004-11-03 10:43:22 得分 0
最好在ACTIVEX中做一个event,在你要关闭的时候fire 这个event
然后在网页中响应这个event 关闭ie就可以了:)
我试过,还挺好用的:)
<SCRIPT LANGUAGE=javascript FOR=yourobject EVENT="OnKillIEWnd()" id=1>
<!--
window.close();
//-->
</SCRIPT>Top
8 楼aspnetwuxueyou(SHIP IT)回复于 2004-11-03 10:47:23 得分 0
HWND hwnd;
m_spInPlaceSite->GetWindow(&hwnd);
then send message to the window
Top
9 楼vinci(vinci)回复于 2004-11-03 11:52:44 得分 0
我已经搞定了
原来的代码可以的,只是我在一个独立的线程里执行它就不行,现在我是通过消息机制在主窗口里关闭。
还有另外一段代码也可以:
CComPtr<IWebBrowser2> browser;
CComPtr<IServiceProvider> isp;
HRESULT hr = m_spClientSite->QueryInterface(IID_IServiceProvider, reinterpret_cast<void **>(&isp));
if(FAILED(hr)) return 0;
hr = isp->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void **>(&browser));
if(FAILED(hr)) return 0;
hr = browser->Quit();
这个在退出时没有提示“正在关闭”,更好些Top




