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
运行上述命令后就可以实现转换并在当前目录中产生SHDocVwdll和AxSHDocVwdll二个文件
()在程序中使用转换后组件
在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#编写出功能更强大适应性更强的软件来但编写的过程又十分的简单