2009-2010学年第二学期基于项目的C#实训指导书——基于VC#的浏览器程序设计熊坤郑州轻工业学院计算机与通信工程学院网络工程系2010年6月2日一实训目的通过实训使学生在掌握VC#编程理论的基础上,推动学生初步掌握基于VC#的网络浏览器程序的编程方法,为今后的网络协议编程和Web服务编程打下基础。二实训题目使用C#语言在VS2005平台上编程实现基于浏览器器程序。三实训要求1.能够熟练使用VS2005编程平台,熟悉平台菜单栏、工具栏和各种窗口的使用,掌握不同项目类型创建步骤和平台类库的使用。2.熟练掌握C#语法与程序结构,能够熟练创建程序功能所需的类、对象、接口等,并通过派生与继承实现代码重用,通过事件与消息实现对象之间的交互。3.熟练掌握权利浏览器程序所需的各种部件的使用,能够正确使用菜单、工具栏和窗口控件完成浏览器程序界面设计,并能够完成这些部件的相应响应函数代码编写,完成部件与函数之间的消息映射。4.按照软件工程的要求的功能分析、程序设计、代码编写、程序调试、功能测试等步骤,完成实训项目要求。5.提交“基于VC#的浏览器器程序设计”设计方案与程序源代码。四实训步骤4.1掌握浏览器工作原理浏览器工作原理如图4-1所示。万维网的工作过程因特网服务器连接HTTP响应报文②响应文档HTTP请求报文①请求文档图4-1浏览器工作原理(1)浏览器分析超链指向页面的URL。(2)浏览器向DNS请求解析地址。(3)域名系统DNS解析出清华大学服务器的IP地址。(4)浏览器与服务器建立TCP连接(5)浏览器发出取文件命令:GET/chn/yxsz/index.htm。(6)服务器给出响应,把文件index.htm发给浏览器。(7)TCP连接释放。(8)浏览器显示文件index.htm中的所有文本4.2学习浏览器功能结构浏览器程序功能结构如图4-2所示。浏览器的结构与远程服务器通信输出至显示器从鼠标和键盘输入网络接口可选客户程序HTML解释程序可选解释程序控制程序驱动程序……HTTP客户程序缓存图4-2浏览器功能结构1)浏览器有一组客户、一组解释程序,以及管理这些客户和解释程序的控制程序。2)控制程序是其中的核心部件,它解释鼠标的点击和键盘的输入,并调用有关的组件来执行用户指定的操作。3)例如,当用户用鼠标点击一个超链的起点时,控制程序就调用一个客户从所需文档所在的远地服务器上取回该文档,并调用解释程序向用户显示该文档4)HTML解释程序是必不可少的,而其他的解释程序则是可选的。5)解释程序把HTML规格转换为适合用户显示硬件的命令来处理版面的细节。6)许多浏览器还包含FTP客户,用来获取文件传送服务。7)一些浏览器也包含电子邮件客户,使浏览器能够发送和接收电子邮件8)浏览器将它取回的每一个页面副本都放入本地磁盘的缓存中。9)当用户用鼠标点击某个选项时,浏览器首先检查磁盘的缓存。若缓存中保存了该项,浏览器就直接从缓存中得到该项副本而不必从网络获取,这样就明显地改善浏览器的运行特性。10)但缓存要占用磁盘大量的空间,而浏览器性能的改善只有在用户再次查看缓存中的页面时才有帮助。11)许多浏览器允许用户调整缓存策略。4.3浏览器设计(1)浏览器功能设计浏览器功能设计主要确定设计好的浏览器需要具备哪些功能,以及这些功能是以什么方式进行实现,这个步骤相当于软件设计中的“需求分析”,其中必须保证基本功能的具备,即浏览器必须能够浏览Web页面。(2)浏览器界面设计浏览器界面设计主要确定浏览器的页面布局,设定浏览器窗口上设置哪些功能菜单项、设置哪些功能按钮、设置哪些状态栏,它们各自的位置如何、属性如何、对应的变量如何等等。(3)浏览器代码设计浏览器代码设计主要是确定对上述的设计的功能在代码上怎样实现,包括选用的程序语言和编程平台选择、程序代码的编写、程序代码的调试、程序功能的测试等等。4.4浏览器编程设计平台(1)VS2005编程平台(2)WebBrowser类及其使用(3)一些浏览器程序的代码分析4.5浏览器开发步骤(1)熟悉VS2005平台,建立项目(半天)打开VS2005选择“创建项目”,进入“新建项目”,如图4-1所示。图4-1“新建项目”对话框在“新建项目”对话框的项目类型窗口中选中“VisualC#”作为项目开发语言,在模板窗口中选中“Windows应用程序”作为项目开发模板,在“名称”、“位置”编辑框中输入自己设定的项目名字和项目存储位置,本讲义使用“CSharp浏览器”作为项目名称,如图4-2所示。图4-2输入新建项目的属性完成输入内容后,单击“确定”按钮,进入项目VC#开发窗口“Form.cs[设计]”,如图4-3所示。图4-3VC#开发窗口“Form.cs[设计]”(2)界面设计○1设计菜单栏如图4-4所示。(半天)图4-4设计菜单栏设计“文件”菜单如4-5所示。图4-5设计“文件”菜单设计“编辑”菜单如图4-6所示。图4-6设计“编辑”菜单设计“查看”菜单如图4-7所示。图4-7设计“查看”菜单设计“收藏”菜单如图4-8所示。图4-8设计“收藏”菜单设计“工具”菜单如图4-9所示。图4-9设计“工具”菜单○2设计工具栏、用户区和状态栏如图4-10所示(半天)图4-10工具栏和状态栏(3)功能代码编辑○1初始化代码双击“Form”设计页面进入代码编写页面,如图4-11所示。图4-11代码编写页面初始化页面代码如下:////////////////////////////////////////////////////////////////////CSharp浏览器////////版权所有-熊坤编程////////2009-8-28日////////////////////////////////////////////////////////////////////usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.IO;usingSystem.Threading;usingmshtml;usingSystem.Net;usingSystem.Runtime.InteropServices;usingSHDocVw;//******************************************************************////此类是一个主窗口类////本浏览器采用IE内核,多标签,多线程的一个浏览器,带有收藏夹功能。////可以查看页面源文件和网页链接状态的功能(可供分析网站的路径),具备////常用的门户引擎搜索功能。////******************************************************************//namespaceCSharp浏览器{publicpartialclassXkunbrowser:Form{publicXkunbrowser(){InitializeComponent();}//***********************************************////////外部API调用声明////////***********************************************//[DllImport(User32.DLL)]publicstaticexternintSendMessage(IntPtrhWnd,uintMsg,intwParam,intlParam);[DllImport(User32.DLL)]publicstaticexternIntPtrFindWindowEx(IntPtrhwndParent,IntPtrhwndChildAfter,stringlpszClass,stringlpszWindow);//***********************************************////////公用ID调用声明////////***********************************************//publicintIDM_ADDFAVORITES=2261;//添加到收藏夹IDpublicintID_IE_FILE_IMPORTEXPORT=374;//导入与导出IDpublicintID_IE_FILE_SENDDESKTOPSHORTCUT=284;//桌面快捷方式IDpublicintID_IE_FILE_NEWMAIL=279;//新建邮件IDpublicuintWM_COMMAND=0x0111;//***********************************************////////常用变量声明////////***********************************************//intLianJie_btn_Cishu=0;//链接状态按钮单击次数;stringurl_text;//导航栏的URL文本(用于普通的输//入网址浏览和回车浏览)Listintcishu=newListint();//储存寻找关键字符的位置inti=0;//记录列表cishu的下标}}//***********************************************////////启动程序运行时////////***********************************************//privatevoidForm1_Load(objectsender,EventArgse){try{this.WindowState=FormWindowState.Maximized;//窗口最大化显示Combo_FindType.Text=Combo_FindType.Items[0].ToString();//初始化搜索类型ThreadthdProcess=newThread(newThreadStart(Thread_NewNullTabPages));//启动生成空白页线程thdProcess.Start();cishu.Add(0);//初始化,对cishu列表添加添加一个元素(整数0)timer1.Start();}catch(System.Exceptionex){throwex;}}○2编写基础功能类编辑浏览器webBrowser控件处理浏览器基本功能:////////////////////////////////////////////////////////////////////CSharp浏览器////////版权所有-熊坤编程////////2009-8-28日//////////////////////////////////////////////////////////////////////******************************************************************////////此类是一个继承TabPage的页面类,包含webBrowser控件////////******************************************************************//usingSystem;usingSystem.Collections.Gener