WinForms C#:html编辑器工程源码,含直接写WebBrowser的文件流、IPersistStreamInit接口的声明和一些相关的小方法

简介:

首先多谢朋友们的捧场;

今天给大家带来一个操作WebBrowser的一些高级方法,我专门写了一个html编辑器的实现代码,有需要的朋友可以自己扩充;
功能实现是直接写流到WebBrowser内不通过临时文件,并且支持对WebBrowser的一些高级控制(其实script可以达到的均可达到,想知道怎么搞的可以阅读代码)。

其中关于IPersistStreamInit接口的声明费了翻工夫,因为以前在 delphi 中没这么麻烦,呵呵。在网络上找了大半天没找到,最后还是祭出Reflector,反编译Windows.Forms,需要的朋友可以不用辛苦的自己搞了!

我在这个演示里,制作的html编辑环境是比简单的,您可以看看,比较比较 CodeProject 上的代码;我采用的是ie自身提供的编辑方法,只是这样的方式都被运用于web方式的编辑器内,就好比这个freeTextBox

以下是主要的代码:
1 /**/ /********************************
2 * 初始化浏览器状态
3 * 指向about:blank
4 * *****************************/

5 private void Form1_Load( object sender, System.EventArgs e) {
6object obj = null;
7this.Show();
8this.axWb.Navigate("about:blank",ref obj,ref obj,ref obj,ref obj);
9//等待完成动作
10 while(axWb.ReadyState < SHDocVw.tagREADYSTATE.READYSTATE_INTERACTIVE)
11 Application.DoEvents();
12
13//初始化html编辑器
14 InitHtmlEditor();
15 }

16
17 /**/ /*******************************
18 * 这里是核心方法
19 * 完全调用IE自身的html编辑功能
20 * 可以看到,我采用了一种兼容的
21 * 方式,用Frame(框架),这样
22 * 的话,默认安装的Windows 98都
23 * 支持html编辑功能;
24 * 关键代码如下:
25 * frame.document.designMode = "on";
26 * 表示开启设计模式
27 ******************************/

28 private void InitHtmlEditor() {
29string sw = "";
30 sw += "<html>\r\n";
31 sw += "<script language=javascript>\r\n";
32 sw += " function loadSet(){\r\n";
33 sw += " var frame=document.getElementById(\"i-frame\").contentWindow;\r\n";
34 sw += " frame.document.designMode = \"on\";\r\n";
35 sw += " frame.document.open();\r\n";
36 sw += " frame.document.write(\"<html><font color=red>hello 大家好啊!<br>我是S.F. <br>";
37 sw += " <a href=\\\"http://www.cnblogs.com/chinasf\\\">欢迎访问我的weblog</a></font></html>\");\r\n";
38 sw += " frame.document.close();\r\n";
39 sw += " }\r\n";
40 sw += " function setBlod(obj){\r\n";
41 sw += " document.getElementById(\"i-frame\").contentWindow.document.execCommand(\"bold\");\r\n";
42 sw += " }\r\n";
43 sw += "</script>\r\n";
44//这里加入了一个html的button,也就是说,你可以把web模式的html编辑器的代码完全copy进来
45 sw += "<body onload=\"loadSet()\" scroll=\"yes\"><button onclick=\"setBlod(this);\">Blod</button>\r\n";
46 sw += "<iframe id=\"i-frame\" frameBorder=\"1\" width=\"640\" height=\"480\"></iframe>\r\n";
47 sw += "</body></html>\r\n";
48
49//写入浏览器
50 WriteHtml(sw);
51 }

52
53 private void WriteHtml( string s) {
54//内存流,用于转换string
55 MemoryStream ms = new MemoryStream();
56try{
57byte[] htmlcode = System.Text.Encoding.Default.GetBytes(s);
58 ms.Write(htmlcode,0,htmlcode.Length);
59 Stream dataStream = ms;
60//恢复指针位置
61 dataStream.Seek(0,0);
62
63if(axWb.Document!=null){
64//转换接口,并转换为IStream
65 (axWb.Document as UnsafeNativeMethods.IPersistStreamInit).Load(new UnsafeNativeMethods.ComStreamFromDataStream(dataStream));
66 }

67 }
finally{
68 ms.Close();
69 }

70 }

