使用WebBrowser控件时在网页元素上绘制文本或其他自定义内容
第一次在CNBlogs上发Post是提出一个有关使用WebBrowser控件时对SELECT网页元素操作的疑惑,这个问题至今也没有解决,后来有朋友在该Post的评论里询问WebBrowser控件如何在网页元素上绘制文本的问题——但是由于我的懒惰,竟然已有半年时间没有浏览过自己的Blog,因此没有看到这位朋友的评论而不能及时提供回答,真是愧疚。
大家都见过VS.NET的WebForm设计器,当我们在设计器中放入一个服务器控件的时候发现在该控件上会出现一个绿色的小箭头标签;在Office 2003中包含了一个名为InfoPath 2003的智能文档工具,在它呈现的表单里当一个表格元素得到焦点时就会出现一个自定义表格的操作按钮,而用Spy++查看它们的窗口句柄可以发现它们都是基于WebBrowser控件实现的,既然如此,我们在项目中使用WebBrowser控件时如何实现类似功能呢?
在IE5.5及后续版本中引入了Element Behavior概念,通过Element Behavior我们可以获得自定义网页元素或者添加标准网页元素(IMG、TABLE、INPUT等)行为的能力。Element Behavior最常见的实现方式是HTC文件,HTC文件是用脚本编写的Element Behavior。
除了HTC文件,我们也可以用传统程序语言(VC、Delphi,当然包括C#)来实现Element Behavior,这就是所谓的Binary Behavior,通过Binary Behavior我们能够获得更强大的定制能力,比如在网页元素上绘制文本或其他自定义内容——一张图片,甚至一个可以响应点击的按钮。
一个Binary Behavior就是一个实现IElementBehavior接口的COM对象,如果Binary Behavior同时实现了IHTMLPainter接口,就可以在HTML元素上绘图。
相关的教程和接口说明都可以从MSDN上找到,在此我不再累述,请参见
http://msdn.microsoft.com/workshop/browser/behaviors/binbehaviors_node_entry.asp
这里提供一个C#实现的简单示例,演示如何为网页中的图片添加一个按钮。
点此下载示例源程序(VS2003解决方案)
另提供一个Delphi实现相同功能的示例
点此下载(Delphi7项目文件)