用VisualC#打造多页面网页浏览器

用VisualC#打造多页面网页浏览器,第1张

用VisualC#打造多页面网页浏览器,第2张

一.导言

众所周知,Mozilla FireFox、MyIE2等流行的网页浏览器都有多页浏览功能。每打开一个新页面,都会自动生成一个新的标签页,页面的关闭也非常简单。这种设计思路使得用户浏览多个网页时桌面非常简洁,也避免了用户等待单个页面显示的苦恼。因为这些浏览器一般支持多种文件格式,所以在本地机器上浏览多个文件也非常方便。

本文使用Visual C#详细介绍如何实现这种多页面浏览功能。同时实现了以下附加功能:打印、打印预览、页面属性、选项、搜索、查看页面源文件等。

二、关键技术分析

解决问题的关键在于编写浏览器控件WebBrowser的NewWindow2事件。当需要显示文件以生成新窗口时,NewWindow2事件被激活。请注意,此事件在WebBrowser控件的新窗口生成之前发生。例如,当导航到新窗口或脚本控制的window.open方法时,会发生此事件。为了声明当一个新窗口打开时,我们自己的浏览器程序将被使用,参数ppDisp应该被设置为Application对象。此时,如果您选择“在新窗口中打开”,将会生成一个新窗口来显示网页。也可以将ReGISterAsBrowser设置为TRUE,这样会导致新生成的WebBrowser控件参与窗口命名的冲突。例如,如果在脚本的另一部分中使用了窗口的名称,则使用控件而不是创建新窗口,因为控件会在打开新窗口之前检查所有现有的窗口名称,以避免命名冲突。在本例中,为了响应此事件,我们动态创建了一个选项卡页面,并调用CreateNewWebBrowser()方法来生成一个WebBrowser控件作为其子控件——在这里,每个子控件都有一个包含控件信息的tag属性。有关详细信息,请参见以下源代码:

私有void axWebBrowser1_NewWindow2(对象发送方,AxSHDocVw。dwebbrowserevents 2 _ new window 2 event e)
{
AxSHDocVw。ax webbrowser _ ax webbrowser = CreateNewWebBrowser();
e.ppDisp = _axWebBrowser。应用;
_axWebBrowser。RegisterAsBrowser = true
}

士兵AxSHDocVw。ax webbrowser CreateNewWebBrowser()
{
AxSHDocVw。ax webbrowser _ ax webbrowser = new AxSHDocVw。ax webbrowser();
_axWebBrowser。tag = new HE _ WebBrowserTag();
tab page _ tab page = new tab page();
_TabPage。controls . Add(_ ax webbrowser);
_axWebBrowser。Dock = DockStyle。填充;
_axWebBrowser。BeforeNavigate2 += new AxSHDocVw。dwebbrowserevents 2 _ before navigate 2 eventhandler(this . ax webbrowser 1 _ before navigate 2);

_axWebBrowser。DocumentComplete += new AxSHDocVw。dwebbrowserevents 2 _ DocumentCompleteEventHandler(this . ax webbrowser 1 _ document complete);

_axWebBrowser。NavigateComplete2 +=新AxSHDocVw。dwebbrowserevents 2 _ navigatecomplete 2 eventhandler(this . ax webbrowser 1 _ navigatecomplete 2);

_axWebBrowser。NavigateError +=新的AxSHDocVw。dwebbrowserevents 2 _ NavigateErrorEventHandler(this . ax webbrowser 1 _ NavigateError);

_axWebBrowser。NewWindow2 += new AxSHDocVw。dwebbrowserevents 2 _ new window 2 eventhandler(this . ax webbrowser 1 _ new window 2);

_axWebBrowser。ProgressChange += new AxSHDocVw。dwebbrowserevents 2 _ ProgressChangeEventHandler(this . ax webbrowser 1 _ progress change);

_axWebBrowser。StatusTextChange += new AxSHDocVw。dwebbrowserevents 2 _ StatusTextChangeEventHandler(this . ax webbrowser 1 _ StatusTextChange);

_axWebBrowser。TitleChange +=新AxSHDocVw。dwebbrowserevents 2 _ TitleChangeEventHandler(this . ax webbrowser 1 _ title change);

_axWebBrowser。CommandStateChange+= new AxSHDocVw。dwebbrowserevents 2 _ CommandStateChangeEventHandler(this . ax webbrowser 1 _ CommandStateChange);

选项卡控制1。tab pages . Add(_ tab page);
tabControl1。SelectedTab = _ TabPage

return _ axWebBrowser

}

注意,每个WebBrowser控件都有一个标记,我将其定义为一个简单的类,用于包含一些与控件相关的独特信息。请看:

public class HE _ WebBrowserTag
{
public int _ TabIndex = 0;
public bool _ can back = false;
public bool _ can forward = false;
}

第三,实现“查找”、“查看页面源文件”、“选项”对话框等功能。

注意,这个例程中使用了一个未公开的GUID,它可以在未来的系统中更改。

1.定义IOleCommandTarget接口

要定义. net接口以获取关于COM接口的引用,请按照下列步骤操作:

1)将相应COM接口的GUID值提供给。NET接口;

2)包含接口中所有方法的类型声明;

3)它包含对Mshtml.dll和Shdocvw.dll文档的引用,并在Visual C#中运行。NET项目。请关注:

A.点击项目菜单下的“添加引用”;

B.单击“COM”选项卡;

C.双击“Microsoft HTML对象库”和“Microsoft Internet控件”。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 用VisualC#打造多页面网页浏览器

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情