71
72 private void button1_Click( object sender, System.EventArgs e) {
73//获取document,在IHTMLDocument2中取得桢
74 mshtml.IHTMLDocument3 idoc = (mshtml.IHTMLDocument3)axWb.Document;
75 mshtml.IHTMLFrameBase2 fb= (mshtml.IHTMLFrameBase2)idoc.getElementById("i-frame");
76object obj=null;
77 fb.contentWindow.document.execCommand("bold",true,obj);
78 }

79
80 private void button3_Click( object sender, System.EventArgs e) {
81//获取document,在IHTMLDocument2中才有body.style
82 mshtml.IHTMLDocument2 idoc = (mshtml.IHTMLDocument2)axWb.Document;
83//指定为IHTMLStyle3,才可以定制滚动条颜色
84 mshtml.IHTMLStyle3 istyle = (mshtml.IHTMLStyle3)idoc.body.style;
85 istyle.scrollbarArrowColor = "#0099FF";
86 istyle.scrollbar3dLightColor = "#FFFFFF";
87 istyle.scrollbarDarkShadowColor = "#0099FF";
88 istyle.scrollbarFaceColor = "#99CCFF";
89 istyle.scrollbarHighlightColor = "#0099FF";
90 istyle.scrollbarShadowColor = "#0099FF";
91 istyle.scrollbarTrackColor = "#FFFFFF";
92
93 }

94
95 private void button2_Click( object sender, System.EventArgs e) {
96//查看源码,文本方式
97 mshtml.IHTMLDocument3 idoc = (mshtml.IHTMLDocument3)axWb.Document;
98 mshtml.IHTMLFrameBase2 fb= (mshtml.IHTMLFrameBase2)idoc.getElementById("i-frame");
99 MessageBox.Show(fb.contentWindow.document.body.innerText);
100 }

101
102 private void button4_Click( object sender, System.EventArgs e) {
103//查看源码,HTML方式
104 mshtml.IHTMLDocument3 idoc = (mshtml.IHTMLDocument3)axWb.Document;
105 mshtml.IHTMLFrameBase2 fb= (mshtml.IHTMLFrameBase2)idoc.getElementById("i-frame");
106 MessageBox.Show(fb.contentWindow.document.body.innerHTML);
107 }



本文转自suifei博客园博客,原文链接http://www.cnblogs.com/Chinasf/archive/2005/04/26/145773.html,如需转载请自行联系原作者
相关文章
|
14天前
|
数据采集 安全 JavaScript
C#医院手术麻醉信息管理系统源码 对接院内HIS、LIS、PACS
手麻系统的功能涵盖了麻醉临床业务管理、麻醉运营业务管理以及手术进程管理等,实现了将多种麻醉病历文书与医院HIS系统的有效关联,让手术室人员、设备资源和信息资源高度共享;实现了手术安排、各种统计报表等科室管理和科研工作的需求,可借其收集临床数据、进行整合分析,为围术期临床信息、管理、科研提供整体解决方案;该系统的运行,为医护人员提供了流程化、信息化、自动化、智能化的临床业务综合管理。
28 5
|
25天前
html中div内容居中的方法使用弹性盒子居中
html中div内容居中的方法使用弹性盒子居中
8 0
|
1天前
在线拼接图片工具HTML源码
在线将多张图片拼接成一张图片,多图合一并导出下载。 无需本地安装软件。 下载时,使用日期时间作为文件名, 规避图片文件名相同造成的覆盖问题;也能省去一部覆盖确认操作 多语言支持
2 0
在线拼接图片工具HTML源码
|
6天前
黑色个人主页HTML源码
黑色个人主页HTML源码,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面
28 6
黑色个人主页HTML源码
|
7天前
|
移动开发 HTML5
代码编辑器特效爆炸html5
代码编辑器特效爆炸html5,代码高亮显示,输入代码爆炸动态效果显示。非常的帅气,爱不释手~
10 0
代码编辑器特效爆炸html5
|
8天前
漂亮的七彩引导页导航HTML源码
漂亮的七彩引导页导航HTML源码,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面
6 0
漂亮的七彩引导页导航HTML源码
|
9天前
|
移动开发 HTML5
HTML5漫画风格个人介绍源码
HTML5漫画风格个人介绍源码,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面
12 0
HTML5漫画风格个人介绍源码
|
11天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
14天前
2024个人导航HTML源码
2024个人导航HTML源码,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面
14 0
2024个人导航HTML源码
|
19天前
|
移动开发 HTML5
唯美首页纯静态html源码
唯美首页纯静态html5引导页源码,格子化win8风格官方引导页面源码
12 0
唯美首页纯静态html源码