C++实验报告WEB浏览器_第1页
C++实验报告WEB浏览器_第2页
C++实验报告WEB浏览器_第3页
C++实验报告WEB浏览器_第4页
C++实验报告WEB浏览器_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+实验报告基于IE的WEB浏览器姓名:*学号:*班级: *2012/12/13目录一、实验目的3二、实验设备(环境)及要求3三、实验设计3四、软件的具体实现过程5(一)实现WEB站点浏览,初步完成浏览器的模块的建立以及实现工具栏的各个功能(如:前进.后退,刷新,主页,停止以及搜索等功能)。51.利用MFC AppWizard生成应用程序框架52.修改菜单63.修改工具栏64.为控件添加时间处理函数75.添加事件处理函数的代码76.为应用程序添加URL定位功能87.解决单击超级链接时地址栏的同步问题108.修改首页地址,以及主页地址和搜索页面。11(二)加入删除IE相关历史记录的功能(包括删除

2、文档历史纪录,清除cookies,清除Internet临时文件,清除地址栏中的历史任务,清除密码历史纪录和清除收藏夹)。111.添加“删除”菜单112.为控件添加事件处理函数123.添加事件处理函数的代码13(8) 实现桌面快捷方式22(三)显示浏览器当前访问站点的标题(附加功能)24五、实验结果与数据处理24起始页:24“创建桌面快捷方式“功能27六、缺陷27七、总结28一、实验目的目的: 通过一个学期的学习,编写一个项目型的功能软件,综合应用专业所学习的多门课程知识,并把本学期所学的编程知识运用到实际编程中,熟练编程规范,训练编程思维,为学生适应合作开发规模稍大项目打下基础。二、实验设备(

3、环境)及要求1) 使用VC+平台实现该程序2) 要求用户操作时,要给出清晰,明确的提示信息。3) 所有文件、函数、变量的名称应尽量做到“见其名知其意”。三、实验设计文本文档记录浏览过所有网页的网址清除IE的临时文件清除COOKie删除文档历史记录浏览器普通浏览器功能特殊浏览器功能搜索功能删除功能清除地址栏中历史地址前进后退主页搜索刷新由于技术原因本软件直接调用IE内核,该软件的具体功能如上图,除了具有普通浏览器的功能外又加了个特殊的功能“文本文档记录浏览过所有网页的地址”随着上网的浏览网页是项目过多,有时候需要记录网页,但是浏览记录大多又太复杂,上面的项目太多,而且大多都不是自己需要的,为了解

4、决这个问题,本软件专门设置了个记录所有浏览过网页地址的文本文档,这个很实用但又很简单的功能。四、软件的具体实现过程(一)实现WEB站点浏览,初步完成浏览器的模块的建立以及实现工具栏的各个功能(如:前进.后退,刷新,主页,停止以及搜索等功能)。1.利用MFC AppWizard生成应用程序框架工程名为myWeb16。第一步,选择工程类型为单文档(SDI),中文语言支持。第二步和第三步使用默认值,不需要数据库,也不提供对于复合对象的支持;第四步选择Internet Explorer ReBars工具栏的风格,这样就有了用来输入网址的文本框;第五步不做任何修改;第六步选择CHtmlView类作为视图

5、类的基类。生成工程框架包含4个类。1. 应用程序类:CMyWeb16App,对应myWeb16.h和myWeb16.cpp文件。2. 框架类:CMainFrame,对应MainFrm.h和MainFrm.cpp文件。3. 文档类:CMyWeb16Doc,对应myWeb16Doc.h和myWeb16Doc.cpp文件。4. HtmlView类:CMyWeb16View,对应myWeb16View.h和myWeb16View.cpp文件。此时编译运行,程序已经具有基本的Web浏览功能,能自动链接到微软公司的网站。2.修改菜单在工作区中选择“ResourceView”选项卡,选择Menu,双击菜单控

