熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

Visual C# 打造 “浏覽器”

2013-11-13 12:20:23  來源: .NET編程 
  Visual C#是微軟推出的新一代程序開發語言Visual C#實現許多功能是通過調用Net框架為其中所有Net程序開發語言提供的一個公用的軟件包——Net FrameWork SDK在這個軟件包中提供了大量並且十分豐富的類庫可以說沒有這個軟件開發包Visual C#就寸步難行無法編寫哪怕一個功能十分簡單的程序

  但這樣也會出現一個問題如果在Net FrameWork SDK軟件包中沒有涉及到的功能而在其他的第三方的COM組件中卻提供了那麼這些組件是否可以被Visual C#使用答案是直接使用是不可以的但這些COM組件經過一定轉換後就可以這種轉換就是非受管代碼(Unmanaged Code)到受管代碼(Managed Code)的轉換因為這些COM組件一般都是非受管代碼(Unmanaged Code)而編譯Visual C#文件時候要使用的類庫卻只能為受管代碼(Managed Code)這就是說要在Visual C#中使用那些非受管代碼組件就必須把這些非受管代碼組件轉換成受管代碼組件

  在Net框架中專門提供了一個程序Aximpexe來實現由COM組件到WinForm組件的轉換那麼這個文件在哪裡?假設你安裝Net FrameWork SDK在C那麼在C:\Program Files\MicrosoftNET\FrameworkSDK\Bin目錄中就可以找到這個文件如果你安裝Net FrameWork SDK在其他目錄或者磁盤依照上述的目錄順序就可以找到這個文件了

  下面用Visual C#來做一個浏覽器看看在Visual C#是如何使用COM組件的

  一.本文程序設計和運行的軟件環境

  ()微軟公司視窗服務器版
  (Net FrameWork SDK Beta

  二.程序設計的思路以及關鍵步驟的解決方法

  ()把COM組件轉換為WinForm組件

  其實實現這種轉換十分的簡單我們知道微軟Web浏覽器COM組件名稱為shdocvwdll由於我們使用的是視窗所以這個文件是存放在c:\winnt\system目錄中如果你使用的是視窗或者是視窗Me那麼此組件存放的位置是c:\windows\systemAximpexe文件後面有許多的參數你可以通過Aximp /?來了解在本文中只使用下列簡單的命令就可成功轉換
Aximp c:\winnt\system\shdocvwdll

  運行上述命令後就可以實現轉換並在當前目錄中產生SHDocVwdllAxSHDocVwdll二個文件

  ()在程序中使用轉換後組件

  在AxSHDocVwdll中定義了命名空間AxSHDocVw在此命名空間中定義了一個AxWebBrowser組件這個組件中有若干個方法和屬性Visual C#就是通過這些方法和屬性來實現浏覽器的一些基本功能的使用此浏覽器組件和使用其他的WinForm組件的過程是一樣的首先要導入命名空間然後在程序中繼承此命名空間中定義的浏覽器組件最後設定這個繼承後的組件的屬性和方法具體如下

  < I > 導入命名空間具體代碼如下
using AxSHDocVw ;

  < II> 繼承此命名空間中定義的浏覽器組件具體代碼如下
private AxWebBrowser axWebBrowser ;

  ()通過轉換後組件來實現浏覽器的一些基本功能

  浏覽器的主要功能就是能夠到指定的地址浏覽信息當然在具體的浏覽中還有一些基本的功能譬如前進後退停止刷新主頁這些功能都可以通過AxWebBrowser組件來實現下面就來具體介紹

  < I > 浏覽指定的地址

  在程序中網址是填寫在組件textbox中的浏覽指定地址功能是通過程序的按鈕轉到來實現的下面是按鈕轉到按動後的程序代碼

private void button_Click ( object sender SystemEventArgs e )
{
SystemObject nullObject = ;
string str = ;
SystemObject nullObjStr = str ;
CursorCurrent = CursorsWaitCursor ;
axWebBrowserNavigate ( textBoxText ref nullObject ref nullObjStr ref nullObjStr ref nullObjStr ) ;
CursorCurrent = CursorsDefault ;
}

  < II > 浏覽器的前進後退停止刷新主頁功能

  在AxWebBrowser組件中對這些功能都有一個具體的方法來與之對應具體如下面代碼

private void toolBar_ButtonClick ( object sender ToolBarButtonClickEventArgs e )
{
//浏覽器中的後退
if ( eButton == tb )
{
axWebBrowserGoBack ( ) ;
}
//浏覽器中的前進
if ( eButton == tb )
{
axWebBrowserGoForward ( ) ;
}
//浏覽器中的停止
if ( eButton == tb )
{
axWebBrowserStop ( ) ;
}
//浏覽器中的刷新
if ( eButton == tb )
{
axWebBrowserRefresh ( ) ;
}
//浏覽器中的主頁
if ( eButton == tb )
{
axWebBrowserGoHome ( ) ;
}
}
  
  < III > 當然掌握了上面的知識你就可以用Visual C#做出一個基本的浏覽器了但下面這些也是不可缺少的因為下面這些代碼將使得你做的浏覽器更專業下面代碼的作用是使得浏覽界面隨著窗體的變化而變化按鈕和文本框也要隨著窗體的變化而變化

buttonAnchor = ( AnchorStylesTop | AnchorStylesRight ) ;
//定位轉到按鈕組件與窗體的上右邊框保持一致
textBoxAnchor = ( ( AnchorStylesTop | AnchorStylesLeft )
| AnchorStylesRight ) ;
//定位地址文本框組件與窗體的上右邊框保持一致
axWebBrowserAnchor = ( ( ( AnchorStylesTop | AnchorStylesBottom )
| AnchorStylesLeft )
| AnchorStylesRight ) ;
//定位浏覽器組件與窗體的上右邊框保持一致

  三.源程序代碼(browercs)

  了解有了上面的這些就可以比較容易編寫一個屬於自己的浏覽器了下面是用Visual C#做的浏覽器源程序代碼他具備了IE浏覽器的一些常用的功能

using System ;
using SystemDrawing ;
using SystemCollections ;
using SystemComponentModel ;
using SystemWindowsForms ;
using SystemData ;
using AxSHDocVw ;
public class Form : Form
{
private ToolBar toolBar ;
private ToolBarButton tb ;
private ToolBarButton tb ;
private ToolBarButton tb ;
private ToolBarButton tb ;
private ToolBarButton tb ;
private Label label ;
private TextBox textBox ;
private Button button ;
private AxWebBrowser axWebBrowser ;
private SystemComponentModelContainer components = null ;
public Form ( )
{
InitializeComponent ( ) ;
}
//清除程序中使用過的資源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
componentsDispose ( ) ;
}
}
baseDispose ( disposing ) ;
}
//初始化窗體中的各個組件
private void InitializeComponent ( )
{
tb = new ToolBarButton ( ) ;
tb = new ToolBarButton ( ) ;
tb = new ToolBarButton ( ) ;
toolBar = new ToolBar ( ) ;
tb = new ToolBarButton ( ) ;
tb = new ToolBarButton ( ) ;
button = new Button ( ) ;
textBox = new TextBox ( ) ;
axWebBrowser = new AxWebBrowser ( ) ;
label = new Label ( ) ;
( ( SystemComponentModelISupportInitialize ) ( thisaxWebBrowser ) )BeginInit ( ) ;
thisSuspendLayout ( ) ;

tbText = 後退 ;
tbText = 前進 ;
tbText = 停止 ;
tbText = 刷新 ;
tbText = 主頁 ;

toolBarAppearance = ToolBarAppearanceFlat ;
toolBarBorderStyle = SystemWindowsFormsBorderStyleFixedSingle ;
//在工具欄中加入按鈕
toolBarButtonsAdd ( tb ) ;
toolBarButtonsAdd ( tb ) ;
toolBarButtonsAdd ( tb ) ;
toolBarButtonsAdd ( tb ) ;
toolBarButtonsAdd ( tb ) ;
toolBarDropDownArrows = true ;
toolBarName = toolBar ;
toolBarShowToolTips = true ;
toolBarSize = new SystemDrawingSize ( ) ;
toolBarTabIndex = ;
toolBarButtonClick += new ToolBarButtonClickEventHandler ( toolBar_ButtonClick ) ;
//定位轉到按鈕組件與窗體的上右邊框保持一致
buttonAnchor = ( AnchorStylesTop | AnchorStylesRight ) ;
buttonDialogResult = DialogResultOK ;
buttonLocation = new SystemDrawingPoint ( ) ;
buttonName = button ;
buttonSize = new SystemDrawingSize ( ) ;
buttonTabIndex = ;
buttonText = 轉到 ;
buttonClick += new SystemEventHandler ( button_Click ) ;
//定位地址文本框組件與窗體的上右邊框保持一致
textBoxAnchor = ( ( AnchorStylesTop | AnchorStylesLeft )
| AnchorStylesRight ) ;
textBoxLocation = new SystemDrawingPoint ( ) ;
textBoxName = textBox ;
textBoxSize = new SystemDrawingSize ( ) ;
textBoxTabIndex = ;
textBoxText = ;
//定位浏覽器組件與窗體的上右邊框保持一致
axWebBrowserAnchor = ( ( ( AnchorStylesTop | AnchorStylesBottom )
| AnchorStylesLeft )
| AnchorStylesRight ) ;
axWebBrowserEnabled = true ;
axWebBrowserLocation = new SystemDrawingPoint ( ) ;
axWebBrowserSize = new SystemDrawingSize ( ) ;
axWebBrowserTabIndex = ;

labelLocation = new SystemDrawingPoint ( ) ;
labelName = label ;
labelSize = new SystemDrawingSize ( ) ;
labelTabIndex = ;
labelText = 地址 ;

thisAutoScaleBaseSize = new SystemDrawingSize ( ) ;
thisClientSize = new SystemDrawingSize ( ) ;

thisControlsAdd ( axWebBrowser ) ;
thisControlsAdd ( button ) ;
thisControlsAdd ( textBox ) ;
thisControlsAdd ( label ) ;
thisControlsAdd ( toolBar ) ;
thisFormBorderStyle = FormBorderStyleFixedSingle ;
thisName = Form ;
thisText = visual C#做浏覽器 ;
( ( SystemComponentModelISupportInitialize ) ( thisaxWebBrowser ) )EndInit ( ) ;
thisResumeLayout ( false ) ;

}
static void Main ( )
{
ApplicationRun ( new Form ( ) ) ;
}
//實現浏覽器主要功能
private void toolBar_ButtonClick ( object sender ToolBarButtonClickEventArgs e )
{
//浏覽器中的後退
if ( eButton == tb )
{
axWebBrowserGoBack ( ) ;
}
//浏覽器中的前進
if ( eButton == tb )
{
axWebBrowserGoForward ( ) ;
}
//浏覽器中的停止
if ( eButton == tb )
{
axWebBrowserStop ( ) ;
}
//浏覽器中的刷新
if ( eButton == tb )
{
axWebBrowserRefresh ( ) ;
}
//浏覽器中的主頁
if ( eButton == tb )
{
axWebBrowserGoHome ( ) ;
}

}
//浏覽指定的Web地址
private void button_Click ( object sender SystemEventArgs e )
{
SystemObject nullObject = ;
string str = ;
SystemObject nullObjStr = str ;
CursorCurrent = CursorsWaitCursor ;
axWebBrowserNavigate ( textBoxText ref nullObject ref nullObjStr ref nullObjStr ref nullObjStr ) ;
CursorCurrent = CursorsDefault ;
}
}

  四.編譯源程序和編譯後的執行程序的運行界面

  在經過如下命令編譯後就可以得到可以自己的浏覽器了
csc /t:winexe /r:AxSHDocVwdll /r:SHDocVwdll /r:systemdll
/r:systemwindowsformsdll /r:systemdrawingdll browercs

  五.總結

  至此一個功能相對完備的浏覽器就算完成了其實用Visual C#做浏覽器的過程也就是Visual C#中使用COM組件的過程掌握了COM組件在Visual C#使用方法就可以利用Visual C#編寫出功能更強大適應性更強的軟件來但編寫的過程又十分的簡單


From:http://tw.wingwit.com/Article/program/net/201311/15692.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.