结合 MSHTML 与 WebBrowser 生成美观实用的 WinForm 应用程序。
来源:互联网 发布:windows 7镜像安装版 编辑:程序博客网 时间:2024/05/22 16:38
我用WinForm开发也有一段时间了。我觉得目前的WinForm开发速度是够的,但是一些原本在HTML就很容易做到的事情,在WinForm中就很难实现了。 这个主要的原因可能是WinForm复用控件的能力非常强,但是可用的控件却非常少。一般买回来的控件不但贵,而且也不是太好扩展。
作为一个学了多年HTML的人,我当然希望在WinForm中依然能使用HTML的特征,例如强大的CSS!,自动排版伸缩的特征,(CSS与排版可以更方便打印!),以及脚本的编写。(有时候写脚本比写WinForm的程序更爽。具体情况具体做)。
要做这个其实不难。但是要灵活运用则不容易了。
通常,使用WebBrowser控件的人,只是简单地使用MSHTML调用WebBrowser里的东西。也就是说,这个调用是单项的,只考虑到修改HTML来显示某种东西。
今天我写这个随笔的意图是告诉大家怎样把用户在WebBrowser里的操作反馈给WinForm 。
做这个反馈的基石是 DotNet 的 InteropServices 。通过把DotNet的某个对象,传到HTML DOM里去,然后用脚本来操作该DotNet对象。
要做到这个,核心是:
- 获取 WebBrowser.Document ,它实现了mshtml.IHtmlDocument /2/3/4/5 (其中IHtmlDocument2最有用)
- 这个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 !
有了这些交互,我们可以实现的东西实在太多太多了。
我做了一个简单的例子,在这里下载 http://www.lostinet.com/files/WinHtml.zip
我下一步应该是研究一下,怎样直接把WinForm的Control动态地嵌进这个HTML里。(不是用 《 OBJECT 》来部署的形式)
- 结合 MSHTML 与 WebBrowser 生成美观实用的 WinForm 应用程序。
- 结合MSHTML与WebBrowser生成美观实用的WinForm应用程序
- 结合MSHTML与WebBrowser生成美观实用的WinForm应用程序(By Lostinet)
- Winform 应用程序内嵌Webbrowser的若干问题
- 美观实用的vim配置
- 如何设置IE8的WebBrowser控件(MSHTML) 的渲染模式
- [Winform]js与webbrowser交互
- 简单实用且美观的GridView分页
- 简洁、美观、强大、实用的Foobar2000界面
- 求助,实用美观的WEB编辑器
- 使用WebBrowser引用MsHtml单元
- WinForm webbrowser控件的使用
- WinForm webbrowser控件的使用
- Winform下的HTMLEditor引用Microsoft.mshtml的注意事项
- Winform下的HTMLEditor引用Microsoft.mshtml的注意事项
- Winform 部署mshtml程序集出错的一个解决方案
- Winform 部署mshtml程序集出错的一个解决方案 .
- WinForm下的开发WebBrowser,js函数与Winform函数互调
- 开源:.NET环境下有关打印页面设置、打印机设置、打印预览对话框的应用
- 中印软件工程师之比较
- Symbian编程VC开发环境设置
- Symbian内存管理的二十二条军规
- Symbian入门指南-接触篇
- 结合 MSHTML 与 WebBrowser 生成美观实用的 WinForm 应用程序。
- 验证码JSP
- 男生容易误解女生的几个行为
- 开源:VS.NET打印思想与2003/5DataGrid、DataGridView及二维数据如ListView等终极打印实现
- 元数据的多角度透视
- 关于如何打印ListView的解决方法
- 听学新概念
- 压缩数据库日志
- 我的引擎,要启动了。