国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > HTML > 正文

關(guān),于幾個(gè)HTML文檔接口的使用

2020-03-24 15:47:34
字體:
供稿:網(wǎng)友

  問題:

  在使用Active Accessibility SDK的過程中,我從某個(gè)窗口的句柄來獲得IHTMLDocument2指針。有沒有什么方法可以從IHTMLDocument2指針來獲得IWebBrowser2指針?我用QueryInterface在兩個(gè)接口(IHTMLDocument2 和 IWebBrowser2)上試過,但沒有成功。我也用網(wǎng)景(Netscape)的 HTMLWindow2 指針試過從get_navigator獲取IOmNavigator *。也以失敗告終。請(qǐng)高手指點(diǎn)。

  解答:

  這個(gè)問題通常是COM編程中存在的共性問題。你有了窗口,文檔,或者瀏覽器,你明明知道可以通過這些已知數(shù)據(jù)來得到其它的信息,但往往在實(shí)際環(huán)境中一運(yùn)行,QueryInterface總是給你送回一個(gè)肥大的NULL。這個(gè)問題的答案實(shí)際上隱藏在神秘的IServiceProvider接口中,顧名思義,IServiceProvider的作用就是提供服務(wù)。IServiceProvider是個(gè)非常棒的接口:它只有一個(gè)方法——QueryService。如果你會(huì)用ATL智能指針,就像下面這樣。首先必須獲得IServiceProvider接口,

  CComQIPtr isp = pIHTMLDocument2;

  這行代碼實(shí)際上就是對(duì)文檔執(zhí)行了一次 QueryInterface,以詢問IServiceProvider接口。一旦具備了isp,你便可以象下面這樣獲得瀏覽器。

  CComQIPtr iwb2;

  isp->QueryService(IID_IWebBrowserApp,IID_IWebBrowser2, (void**)&iwb2);

  如果你還是不明白上面所講東西,沒有關(guān)系,很正常。COM編程的一個(gè)根本規(guī)則是:QueryInterface必須總是要返回所查詢對(duì)象的接口。但是文檔不實(shí)現(xiàn) IWebBrowser2

幸福網(wǎng)名[www.la240.com/html2017/1/22/] 接口,它只知道如何獲得正在工作的對(duì)象。文檔,瀏覽器和窗口都是獨(dú)立的對(duì)象。通常IServiceProvider被用于多個(gè)單獨(dú)且相關(guān)的COM對(duì)象群來實(shí)現(xiàn)某種類型的服務(wù)。QueryInterface詢問某個(gè)對(duì)象:“你實(shí)現(xiàn)這個(gè)接口嗎?”,而QueryService告訴某個(gè)服務(wù)提供者,“不管什么對(duì)象實(shí)現(xiàn)這個(gè)接口都要告訴我。” 使用QueryService返回的接口指針與所查詢的對(duì)象可能相同,也可能不相同。如圖一所示。所有對(duì)象都實(shí)現(xiàn)它們自己不同的接口并在內(nèi)部存儲(chǔ)指向另一個(gè)對(duì)象的指針。你必須用IServiceProvider接口來獲得特定接口的對(duì)象,不論它是哪一個(gè)對(duì)象實(shí)現(xiàn)的。IServiceProvider::QueryService要追隨這些內(nèi)部指針來獲取實(shí)現(xiàn)你所想要的接口對(duì)象。

關(guān)于幾個(gè)HTML文檔接口的使用 學(xué)知

  圖一 多個(gè)對(duì)象,一個(gè)IServiceProvider

  從本質(zhì)上講,IServiceProvider用于導(dǎo)航DHTML對(duì)象層次。假設(shè)你正在寫一個(gè)ActiveX控件來導(dǎo)航這個(gè)對(duì)象模型。你如何做呢?首先要像下面這樣查詢IOleClientSite來取得IServiceProvider:

  CComQIPtr isp = pSite;

  然后,一旦你具備了IServiceProvider,則可以用QueryService來從中查詢應(yīng)用對(duì)象。

  CComQIPtr iwba;

  isp->QueryService(IID_IWebBrowserApp, IID_IWebBrowserApp, (void **)&iwba);

  接下來你就可以導(dǎo)航這個(gè)對(duì)象層次了(應(yīng)用對(duì)象在最頂層)。如果你想要得到Web瀏覽器,那么與前面類似。

  CComQIPtr iwb2;

  isp->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2, (void **)&iwb2));

  在所有這些例子中,SID_SWebBrowserApp都是服務(wù)標(biāo)示,但你也能常常見到將IID_IWebBrowserApp作為服務(wù)ID的代碼。兩種用法都可以行得通,因?yàn)槲募杏袀€(gè)宏定義:

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 吉林省| 衡南县| 鸡西市| 日土县| 苍南县| 即墨市| 望谟县| 海口市| 奈曼旗| 新绛县| 曲靖市| 长乐市| 城步| 南京市| 鄢陵县| 岑溪市| 绥江县| 台东县| 东港市| 青浦区| 中宁县| 千阳县| 泊头市| 永昌县| 舒城县| 朔州市| 栾川县| 缙云县| 清镇市| 桦川县| 大石桥市| 雷山县| 贡山| 三江| 东乡族自治县| 犍为县| 茶陵县| 巩义市| 吉林省| 咸阳市| 朝阳县|