基本接口用法(转载) http://blog.csdn.net/jiangsheng/archive/2003/11/09/3791.aspx
CLSID_WebBrowser是所有事物的起点——它是WebBrowser ActiveX® 控件的CLSID。Internet Explorer 4.0实际上只是一个叫做Internet Explorer的这个控件的宿主程序。
IWebBrowser2接口被WebBrowser控件实现,并且表示的了和这个控件交互的主要方法 。 作为一个遗传下来的接口IWebBrowser的扩展,这个新的接口通过get_Document方法,提供了一种访问底层DHTML文档的手段。
你对WebBrowser控件中当前显示的DHTML文档的访问和操作目前是通过IHTMLDocument2接口实现。它允许你设置和获得文档的元素,设置各种事件的处理脚本,以及获得显示文档的窗口和框架的接口。
(译者注:很多时候,很可能是为了向后的兼容性,你必须获得一个分发接口,例如通过CHtmlView的GetHtmlDocument方法,或者通过加入到工程的浏览器控件封装类的DOM方法,然后查询IHTMLDocument2接口。MFC7的源代码中直接把分发接口指针强制转换为IHTMLDocument2指针,意味着至少在目前,分发接口指针和IHTMLDocument2指针指向同一个对象,但是微软没有保证说永远会这样,所以比较安全的办法还是调用IUnknown的QueryInterface方法获得你需要的版本的IHtmlDocument*指针,这个方法也同样适用于自己通过WINAPI用CLSID_WebBrowser创建的浏览器窗口。)
IHTMLWindow2是显示HTML文档的窗口的接口。这个接口实际上代表一个框架的集合,当前的窗口可能是它的一部分。和HTML文档对象类似,它也允许你操作窗口,设置各种事件的处理脚本,以及获得一个事件对象,代表用户和文档和窗口交互的细节。
IHTMLEventObj是一个接口,代表一个事件对象,包含事件的信息,例如光标位置,按下的键,以及操作选择的任何HTML元素。
IHTMLElement是一个接口,代表一个HTML文档中的元素。HTML元素大概相当于文档中独立的标签。。它的方法允许你做一些事,比如设置各种事件的处理脚本,以及操作元素的innerHTML和outerHTML属性来更改真正的显示HTML。
到这里为止,上述所有接口存在于Internet Explorer DHTML对象模型中各种对象上。但是为了让你的应用程序处理这些对象产生的事件,你需要理解一些分发接口。下一步我要讲述的接口都派生自IDispatch,并且是应用程序必须实现的事件处理器,用于从一个对象接受事件。要使用这些处理器对象,你需要对对象请求IConnectionPointContainer接口,在这些中的一个位置注册。只要你有了连接点容器,你就可以在对象和你的事件处理器之间建立连接。当事件发生的时候,对象将向提供的处理器发送事件。你至少要了解下列三个分发接口:
DIID_DWebBrowser事件2接口允许你监控WebBrowser控件产生的事件。一个特别重要的事件是DISPID_NAVIGATECOMPLETE,通知它的宿主文档完全被WebBrowser控件建立。只要这个事件被触发,IWebBrowser2::get_Document方法就会返回一个指向合法的DHTML文档的接口指针。
有了DIID_HTMLDocument事件接口,一个应用程序可以接收DHTML文档对象触发的事件,例如onmouseover、 onmousemove、或者onclick。
第三个接口是DIID_HTMLWindow事件。这个DIID_HTMLWindow事件提供的事件被DHTML对象模型中的窗口触发。 这些事件的例子包含OnLoad、 OnUnload、 OnFocus和OnBlur。
其他两个重要的接口ICustomDoc和IDocHostUIHandler允许你自定义Internet Explorer用户界面的装饰,以及扩展DHTML对象模型。
ICustomDoc接口被HTML文档对象实现,允许WebBrowser控件宿主设置它的IDocHostUIHandler接口。通常Internet Explorer将调用宿主的Client Site的QueryInterface方法获得IDocHostUIHandler接口。但是,如果宿主不支持IOleClientSite接口或者为了保存这个指针以避免重复调用QueryInterface,可以通过ICustomDoc显式地设置HTML对象的IDocHostUIHandler接口。
IDocHostUIHandler 接口可选地被WebBrowser控件的宿主程序实现。通过实现这个接口,宿主程序可以替换Internet Explorer 4.0使用的菜单、工具栏和上下文菜单。当WebBrowser需要访问用户界面(比如窗口大小),或者当它需要解析DHTML窗口对象的External属性的时候,WebBrowser控件将查询宿主程序的IOleClientSite接口的这个接口(除非它已经被显式地设置)。
控件宿主也可以通过给脚本引擎提供一个代表宿主程序的外部的自动化对象来扩展DHTML对象模型。脚本中对这个外部对象的引用被脚本引擎解析,发动一个对WebBrowser宿主应用程序的IDocHostUIHandler接口的查询。然后脚本引擎调用这个接口的get_External方法,宿主应用程序用这个调用返回一个自动化对象的分发接口。下一步,脚本引擎将通过通常的COM自动化分发方法触发这个对象的方法。