结合MSHTML与WebBrowser生成美观实用的WinForm应用程序(By Lostinet)

我用WinForm开发也有一段时间了。我觉得目前的WinForm开发速度是够的,但是一些原本在HTML就很容易做到的事情,在WinForm中就很难实现了。 这个主要的原因可能是WinForm复用控件的能力非常强,但是可用的控件却非常少。一般买回来的控件不但贵,而且也不是太好扩展。

作为一个学了多年HTML的人,我当然希望在WinForm中依然能使用HTML的特征,例如强大的CSS!,自动排版伸缩的特征,(CSS与排版可以更方便打印!),以及脚本的编写。(有时候写脚本比写WinForm的程序更爽。具体情况具体做)。

要做这个其实不难。但是要灵活运用则不容易了。

通常,使用WebBrowser控件的人,只是简单地使用MSHTML调用WebBrowser里的东西。也就是说,这个调用是单项的,只考虑到修改HTML来显示某种东西。

今天我写这个随笔的意图是告诉大家怎样把用户在WebBrowser里的操作反馈给WinForm

做这个反馈的基石是 DotNet 的 InteropServices 。通过把DotNet的某个对象,传到HTML DOM里去,然后用脚本来操作该DotNet对象。

要做到这个,核心是:

  1. 获取 WebBrowser.Document ,它实现了mshtml.IHtmlDocument /2/3/4/5 (其中IHtmlDocument2最有用)
  2. 这个Document是 System.Runtime.InteropServices.Expando.IExpando,通过它来设置和获取Document的一些动态命名的成员。

例子中的代码是:
mshtml.IHTMLDocument2 doc2=(mshtml.IHTMLDocument2)browser.Document;
System.Runtime.InteropServices.Expando.IExpando ex=(System.Runtime.InteropServices.Expando.IExpando)doc2;
System.Reflection.PropertyInfo piform1=ex.AddProperty("Form1");
piform1.SetValue(doc2,this,null);//从此,在HTML的document.Form1就是这个WinForm的Control了。你可以用脚本来调用Form1 !

有了这些交互,我们可以实现的东西实在太多太多了。

我下一步应该是研究一下,怎样直接把WinForm的Control动态地嵌进这个HTML里。(不是用 《 OBJECT 》来部署的形式)

转自:http://blog.csdn.net/waxdollcheung/articles/324498.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值