我的Web浏览器设计.docx

上传人:b****5 文档编号:6544049 上传时间:2023-01-07 格式:DOCX 页数:29 大小:219.88KB
下载 相关 举报
我的Web浏览器设计.docx_第1页
第1页 / 共29页
我的Web浏览器设计.docx_第2页
第2页 / 共29页
我的Web浏览器设计.docx_第3页
第3页 / 共29页
我的Web浏览器设计.docx_第4页
第4页 / 共29页
我的Web浏览器设计.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

我的Web浏览器设计.docx

《我的Web浏览器设计.docx》由会员分享,可在线阅读,更多相关《我的Web浏览器设计.docx(29页珍藏版)》请在冰豆网上搜索。

我的Web浏览器设计.docx

我的Web浏览器设计

计算机网络课程设计

题目:

Wet^U览器设计

成员姓名:

班级:

指导教师:

日期:

20012年6月

1、系统分析3

1.1系统需求3

1.2功能要求…3

1.3运行环境3

1.4开发工具3

2、概要设计4

1基本设计概念…4

1软件设计层次图5

3、详细设计6

(1)web浏览器基本功能的实现6

(1)收藏夹功能设计10

(1)历史记录功能设计13

(1)抓图工具设计15

4、系统运行.25

5、设计总结29

参考文献30

1、系统分析

系统需求

浏览器是指可以显示网页服务器或者文件系统的HTMLC件内容,并让用户与这些文件交互的一种软件。

网页浏览器主要通过HTTP>议与网页服务器交互并获取网页,这些网页由URL旨定,文件格式通常为HTML并由MIMEfcHTTPa、议中指明。

一个网页中可以包括多个文档,每个文档都是分别从服务器获取的。

在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,同时也越来越离不开浏览器,人们利用浏览器可以查看很多东西,上淘宝,需要浏览器,上XX搜索东西,需要浏览器,打开网站网址,需要浏览器。

由此浏览器的种类也越来越多,如IE浏览器、谷歌浏览器、360浏览器、遨游浏览器等等。

因此,浏览器对于人们的生活起着举足轻重的作用,浏览器的作用范围将不断扩大,人们的生活将离不开浏览器的使用。

功能要求

使用ChtmlView类来实现一个应用程序,使之具有Web浏览器的功能,包括浏览网页、前进、后退、返回主页、刷新、搜索、收藏夹、历史记录、抓图、删除等功能。

运行环境

本系统基于Windows平台设计,适用于Windows系歹!

J的系统,如流行的WindowsXP、

WindowsVista等。

开发工具:

VC++6.0C程序开发软件;

2、概要设计

基本设计概念

利用已有的HTTP空制、HTM邮释器和HTM映行器,通过MFO供的CHtmlView类实现的一个Windows下的多功能的浏览器。

该浏览器的功能包括:

WEB占点浏览、本地和网络的文件系统的浏览、前进、后退、返回主页、刷新、搜索、历史记录的维护、IE收藏夹功能和设置桌面快捷方式功能等。

2.2软件设计层次图

系统流程图:

当用户登录此简易浏览器时,需要在地址栏输入需要搜索的内容的网址,当输入网址后,该浏览器会链接到相应的URL地址,实现页面的下载,并显示页面,从而实现该简易浏览器连接网络的功

功能结构图:

该程序的设11主要分5部分。

首先是登录界面的实现,其中要创建按钮,创建菜单栏及下拉菜

单的实现;第二部分要实现各按钮的具体的功能包括在其中设置监听器,实现对按钮动作的监听及响

应;第三部分用于对地址栏输入内容格式的设定包括如何处理异常等;第四部分实现页面的下载;第

五部分用于实现页面的显示。

具体的功能结构图如下:

web浏览器

URL

3、详细设计

web浏览器基本功能(前进、后退、停止、刷新、搜索、主页)的实现:

利用MFCAppWizard生成应用程序框架

创建工程名为HtmlView。

第一步,选择工程类型为单文档(SDI),中文语言支持。

第二步和第三步使用默认值,不需要数据库,也不提供对于复合对象的支持;第四步选择InternetExplorerReBars

工具栏的风格,这样就有了用来输入网址的文本框;第五步不做任何修改;第六步选择CHtmlView类作为视图类的基类。

生成工程框架包含4个类。

(1)应用程序类:

CHtmlViewApp对应HtmlView.h和HtmlView.cpp文件。

框架类:

CMainFrame对应MainFrm.h和MainFrm.cpp文件。

文档类:

HtmlViewDoc,对应HtmlViewDoc.h和HtmlViewDoc.cpp文件。

HtmlView类:

CHtmlViewView,对应CHtmlViewView.h和CHtmlViewView.cpp文件。

此时编译运行,程序已经具有基本的WebM览功能,能自动链接到微软公司的网站。

