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框架中專門提供了一個程序
Aximp
exe
來實現由COM組件到WinForm組件的轉換
那麼這個文件在哪裡?假設你安裝
Net FrameWork SDK在
C
盤
那麼在
C:\Program Files\Microsoft
NET\FrameworkSDK\Bin
目錄中就可以找到這個文件
如果你安裝
Net FrameWork SDK在其他目錄或者磁盤
依照上述的目錄順序就可以找到這個文件了
下面用Visual C#來做一個
浏覽器
看看在Visual C#是如何使用COM組件的
一.本文程序設計和運行的軟件環境
(
)微軟公司視窗
服務器版
(
)
Net FrameWork SDK Beta
二.程序設計的思路以及關鍵步驟的解決方法 (
)把COM組件轉換為WinForm組件
其實實現這種轉換十分的簡單
我們知道微軟Web浏覽器COM組件名稱為
shdocvw
dll
由於我們使用的是視窗
所以這個文件是存放在
c:\winnt\system
目錄中
如果你使用的是視窗
或者是視窗Me
那麼此組件存放的位置是
c:\windows\system
Aximp
exe
文件後面有許多的參數
你可以通過
Aximp /?
來了解
在本文中只使用下列簡單的命令就可成功轉換
Aximp c:\winnt\system
\shdocvw
dll
運行上述命令後就可以實現轉換
並在當前目錄中產生
SHDocVw
dll
和
AxSHDocVw
dll
二個文件
(
)在程序中使用轉換後組件
在
AxSHDocVw
dll
中定義了命名空間
AxSHDocVw
在此命名空間中定義了一個
AxWebBrowser
組件
這個組件中有若干個方法和屬性
Visual C#就是通過這些方法和屬性來實現浏覽器的一些基本功能的
使用此浏覽器組件和使用其他的WinForm組件的過程是一樣的
首先要導入命名空間
然後在程序中繼承此命名空間中定義的浏覽器組件
最後設定這個繼承後的組件的屬性和方法
具體如下
< I > 導入命名空間
具體代碼如下
using AxSHDocVw ;
< II> 繼承此命名空間中定義的浏覽器組件
具體代碼如下
private AxWebBrowser axWebBrowser
;
(
)通過轉換後組件來實現浏覽器的一些基本功能
浏覽器的主要功能就是能夠到指定的地址浏覽信息
當然在具體的浏覽中還有一些基本的功能
譬如
前進
後退
停止
刷新
主頁
等
這些功能都可以通過
AxWebBrowser
組件來實現
下面就來具體介紹
< I > 浏覽指定的地址
在程序中
網址是填寫在組件
textbox
中的
浏覽指定地址
功能是通過程序的按鈕
轉到
來實現的
下面是按鈕
轉到
按動後的程序代碼
private void button
_Click ( object sender
System
EventArgs e )
{
System
Object nullObject =
;
string str =
;
System
Object nullObjStr = str ;
Cursor
Current = Cursors
WaitCursor ;
axWebBrowser
Navigate ( textBox
Text
ref nullObject
ref nullObjStr
ref nullObjStr
ref nullObjStr ) ;
Cursor
Current = Cursors
Default ;
}
< II > 浏覽器的
前進
後退
停止
刷新
主頁
功能
在
AxWebBrowser
組件中對這些功能都有一個具體的方法來與之對應
具體如下面代碼
private void toolBar
_ButtonClick ( object sender
ToolBarButtonClickEventArgs e )
{
//浏覽器中的
後退
if ( e
Button == tb
)
{
axWebBrowser
GoBack ( ) ;
}
//浏覽器中的
前進
if ( e
Button == tb
)
{
axWebBrowser
GoForward ( ) ;
}
//浏覽器中的
停止
if ( e
Button == tb
)
{
axWebBrowser
Stop ( ) ;
}
//浏覽器中的
刷新
if ( e
Button == tb
)
{
axWebBrowser
Refresh ( ) ;
}
//浏覽器中的
主頁
if ( e
Button == tb
)
{
axWebBrowser
GoHome ( ) ;
}
}
< III > 當然掌握了上面的知識
你就可以用Visual C#做出一個基本的浏覽器了
但下面這些也是不可缺少的
因為下面這些代碼將使得你做的浏覽器更專業
下面代碼的作用是使得浏覽界面隨著窗體的變化而變化
按鈕和文本框也要隨著窗體的變化而變化
button
Anchor = ( AnchorStyles
Top | AnchorStyles
Right ) ;
//定位
轉到
按鈕組件與窗體的上
右邊框保持一致
textBox
Anchor = ( ( AnchorStyles
Top | AnchorStyles
Left )
| AnchorStyles
Right ) ;
//定位地址文本框組件與窗體的上
左
右邊框保持一致
axWebBrowser
Anchor = ( ( ( AnchorStyles
Top | AnchorStyles
Bottom )
| AnchorStyles
Left )
| AnchorStyles
Right ) ;
//定位浏覽器組件與窗體的上
下
左
右邊框保持一致
三.源程序代碼(browercs) 了解有了上面的這些
就可以比較容易編寫一個屬於自己的浏覽器了
下面是用Visual C#做的浏覽器源程序代碼
他具備了IE浏覽器的一些常用的功能
using System ;
using System
Drawing ;
using System
Collections ;
using System
ComponentModel ;
using System
Windows
Forms ;
using System
Data ;
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 System
ComponentModel
Container components = null ;
public Form
( )
{
InitializeComponent ( ) ;
}
//清除程序中使用過的資源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components
Dispose ( ) ;
}
}
base
Dispose ( 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 ( ) ;
( ( System
ComponentModel
ISupportInitialize ) ( this
axWebBrowser
) )
BeginInit ( ) ;
this
SuspendLayout ( ) ;
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