6、件的名字(IDR_MAINFRAME),右边出现程序的菜单。选择菜单中的“查看”命令,已经有了“工具栏”和“状态栏”两个条目,双击下面的空框,弹出设置菜单条目属性对话框,如图1.1所示,按照表1.2添加6个菜单条目菜单条目名称(Caption)ID号前进ID_FOWARD后退ID_BACK停止ID_STOP刷新ID_UPDATE主页ID_HOMEPAGE搜索ID_SEARCH图1.23.修改工具栏在工具栏上增加新的按钮,以便快速执行所需的功能。在工作区中选择“ReaourcecView”选项卡,选择ToolBar,双击工具条控件的名字(IDR_MAINFRAME),右边出现程序的工具条。双击其

7、中的安秀,可以看到他们的属性。其中有一个空的按钮,双击它可以添加新的安秀的属性,如图1.3所示,利用右边的图形绘制工具,可以自己设计新的按钮图样。如图1.4所示。如图添加6个按钮,他们的ID号与相应的菜单条目相同。拖动按钮,可以改变按钮之间的相对位置。4.为控件添加时间处理函数当用户单击菜单条目,或者单击相应的快捷键时,应能引起程序的反映,这就需要给这些控件添加时间处理函数。进入类向导,选择“Message Maps”选项卡。在“Class Name”下拉列表框中选择CMyWeb16View类,然后按照表1.5为前述的六个控件添加事件处理函数。对象IDMessagesMember Functi

8、onID_FORWARDCOMMANDOnFoward()ID_BACKCOMMANDOnBack()ID_STOPCOMMANDOnStop()ID_UPDATECOMMANDOnUpdate()ID_HOMEPAGECOMMANDOnHomepage()ID_SEARCHCOMMANDOnSearch()图1.55.添加事件处理函数的代码在MyWeb16View.cpp实现文件中,添加上述6个时间处理函数的代码。/前进到下一个网页void CMyWeb16View:OnFoward() GoForward();/退到下一个网页void CMyWeb16View:OnBack() GoBac

9、k();/停止网页的下载void CMyWeb16View:OnStop() Stop();/刷新当前的网页void CMyWeb16View:OnUpdate() Refresh();/回到主页void CMyWeb16View:OnHomepage() GoHome();/进行搜索void CMyWeb16View:OnSearch() GoSearch();此时可以再进行编译运行。6.为应用程序添加URL定位功能(1)添加网址输入栏控件。在工作区中选择“Resource View”选项卡,选择Dialog,双击对话框控件的名字(IDR_MAINFRAME),右边出现对话框条。在上面添加一

10、个“地址”的静态文本,再添加一个文本编辑框控件,ID号时IDC_ADDR,作为地址栏,提供给用户输入要浏览的网站地址。如图1.6所示。(2)添加控制代码。当用户输入网址后按回车时,就有一个IDOK的消息发送到主框架类,添加处理这个消息的控制函数,在该函数中,用指定的网址调用Navigate()和Navigate2()函数 ,就可以实现对该网页的浏览。在MainFrm.h文件中,添加消息处理函数的声明。public:void OnNew();在MainFrm.cpp文件中,添加该函数的实现代码。void CMainFrame:OnNew()CString pp; /获得用户在地址栏中输入的URL

11、m_wndDlgBar.GetDlgItem(IDC_ADDR)->GetWindowText(pp); /浏览指定的网页(CMyWeb16View*)GetActiveView()->Navigate(pp);*建立事件处理函数与消息的映射在MainFrm.cpp的文件中,在消息映射(MESSAGE_MAP)段中添加自己的消息映射宏。用ON_COMMAND命令建立IDOK消息和处理函数OnNew的映射关系。BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)/AFX_MSG_MAP(CMainFrame)ON_WM_CREATE()/AFX_MSG_M