修改菜单

在工作区中选择“ResourceView”选项卡,选择Menu双击菜单控件的名字(IDR_MAINFRAME右边出现程序的菜单。

选择菜单中的“查看”命令,已经有了“工

具栏”和“状态栏”两个条目,双击下面的空框,弹出设置菜单条目属性对话框,按照表添加菜单项:

菜单条目名称(Caption)

ID号

前进

ID_FOWARD

后退

IDBACK

停止

ID_STOP

刷新

ID_REFRESH

主页

ID_HOME

搜索

ID_SEARCH

修改工具栏:

在工作区中选择“ReaourcecView”选项卡,选择ToolBar,双击工具条控件的名字(IDR_MAINFRAME右边出现程序的工具条。

添加如图的新的按钮图样。

他们的ID号与相应的菜单条目相同。

使他们的ID号与相应的菜单条目的ID号相同。

口客屋名跑1O昌督哈可4©

添加控件事件处理函数:

进入类向导,选择“MessageMaps选项卡。

在“ClassName”下拉列表框中选择

CHtmlViewView类,然后按照表为控件添加事件处理函数

对象ID

Messages

MemberFunction

ID_FORWARD「

COMMAND

OnFoward()

ID_BACK

COMMAND

OnBack()

ID_STOP「

COMMAND

OnStop()

ID_REFRESH

COMMAND

OnRefresh()

ID_HOME

COMMAND

OnHome()

ID_SEARCH

COMMAND

OnSearch()

添加事件处理函数代码:

在CHtmlViewView.cpp实现文件中,添加上述6个时间处理函数的代码。

voidCHtmlViewView:

:

OnBack(){GoBack();}〃后退;

voidCHtmlViewView二OnForward(){GoForward();}//前进;

voidCHtmlViewView:

:

OnHome(){GoHome();}//主页;

voidCHtmlViewView:

:

OnStop(){Stop();}//停止;

voidCHtmlViewView:

:

OnRefresh(){Refresh();OnOldlogins();}〃刷新;

voidCHtmlViewView二OnSearch(){GoSearch();}//搜索;

添加URL定位功能:

(1)添加网址输入栏控件。

在工作区中选择“ResourceView”选项卡,选才?

Dialog,双击对话框控件的名字(IDR_MAINFRAME右边出现对话框条。

在上面添加一个“请输入地址”的静态文本,

再添加一个组合框控件,ID号设为IDC_EDIT_ADDRESS乍为地址栏,提供给用户输入要浏览的网站地址。

如图所示。

"WJJ*"-,**■*******「*"「**.**,"****1」*J***J.**JJ1■iiri

i请输入地址:

H3-

■।ti.■1«Jw,」,一■i**・*wj»・**.”■■■■i>wuW-"Ji%w'u.uw$11.w'■■•■W'd'UMwuiwwu«wj

(2)添加控制代码。

当用户输入网址后按回车时,就有一个IDOK的消息发送到主框架类,添加处理这个消

息的控制函数,在该函数中,用指定的网址调用Navigate()和Navigate2()函数,就可

以实现对该网页的浏览。

在MainFrm.h文件中,添加消息处理函数的声明。

public:

voidOnInputAddress();

②在MainFrm.cpp文件中,添加该函数的实现代码。

voidCMainFrame二OnInputAddress()//当用户输入Web®址并且回车

{

CStringsWebAddress;

//从编辑框获取用户输入的We州址

m_wndDlgBar.GetDlgItem(IDC_EDIT_ADDRESS)->GetWindowText(sWebAddress);

//浏览相应的网页

((CHtmlView*)GetActiveView())->Navigate(sWebAddress);

③在MainFrm.cpp的文件中,在消息映射(MESSAGE_MAP中添加自己的消息映射宏。

ON_COMMAND(IDOK,OnInputAddre§s)

解决单击超级链接时地址栏的同步问题:

利用CHtmlView类的事件处理函数,当网页下载完成,会触发OnDocumentComplete()函数,该函数的参数就是所下载网页的URL可以利用此函数对地址栏进行设置,添

加以下代码。

在MainFrm.h文件中,添加处理函数的声明。

public:

voidSetURL(LPCTSTRlpszURL);

在MainFrm.cpp文件中,添加该函数的实现代码。

voidCMainFrame:

:

SetURL(LPCTSTRlpszURL)

{

m_wndDlgBar.GetDlgItem(IDC_EDIT_ADDRESS)->SetWindowText(lpszURL);

m_wndDlgBar.GetDlgItem(IDC_shortcutname)->SetWindowText(lpszURL);

}

使用类向导添加事件处理函数。

用类向导为应用程序的CHtmlViewView类添加OnDocumentComplete(LPCTSTRlpszURL)1件处理函数,并在myWeb16View.cpp文件中添加它的实现代码。

voidCHtmlViewView:

:

OnDocumentComplete(LPCTSTRlpszURL)

{

//每次当前页面改变,更新地址栏的内容和窗口的标题

((CMainFrame*)GetParentFrame())->SetURL(lpszURL);

GetDocument()->SetTitle(lpszURL);

CHtmlView:

:

OnDocumentComplete(lpszURL);

}

收藏夹功能设计:

3.2.1.修改菜单:

在菜单中加入“收藏夹”栏。

宜梏出骈芭看乜।帮助QD收而去।s)控制M历史登录弄即图剧展L.

创建“收藏夹”:

在主框架类的创建函数:

OnCreate(LPCREATESTRUCTIpCreateStruct)实现代码中

添加如下代码(与菜单中“收藏夹”子菜单相对应,同时与IE浏览器的注册表相

连):

〃生成“我的收藏夹”子菜单

TCHARsz[MAX_PATH];//260

TCHARszPath[MAX_PATH];〃260

HKEYhKey;

DWORDdwSize;

CMenu*pMenu;

//开始消去存在的菜单

pMenu=GetMenu()->GetSubMenu(4);

while(pMenu->DeleteMenu(0,MF_BYPOSITION));〃0X00000400L

〃从注册表中找到“我的收藏夹的位置”,然后读写注册表

if(RegOpenKey(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\UserShellFolders"),&hKey)!

=ERROR_SUCCESS){

TRACE0("Favoritesfoldernotfound'n");

return0;

}

dwSize=sizeof(sz);

RegQueryValueEx(hKey,_T("Favorites"),NULL,NULL,(LPBYTE)sz,&dwSize);

ExpandEnvironmentStrings(sz,szPath,MAX_PATH);

RegCloseKey(hKey);

〃添加我的收藏菜单项

BuildFavoritesMenu(szPath,0,pMenu);

在主框架类CMainFrame中添力口BuildFavoritesMenu()函数实现收藏夹的收藏功

△'匕

目匕:

a.在MainFrm.h中声明intBuildFavoritesMenu(LPCTSTRpszPath,intnStartPos,CMenu*pMenu)函数实现添加我的收藏菜单项;

b在MainFrm.cpp中实现BuildFavoritesMenu()的功能,具体实现代码如下:

intCMainFrame:

:

BuildFavoritesMenu(LPCTSTRpszPath,intnStartPos,CMenu*pMenu)

{

CStringstrPath(pszPath);CStringstrPath2;CStringstr;WIN32_FIND_DATAwfd;

HANDLEh;intnPos;intnEndPos;

intnNewEndPos;

intnLastDir;

TCHARbuf[2048];

CStringArrayastrFavorites;

CStringArrayastrDirs;

CMenu*pSubMenu;

//确定有'\\'字符

if(strPath[strPath.GetLength()-1]!

=_T('\\'))strPath+=_T('\\');

strPath2=strPath;strPath+="*.*";

//首先扫描.URL然后扫描子目录h=FindFirstFile(strPath,&wfd);

if(h!

=INVALID_HANDLE_VALUE){

nEndPos=nStartPos;

do

{

if((wfd.dwFileAttributes&(FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM))==0)

{

str=wfd.cFileName;

if(str.Right(4)==_T(".url"))

{

//an.URLfileisformattedjustlikean.INIfile,sowecan

//useGetPrivateProfileString()togettheinformationwewant:

:

GetPrivateProfileString(_T("InternetShortcut"),_T("URL"),

_T(""),buf,2048,strPath2+str);

str=str.Left(str.GetLength()-4);

//scanthroughthearrayandperformaninsertionsort

//tomakesurethemenuendsupinalphabeticorder

for(nPos=nStartPos;nPos

{

if(str.CompareNoCase(astrFavorites[nPos])<0)break;

astrFavorites.InsertAt(nPos,str);

m_astrFavoriteURLs.InsertAt(nPos,buf);++nEndPos;))

}while(FindNextFile(h,&wfd));

FindClose(h);

//Nowaddtheseitemstothemenufor(nPos=nStartPos;nPos

pMenu->AppendMenu(MF_STRING|MF_ENABLED,0xe00+nPos,astrFavorites[nPos]);}

//nowthatwe'vegotallthe.URLfiles,checkthesubdirectoriesformorenLastDir=0;

h=FindFirstFile(strPath,&wfd);

ASSERT(h!

=INVALID_HANDLE_VALUE);do{

if(wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY){

//ignorethecurrentandparentdirectoryentries

if(lstrcmp(wfd.cFileName,_T("."))==0||lstrcmp(wfd.cFileName,_T(".."))==0)continue;

for(nPos=0;nPos

if(astrDirs[nPos].CompareNoCase(wfd.cFileName)>0)break;}pSubMenu=newCMenu;

pSubMenu->CreatePopupMenu();

//callthisfunctionrecursively.

nNewEndPos=BuildFavoritesMenu(strPath2+wfd.cFileName,nEndPos,pSubMenu);if(nNewEndPos!

=nEndPos){

//onlyintertasubmenuifthereareinfact.URLfilesinthesubdirectorynEndPos=nNewEndPos;

pMenu->InsertMenu(nPos,MF_BYPOSITION|MF_POPUP|MF_STRING,(UINT)pSubMenu->m_hMenu,wfd.cFileName);

pSubMenu->Detach();

astrDirs.InsertAt(nPos,wfd.cFileName);

++nLastDir;

deletepSubMenu;

}while(FindNextFile(h,&wfd));

FindClose(h);

}

returnnEndPos;

}

在MainFrm.h中声明函数voidOnFavorite(UINTnID)实现当在收藏夹中单击相

应的网址时,将该网址在浏览器中显示;

a在MainFrm.cpp中的消息映射表中添加ON_COMMAND_RANGE(0xe00,0xfff,OnFavorite)消息响应;

b.在MainFrm.cpp中实现OnFavorite(UINTnID)的功能,具体代码如下:

voidCMainFrame:

:

OnFavorite(UINTnID){

((CHtmlViewView*)GetActiveView())->Navigate2(m_astrFavoriteURLs[nID-0xe00],0,NULL);

}

.历史记录功能设计:

.修改菜单,在菜单中加入“历史记录”栏,将ID号设为:

ID_OLDLOGINS。

文性田洛事国查看如用的回收♦夹t5】按胤闻而史酹制京m图他於匚二]

MenuItemProperties叵

中号GtheralExlendedStyles|

(□:

[ID_OLDLOGINS三]plion;厮史.录

SeparatorPup-uploaclNe旦re占k:

fKlone.

CheckedgrayedHelp

Pmnipt:

登录记录

.在HtmlViewView.h中添加历史记录处理函数afx_msgvoidOnOldlogins(),并在

HtmlViewView.cpp中实现该功能,代码如下:

voidCHtmlViewView:

:

OnOldlogins()〃历史记录{

((CMainFrame*)GetParentFrame())->HistoryScan();}

⑶.在CMainFrame类中添加函数HistoryScan()实现将最近登录网址添加到“历史记录”子菜单中。

具体代码如下:

intCMainFrame:

:

HistoryScan(){

charbuffer[256];

〃定义一个流式文件;

ifstreamcfile("History.txt");

if(!

cfile.is_open())

(AfxMessageBox(_T("文件打开失败!

"));

//得到“历史记录”子菜单的句柄;

pMenu1=GetMenu()->GetSubMenu(6);

while(pMenu1->DeleteMenu(0,MF_BYPOSITION));〃0X00000400Lwhile(!

cfile.eof())

//获取一个历史记录网址;

cfile.getline(buffer,100);

if(buffer==NULL)(

continue;

〃将获取的网址添加到历史记录链表中;

m_astrHistoryURLs.InsertAt(m_number,buffer);

〃将网址添加到历史记录子菜单内;

pMenu1->AppendMenu(MF_STRING|MF_ENABLED,0x001+m_number++,buffer);

return1;

.在CMainFrame类中添加函数HistoryScanSave(),实现将历史记录保存到History.txt文件中;具

体代码如下:

voidCMainFrame:

:

HistoryScanSave()

if(file.Open(_T("History.txt"),CFile:

:

modeCreate|CFile:

:

modeWrite))(

〃由文件末尾开始写;

file.SeekToEnd();

file.Write(addr.GetBuffer(addr.GetLength()+1),addr.GetLength()+1);

addr.ReleaseBuffer();

file.Close();

elseAfxMessageBox(_T("文件打开失败!

"));

.在MainFrm.h中声明函数voidOnHistory(UINTnID)实现当在历史记录菜单中单击相应的网址时,将该网址在浏览器中显示;

a.在MainFrm.cpp中的消息映射表中添加ON_COMMAND_RANGE(0x001,0xdfe,OnHistory)消息响应;

b.在MainFrm.cpp中实现OnHistory(UINTnID)的功能,具体代码如下:

voidCMainFrame:

:

OnHistory(UINTnID)

〃当单击历史记录内某一网址时,将该网址在浏览器中显示;

((CHtmlViewView*)GetActiveView())->Navigate2(m_astrHistoryURLs[nID-0x001],0,NULL);)

.在MainFrm.cpp中的SetURL()函数中添加代码实现将当前网址添加到历史记录菜单中,具体代

码如下:

〃将地址栏内的地址存起来,作为历史记录;

addr+=lpszURL;

addr+="\r'n";

HistoryScanSave();

3.4抓图工具的实现:

在以设计好的WebM览器中的菜单栏

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1