• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            如何對(duì)webbrowser和IE編程(七)

            加入高級(jí)功能

            本節(jié)將展示如何加入高級(jí)功能到你的應(yīng)用程序或者ActiveX控件.將展示如何從一個(gè)ActiveX控件中訪問Internet Explorer的 IWebBrowser2,以及如何從一個(gè)Web頁(yè)面的frame中獲得WebBrowser 對(duì)象。將會(huì)展示實(shí)現(xiàn)一些并非容易實(shí)現(xiàn)的功能.本節(jié)有一定難度.所有代碼采用C++ 和COM實(shí)現(xiàn),你應(yīng)當(dāng)有一定堅(jiān)實(shí)的基礎(chǔ)才可以完成本節(jié)的理解

            ActiveX 控件中訪問Internet Explorer 的IWebBrowser2

            Activx控件中訪問IWebBrowser2 接口提供了用戶定制瀏覽器的能力,雖然以此作為自己的控件功能不大光明,且你只能夠在VC編寫的activeX控件中訪問。(盡管可以在VB寫的控件中訪問document和window控件,但是你不可以直接訪問WebBrowser 自身) .

            存取? IWebBrowser2 接口經(jīng)過四個(gè)步驟:

            1. ??? 在類文件中包含 ExDisp.h .

            2. ?????? 調(diào)用控件的站點(diǎn)的 IOleClientSite::GetContainer 方法,該方法返回由 Internet Explorer. 實(shí)現(xiàn)的 IOleContainer 接口的指針。

            3. ?????? 如果步驟 2 成功,用 IOleContainer 指針查詢 IServiceProvider 接口。 .

            4. ?????? 如果步驟 3 成功 , 調(diào)用 IServiceProvider 的方法 QueryService 的到 IWebBrowser2 接口。

            QueryService 方法攜帶3個(gè)參數(shù). 第一個(gè)參數(shù)指定你想訪問的服務(wù)。為得到IWebBrowser2 指針, 需要指定SID_SInternetExplorer 或者SID_SWebBrowserApp 來指定要訪問的服務(wù). (現(xiàn)階段,他們?nèi)慷x為IID_IWebBrowserApp.) 第二個(gè)參數(shù)指定你想接收的接口的ID。此參數(shù)你應(yīng)當(dāng)指定為IID_IWebBrowser2. 最后,第三個(gè)參數(shù)你需要指定哪一個(gè)變量接收返回的接口指針。

            Call any method or property of IWebBrowser2. 當(dāng)完成后,確信你已經(jīng)釋放掉你獲取的接口指針.以下為代碼參數(shù).

            												
            														////////////////////////////////////////////////////////
            												
            										
            												
            														// Begin Step 1
            												
            										
            												
            														
            																?

            												
            														#include <ExDisp.h>
            												
            										
            												
            														#include <shlguid.h>
            												
            										
            												
            														
            																?

            												
            														// End Step 1
            												
            										
            												
            														////////////////////////////////////////////////////////
            												
            										
            												
            														
            																?

            												
            														CSomeClass::SomeMethod(){
            												
            										
            												
            														
            																?

            												
            														////////////////////////////////////////////////////////
            												
            										
            												
            														// Begin Step 2
            												
            										
            												
            														
            																?

            												
            														IOleContainer* pContainer;
            												
            										
            												
            														
            																?

            												
            														// m_pClientSite is a pointer to IOleClientSite.
            												
            										
            												
            														// This is the client site for your control.
            												
            										
            												
            														//
            												
            										
            												
            														HRESULT hr = m_pClientSite->GetContainer(&pContainer);
            												
            										
            												
            														if (FAILED(hr))
            												
            										
            												
            														
            																
            																		?? return hr;
            														
            												
            										
            												
            														
            																?

            												
            														// End Step 2
            												
            										
            												
            														////////////////////////////////////////////////////////
            												
            										
            												
            														
            																?

            												
            														////////////////////////////////////////////////////////
            												
            										
            												
            														// Begin Step 3
            												
            										
            												
            														
            																?

            												
            														IServiceProvider* pServiceProvider;
            												
            										
            												
            														
            																?

            												
            														hr = pContainer->QueryInterface(IID_IServiceProvider,
            												
            										
            												
            														
            																
            																		??????????????????????????????? (void**)&pServiceProvider);
            														
            												
            										
            												
            														pContainer->Release();
            												
            										
            												
            														
            																?

            												
            														if (FAILED(hr))
            												
            										
            												
            														
            																
            																		?? return hr;
            														
            												
            										
            												
            														
            																?

            												
            														// End Step 3
            												
            										
            												
            														////////////////////////////////////////////////////////
            												
            										
            												
            														
            																?

            												
            														
            																?

            												
            														////////////////////////////////////////////////////////
            												
            										
            												
            														// Begin Step 4
            												
            										
            												
            														
            																?

            												
            														IWebBrowser2* pWebBrowser;
            												
            										
            												
            														
            																?

            												
            														hr = pServiceProvider->QueryService(SID_SWebBrowserApp,
            												
            										
            												
            														
            																
            																		?????????????????????????? IID_IWebBrowser2,
            														
            												
            										
            												
            														
            																
            																		?????????????????????????? (void**)&pWebBrowser);
            														
            												
            										
            												
            														pServiceProvider->Release();
            												
            										
            												
            														
            																?

            												
            														if (FAILED(hr))
            												
            										
            												
            														
            																
            																		?? return hr;
            														
            												
            										
            												
            														
            																?

            												
            														// End Step 4
            												
            										
            												
            														////////////////////////////////////////////////////////
            												
            										
            												
            														
            																?

            												
            														
            																?

            												
            														////////////////////////////////////////////////////////
            												
            										
            												
            														// Begin Step 5
            												
            										
            												
            														
            																?

            												
            														// Call some IWebBrowser2 methods and/or properties.
            												
            										
            												
            														
            																?

            												
            														// End Step 5
            												
            										
            												
            														////////////////////////////////////////////////////////
            												
            										
            												
            														}
            												
            										

            利用一個(gè)控件打印web頁(yè)

            早于5的Internet Explorer,通常用于ActiveX中 訪問IWebBrowser2 接口以提供打印web頁(yè)面的功能。盡管ie5允許你直接在web頁(yè)的script中使用 window.print, 但是建立一個(gè)提供打印web頁(yè)的功能的示范還是比較好教您使用IWebBrowser2接口的入門教程.在此之前,必要知道如何使用ATL建立一個(gè)activeX控件以實(shí)現(xiàn)打印功能. 關(guān)于此點(diǎn),我將認(rèn)為您已經(jīng)知道如何使用ATL創(chuàng)建一個(gè)控件.

            啟動(dòng)Visual C++, 新建 ATL DLL工程. 你可將工程命名為 AtlPrint. 下一步, 使用Wizard增加一個(gè)Lite Control 到你的工程。 你可以命名你的控件為PrintCtl. 為IPrintCtl 接口添加一個(gè)方法Print. 之后你將在腳本中使用此方法打印當(dāng)前Web page.

            在實(shí)現(xiàn)Print 方法前,首先包含ExDisp.h 和 shlguid.h 頭文件到PrintCtl.cpp 實(shí)現(xiàn)文件.

            下一步使用之前給出的獲取IWebBrowser2 接口的方法獲得接口并調(diào)用ExecWB 以實(shí)現(xiàn)打印當(dāng)前Web頁(yè). 你可以使用ATL 智能接口指針類—CComPtr 以及 CComQIPtr—以實(shí)現(xiàn)查詢接口處理引用次數(shù)等艱苦的工作.此處為智能指針示勇代碼:

            												
            														STDMETHODIMP CPrintCtl::Print()
            												
            										
            												
            														{
            												
            										
            												
            														
            																
            																		?? HRESULT hr = E_FAIL;
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		?? if (m_spClientSite)
            														
            												
            										
            												
            														
            																
            																		?? {
            														
            												
            										
            												
            														
            																
            																		????? CComPtr<IOleContainer> spContainer;
            														
            												
            										
            												
            														
            																?? 
            														
            												
            										
            												
            														
            																
            																		??????hr = m_spClientSite->GetContainer(&spContainer);
            														
            												
            										
            												
            														
            																
            																		????? ATLASSERT(SUCCEEDED(hr));
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		????? if (SUCCEEDED(hr))
            														
            												
            										
            												
            														
            																
            																		????? {
            														
            												
            										
            												
            														
            																
            																		???????? CComQIPtr<IServiceProvider, &IID_IServiceProvider>
            														
            												
            										
            												
            														
            																
            																		??????????? spServiceProvider(spContainer);
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		???????? ATLASSERT(spServiceProvider);
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		???????? if (!spServiceProvider)
            														
            												
            										
            												
            														
            																
            																		?????????? 
            																		?hr = E_FAIL;
            														
            												
            										
            												
            														
            																
            																		???????? else
            														
            												
            										
            												
            														
            																
            																		???????? {
            														
            												
            										
            												
            														
            																
            																		??????????? CComPtr<IWebBrowser2> spWebBrowser;
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		??????????? hr = spServiceProvider->QueryService(SID_SInternetExplorer,
            														
            												
            										
            												
            														
            																
            																		???????????????????????????????????????????????? IID_IWebBrowser2,
            														
            												
            										
            												
            														
            																
            																		???????????????????????????? 
            																		????????????????????(void**)&spWebBrowser);
            														
            												
            										
            												
            														
            																
            																		??????????? ATLASSERT(SUCCEEDED(hr));
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		??????????? if (SUCCEEDED(hr))
            														
            												
            										
            												
            														
            																
            																		??????????? {???????? 
            														
            												
            										
            												
            														
            																
            																		???????????????spWebBrowser->ExecWB(OLECMDID_PRINT, 
            														
            												
            										
            												
            														
            																
            																		?????????????????????????????????OLECMDEXECOPT_PROMPTUSER,
            														
            												
            										
            												
            														
            																
            																		?????? 
            																		??????????????????????????NULL, NULL);
            														
            												
            										
            												
            														
            																
            																		??????????? }
            														
            												
            										
            												
            														
            																
            																		???????? }
            														
            												
            										
            												
            														
            																
            																		????? }
            														
            												
            										
            												
            														
            																
            																		?? }
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		?? return hr;
            														
            												
            										
            												
            														}
            												
            										

            現(xiàn)在編譯ATL ActiveX control. 為測(cè)試打印功能,你必須加入一些script. Listing 6-2 展示了這部分代碼:

            Listing 6-2.

            PrintCtl.htm

            												
            														<HTML>
            												
            										
            												
            														<HEAD>
            												
            										
            												
            														
            																
            																		?? <TITLE>ATL 3.0 test page for object PrintCtl</TITLE>
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		?? <SCRIPT LANGUAGE="VBS">
            														
            												
            										
            												
            														
            																
            																		????? Sub btnPrint_onclick
            														
            												
            										
            												
            														
            																
            																		???????? PrintCtl.Print
            														
            												
            										
            												
            														
            																
            																		????? End Sub
            														
            												
            										
            												
            														
            																
            																		?? </SCRIPT>
            														
            												
            										
            												
            														</HEAD>
            												
            										
            												
            														<BODY>
            												
            										
            												
            														
            																
            																		?? <OBJECT ID="PrintCtl"
            														
            												
            										
            												
            														
            																
            																		????? CLASSID="CLSID:320B04E4-B55B-11D2-A9BA-444553540001">
            														
            												
            										
            												
            														
            																
            																		?? </OBJECT>
            														
            												
            										
            												
            														
            																
            																		?? <P>
            														
            												
            										
            												
            														
            																
            																		?? <BUTTON ID="btnPrint">Print Page</BUTTON>
            														
            												
            										
            												
            														</BODY>
            												
            										
            												
            														</HTML>
            												
            										

            當(dāng)宿主WebBrowser控件的時(shí)候存取幀的IWebBrowser2 接口

            如果一個(gè)Web 頁(yè)包含了多幀,每一幀都包含了一個(gè)WebBrowser 對(duì)象。 當(dāng)宿主WebBrowser 控件, 你將可被允許從應(yīng)用程序訪問WebBrowser 以控制幀.此控允許你控制以在幀中導(dǎo)航, 刷新, 以及諸如此類。一旦你擁有了一個(gè)幀中的 WebBrowser 對(duì)象的IWebrowser2 接口指針, 你可以掉用IWebrowser2 接口的任何方法和屬性。

            VC++中你可以訪問一個(gè)幀中的WebBrowser. VB中,你可在幀中存取document , 你可以訪問WebBrowser 但是不可以訪問裝載于WebBrowser窗口中的HTML文檔對(duì)象的 IoleContainer 接口. 存取 IOleContainer 要求訪問幀的 WebBrowser 對(duì)象. 本節(jié)講述VC++d的標(biāo)準(zhǔn)技術(shù)細(xì)節(jié),即WebBrowser 控件的宿主能訪問在包含的WebBrowser控件裝載的web頁(yè)面的幀窗口的WebBrowser對(duì)象模型.

            下面的代碼展示如何訪問web頁(yè)面的每一個(gè)幀的WebBrowser對(duì)象以刷新每一幀的內(nèi)容.其中重要的片斷用于用HTML document 對(duì)象的IOleContainer::EnumObjects? 方法枚舉頁(yè)面中的embeddings(嵌入)對(duì)象. 每一個(gè)嵌入對(duì)象表現(xiàn)為一個(gè)控件. 利用IWebBrowser2 接口查詢每一個(gè)控件對(duì)象,此代碼可檢測(cè)到控件是否是一個(gè)子幀.如果為獲得 IWebBrowser2 而成功調(diào)用QueryInterface, 其結(jié)果為幀中的WebBrowser對(duì)象的引用. (數(shù)據(jù)成員m_webBrowserCWebBrowser2 類型的—MFC 包裝類)

            												
            														// Get the IDispatch of the document.
            												
            										
            												
            														//
            												
            										
            												
            														LPDISPATCH lpDisp = NULL;
            												
            										
            												
            														lpDisp = m_webBrowser.GetDocument();
            												
            										
            												
            														
            																?

            												
            														if (lpDisp)
            												
            										
            												
            														{
            												
            										
            												
            														
            																
            																		?? IOleContainer* pContainer;
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		?? // Get the container.
            														
            												
            										
            												
            														
            																
            																		?? //
            														
            												
            										
            												
            														
            																
            																		?? HRESULT hr = lpDisp->QueryInterface(IID_IOleContainer,
            														
            												
            										
            												
            														
            																
            																		?????????????????????????????????????? (void**)&pContainer);
            														
            												
            										
            												
            														
            																
            																		?? lpDisp->Release();
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		?? if (FAILED(hr))
            														
            												
            										
            												
            														
            																
            																		????? return hr;
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		?? // Get an enumerator for the frames.
            														
            												
            										
            												
            														
            																
            																		?? //
            														
            												
            										
            												
            														
            																
            																		?? IEnumUnknown* pEnumerator;
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		?? hr = pContainer->EnumObjects(OLECONTF_EMBEDDINGS, &pEnumerator);
            														
            												
            										
            												
            														
            																
            																		?? pContainer->Release();
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		?? if (FAILED(hr))
            														
            												
            										
            												
            														
            																
            																		????? return hr;
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		?? IUnknown* pUnk;
            														
            												
            										
            												
            														
            																
            																		?? ULONG uFetched;
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		?? // Enumerate and refresh all the frames.
            														
            												
            										
            												
            														
            																
            																		?? //
            														
            												
            										
            												
            														
            																
            																		?? for (UINT i = 0; S_OK == pEnumerator->Next(1, &pUnk, &uFetched); i++)
            														
            												
            										
            												
            														
            																
            																		?? {
            														
            												
            										
            												
            														
            																
            																		????? // QI for IWebBrowser here to see whether we have 
            														
            												
            										
            												
            														
            																
            																		??????// an embedded browser.
            														
            												
            										
            												
            														
            																
            																		????? IWebBrowser2* pWebBrowser;
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		????? hr = pUnk->QueryInterface(IID_IWebBrowser2, (void**)&pWebBrowser);
            														
            												
            										
            												
            														
            																
            																		????? pUnk->Release();
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		????? if (SUCCEEDED(hr))
            														
            												
            										
            												
            														
            																
            																		????? {
            														
            												
            										
            												
            														
            																
            																		???????? // Refresh the frame.
            														
            												
            										
            												
            														
            																
            																		???????? pWebBrowser->Refresh();
            														
            												
            										
            												
            														
            																
            																		???????? pWebBrowser->Release();
            														
            												
            										
            												
            														
            																
            																		????? }
            														
            												
            										
            												
            														
            																
            																		? 
            																		?}
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		?? pEnumerator->Release();
            														
            												
            										
            												
            														}
            												
            										

            請(qǐng)留意在代碼中我們首先通過GetDocument 方法獲得了文檔的IDispatch 對(duì)象指針, 該方法是WebBrowser 包裝類的成員指針.然后我們?cè)L問文檔的IOleContainer 接口. IOleContainer 接口提供了能夠枚舉頁(yè)面中全部嵌入對(duì)象的功能. 然后我們通過調(diào)用IOleContainerEnumObjects 方法得到枚舉器(EnumObjects.EnumObjects 返回的 IEnumUnknown 接口的指針可以用于枚舉全部嵌入(embeddings)對(duì)象. 代碼的下一步, 我們遍歷全部嵌入對(duì)象,查詢每一個(gè)對(duì)象的IWebBrowser2 接口. 如果查詢成功, 我們已經(jīng)獲得了幀的IWebBrowser2 接口指針.我們可以調(diào)用它的任何方法和屬性,在此例中,我們僅僅調(diào)用了每一個(gè)幀的Refresh.

            忠告


            ActiveX 控件宿主于一個(gè) html 頁(yè)也有類似情。也許,如果你建立一個(gè)訪問 ie WebBrowser 控件或者頁(yè)面幀中的 WebBrowser 的控件,不要將你的控件標(biāo)記為腳本安全和初始化安全。 .

            調(diào)用 查找, 察看源碼, 以及 Internet 選項(xiàng)

            瀏覽WebBrowser 控件的方法和屬性, 你可輕易見到控件提供的功能.但是3個(gè)可編程由WebBrowser控件提供的項(xiàng)目不容易發(fā)覺到:查找對(duì)話框, 察看源代碼菜單項(xiàng),以及Internet選項(xiàng)對(duì)話框. 如果你曾經(jīng)用過ie,你無疑很熟悉他們. 查找對(duì)話框, 允許你在WEB頁(yè)中查找文本,通過處理 Ctrl-F 或者選擇edit菜單的Find項(xiàng)來調(diào)用.

            察看源代碼菜單項(xiàng),允許你顯示W(wǎng)EB頁(yè)的html代碼, 可通過選擇View菜單的Source項(xiàng)來選擇或者右擊web頁(yè)(在彈處菜單中)選擇察看源代碼. Internet 選項(xiàng)對(duì)話框如圖6-23所示, 可通過選擇Tools菜單的Internet Option項(xiàng)來調(diào)用.

            Figure 6-23. Internet Options dialog box.

            能夠在你的web應(yīng)用中提供以上功能的確可以帶來對(duì)用戶的友善性,但是調(diào)用途徑缺不是通過WebBrowser的方法和屬性可以實(shí)現(xiàn). 實(shí)際上你應(yīng)當(dāng)從調(diào)用IOleCommandTargetExec 方法來調(diào)用實(shí)現(xiàn)于WebBrowser中的以上功能.當(dāng)調(diào)用Exec, 你傳遞名為 CGID_IWebBrowser 的GUID 作為你想調(diào)用的命令的ID.盡管ExecWB 方法是IOleCommandTarget::Exec 方法的包裝, 但是你不能夠通過ExecWB 來調(diào)用 Find, View Source, 或者 Internet Options 對(duì)話框,以為ExecWB 不允許你指定命令組GUID. 那意味著該項(xiàng)技術(shù)僅能夠用于VC++—你不能夠直接從VB中調(diào)用。.

            忠告


            本代簡(jiǎn)要展示你未收入文檔的命令組 GUID ,那意味著可以將來改編。盡管代碼已經(jīng)在 Internet Explorer 3.x, 4.x, 5 中測(cè)試 , ,但是不保證在將來的版本中成功運(yùn)行

            以下步驟實(shí)現(xiàn) Find, View Source, 以及Internet Options 命令:

            1. ??? 定義WebBrowser 控件的命令組GUID:

            												
            														DEFINE_GUID(CGID_IWebBrowser,0xED016940L,0xBD5B,0x11cf,0xBA,
            												
            										
            												
            														
            																
            																		???????? 0x4E,0x00,0xC0,0x4F,0xD7,0x08,0x16);
            														
            												
            										

            2. ?????? 定義用于 Find, View Source, Internet Options ID:

            												
            														
            																???? 
            														
            												
            										
            												
            														
            																
            																		?????#define HTMLID_FIND 1
            														
            												
            										
            												
            														
            																
            																		???? #define HTMLID_VIEWSOURCE 2
            														
            												
            										
            												
            														
            																
            																		???? #define HTMLID_OPTIONS 3
            														
            												
            										

            3. ?????? 在需要的時(shí)候執(zhí)行 Find, View Source, Internet Options 命令 . 舉例來說,你可創(chuàng)建工具方法接收命令 ID 并調(diào)用 IOleCommandTarget::Exec , 如下片斷所示 . ( 注意在 MFC 代碼中, m_webBrowser WebBrowser 控件的實(shí)例 . 同樣 , nCmdID 是定義的 ID)

            												
            														HRESULT CYourView::ExecCmdTarget(DWORD nCmdID)
            												
            										
            												
            														{
            												
            										
            												
            														
            																
            																		?? LPDISPATCH lpDispatch = NULL;
            														
            												
            										
            												
            														
            																
            																		?? LPOLECOMMANDTARGET lpOleCommandTarget = NULL;
            														
            												
            										
            												
            														
            																
            																		?? HRESULT hr = E_FAIL;
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		?? // Get the IDispatch of the document.
            														
            												
            										
            												
            														
            																
            																		?? //
            														
            												
            										
            												
            														
            																
            																		?? lpDispatch = m_webBrowser.GetDocument();
            														
            												
            										
            												
            														
            																
            																		?? ASSERT(lpDispatch);
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		?? if (lpDispatch)
            														
            												
            										
            												
            														
            																
            																		?? {
            														
            												
            										
            												
            														
            																
            																		????? // Get a pointer for the IOleCommandTarget interface.
            														
            												
            										
            												
            														
            																
            																		????? //
            														
            												
            										
            												
            														
            																
            																		????? hr = lpDispatch->QueryInterface(IID_IOleCommandTarget,
            														
            												
            										
            												
            														
            																
            																		????????????????????????????????????? (void**)&lpOleCommandTarget);
            														
            												
            										
            												
            														
            																
            																		????? lpDispatch->Release();
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		????? ASSERT(lpOleCommandTarget);
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		????? if (SUCCEEDED(hr))
            														
            												
            										
            												
            														
            																
            																		????? {
            														
            												
            										
            												
            														
            																
            																		???????? // Invoke the given command id 
            														
            												
            										
            												
            														
            																
            																		?????????// for the WebBrowser control.
            														
            												
            										
            												
            														
            																
            																		???????? hr = lpOleCommandTarget->Exec
            														
            												
            										
            												
            														
            																
            																		????????????? (pguidCmdGroup, nCmdID, 0, NULL, NULL);
            														
            												
            										
            												
            														
            																
            																		???????? lpOleCommandTarget->Release();
            														
            												
            										
            												
            														
            																
            																		????? }
            														
            												
            										
            												
            														
            																
            																		?? }
            														
            												
            										
            												
            														
            																?

            												
            														
            																
            																		?? return hr;
            														
            												
            										
            												
            														}
            												
            										

            分發(fā)WebBrowser 控件

            現(xiàn)在你知道了如何利用WebBrowser控件和IE創(chuàng)建專用應(yīng)用程序, 你大概感興趣知道那些IE組件你需要打包在你的應(yīng)用程序以便你的應(yīng)用程序可以在系統(tǒng)商正常工作即使沒有IE5被安裝.無論你宿主 WebBrowser 控件還是自動(dòng)化Internet Explorer, 你必須至少打包IE最小化安裝的組件. 為理解為什么,請(qǐng)?jiān)僖淮尾炜磮D6-1展示的體系.你可以看到每一個(gè)組件是如何的依賴其他組件—而且這幅圖僅僅展示了其表面.它未能展示webbrowser控件和IE多樣特性的組件間的全部特征.因?yàn)橛扇绱吮姸嗟慕M件調(diào)用,為了你的應(yīng)用程序能夠正常工作,你應(yīng)當(dāng)確信至少IE最小化安裝于用戶的操作系統(tǒng).

            別擔(dān)心,你不需要打包每一個(gè)IE的組件.? Internet Explorer 5 安裝程序允許你定制你的安裝以使你打包你僅需的組件.另外, 如果你使用Internet Explorer Administration Kit (可在 http://ieak.microsoft.com/找到) 建立你的安裝程序, 你可以將IE默認(rèn)安裝,免掉多個(gè)確認(rèn)安裝步驟的對(duì)話框.

            posted on 2006-06-23 21:43 楊粼波 閱讀(2603) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Windows編程

            国产Av激情久久无码天堂| 99精品久久精品| 久久天堂电影网| 伊人色综合久久天天网| 99国产精品久久久久久久成人热| 97久久国产亚洲精品超碰热| 久久精品国产99久久丝袜| 伊人伊成久久人综合网777| 久久九九亚洲精品| 久久综合给久久狠狠97色| 久久精品国产99久久丝袜| 大伊人青草狠狠久久| 囯产精品久久久久久久久蜜桃| 亚洲国产香蕉人人爽成AV片久久 | 狠狠色丁香久久婷婷综| 久久无码一区二区三区少妇| 69SEX久久精品国产麻豆| 久久精品国产免费观看| 亚洲精品99久久久久中文字幕| 亚洲国产日韩欧美久久| 国产精品青草久久久久福利99| 天天综合久久久网| 日韩精品久久久久久免费| 国产99久久久国产精品小说| 久久久久国产| 精品久久久久久久久久中文字幕 | 亚洲AV日韩精品久久久久| 久久五月精品中文字幕| 久久久久久久综合综合狠狠| 99久久亚洲综合精品网站| 精品一区二区久久| 精品免费tv久久久久久久| 91精品国产高清久久久久久io| 青草影院天堂男人久久| 精品久久久久久综合日本| 久久线看观看精品香蕉国产| 国产精品久久久久久福利漫画| 国产免费久久精品丫丫| 国产精自产拍久久久久久蜜| 国産精品久久久久久久| 午夜肉伦伦影院久久精品免费看国产一区二区三区 |