天天看點

如何 :在ActiveX控件中獲得頂層IWebBrowser2接口

本文翻譯自http://support.microsoft.com/kb/257717

如何: 在ActiveX 控件中獲得頂層 IWebBrowser2 接口

此文章的資訊應用于:

  • Microsoft Internet Explorer (程式設計) 版本4.0, 4.01, 4.01 SP1, 4.01 SP2, 5, 5.01, 5.5

概要

微軟知識庫文章

Q172763 資訊:在ActiveX 中通路對象模型

說明了如何在控件中獲得所在視窗的IWebBrowser2的引用。但是,開發者實際上經常需要的是飽含架構集的頂層IWebBrowser2的引用。例如,當你在網頁載入之前調用statusText() 指令設定狀态欄的值時可以用到。因為這個屬性對WebBrowser控件無效,是以調用所在架構的IWebBrowser2的函數會産生錯誤。

更多資訊

為獲得頂層IWebBrowser2 引用, 從客戶站點擷取IServiceProvider接口并且執行一個QueryService 操作擷取IID_IServiceProvider服務:SID_STopLevelBrowser (這在Shlguid.h中定義);對第二個IServiceProvider,執行一個QueryService 擷取IID_IWebBrowser2 服務:SID_SWebBrowserApp.

做這件事情最适合的地方是在IOleObject的SetClientSite() 方法裡面:

#include <SHLGUID.h>

#define COMRELEASE(ptr)/ 
	if (ptr != NULL) {/ 
		ptr->Release();/ 
		ptr = NULL;/	
	}

IWebBrowser2 *browser = NULL;

STDMETHODIMP SetClientSite(IOleClientSite *pClientSite) 
{
	HRESULT hr = S_OK;
	IServiceProvider *isp, *isp2 = NULL;
	if (!pClientSite)
	{
		COMRELEASE(browser);
	}  
	else
	{
		hr = pClientSite->QueryInterface(IID_IServiceProvider, reinterpret_cast<void **>(&isp));
		if (FAILED(hr)) 
		{
			hr = S_OK;
			goto cleanup;
		}
		hr = isp->QueryService(SID_STopLevelBrowser, IID_IServiceProvider, reinterpret_cast<void **>(&isp2));
		if (FAILED(hr))
		{
			hr = S_OK;
			goto cleanup;
		}
		hr = isp2->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void **>(&browser));
		if (FAILED(hr)) 
		{
			hr = S_OK;
			goto cleanup;
		}
	cleanup:
		// Free resources.
		COMRELEASE(isp);
		COMRELEASE(isp2);
		return hr;
	}
}       

參考

要更多資訊,單擊下面的文檔編号檢視微軟知識庫中的文章

Q172763 資訊: 在ActiveX中通路對象模型

要更多關于開發基于Web的Internet Explorer解決方案,請通路下列站點:

http://msdn.microsoft.com/workshop/entry.asp

http://msdn.microsoft.com/ie/

http://support.microsoft.com/highlights/iep.asp?FR=0&SD=MSDN

© 微軟公司 2000,保留所有權利

微軟公司的Jay Andrew Allen 投稿

額外的查詢關鍵字:IServiceProvider SID_STopLevelBrowser IWebBrowser2

關鍵字: kbActiveX kbCtrl kbIE kbIE400 kbGrpDSInet kbie500 kbDSupport kbie501 kbie550 

文章類型 : kbhowto 

技術 : kbIEsearch kbAudDeveloper kbSDKIESearch kbIE500Search kbSDKIE400 kbSDKIE401 kbSDKIE401SP1 kbSDKIE401SP2 kbSDKIE500 kbSDKIE501 kbSDKIE550 kbIE550Search

上次更新: 2001年7月21日

繼續閱讀