墨者,tattooing!

Adark's Social Life!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

需要用到的类或控件:

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了。下一节,说主窗体部分代码。

posted on 2011-04-21 15:22  Adark  阅读(790)  评论(0)    收藏  举报