本文翻譯自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日 |