需要用到的类或控件:
1、WeifenLuo.WinFormsUI.Docking.dll (本文源码相关的是自己压缩了图片,添加双击关闭之后重新编译的)
2、AxInterop.SHDocVw.dll;Interop.IWshRuntimeLibrary.dll;Interop.SHDocVw.dll这三个是WebBrowser空间相关。没有用C#自带的控件。
关键源码:
web页面窗体,用于显示每一个标签的页面:
这个窗体要注意,是继承自WeifenLuo.WinFormsUI.Docking.DockContent,而不是直接继承Form
下面代码是打开一个网址时用,关键AxSHDocVw.AxWebBrowser控件。
/// <summary>
/// 打开网址
/// </summary>
/// <param name="url"></param>
/// <param name="ax"></param>
public void OpenUrl(string url, AxWebBrowser ax)
{
System.Object nullObject = 0;
string str = "";
System.Object nullObjStr = str;
Cursor.Current = Cursors.WaitCursor;
ax.Navigate(url, ref nullObject, ref nullObjStr, ref nullObjStr, ref nullObjStr);
}
利用多线程打开多标签,每个标签一个线程:
/// <summary>
/// 新进程
/// </summary>
private void OpenNewThread()
{
lock (this)
{
try
{
OpenUrl(url, this.browser);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
/// <summary>
/// 每个页面的进程
/// </summary>
public void Page_Thread()
{
IeThread = new Threading.Thread(new System.Threading.ThreadStart(OpenNewThread));
IeThread.Start();
}
新页面在WeifenLuo.WinFormsUI.Docking.DockContent中的展示:
这里利用了AxSHDocVw.AxWebBrowser里的NewWindows2事件,截获网页中的链接点击事件,或者原标签中打开,或者启动新线程打开新标签。
private void browser_NewWindows2(object sender, AxSHDocVw.DWebBrowserEvents2_NewWindow2Event e)
{
WebBrowser wb = new WebBrowser();
e.ppDisp = wb.browser.Application;
wb.Show(this.DockPanel);
}
这里为止,基本的标签部分就已经OK了。下一节,说主窗体部分代码。