我的Web浏览器设计说明Word文件下载.docx
- 文档编号:21268962
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:30
- 大小:664.13KB
我的Web浏览器设计说明Word文件下载.docx
《我的Web浏览器设计说明Word文件下载.docx》由会员分享,可在线阅读,更多相关《我的Web浏览器设计说明Word文件下载.docx(30页珍藏版)》请在冰豆网上搜索。
因此,浏览器对于人们的生活起着举足轻重的作用,浏览器的作用围将不断扩大,人们的生活将离不开浏览器的使用。
1.2功能要求
使用ChtmlView类来实现一个应用程序,使之具有Web浏览器的功能,包括浏览网页、前进、后退、返回主页、刷新、搜索、收藏夹、历史记录、抓图、删除等功能。
1.3运行环境
本系统基于Windows平台设计,适用于Windows系列的系统,如流行的WindowsXP、WindowsVista等。
1.4开发工具:
VC++6.0C程序开发软件;
2、概要设计
2.1基本设计概念
利用已有的HTTP控制、HTML解释器和HTML执行器,通过MFC提供的CHtmlView类实现的一个Windows下的多功能的浏览器。
该浏览器的功能包括:
WEB站点浏览、本地和网络的文件系统的浏览、前进、后退、返回主页、刷新、搜索、历史记录的维护、IE收藏夹功能和设置桌面快捷方式功能等。
2.2软件设计层次图
2.2.1系统流程图:
当用户登录此简易浏览器时,需要在地址栏输入需要搜索的容的网址,当输入网址后,该浏览器会到相应的URL地址,实现页面的下载,并显示页面,从而实现该简易浏览器连接网络的功能。
输入网址
下载页面
显示页面
返回
前进
2.2.2功能结构图:
该程序的设计主要分5部分。
首先是登录界面的实现,其中要创建按钮,创建菜单栏及下拉菜单的实现;
第二部分要实现各按钮的具体的功能包括在其中设置监听器,实现对按钮动作的监听及响应;
第三部分用于对地址栏输入容格式的设定包括如何处理异常等;
第四部分实现页面的下载;
第五部分用于实现页面的显示。
具体的功能结构图如下:
3、详细设计
3.1web浏览器基本功能(前进、后退、停止、刷新、搜索、主页)的实现:
3.1.1.利用MFCAppWizard生成应用程序框架
创建工程名为HtmlView。
第一步,选择工程类型为单文档(SDI),中文语言支持。
第二步和第三步使用默认值,不需要数据库,也不提供对于复合对象的支持;
第四步选择InternetExplorerReBars工具栏的风格,这样就有了用来输入网址的文本框;
第五步不做任何修改;
第六步选择CHtmlView类作为视图类的基类。
生成工程框架包含4个类。
(1)应用程序类:
CHtmlViewApp,对应HtmlView.h和HtmlView.cpp文件。
(2)框架类:
CMainFrame,对应MainFrm.h和MainFrm.cpp文件。
(3)文档类:
HtmlViewDoc,对应HtmlViewDoc.h和HtmlViewDoc.cpp文件。
(4)HtmlView类:
CHtmlViewView,对应CHtmlViewView.h和CHtmlViewView.cpp文件。
此时编译运行,程序已经具有基本的Web浏览功能,能自动到微软公司的。
3.1.2修改菜单
在工作区中选择“ResourceView”选项卡,选择Menu,双击菜单控件的名字(IDR_MAINFRAME),右边出现程序的菜单。
选择菜单中的“查看”命令,已经有了“工具栏”和“状态栏”两个条目,双击下面的空框,弹出设置菜单条目属性对话框,按照表添加菜单项:
菜单条目名称(Caption)
ID号
ID_FOWARD
后退
ID_BACK
停止
ID_STOP
刷新
ID_REFRESH
主页
ID_HOME
搜索
ID_SEARCH
3.1.3修改工具栏:
在工作区中选择“ReaourcecView”选项卡,选择ToolBar,双击工具条控件的名字(IDR_MAINFRAME),右边出现程序的工具条。
添加如图的新的按钮图样。
他们的ID号与相应的菜单条目相同。
使他们的ID号与相应的菜单条目的ID号相同。
3.1.4添加控件事件处理函数:
进入类向导,选择“MessageMaps”选项卡。
在“ClassName”下拉列表框中选择CHtmlViewView类,然后按照表为控件添加事件处理函数。
对象ID
Messages
MemberFunction
ID_FORWARD
COMMAND
OnFoward()
OnBack()
OnStop()
OnRefresh()
ID_HOME
OnHome()
OnSearch()
3.1.5添加事件处理函数代码:
在CHtmlViewView.cpp实现文件中,添加上述6个时间处理函数的代码。
voidCHtmlViewView:
:
OnBack(){GoBack();
}//后退;
OnForward(){GoForward();
}//前进;
OnHome(){GoHome();
}//主页;
OnStop(){Stop();
}//停止;
OnRefresh(){Refresh();
OnOldlogins();
}//刷新;
OnSearch(){GoSearch();
}//搜索;
3.1.6添加URL定位功能:
(1)添加网址输入栏控件。
在工作区中选择“ResourceView”选项卡,选择Dialog,双击对话框控件的名字(IDR_MAINFRAME),右边出现对话框条。
在上面添加一个“请输入地址”的静态文本,再添加一个组合框控件,ID号设为IDC_EDIT_ADDRESS,作为地址栏,提供给用户输入要浏览的地址。
如图所示。
(2)添加控制代码。
当用户输入网址后按回车时,就有一个IDOK的消息发送到主框架类,添加处理这个消息的控制函数,在该函数中,用指定的网址调用Navigate()和Navigate2()函数,就可以实现对该网页的浏览。
1在MainFrm.h文件中,添加消息处理函数的声明。
public:
voidOnInputAddress();
②在MainFrm.cpp文件中,添加该函数的实现代码。
voidCMainFrame:
OnInputAddress()//当用户输入Web地址并且回车
{
CStringsWebAddress;
//从编辑框获取用户输入的Web地址
m_wndDlgBar.GetDlgItem(IDC_EDIT_ADDRESS)->
GetWindowText(sWebAddress);
//浏览相应的网页
((CHtmlView*)GetActiveView())->
Navigate(sWebAddress);
}
③在MainFrm.cpp的文件中,在消息映射(MESSAGE_MAP)段中添加自己的消息映射宏。
ON_COMMAND(IDOK,OnInputAddress);
3.1.7解决单击超级时地址栏的同步问题:
利用CHtmlView类的事件处理函数,当网页下载完成,会触发OnDocumentComplete()函数,该函数的参数就是所下载网页的URL,可以利用此函数对地址栏进行设置,添加以下代码。
1在MainFrm.h文件中,添加处理函数的声明。
voidSetURL(LPCTSTRlpszURL);
2在MainFrm.cpp文件中,添加该函数的实现代码。
SetURL(LPCTSTRlpszURL)
{
SetWindowText(lpszURL);
m_wndDlgBar.GetDlgItem(IDC_shortcutname)->
}
3使用类向导添加事件处理函数。
用类向导为应用程序的CHtmlViewView类添加OnDocumentComplete(LPCTSTRlpszURL)事件处理函数,并在myWeb16View.cpp文件中添加它的实现代码。
OnDocumentComplete(LPCTSTRlpszURL)
//每次当前页面改变,更新地址栏的容和窗口的标题
((CMainFrame*)GetParentFrame())->
SetURL(lpszURL);
GetDocument()->
SetTitle(lpszURL);
CHtmlView:
OnDocumentComplete(lpszURL);
3.2收藏夹功能设计:
3.2.1.修改菜单:
在菜单中加入“收藏夹”栏。
3.2.2.创建“收藏夹”:
在主框架类的创建函数:
OnCreate(LPCREATESTRUCTlpCreateStruct)实现代码中添加如下代码(与菜单中“收藏夹”子菜单相对应,同时与IE浏览器的注册表相连):
//生成“我的收藏夹”子菜单
TCHARsz[MAX_PATH];
//260
TCHARszPath[MAX_PATH];
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);
3.2.3.在主框架类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<
nEndPos;
++nPos)
if(str.CompareNoCase(astrFavorites[nPos])<
0)
break;
}
astrFavorites.InsertAt(nPos,str);
m_astrFavoriteURLs.InsertAt(nPos,buf);
++nEndPos;
}
}
}while(FindNextFile(h,&
wfd));
FindClose(h);
//Nowaddtheseitemstothemenu
for(nPos=nStartPos;
{
pMenu->
AppendMenu(MF_STRING|MF_ENABLED,0xe00+nPos,astrFavorites[nPos]);
}
//nowthatwe'
vegotallthe.URLfiles,checkthesubdirectoriesformore
nLastDir=0;
h=FindFirstFile(strPath,&
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;
nLastDir;
if(astrDirs[nPos].CompareNoCase(wfd.cFileName)>
break;
pSubMenu=newCMenu;
pSubMenu->
CreatePopupMenu();
//callthisfunctionrecursively.
nNewEndPos=BuildFavoritesMenu(strPath2+wfd.cFileName,nEndPos,pSubMenu);
if(nNewEndPos!
=nEndPos)
//onlyintertasubmenuifthereareinfact.URLfilesinthesubdirectory
nEndPos=nNewEndPos;
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,&
FindClose(h);
returnnEndPos;
3.2.4.在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);
3.3.历史记录功能设计:
(1).修改菜单,在菜
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Web 浏览器 设计 说明