定製 WebBrowser 控制項

來源:互聯網
上載者:User
web|控制項 因為工作需要,這幾天在尋找定製 WebBrowser 控制項的方法。原來已經研究過一陣子,原理大概知道,
基本就是實現 IDocHostUIHandler 和 IDocHostShowUI 兩個介面,IE 控制項會在適當的時候調用這兩個介面,
我只要按照協助文檔的說明設定不同的值就可以了。

掛接這兩個介面介面到控制項中去,有兩種方法:
一種是通過 ICustomDoc 介面定製,代碼如下:
html0.Navigate2("about:blank");
ICustomDoc o = html0.Document as ICustomDoc;
o.SetUIHandler(this as IDocHostUIHandler);
但是因為只有文檔裝入之後才可以取得Document的值,所以需要預先裝入一個空文檔,這裡是about:blank。

第二種方法是完成 Active Document Host 所需要的所有介面
, IOleClientSite
, IOleInPlaceSite
, IOleDocumentSite
//, IOleWindow // IOleInPlaceSite 已經包含了該介面
, IDocHostUIHandler
, IDocHostShowUI

// IOleInPlaceSite.GetWindowContext 調用需要以下兩個介面
, IOleInPlaceFrame
//, IOleInPlaceUIWindow // IOleInPlaceFrame 已經實現了該介面

// 介面 IOleClientSite.GetContainor 需要用到
, IOleContainer

掛接這些介面到控制項中的代碼如下:
IOleObject o = html0.GetOcx() as IOleObject;
o.SetClientSite(this as IOleClientSite);
一旦掛接成功之後,一般會調用如下幾個函數
IOleInPlaceSite GetWindow
IDocHostUIHandler GetHostInfo
IDocHostUIHandler GetOptionKeyPath
IDocHostUIHandler GetHostInfo
IDocHostUIHandler GetDropTarget
IDocHostUIHandler UpdateUI
IDocHostUIHandler ShowUI
IDocHostUIHandler HideUI
IDocHostUIHandler TranslateAccelerator
IDocHostUIHandler TranslateUrl
IDocHostUIHandler ShowContextMenu
IDocHostShowUI IDocHostShowUI
IOleClientSite GetContainer

另外還有一種方法,就是直接使用文檔嵌入功能,嵌入 HTMLDocument 對象,這樣可以省卻使用 WebBrowser 控制項。HtmlEditor 就是用的這種方法,可惜我沒能做成。




相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。