<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      定制 WebBrowser 控件

      [摘要]因為工作需要,這幾天在尋找定制 WebBrowser 控件的方法。原來已經研究過一陣子,原理大概知道,基本就是實現 IDocHostUIHandler 和 IDocHostShowUI 兩個接口,I...
      因為工作需要,這幾天在尋找定制 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 就是用的這種方法,可惜我沒能做成。





      日韩精品一区二区三区高清