用Visual C#打造多頁面網頁瀏覽器_1

來源:互聯網
上載者:User
一、簡介

  大家都知道,目前比較流行的網路瀏覽器如Mozilla FireFox以及MyIE2等都具有多頁面瀏覽功能,每開啟一個新的頁面都自動產生一個新的索引標籤頁面面,頁面的關閉也十分簡便。這種設計思想使得使用者在瀏覽多個網頁時案頭十分簡潔,也避免了使用者等待單頁面顯示的苦惱。由於這些瀏覽器一般都支援操作多種檔案格式,所以當瀏覽本地機器上的多個檔案時也極為方便。

  本文使用Visual C#詳細介紹如何?這種多頁面瀏覽功能。同時,還實現了下面附加功能: 列印, 預覽列印,頁面屬性,選項,尋找,查看頁面源檔案等。

  二、關鍵技術分析

  解決問題的關鍵在於對瀏覽器控制項WebBrowser的NewWindow2事件的編程。當需要顯示某種檔案而產生一個新視窗時,NewWindow2 事件即被啟用。注意,該事件發生在WebBrowser控制項的新視窗產生之前。例如,作為對導航到一個新視窗或者一個指令碼控制的window.open方法的響應,即發生該事件。為了聲明當一個新視窗被開啟時,將使用我們自己的瀏覽器程式,應該把參數ppDisp置為Application 對象。此時,如果你選擇“在新視窗中開啟”,則新產生一個視窗來顯示Web頁面。你也可以把ReGISterAsBrowser設定為TRUE,這將導致新產生的WebBrowser控制項參與到視窗命名的衝突問題上。例如,如果一個視窗的名字在指令碼的另外一處用到,那麼該控制項被派上用場,而不是再產生一個新的視窗,因為控制項在開啟一個新的視窗之前先檢查一下所有已存在的視窗名稱以避免命名衝突。 在本文樣本中,作為對該事件的響應,我們動態地建立一個tab頁面,並通過調用CreateNewWebBrowser()方法產生一個WebBrowser控制項作為其子控制項――這裡每一個子控制項都有一個包含該控制項相關資訊的tag屬性。詳見下面的源碼:

private void axWebBrowser1_NewWindow2(object sender, AxSHDocVw.DWebBrowserEvents2_NewWindow2Event e)
{
 AxSHDocVw.AxWebBrowser  _axWebBrowser = CreateNewWebBrowser();
 e.ppDisp = _axWebBrowser.Application;
 _axWebBrowser.RegisterAsBrowser = true;
}

private AxSHDocVw.AxWebBrowser CreateNewWebBrowser()
{
 AxSHDocVw.AxWebBrowser _axWebBrowser = new AxSHDocVw.AxWebBrowser();
 _axWebBrowser.Tag = new HE_WebBrowserTag();
 TabPage _TabPage = new TabPage();
 _TabPage.Controls.Add(_axWebBrowser);
 _axWebBrowser.Dock = DockStyle.Fill;
 _axWebBrowser.BeforeNavigate2 += new AxSHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(this.axWebBrowser1_BeforeNavigate2);

 _axWebBrowser.DocumentComplete += new AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(this.axWebBrowser1_DocumentComplete);

 _axWebBrowser.NavigateComplete2 += new AxSHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(this.axWebBrowser1_NavigateComplete2);

 _axWebBrowser.NavigateError += new AxSHDocVw.DWebBrowserEvents2_NavigateErrorEventHandler(this.axWebBrowser1_NavigateError);

 _axWebBrowser.NewWindow2 += new AxSHDocVw.DWebBrowserEvents2_NewWindow2EventHandler(this.axWebBrowser1_NewWindow2);

 _axWebBrowser.ProgressChange += new AxSHDocVw.DWebBrowserEvents2_ProgressChangeEventHandler(this.axWebBrowser1_ProgressChange);

 _axWebBrowser.StatusTextChange += new AxSHDocVw.DWebBrowserEvents2_StatusTextChangeEventHandler(this.axWebBrowser1_StatusTextChange);

 _axWebBrowser.TitleChange += new AxSHDocVw.DWebBrowserEvents2_TitleChangeEventHandler(this.axWebBrowser1_TitleChange);

 _axWebBrowser.CommandStateChange += new AxSHDocVw.DWebBrowserEvents2_CommandStateChangeEventHandler(this.axWebBrowser1_CommandStateChange);

 tabControl1.TabPages.Add(_TabPage);
 tabControl1.SelectedTab = _TabPage;

 return _axWebBrowser;

}

  注意,每一個WebBrowser控制項都有一個tag,我定義成一個簡單的class,它用來包含一些該控制項相關的專屬資訊。請看:

public class HE_WebBrowserTag
{
 public int _TabIndex = 0;
 public bool _CanBack = false;
 public bool _CanForward = false;
}

  三、實現“尋找”、“查看頁面源檔案”、“選項”對話方塊等功能

  注意 本常式中使用了一個未公開的GUID,其在將來的系統中可以發生變更。

  1、定義 IOleCommandTarget 介面

  為定義一個.net介面以獲得關於一個COM介面的參考,請遵從下列步驟:

  1) 賦予.NET介面相應的COM介面的GUID值;

  2) 包含對介面中所有方法的型別宣告;

  3) 包含對Mshtml.dll和Shdocvw.dll檔案的參考,在Visual C# .NET工程中操作,請遵從:

  A. 在項目菜單下單擊“添加引用”;

  B. 單擊“COM” 選項卡;

  C. 雙擊“Microsoft HTML Object Library” 和“Microsoft Internet Controls”。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.