Visual C++浏览器的设计与实现.docx
《Visual C++浏览器的设计与实现.docx》由会员分享,可在线阅读,更多相关《Visual C++浏览器的设计与实现.docx(29页珍藏版)》请在冰豆网上搜索。
VisualC++浏览器的设计与实现
宜宾学院
本科毕业论文(设计)
院(系)级班:
计算机与信息科学系2005级1班
专业:
计算机科学与技术
题目:
浏览器的设计与实现
指导教师:
蔡勇
导师职称:
讲师
学号:
051101036
姓名:
林修伟
同组人:
无
宜宾学院
年月日
摘要
论文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。
重点说明了系统设计重点、设计思想、难点技术和解决方案;同时也论述了基于HTTP协议的Web浏览器的开发思路、开发过程、利用的主要技术及本浏览器应用程序的功能模块的说明。
本课题是在深入理解HTTP协议的工作机理,系统掌握了TCP/UDP网络通信协议及网络编程的基本方法,掌握了使用WindowsSocketsAPI和MFCSocket编程技术之后,采用VisualC++作为开发工具来设计并实现一个Web浏览器,其功能主要包括:
浏览器的界面实现;实现收藏菜单;显示超文本;删除相关历史记录;将应用程序加入到时工具栏、禁止弹出窗口、禁止浏览某些网站访问Web页,保存网页,打印网页,停止当前访问,刷新网页,查看源文件和Internet属性等等。
关键词:
VisualC++;MFC;HTTP协议;浏览器
Abstract
Thethesisdescribesthedevelopmentofthesubjectbackground,tocompletethefunctionandthedevelopmentprocess.Focusingonsystemdesign,designideas,technologiesandsolutionsdifficult;butalsobasedontheHTTPprotocolontheWebbrowserofdevelopment,developmentprocess,themainuseofbrowsertechnologyandtheapplicationofthatfunction.
Thisissueisanin-depthunderstandingoftheworkingmechanismofHTTPprotocol,thesystemmasterTCP/UDPnetworkcommunicationprotocolandthebasicmethodsofnetworkprogramming,mastertheuseofWindowsSocketsAPIandMFCSocketprogrammingtechniques,theuseofVisualC++asadevelopmenttooltodesignandrealizationofaWebbrowser,itsfunctionsinclude:
achievementofthebrowserinterface;achieveFavoritesmenu;displayhypertext;deletehistoricalrecords;theapplication,whenaddedtotheIEtoolbar,pop-upwindowtheprohibitiontoprohibitthebrowsingofavisittheWebpageofsomesites,savethepage,printthepage,stopthecurrentvisit,refreshthepagetoseesourcedocumentsandInternetpropertiesandsoon.
Keywords:
VisualC++;MFC;TheHTTPprotocol;WebBrowser
第1章绪论
随着网络技术的不断发展,如何准确、快速地浏览网上提供的浩如烟海的资源已成为人们普遍关注的问题,一个基于完善的网络协议的,好的、易用的客户端应用软件的开发也就变得十分重要。
1.1研究本课题的意义
随着网络时代的飞速发展与前进,切身感受到了它在生活中占据着越来越重要的地位,计算机软件硬件的快速跳跃式的发展,计算机广泛地应用于各行各业,包括医学,金融,教育,建筑等。
但众所周知,单机的电脑并不能带来多大的益处,充其量不过是一台庞大存储设备或者说是一台快速计算的设备而已,只有能够联网的计算机才能发挥它的巨大优势,达到程序共享,资源共享,共同协作的目的。
为了获取互联网上海纳百川的资讯,在网络的世界里找到自己想了解到的,自己想探索到的新知识,需要借助到一个工具,这就是我们每一个人都熟悉的浏览器。
本课题是为了加深理解HTTP协议的工作机理,进而开发出方便用户使用的网络资源浏览应用程序软件浏览器。
网络浏览器虽然有很多现成的版本,有一些都已经很成熟,比如微软的IE和NETSCAPE,但在很多时候都需要进行浏览器的定制开发。
比如在触摸屏的开发中,那些现在已成为标准的浏览器都无法使用,需要自行开发。
1.2国内外研究状况概述
任何协议的雏形都非尽善尽美的,HTTP协议也经历了这样一个功能不断完善,不断增加的过程。
从HTTP出现到制定相应的RTC,HTTP的版本经历了HTTP0.9,HTTP1.0,HTTP1.1。
随着协议的不断完善和面向对象开发工具的不断发展,基于协议的应用程序的开发也相应的变得容易起来。
有时候开发人员无需知晓低层协议的工作就可以开发出不错的浏览器应用程序。
WEB浏览器把纯文本的HTML文件转变成图文混排,可理解性强的WEB页面,极大地推动了因特网的普及与发展。
如今浏览器已经从90年代初单一的HTML文本解释器发展成可支持Java,JavaScript,VRML等多种语言诉系统软件,并成为众多网络应用系统的支撑平台。
在我国,浏览器技术研究比较缓慢,具有自主版权的浏览器在市场上还很罕见。
1.3本课题的主要任务
本课题的主要任务是深入理解HTTP协议的工作机理,开发出适合自己需要的浏览器应用程序,因此应解决的主要问题是如何把自己所学的网络知识应用到实际编程当中去以及如何处理编制的应用软件的可用性、易用性、健壮性。
开发浏览器时,若想从非常深入地解析HTTP协议的框架和原理,试图从低层协议出发解析从服务器获得的HTML写成的网页难度会相当大,因此,在技术上,使用MFC的CHtmlView类来实现浏览器应用程序的编写。
在较为详细地了解了VisualC++应用平台之后,掌握浏览器的制作与实现过程,通过强大的VisualC++应用平台设计一个WEB浏览器,要求它具有浏览器的最基本的应用功能的基础上,添加一些具有人性化的选项功能。
设计浏览器时,首先确定要解决的问题是弄清楚MFC中封装的CHtmlView类的定义和使用方法,彻底弄明白此类到底封装了哪些对浏览网页支持的功能,这是浏览器编程的基础;其次是通过分析页面下载的具体过程,在打开网页的过程中应用程序需要做哪些事情,以便在应用程序中加入对这些过程支持的代码;在对应用程序的流程有了大致的轮廓以后,再开始考虑程序框架的设计,应用程序外观的设计;最后也是最关键的就是编写实现浏览网页的代码,以实现浏览器的基本功能,紧接着就是程序的调试和完善。
1.4本课题的难点
本课题是在对熟练掌握使用了VisualC++集成开发工具,尤其是MFC之后,设计并实现一个浏览器。
浏览器开发过程中,有几个模块做起来比较复杂,构成了整个应用程序的难点所在。
本课题的难点如下:
1.网址栏的初始化,需要从注册表中读取URL格式的文件去初始化网址栏,以便于每次浏览时以前输入的网址可用,不必为了浏览打开过的网址而重新输入。
2.在新窗口中打开链接。
当用户点中页面上的超级链接时,应用程序会在新窗口中打开本链接。
3.收藏夹的制作。
4.查看源文件的制作。
1.5课题开发平台和开发工具
本课题在windows系统下开发,软件基本运行环境为Windows环境。
硬件环境
处理器:
IntelPentiumIII或更高。
内存:
128MB以上。
硬盘空间:
20GB以上。
软件环境
操作系统:
WINDOWS98/2000/XP/Vista。
VisualC++作为前台开发工具,软件基本运行环境为Windows环境,由于系统相对较小,且在Windows系统下开发,故在Windows环境下基本没有什么限制。
第2章VisualC++应用平台及网络协议
2.1VisualC++引论
只有真正的程序员才使用VisualC++。
反过来,则并不见得如此。
最近似乎有许多专业的程序员放弃了使用这一语言而改用了其它产品提供的RAD(快速应用开发)环境。
许多人认为VisualC++太古老、太烦琐、学起来太困难了。
VisualC++的学习周期确实比其它语言要长。
可以很轻易地引入需要花上数小时才能排除的微妙错误这一事实一点也无助于提高程序员的开发效率。
然而,先把这些负面缺陷暂时放到一边,来看一看VisualC++具备的长处。
使用VisualC++主要的原因之一就在于它的灵活性。
可以彻底地控制整个开发环境。
其它语言则更多地趋向于庇护程序员,当要做一些基本的东西时,它们会做得很好。
不幸的是,当需要使用像C++这样的语言删除编程中的繁文缛节,并把任务完成时,这种保护作用就变成了开发工作的障碍。
长期以来,VisualC++一直拥有能够创建短小高效程序的美誉。
使用这种语言编写的程序几乎可以与用汇编语言编写的程序达到相同的运行速度,并且避免了汇编语言存在的各种问题。
C++实际上是介于汇编语言中寄存器编程的神秘莫测和像Pascal这种保护型编程环境方便性之中间难度的语言。
C++是编写诸如操作系统、设备驱动程序以及动态链接库(DLL)的强大语言,这一点不会不引起你的注意,这三种领域代码的开发依然是VisualC++的主战场。
VisualC++生成的短小、快速的代码在操作系统类对时间要求很高的系统中获得了极高的赞誉。
Microsoft添加到这个版本的VisualC++中的最新特性之一是更佳的原型能力,这一点通过增强的向导来实现。
现在,这个特性还不能把VisualC++提升到像VisualBasic向导相同的水平上,但它确实减少了开发应用程序的入门时间,这是个深受欢迎的变化。
另外,增强的向导使得这个版本的VisualC++比以前版本更为友好。
VisualC++也是编写ActiveX控件以及像ISAPI(Internet服务器应用程序接口)扩展和ISAPI过滤器这样针对IIS的专用代码的理想编程环境。
即使对属于快速应用程序开发环境中的应用程序编程来说,也没有人愿意花时间从Inter-net上下载一个巨型控件,也同样没有人愿意让慢速的过滤器加重Web服务器的负担。
VisualC++可以生成人们真正想要的简短可执行文件。
另外,VisualC++提供的额外灵活性也使得编写这些类型的应用程序更加容易些。
2.2MFC界面元素
MFCStudio窗口元素
使用VisualC++编辑程序时,可以把VisualC++的显示界面划分成三块功能区:
工具条、视图以及编辑窗口。
每个功能区都可以独立于其它功能区来操作,因此,可以在各功能区之间自由地切换。
图2.2.1显示了典型编辑器的显示情况以及这三个功能区的位置。
VisualC++通过各种手段来简化编码工作。
文本窗口中首先注意到的东西是代码的颜色。
例如,关键字的缺省颜色为蓝色,而注释的颜色为绿色。
这种方式的彩色代码让你能够轻易地分辨出代码的性质。
图2.2.1VC窗口界面元素
本窗口的左边缘是一竖条,这是VisualC++放置各种符号的地方,它通过颜色来区分数据和代码控制区。
例如,当我们在代码中设置了断点后,VisualC++就在这个竖条上显示断点符号,当该断点可用时,断点符号为红色,否则,断点符号为白色。
文本框的各个区域中都可以通过右击来显示一个上下文相关菜单。
上下文菜单中包含了可以进行基本操作的各种选项,与DeveloperStudio界面的其它地方不同,这些菜单不能直接进行修改。
可以像使用任何编辑器那样剪切、复制或粘贴文本。
由于系统已经加亮了#include文件项,因此上下文菜单提供了一个打开该文件的机会。
如果当前工程中还没有包含该文件,那么使用InsertFileintoProject菜单项就可以把该文件包含到工程中。
CheckOut菜单项用于管理小组型工程,通过它可以获取对文件的控制,以便编辑文件。
接下来的三个菜单项可以查找当前项更详细的信息。
例如,使用ParameterHelp菜单项可以得到函数调用的参数信息,AutoComplete协助你完成函数调用的键入。
后面的两个菜单项用于浏览工程。
可以找到某个特定项目在哪里引用、在哪里定义。
由于这些项目依赖于建立工程时创建的BSC文件,因此,在使用这些项目前要确保最近有效地重建过工程。
后面的两个菜单项——Insert/RemoveBreakpoint和EnableBreakpoint用于调试应用程序。
最后,可以打开ClassWizard来操作所选对象或查看文档的属性。
由于前面已经讨论过这些菜单项的主要用途,因此这里只研究三个最重要的菜单项。
使用InsertAc-tiveXControl菜单项可以把ActiveX控件添加到当前对话框中而无须将它实际添加到工程中。
这样,就可以在生成一大堆代码之前先看到该控件的工作效果。
不过,如果决定确实要使用该控件时,记住以后把该控件添加到工程中。
CheckMnemonics菜单项告诉VisualC++检查一下已经添加的所有控件,看是否存在同名错误或任何违反规则的情况。
当做完了一个对话框后,这个检查相当重要。
最后,Event菜单项显示一个对话框,告诉所选对象都支持哪些事件。
这个对话框还能够创建监控的任何事件的句柄。
类视图(ClassView)
该视图提供了工程中所有类的层次列表,通过扩展可以显示类中包含的细节。
例如,类中将包含要编辑的成员函数等。
图2.2.2显示了一个典型的类视图。
图2.2.2类视图
在层次列表的每个项目前面都有一个特殊的图标。
例如,每个类的前面都有一个由线条连接起来的三个方框形图标。
类视图中显示三种成员函数:
第一种是公共成员函数,它的图标为一个紫色菱形框;第二种是私有成员函数,它的图标上也有个菱形框,不过菱形框的旁边还有一把钥匙;第三种是保护成员函数,它的图标上有个菱形框和一个小锁。
与此相似,变量也有三种类型,它们都使用青绿色图标。
当看到一个绿色框时,你就知道是看到了某个COM对象的方法。
类视图中还使用了其它几种类型的图标,但上面所述的六种图标是创建绝大多数工程时都需要知道的图标。
技巧:
在ClassView窗口中右击,然后从上下文菜单中选择Hide,可以隐藏ClassView窗口(或任何其它视图,只要在这些视图中按这一步骤操作)。
使用View|Workspace命令可以重新显示ClassView窗口。
资源视图(ResourceView)
资源视图(ResourceView)在层次列表中列出了工程中用到的所有资源。
任何图像、字符串值以及程序所需要的其它非编程部件都可以作为资源使用。
图2.2.3显示了一个典型的资源视图窗口。
图2.2.3资源视图
VisualC++中可以创建的每一类资源在资源视图中都有自己的文件夹。
工程中没有使用某种特定类型的资源,那么资源视图中就不会显示这种资源的文件夹。
在每个文件夹中包含了工程中所用的该类资源。
例如,对话框(Dialog)文件夹中包含了工程中所有的对话框,包括About对话框。
每类资源也都使用自己的图标。
技巧:
右击资源视图最顶端的文件夹,系统显示一个可以访问两类特殊对话框资源的菜单:
ResourceIncludes和ResourceSymbols。
右击特定资源的文件夹,系统会显示添加该类新资源的上下文菜单。
工具条
工具条(Toolbar)是我们讨论DeveloperStudio界面的最后一个话题。
应该说明的是,VisualC++拥有比你启动VisualC++后看到的工具条多得多的工具条。
在工具条上的任何位置右击,都会看到如下图所示的上下文菜单:
图2.2.4工具条
该菜单中列出了VisualC++提供的所有标准工具条。
带选中符号的菜单项对应的工具条当前显示在工具条区域中。
如果想把某个菜单项对应的工具条添加到工具条区域,只需要单击该菜单项即可;反过来,如果想在工具条区域中去掉某个工具条,也只需要通过在上下文菜单中单击对应的菜单项、去掉其选中符号即可
Customize对话框包含了几个让你重新配置DeveloperStudio界面上绝大多数部件的选项卡。
然而,这里我们最感兴趣的是Commands选项卡。
对每个菜单和工具条它都包含了一系列的图标(代表对应的命令)或文本命令。
如果想给现存工具条上增加一个命令,只需要抓住其图标(或文本命令)并把它拖曳到工具条上,这样,所选命令就显示在工具条上,你可以更快速地访问它们了。
如果选择了某个现在还没有相应图标的命令,那么系统会显示ButtonAppearance对话框,在这个对话框中可以为命令选择一个图标。
同样的功能对菜单项也一样起作用。
你需要做的工作就是打开要修改的下拉菜单,在Commands选项卡中抓住要添加到菜单中的命令,然后将其拖曳到菜单项中希望的位置。
在这种情况下,你看到的总是命令的文本版本而不是图标。
从工具条或菜单中删除不需要命令的方法也很简单。
简单地抓住不需要的命令,并把它拖曳到Customize对话框中。
该命令将在菜单或工具条中消失,当然,你随时都可以重新把它添加到菜单或工具条中。
可以根据需要移动工具条的位置。
单击工具条左边缘的双线竖杠,然后把工具条拖曳到所需位置。
与此相似,如果你不喜欢某个菜单的当前位置,那么抓住它(在Customize对话框打开的情况下)并把它移动到所需位置。
VisualC++的资源
资源,是指各种各样可供利用的财富,它们可能埋藏在地表下面,也可能就在你的后院中。
就物理意义而言,从森林中的树木到地层中开采出来的煤炭,这一切都可以称为资源。
虽然不能从VisualC++中获得物理意义上的贵重珍宝,但可以挖掘到建立程序时所需的资源。
和任何一种矿产资源一样,VisualC++中的资源提供了一种原材料,将其与程序元素结合起来就可以创建一个成品。
在这里,资源与代码结合,创建应用程序的一部分,如菜单或工具条。
事实上,在程序中看到的大多数元素也都来自某类资源。
当然,VisualC++资源不仅仅是原材料,但原材料的作用是非常大的。
那么,可以从VisualC++的资源矿产中挖掘到什么呢?
这些资源的外形和大小各不相同,包括加速键、位图、光标、对话框、图标、菜单、串表、工具条和版本信息。
你会看到,某些资源存在子类,每种资源都有特定的用途。
在某些情况下,用向导设计程序时,VisualC++自动创建资源,如About对话框。
所创建的其它资源是设计另外一些程序的一部分,如字符串。
最后,你会人工设计一些资源,如对话框。
VisualC++支持十种资源:
加速键、位图、光标、对话框、HTML、图标、菜单、串表、工具条和版本信息。
图2.2.5资源图
可以随时创建任何所需要的资源。
只需显示ResourceView(资源视图),右击Resources(资源)文件夹,从上下文菜单中选择Insert(插入)。
会看到一个InsertResource(插入资源)对话框,如上图所示。
请注意,它显示出我们已提到过的所有十种资源。
还应该看到,有三种创建资源的方式,即使用对话框上的New(新建),Import(导入)或Custom(自定义)按钮。
可以在当前程序中使用来自其它工程的资源。
例如,可能想在编写的每一个程序中都使用相同的徽标。
只需右击Resources(资源)文件夹,从上下文菜单选择Import(导入)而不是Insert(插入)。
你会看到Open-type(打开类型)对话框。
选择包含了想要导入的资源的文件。
正是由于这个原因,你会想到把你的大多数资源与程序分离。
可惜的是,这种方法只对图标、光标、声波文件以及VisualBasic窗体文件有用。
技巧:
有几种使用来自其它工程的其它类型资源的方式,如About(关于)对话框。
只需简单地为想要共享的资源创建一个分离的RC文件就行了。
这在遇到像About对话框这样的资源时很有用。
你只要将RC文件添加到工程中,剩下的由VisualC++来处理。
另一种共享资源的方法是,将其复制到剪贴板,再在创建了正确类型的空白资源后,将其粘贴到工程中。
自定义资源就是自己设计的资源。
实际上,它并不适合VisualC++所提供的预定义类型。
创建一个自定义资源项目很容易:
只要单击InsertResource(插入资源)对话框上的Custom(自定义)按钮。
会看到包含单个空白的NewCustomResource(新建自定义资源)对话框。
简单地输入自定义资源名。
这时,VisualC++会产生一个新的文件夹,它含有你提供的自定义资源名和该文件夹内的一个新资源。
还要提供实现这个资源所需的二进制数据。
MFC应用程序类型
VisualC++应用程序可以分为五种类型:
1.控制台应用程序适用于你真正需要与遗留系统保持某种兼容性或不需要为用户提供全功能操作界面的情况。
2.基于对话框的应用程序通常是实用程序的专利,也适用于极小型不需要菜单系统的应用程序。
3.单文档应用程序适用于操作自有数据的简单应用程序,比如记事本或小型数据库前端应用。
这类应用程序也需要某种类型的菜单系统。
4.多文档应用程序是提供完整功能的应用程序,比如字处理程序或电子表格。
由于多文档应用程序是C++编程中十分复杂的部分,因此,当你考虑建立这类应用程序时,应该在VisualC++的灵活性与诸如VisualBasic之类的快速应用开发工具提供的速度之间进行权衡。
5.基于HTML的应用程序是VisualC++6.0新增的应用程序类型。
它们操作某种类型的数据(像单文档或多文档应用程序那样),但与Internet结合在了一起。
作为标准编辑器的替代物,你的用户会看到Web浏览器风格的前端应用。
VisualC++有能力创建各种不同类型的代码。
使用VisualC++不仅可以创建DLL、ActiveX控件、ISAPI扩展程序、设备驱动程序、像屏幕保护器之类的后台应用程序,甚至也可以扩展VisualC++本身。
单文档界面应用程序
单文档界面应用程序是像NotePad(记事本)或MicrosoftPaint(画笔)这样的应用程序。
它一次处理一个文档,降低了编程的复杂度并减少了运行程序时所需的资源。
对某些小型应用(比如文本编辑器或小型图像编辑器)可以采用这种类型的窗口应用程序。
单文档界面应用程序允许用户与其创建的文档进行全面的交互,但通常不如多文档界面的应用程序耐用。
另外,单文档界面应用程序至少要比多文