12、APON_COMMAND(IDOK,OnNew) /自己的消息映射宏END_MESSAGE_MAP()在myWeb16View.h文件的类定义前面添加包含语句#include"myWeb16Doc.h"7.解决单击超级链接时地址栏的同步问题利用CHtmlView类的事件处理函数,当网页下载完成,会触发OnDocumentComplete()函数,该函数的参数就是所下载网页的URL,可以利用此函数对地址栏进行设置,添加以下代码。 在MainFrm.h文件中,添加处理函数的声明。public:void SetPage(LPCTSTR lpazURL);在MainFrm.cpp文

13、件中,添加该函数的实现代码。void CMainFrame:SetPage(LPCTSTR lpszURL)m_wndDlgBar.GetDlgItem(IDC_ADDR)->SetWindowText(lpszURL);使用类向导添加事件处理函数。用类向导为应用程序的CMyWeb16View类添加OnDocumentComplete()事件处理函数,并在myWeb16View.cpp文件中添加它的实现代码。void CMyWeb16View:OnDocumentComplete(LPCTSTR lpszURL) (CMainFrame*)GetParentFrame()->Set

14、Page(lpszURL);添加包含语句。在MainFrm.cpp文件前面添加包含语句。 #include"myWeb16View.h"在myWeb16View.cpp文件前面添加包含语句。 #include"MainFrm.h"8.修改首页地址,以及主页地址和搜索页面。在myWeb16View.cpp的文件中,找到OnInitialUpdate()函数,修改首页地址。Navigate2(_T(""),NULL,NULL);在开始菜单的运行中输入regedit,回车。在目录菜单下:HKEY_CURRENT_USER/Software/

15、Microsoft/Internet Explorer/Main找到Start Page(主页)和Search Page(搜索页),并修改其数值数据。Start Page(主页): Search Page(搜索页):.hk(二)加入删除IE相关历史记录的功能(包括删除文档历史纪录,清除cookies,清除Internet临时文件,清除地址栏中的历史任务,清除密码历史纪录和清除收藏夹)。1.添加“删除”菜单(1)修改菜单,在工作区中选择“ResourceView”选项卡,选择Menu,双击菜单控件的名字(IDR_MAINFRAME),右边出现程序的菜单。在菜单中加入“删除”栏,分别添加“删除文档

16、历史记录”、“清除Cookies”、“清除Internet临时文件”、“清除地址栏中的历史地址”、“清除密码历史记录”和“清除收藏夹”6个菜单条目及其属性。如图2.1、2.2、2.3示。菜单条目名称(Caption)ID号删除文档历史记录ID_DelHistory清除CookieID_DelCookies清除Internet临时文件ID_DelIntenetTempFile清除地址栏中历史地址ID_DelHistoryAddress清除密码历史记录ID_DelHistoryPassword图2.22.为控件添加事件处理函数进入类向导,选择“Message Maps”选项卡。在“Class Na

17、me”下拉列表框中选择CMyWeb16View类,然后按照表2.4为上述删除的六个控件添加事件处理函数。对象IDMessagesMember FunctionID_DelHistoryCOMMANDOnDelHistory() ID_DelCookiesCOMMANDOnDelCookies()ID_DelIntenetTempFileCOMMANDOnDelIntenetTempFile()ID_DelHistoryAddressCOMMANDOnDelHistoryAddress() ID_DelHistoryPasswordCOMMANDOnDelHistoryPassword()图2.

