期待下集是个可爱梦儿

Delphi;Vc++;Win32Asm;Css+Div;Seo;Javascript;Asp;Php;English;非线性编辑

定制 WebBrowser 控件

 定制 WebBrowser 控件 //或者说 控件与接口的关联;

因为工作需要,这几天在寻找定制WebBrowser控件的方法。原来已经研究过一阵子,原理大概知道,
  基本就是实现IDocHostUIHandler和IDocHostShowUI两个接口,IE控件会在适当的时候调用这两个接口,
  我只要按照帮助文档的说明设置不同的值就可以了。

  挂接这两个接口接口到控件中去,有两种方法:
  一种是通过ICustomDoc接口定制,代码如下:




html0.Navigate2("about:blank");
ICustomDoco=html0.DocumentasICustomDoc;
o.SetUIHandler(thisasIDocHostUIHandler);

  但是因为只有文档装入之后才可以取得Document的值,所以需要预先装入一个空文档,这里是about:blank。

  第二种方法是完成ActiveDocumentHost所需要的所有接口


 

,IOleClientSite
,IOleInPlaceSite
,IOleDocumentSite
//,IOleWindow //IOleInPlaceSite已经包含了该接口
,IDocHostUIHandler
,IDocHostShowUI

//IOleInPlaceSite.GetWindowContext调用需要以下两个接口
,IOleInPlaceFrame
//,IOleInPlaceUIWindow//IOleInPlaceFrame已经实现了该接口

//接口IOleClientSite.GetContainor需要用到
,IOleContainer


  挂接这些接口到控件中的代码如下:

  

IOleObjecto=html0.GetOcx()asIOleObject;
o.SetClientSite(thisasIOleClientSite);



  一旦挂接成功之后,一般会调用如下几个函数


IOleInPlaceSiteGetWindow
IDocHostUIHandlerGetHostInfo
IDocHostUIHandlerGetOptionKeyPath
IDocHostUIHandlerGetHostInfo
IDocHostUIHandlerGetDropTarget
IDocHostUIHandlerUpdateUI
IDocHostUIHandlerShowUI
IDocHostUIHandlerHideUI
IDocHostUIHandlerTranslateAccelerator
IDocHostUIHandlerTranslateUrl
IDocHostUIHandlerShowContextMenu
IDocHostShowUIIDocHostShowUI
IOleClientSiteGetContainer


  另外还有一种方法,就是直接使用文档嵌入功能,嵌入HTMLDocument对象,这样可以省却使用WebBrowser控件。HtmlEditor就是用的这种方法,可惜我没能做成。

// 除以上原文外,其实还有一种方法就是,自定义类,继承基类和接口;

百度搜索 webbrowser设置IDocHostUIHandler 会找到相关文章;

阅读更多
个人分类: Delphi Webbrowser
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