|
<p >VB.NET和C#一样也没有只属于自己的类库,他们使用的类库都是.Net FrameWork SDK,在此类库中封装许多类,VB.NET就是通过这些类来突破自身语言的限制,实现很多强大功能的。其实对于.Net的编程语言来说,使用VB.NET来编写程序或者使用C#编程已经没有像以前使用VB和C++之间,有那么大的区别了,因为一般来说只要用C#能够实现的功能,同样用VB.NET也可以实现,有时使用VB.NET还显得更为方便。<p >虽然.Net FrameWork SDK的内容十分丰富,功能也十分强大,但有些功能使用此类库来实现就显得有点麻烦,因为在Windows里面拥有许多COM组件,充分利用这些已经存在的资源,对于快速开发程序就显得非常重要了。本文就来介绍一下,VB.NET使用COM组件来做一个属于自己的浏览器。<p ><ccid_nobr><strong>一. VB.NET和COM组件:</strong></ccid_nobr><p >写到这里有一个概念要澄清一下,就是VB.NET和C#一样,不能直接使用已经存在的COM组件,这是因为编译VB.NET和C#的文件的时候,必须保证编译时候所使用的文件是由受管代码(Managed Code)文件,我们知道VB.NET和C#所使用的.Net FrameWork SDK都是受管代码,而对于那些COM组件来说,他们都是非受管代码(Unmanaged Code),所以这些COM组件要能够被VB.NET和C#使用,必须实现自身从非受管代码到受管代码的转换。好在,在.Net框架中提供了一个程序来专门实现这种转换,这个文件就是"Aximp.exe",如果你把.Net FrameWork SDK安装在"C"盘,那么在"C:\Program Files\Microsoft.NET\FrameworkSDK\Bin"目录中,就可以找到这个文件。<p ><ccid_nobr><strong>二. COM组件的转换:</strong></ccid_nobr><p >在本文中所使用的COM组件的名称是微软的Web浏览器,如果你选用的操作系统是2000,并且安装的路径是"C:\Winnt",那么这个组件可以在"C:\Winnt\System32"目录中找到;如果你选用的操作系统是98,并且安装的路径是"C:\Windows",那么这个组件可以在"C:\Windows\System"目录中找到,这个COM组件的名称为"shdocvw.dll"。"Aximp.exe"是一个功能比较强大的程序,你可以通过"Aximp /?"命令,来了解他的一些其他的常规使用方法,由于在本文中只是最为简单的使用方法,所以使用下列简单的命令就可成功转换:<p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="0" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"> Aximp c:\winnt\system32\shdocvw.dll </td></tr></table></ccid_nobr><p >运行上述命令后就可以实现转换,并在当前目录中产生"SHDocVw.dll"和"AxSHDocVw.dll"二个文件。具体如下图:<p ><ccid_nobr><center><img src="http://www.hh010.com/upload_files/article/244/9_sm1neg14703.gif"></center></ccid_nobr><p ><ccid_nobr><I>图01:COM组件的转换过程</I></ccid_nobr><p >在成功转换过以后,就要利用转换后的这二个文件,用VB.NET来做一个属于自己的浏览器。<p ><ccid_nobr><strong>三. 本文程序设计和运行的软件环境:</strong></ccid_nobr><p >(1).微软公司视窗2000服务器版<p >(2)..Net FrameWork SDK Beta 2<p ><ccid_nobr><strong>四. 程序设计的思路以及关键步骤的解决方法:</strong></ccid_nobr><p >(1).在VB.NET中使用浏览器组件:<p >在转换而成的"AxSHDocVw.dll"和"SHDocVw.dll"中定义了命名空间"AxSHDocVw",在此命名空间中封装了一个"AxWebBrowser"组件,这个组件中有若干个方法和属性,VB.NET就是通过这些方法和属性来实现浏览器的一些基本功能的。使用此浏览器组件和使用其他的WinForm组件的过程是一样的,首先要导入命名空间,然后在程序中继承此命名空间中定义的浏览器组件,最后设定这个继承后的组件的属性和方法。具体如下:<p >< I > .导入命名空间,具体代码如下:<p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="0" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"> Imports AxSHDocVw </td></tr></table></ccid_nobr><p >< II > . 继承此命名空间中定义的浏览器组件,具体代码如下:<p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="0" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"> Friend WithEvents AxWebBrowser1 As AxSHDocVw.AxWebBrowser </td></tr></table></ccid_nobr><p >(2).VB.NET实现浏览器的一些基本功能:<p >要用VB.NET做一个属于自己的浏览器的,就必须掌握用VB.NET是如何实现浏览器的一些基本功能的,我们所讲的浏览器的基本功能其实也就是浏览器工具栏上的那些功能按钮,譬如:前进、后退、主页、停止等,其中浏览器中最为重要,也是比较难实现的,就是如何在给定网址后,通过"转到"按钮,浏览指定的网页,下面就来具体介绍一下。<p >< I > .浏览指定网页:<p >在下列的代码中我们是通过TextBox1文本框组件来放置指定的网址的,"Button1"按钮组件就是定义的"转到"按钮,下列就是用VB.NET实现浏览指定网页的程序代码:<p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="0" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"> Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click<br> Dim nullObject As System.Object = 0<br> Dim str As String = ""<br> Dim nullObjStr As System.Object = str<br> Cursor.Current = Cursors.WaitCursor<br> AxWebBrowser1.Navigate ( TextBox1.Text , nullObject , nullObjStr , nullObjStr , nullObjStr )<br> Cursor.Current = Cursors.Default<br> End Sub<br></td></tr></table></ccid_nobr>< II > .VB.NET实现浏览器的基本功能:<p >在本文的程序中,我们也是仿照IE浏览器的大致式样,同样设定了一个工具栏(ToolBar1),并且在工具栏中放置了一些按钮(ToolBarButton1至ToolBarButton5),通过这些按钮来实现浏览器的前进、后退等基本功能,下列是实现这些功能的代码:<p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="0" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"> Private Sub ToolBar1_ButtonClick ( ByVal sender As System.Object , ByVal e As ToolBarButtonClickEventArgs ) Handles ToolBar1.ButtonClick<br> '实现浏览器中的"后退"功能<br> If e.Button Is ToolBarButton1 Then<br> AxWebBrowser1.GoBack ( )<br> End If<br> '实现浏览器中的"前进"功能<br> If e.Button Is ToolBarButton2 Then<br> AxWebBrowser1.GoForward ( )<br> End If<br> '实现浏览器中的"主页"功能<br> If e.Button Is ToolBarButton3 Then<br> AxWebBrowser1.GoHome ( )<br> End If<br> '实现浏览器中的"刷新"功能<br> If e.Button Is ToolBarButton4 Then<br> AxWebBrowser1.Refresh ( )<br> End If<br> '实现浏览器中的"停止"功能<br> If e.Button Is ToolBarButton5 Then<br> AxWebBrowser1.Stop ( )<br> End If<br> End Sub </td></tr></table></ccid_nobr><p >< III > .其实掌握了上面的这些知识,一个基本的浏览器的框架大致也就出来了,但由于浏览器页面大小是经常变化,如果你不设定窗体中的组件是跟随窗体大小变化而随之变化的话,这个做出来浏览器也就显得不那么专业,所以下面这些画龙点睛的代码也是不可缺少的。下面代码的作用是使得浏览界面上的组件随着窗体的变化而变化,即窗体中按钮和文本框等要随着窗体的变化而变化。<p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="0" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"> '定位"地址"文本框组件与窗体的下、左、右边框保持一致<br> TextBox1.Anchor = ( ( ( AnchorStyles.Top Or AnchorStyles.Bottom ) _<br> Or AnchorStyles.Left ) _<br> Or AnchorStyles.Right ) '定位"转到"按钮组件与窗体的上、右边框保持一致<br> Button1.Anchor = ( AnchorStyles.Top Or AnchorStyles.Right )<br> '定位"浏览器"组件与窗体的上、下、左、右边框保持一致<br> AxWebBrowser1.Anchor = ( ( ( AnchorStyles.Top Or AnchorStyles.Bottom ) _<br> Or AnchorStyles.Left ) _<br> Or AnchorStyles.Right ) </td></tr></table></ccid_nobr><p ><ccid_nobr><strong>五. 用VB.NET做浏览器的源程序代码(IE.vb):</strong></ccid_nobr><p >在了解了上面的这些要点后,可以得到用VB.NET做浏览器的完整代码,具体如下:<p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="0" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"> Imports System<br> Imports System.Drawing<br> Imports System.Collections<br> Imports System.ComponentModel<br> Imports System.Windows.Forms<br> Imports AxSHDocVw<br> '导入程序中使用到的命名空间<br> Public Class Form1<br> Inherits Form<br> Public Sub New ( )<br> MyBase.New ( )<br> '初始化窗体中的各个组件<br> InitializeComponent ( )<br> End Sub<br> '清除程序中使用的各种资源<br> Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean )<br> If disposing Then<br> If Not ( components Is Nothing ) Then<br> components.Dispose ( )<br> End If<br> End If<br> MyBase.Dispose ( disposing )<br> End Sub<br> Friend WithEvents ToolBar1 As ToolBar<br> Friend WithEvents ToolBarButton1 As ToolBarButton<br> Friend WithEvents ToolBarButton2 As ToolBarButton<br> Friend WithEvents ToolBarButton3 As ToolBarButton<br> Friend WithEvents ToolBarButton4 As ToolBarButton<br> Friend WithEvents ToolBarButton5 As ToolBarButton<br> Friend WithEvents Label1 As Label<br> Friend WithEvents TextBox1 As TextBox<br> Friend WithEvents Button1 As Button<br> Friend WithEvents AxWebBrowser1 As AxSHDocVw.AxWebBrowser<br><br> Private components As System.ComponentModel.Container<br> Private Sub InitializeComponent ( )<br> TextBox1 = New TextBox ( )<br> ToolBarButton1 = New ToolBarButton ( )<br> ToolBarButton2 = New ToolBarButton ( )<br> ToolBarButton3 = New ToolBarButton ( )<br> ToolBarButton4 = New ToolBarButton ( )<br> ToolBarButton5 = New ToolBarButton ( )<br> Label1 = New Label ( )<br> ToolBar1 = New ToolBar ( )<br> Button1 = New Button ( )<br> AxWebBrowser1 = New AxSHDocVw.AxWebBrowser ( )<br> CType ( AxWebBrowser1 , System.ComponentModel.ISupportInitialize ).BeginInit ( )<br> SuspendLayout ( )<br> '定位"地址"文本框组件与窗体的下、左、右边框保持一致<br> TextBox1.Anchor = ( ( ( AnchorStyles.Top Or AnchorStyles.Bottom ) _<br> Or AnchorStyles.Left ) _<br> Or AnchorStyles.Right )<br> TextBox1.Location = New Point ( 48 , 40 )<br> TextBox1.Name = "TextBox1"<br> TextBox1.Size = New Size ( 296 , 21 )<br> TextBox1.TabIndex = 2<br> TextBox1.Text = ""<br> ToolBarButton1.Text = "向后"<br> ToolBarButton3.Text = "主页"<br> ToolBarButton2.Text = "向前"<br> ToolBarButton4.Text = "刷新"<br> ToolBarButton5.Text = "停止"<br><br> Label1.Location = New Point ( 8 , 48 )<br> Label1.Name = "Label1"<br> Label1.Size = New Size ( 48 , 23 )<br> Label1.TabIndex = 1<br> Label1.Text = "地址:"<br> '以下是在工具栏中加入按钮<br> ToolBar1.Buttons.Add ( ToolBarButton1 ) <br> ToolBar1.Buttons.Add ( ToolBarButton2 ) <br> ToolBar1.Buttons.Add ( ToolBarButton3 ) <br> ToolBar1.Buttons.Add ( ToolBarButton4 ) <br> ToolBar1.Buttons.Add ( ToolBarButton5 ) <br> ToolBar1.DropDownArrows = True<br> ToolBar1.Name = "ToolBar1"<br> ToolBar1.ShowToolTips = True<br> ToolBar1.Size = New Size ( 400 , 38 )<br> ToolBar1.TabIndex = 0<br> '定位"转到"按钮组件与窗体的上、右边框保持一致<br> Button1.Anchor = ( AnchorStyles.Top Or AnchorStyles.Right )<br> Button1.Location = New Point ( 352 , 40 )<br> Button1.Name = "Button1"<br> Button1.Size = New Size ( 40 , 23 )<br> Button1.TabIndex = 3<br> Button1.Text = "转到"<br> '定位"浏览器"组件与窗体的上、下、左、右边框保持一致<br> AxWebBrowser1.Anchor = ( ( ( AnchorStyles.Top Or AnchorStyles.Bottom ) _<br> Or AnchorStyles.Left ) _<br> Or AnchorStyles.Right )<br> AxWebBrowser1.Enabled = True<br> AxWebBrowser1.Location = New Point ( 0 , 64 )<br> AxWebBrowser1.Size = New Size ( 400 , 240 )<br> AxWebBrowser1.TabIndex = 4<br> Me.AutoScaleBaseSize = New Size ( 6 , 14 )<br> Me.ClientSize = New Size ( 400 , 301 )<br> '在窗体上加入组件<br> Me.Controls.Add ( AxWebBrowser1 )<br> Me.Controls.Add ( Button1 )<br> Me.Controls.Add ( TextBox1 )<br> Me.Controls.Add ( Label1 )<br> Me.Controls.Add ( ToolBar1 )<br> Me.Name = "Form1"<br> Me.Text = "VB.NET做个性化浏览器"<br> CType ( Me.AxWebBrowser1 , System.ComponentModel.ISupportInitialize ).EndInit ( )<br> Me.ResumeLayout ( False )<br> End Sub<br> '实现浏览器的功能<br> Private Sub ToolBar1_ButtonClick ( ByVal sender As System.Object , ByVal e As ToolBarButtonClickEventArgs ) Handles ToolBar1.ButtonClick<br> '实现浏览器中的"后退"功能<br> If e.Button Is ToolBarButton1 Then<br> AxWebBrowser1.GoBack ( )<br> End If<br> '实现浏览器中的"前进"功能<br> If e.Button Is ToolBarButton2 Then<br> AxWebBrowser1.GoForward ( )<br> End If<br> '实现浏览器中的"主页"功能<br> If e.Button Is ToolBarButton3 Then<br> AxWebBrowser1.GoHome ( )<br> End If<br> '实现浏览器中的"刷新"功能<br> If e.Button Is ToolBarButton4 Then<br> AxWebBrowser1.Refresh ( )<br> End If<br> '实现浏览器中的"停止"功能<br> If e.Button Is ToolBarButton5 Then<br> AxWebBrowser1.Stop ( )<br> End If<br> End Sub<br> '实现"转到"按钮功能<br> Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click<br> Dim nullObject As System.Object = 0<br> Dim str As String = ""<br> Dim nullObjStr As System.Object = str<br> Cursor.Current = Cursors.WaitCursor<br> AxWebBrowser1.Navigate ( TextBox1.Text , nullObject , nullObjStr , nullObjStr , nullObjStr )<br> Cursor.Current = Cursors.Default<br> End Sub<br> End Class<br> Module Module1<br> Sub Main ( )<br> Application.Run ( new Form1 ( ) )<br> End sub<br> End Module </td></tr></table></ccid_nobr><p ><ccid_nobr><strong>六. 编译命令和运行界面:</strong></ccid_nobr><p >在经过如下命令编译后,就可以得到可以自己的浏览器了<p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="0" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"> vbc /t:winexe /r:AxSHDocVw.dll /r:SHDocVw.dll /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll ie.cs </td></tr></table></ccid_nobr><p >下图是此程序运行的界面:<p ><ccid_nobr><center><img src="http://www.hh010.com/upload_files/article/244/9_wtwwvk14704.gif"></center></ccid_nobr><p ><ccid_nobr><I>图02:用VB.NET做成的浏览器的运行界面</I></ccid_nobr><p ><ccid_nobr><strong>七. Visual Stduio .Net的实现方法:</strong></ccid_nobr><p >随着Visual Stduio .Net的正式版的推出,很多程序员都已经开始使用。其实用Visual Stduio .Net来实现上面的这些步骤,就显得非常的容易,因为上面的很多步骤,在Visual Stduio .Net中都被掩盖了起来,也就是说很多步骤都让Visual Stduio .Net给你在不知不觉中做出来了。譬如COM组件的转换,在你选择新建了一个项目后,按动工具栏,点击右键,选择"自定义工具栏",具体如下:<p ><ccid_nobr><center><img src="http://www.hh010.com/upload_files/article/244/9_jzhxlx14705.gif"></center></ccid_nobr><p ><ccid_nobr><I>图03:自定义工具栏的操作界面</I></ccid_nobr><p >就可以得到下面界面:<p ><ccid_nobr><center><img src="http://www.hh010.com/upload_files/article/244/9_krxsbp14706.gif"></center></ccid_nobr><p ><ccid_nobr><I>图04:在Visual Stdio .Net中使用COM组件</I></ccid_nobr><p >选择"Microsoft Web 浏览器",你就会发现在Windows窗体的工具栏上面多了一个新的组件,这个组件就是Visual Stdio .Net给你转换好的可以在VB.NET中使用的浏览器组件。此时你就可以在新建的窗体上面加入此组件,这时Visual Stdio .Net就给你完成了COM组件的转换,并且也为你创建一个浏览器的组件。此时就可以根据上文中介绍的要点来实现浏览器的一些基本功能,具体的实现方法和上面的完全一样,这里就不详细介绍了。<p ><ccid_nobr><strong>八. 总结:</strong></ccid_nobr><p >用VB.NET做浏览器的过程其实也就是用VB.NET进行COM组件编程的过程,在本文中,按照COM组件的转换,COM组件的使用的步骤一步步的说明。虽然随着Visual Sduio .Net正式版的推出,我们在以后的编程中使用的平台更多的倾向于他,但由于Visual Sduio .Net在实际的操作过程中掩盖了许多的底层的操作,这其实对我们更深入的掌握.Net程序开发是不利的,这也就是本文为什么一开始没有直接从Visual Sduio .Net编程开始。其实对一个高手来说,.Net方面的编程,用什么工具都是次要的,关键是要掌握其中的来龙去脉,你说对么?<p ><ccid_nobr><strong>关于作者</strong></ccid_nobr><p >马金虎(笔名:王天),武汉大学计算机系毕业,现就职于滁州供电局信息中心,微软2001-2002年度MVP。爱好做一些计算机相关的研究,发表过许多计算机相关文章。您可以通过QQ:23895859同作者联系。<p ><p >(责任编辑 <ccid_nobr>赵正北</ccid_nobr>) <p align="center"></p></p> |
|