18、43.添加事件处理函数的代码在myWeb16View.cpp中,添加如下代码。(1)实现文档历史记录的清除void CMyWeb16View:OnDelHistory() /清除文档历史记录TCHAR szPathMAX_PATH;if(SHGetSpecialFolderPath(NULL,szPath,CSIDL_RECENT,FALSE)EmptyDirectory(szPath);SHDeleteKey(HKEY_CURRENT_USER,_T("SoftwareMicrosoftCurrentVersionExplorerRecentDocs");(2)清除Coo

19、kievoid CMyWeb16View:OnDelCookies() /清除CookiesTCHAR szPathMAX_PATH;DeleteUrlCache(Cookie); /删除URL的Cacheif (SHGetSpecialFolderPath(NULL,szPath,CSIDL_COOKIES,FALSE)EmptyDirectory(szPath);(3) 清除Internet的临时文件void CMyWeb16View:OnDelIntenetTempFile() /清空Internet临时文件TCHAR szPathMAX_PATH;DeleteUrlCache(File

20、); /删除URL的Cacheif (SHGetSpecialFolderPath(NULL,szPath,CSIDL_INTERNET_CACHE,FALSE) /得到临时目录并清空它EmptyDirectory(szPath);(4)清除地址栏中的历史任务void CMyWeb16View:OnDelHistoryAddress() /浏览器地址栏历史记录的清除SHDeleteKey(HKEY_CURRENT_USER,_T("SoftwareMicrosoftInternet ExplorerTypedURLs");(5)清除密码历史纪录void CMyWeb16Vi

21、ew:OnDelHistoryPassword() /清除密码历史记录SHDeleteKey(HKEY_CURRENT_USER,_T("SoftwareMicrosoftInternet ExplorerIntelliForms");(6)实现目录的删除在OnDelIntenetTempFile、OnDelCookies和OnDelHistory这三个函数中都用到了函数EmptyDirectory()。删除目录是一个基本操作,因为有些历史记录是以文件形式保存在某个特定目录下的而且目录下还可能有子目录,所以可以采用递归方法删除整个目录。EmptyDirectory函数负责清

22、空整个目录。在myWeb16View.cpp文件的类定义前面添加包含语句。#include "shlwapi.h"在StdAfc.h文件的类定义前面添加包含语句。#include "atlbase.h"在myWeb16View.h的文件中,添加处理函数的声明。public:BOOL EmptyDirectory(LPCTSTR szPath, BOOL bDeleteDesktopIni = FALSE, BOOL bWipeIndexDat = FALSE);/清空一个目录在myWeb16View.cpp的文件中,添加该函数的实现代码。BOOL CMy

23、Web16View:EmptyDirectory(LPCTSTR szPath,BOOL bDeleteDesktopIni,BOOL bWipeIndexDat)WIN32_FIND_DATA wfd;HANDLE hFind; /文件句柄CString sFullPath;CString sFindFilter;DWORD dwAttributes = 0;sFindFilter = szPath; /路径名sFindFilter +=_T("*.*"); /表示所有文件都要删除 /找到第一个文件if(hFind=FindFirstFile(sFindFilter,&a

24、mp;wfd)=INVALID_HANDLE_VALUE)return FALSE;doif(_tcscmp(wfd.cFileName,_T(".")=0|_tcscmp(wfd.cFileName,_T(".")=0|(bDeleteDesktopIni=FALSE&&_tcscmp(wfd.cFileName,_T("desktop.ini")=0)continue;sFullPath=szPath;sFullPath+=_T('');sFullPath+=wfd.cFileName; /文件完整

25、的路径和名称/如果文件含有只读属性,那么应该去掉该属性再删除dwAttributes=GetFileAttributes(sFullPath); /得到文件属性if (dwAttributes&FILE_ATTRIBUTE_READONLY) /判断是否只读dwAttributes&=FILE_ATTRIBUTE_READONLY; /删除只读属性SetFileAttributes(sFullPath,dwAttributes); /重新删除/判断该文件是否是一个目录,如果是目录则递归调用清空子目录if (wfd.dwFileAttributes&FILE_ATTRIB

26、UTE_DIRECTORY)EmptyDirectory(sFullPath,bDeleteDesktopIni,bWipeIndexDat);RemoveDirectory(sFullPath); else /这是一个文件DeleteFile(sFullPath); /删除该文件while(FindNextFile(hFind,&wfd); /查找下一个文件FindClose(hFind); /关闭文件句柄return TRUE;(7)关于Cache在OnDelCookies函数和OnDelIntenetTempFile()函数中都用到了函数DeleteUrlCache()。在实际的

27、网络中,任何从网络上流入的数据都会在本地的硬盘上缓存起来,Cookies和Internet临时文件也不例外,所以还需要清除他们的Cache,而不仅仅是文件本身。 在myWeb16View.h文件的类定义前面添加包含语句#include "wininet.h" #include "UrlHist.h" #define SWEEP_BUFFER_SIZE 10000 在myWeb16View.h中添加如下枚举类型,以及处理函数的声明。public:enum DEL_CACHE_TYPEFile, /表示Internet临时文件Cookie /表示Cookie

28、;BOOL DeleteUrlCache(DEL_CACHE_TYPE type); 在myWeb16View.cpp的文件中添加如下代码。BOOL CMyWeb16View:DeleteUrlCache(DEL_CACHE_TYPE type)BOOL bRet=FALSE;HANDLE hEntry;LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry=NULL; /Cache入口指针DWORD dwEntrySize;dwEntrySize=0;hEntry=FindFirstUrlCacheEntry(NULL,NULL,&dwEntrySize);

29、 /找到第一个URL Cache入口lpCacheEntry=(LPINTERNET_CACHE_ENTRY_INFO) new chardwEntrySize;/分配空间hEntry=FindFirstUrlCacheEntry(NULL,lpCacheEntry,&dwEntrySize);if (!hEntry)goto cleanup;do if (type=File&&!(lpCacheEntry->CacheEntryType&COOKIE_CACHE_ENTRY)DeleteUrlCacheEntry(lpCacheEntry->lps

30、zSourceUrlName); else if(type=Cookie&&(lpCacheEntry->CacheEntryType&COOKIE_CACHE_ENTRY)DeleteUrlCacheEntry(lpCacheEntry->lpszSourceUrlName);dwEntrySize=0;FindNextUrlCacheEntry(hEntry,NULL,&dwEntrySize);delete lpCacheEntry;lpCacheEntry=(LPINTERNET_CACHE_ENTRY_INFO) new chardwEnt

31、rySize; while (FindNextUrlCacheEntry(hEntry,lpCacheEntry,&dwEntrySize);bRet=TRUE;cleanup:if (lpCacheEntry)delete lpCacheEntry;return bRet;缺少2个连接加上#pragma comment(lib,"wininet.lib")#pragma comment(lib,"Shlwapi.lib")(8) 实现桌面快捷方式 添加按钮“创建快捷方式”修改对话框控件(IDR_MAINFRAME),添加按钮“创建快捷方式”与编

32、辑框,如下图所示。对话框条目名称(Caption)ID号创建快捷方式IDC_SHORTCUT编辑框IDC_shortcutname对象IDMessagesMember Function IDC_SHORTCUTCOMMAND OnShortcut()添加代码如下:void CMainFrame:OnShortcut() CString pp; /获得用户在地址栏中输入的URLm_wndDlgBar.GetDlgItem(IDC_ADDR)->GetWindowText(pp);CString pp1; /获得用户在地址栏中输入的URLm_wndDlgBar.GetDlgItem(IDC_

33、shortcutname)->GetWindowText(pp1);IShellLink *MyLink;/IShellLink 接口指针IPersistFile *ppf; /另一个接口指针char DesktopLocateMAX_PATH;/存储快捷方式在桌面保存的位置/桌面的位置SHGetSpecialFolderPath(NULL,DesktopLocate,CSIDL_DESKTOP,0);/以下设定快捷方式在桌面保存位置 0代表的是桌面strcat(DesktopLocate,"");strcat(DesktopLocate,pp1);strcat(DesktopLocate,".LNK");CoInitialize(NULL);/初始化COMint re=CoCreateInstance(CLSID_ShellLink,NULL,CLSCTX_ALL, IID_IShellLink,(void *)&MyLink);if(re<0) AfxMessageBox("创建COM对象失败!");return;MyLink->SetPath(pp);/设置快捷方式实际文件位置MyLink->SetDescr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论