类似IE的VC编写浏览器.doc





《类似IE的VC编写浏览器.doc》由会员分享,可在线阅读,更多相关《类似IE的VC编写浏览器.doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、.-一、实验目的及要求目的: 通过一周的课程设计,编写一个项目型的功能软件,综合应用专业所学习的多门课程知识,并把本学期所学的网络编程的知识运用到实际编程中,熟练编程规范,训练编程思维,为学生适应毕业后团队合作开发规模稍大项目打下基础。要求:利用已有的HTTP控制、HTML解释器和HTML执行器,通过MFC提供的CHtmlView类实现的一个Windows下的多功能的浏览器,其功能包括:WEB站点浏览、本地和网络的文件系统的浏览、历史记录的维护、IE收藏夹功能和设置桌面快捷方式功能等。二、实验设备(环境)及要求(1) 使用VC+平台实现该程序(2) 界面设计合理美观,不要求统一界面(3) 要求
2、用户操作时,要给出清晰、明确的提示信息(4) 所有文件、函数、变量的命名应尽量作到”见其名知其意” (5) 5或6人一小组,明确每个学生在开发小组中扮演的角色及承担的职责(包括选出组长)。可以讨论算法的实现和编程的思路和方法,但每个人必须自己动手编写程序,不得抄袭。三、实验内容与具体实现步骤(一)实现WEB站点浏览,初步完成浏览器的模块的建立以及实现工具栏的各个功能(如:前进.后退,刷新,主页,停止以及搜索等功能)。1.利用MFC AppWizard生成应用程序框架工程名为myWeb16。第一步,选择工程类型为单文档(SDI),中文语言支持。第二步和第三步使用默认值,不需要数据库,也不提供对于
3、复合对象的支持;第四步选择Internet Explorer ReBars工具栏的风格,这样就有了用来输入网址的文本框;第五步不做任何修改;第六步选择CHtmlView类作为视图类的基类。生成工程框架包含4个类。(1) 应用程序类:CMyWeb16App,对应myWeb16.h和myWeb16.cpp文件。(2) 框架类:CMainFrame,对应MainFrm.h和MainFrm.cpp文件。(3) 文档类:CMyWeb16Doc,对应myWeb16Doc.h和myWeb16Doc.cpp文件。(4) HtmlView类:CMyWeb16View,对应myWeb16View.h和myWeb1
4、6View.cpp文件。此时编译运行,程序已经具有基本的Web浏览功能,能自动链接到微软公司的网站。2.修改菜单在工作区中选择“ResourceView”选项卡,选择Menu,双击菜单控件的名字(IDR_MAINFRAME),右边出现程序的菜单。选择菜单中的“查看”命令,已经有了“工具栏”和“状态栏”两个条目,双击下面的空框,弹出设置菜单条目属性对话框,如图1.1所示,按照表1.2添加6个菜单条目菜单条目名称(Caption)ID号前进ID_FOWARD后退ID_BACK停止ID_STOP刷新ID_UPDATE主页ID_HOMEPAGE搜索ID_SEARCH图1.23.修改工具栏在工具栏上增加
5、新的按钮,以便快速执行所需的功能。在工作区中选择“ReaourcecView”选项卡,选择ToolBar,双击工具条控件的名字(IDR_MAINFRAME),右边出现程序的工具条。双击其中的安秀,可以看到他们的属性。其中有一个空的按钮,双击它可以添加新的安秀的属性,如图1.3所示,利用右边的图形绘制工具,可以自己设计新的按钮图样。如图1.4所示。如图添加6个按钮,他们的ID号与相应的菜单条目相同。拖动按钮,可以改变按钮之间的相对位置。4.为控件添加时间处理函数当用户单击菜单条目,或者单击相应的快捷键时,应能引起程序的反映,这就需要给这些控件添加时间处理函数。进入类向导,选择“Message M
6、aps”选项卡。在“Class Name”下拉列表框中选择CMyWeb16View类,然后按照表1.5为前述的六个控件添加事件处理函数。对象IDMessagesMember FunctionID_FORWARDCOMMANDOnFoward()ID_BACKCOMMANDOnBack()ID_STOPCOMMANDOnStop()ID_UPDATECOMMANDOnUpdate()ID_HOMEPAGECOMMANDOnHomepage()ID_SEARCHCOMMANDOnSearch()图1.55.添加事件处理函数的代码在MyWeb16View.cpp实现文件中,添加上述6个时间处理函数的
7、代码。/前进到下一个网页void CMyWeb16View:OnFoward() GoForward();/退到下一个网页void CMyWeb16View:OnBack() GoBack();/停止网页的下载void CMyWeb16View:OnStop() Stop();/刷新当前的网页void CMyWeb16View:OnUpdate() Refresh();/回到主页void CMyWeb16View:OnHomepage() GoHome();/进行搜索void CMyWeb16View:OnSearch() GoSearch();此时可以再进行编译运行。6.为应用程序添加URL
8、定位功能(1)添加网址输入栏控件。在工作区中选择“Resource View”选项卡,选择Dialog,双击对话框控件的名字(IDR_MAINFRAME),右边出现对话框条。在上面添加一个“地址”的静态文本,再添加一个文本编辑框控件,ID号时IDC_ADDR,作为地址栏,提供给用户输入要浏览的网站地址。如图1.6所示。(2)添加控制代码。当用户输入网址后按回车时,就有一个IDOK的消息发送到主框架类,添加处理这个消息的控制函数,在该函数中,用指定的网址调用Navigate()和Navigate2()函数 ,就可以实现对该网页的浏览。在MainFrm.h文件中,添加消息处理函数的声明。publi
9、c:void OnNew();在MainFrm.cpp文件中,添加该函数的实现代码。void CMainFrame:OnNew()CString pp; /获得用户在地址栏中输入的URLm_wndDlgBar.GetDlgItem(IDC_ADDR)-GetWindowText(pp); /浏览指定的网页(CMyWeb16View*)GetActiveView()-Navigate(pp);建立事件处理函数与消息的映射在MainFrm.cpp的文件中,在消息映射(MESSAGE_MAP)段中添加自己的消息映射宏。用ON_COMMAND命令建立IDOK消息和处理函数OnNew的映射关系。BEGI
10、N_MESSAGE_MAP(CMainFrame, CFrameWnd)/AFX_MSG_MAP(CMainFrame)ON_WM_CREATE()/AFX_MSG_MAPON_COMMAND(IDOK,OnNew) /自己的消息映射宏END_MESSAGE_MAP()在myWeb16View.h文件的类定义前面添加包含语句#includemyWeb16Doc.h7.解决单击超级链接时地址栏的同步问题利用CHtmlView类的事件处理函数,当网页下载完成,会触发OnDocumentComplete()函数,该函数的参数就是所下载网页的URL,可以利用此函数对地址栏进行设置,添加以下代码。 在M
11、ainFrm.h文件中,添加处理函数的声明。public:void SetPage(LPCTSTR lpazURL);在MainFrm.cpp文件中,添加该函数的实现代码。void CMainFrame:SetPage(LPCTSTR lpszURL)m_wndDlgBar.GetDlgItem(IDC_ADDR)-SetWindowText(lpszURL);使用类向导添加事件处理函数。用类向导为应用程序的CMyWeb16View类添加OnDocumentComplete()事件处理函数,并在myWeb16View.cpp文件中添加它的实现代码。void CMyWeb16View:OnDoc
12、umentComplete(LPCTSTR lpszURL) (CMainFrame*)GetParentFrame()-SetPage(lpszURL);添加包含语句。在MainFrm.cpp文件前面添加包含语句。 #includemyWeb16View.h在myWeb16View.cpp文件前面添加包含语句。 #includeMainFrm.h8.修改首页地址,以及主页地址和搜索页面。在myWeb16View.cpp的文件中,找到OnInitialUpdate()函数,修改首页地址。Navigate2(_T(http:/),NULL,NULL);在开始菜单的运行中输入regedit,回车。
13、在目录菜单下:HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/Main找到Start Page(主页)和Search Page(搜索页),并修改其数值数据。Start Page(主页): Search Page(搜索页):.hk(二)加入删除IE相关历史记录的功能(包括删除文档历史纪录,清除cookies,清除Internet临时文件,清除地址栏中的历史任务,清除密码历史纪录和清除收藏夹)。1.添加“删除”菜单(1)修改菜单,在工作区中选择“ResourceView”选项卡,选择Menu,双击菜单控件的名字(IDR_MAINFRAM
14、E),右边出现程序的菜单。在菜单中加入“删除”栏,分别添加“删除文档历史记录”、“清除Cookies”、“清除Internet临时文件”、“清除地址栏中的历史地址”、“清除密码历史记录”和“清除收藏夹”6个菜单条目及其属性。如图2.1、2.2、2.3示。菜单条目名称(Caption)ID号删除文档历史记录ID_DelHistory清除CookieID_DelCookies清除Internet临时文件ID_DelIntenetTempFile清除地址栏中历史地址ID_DelHistoryAddress清除密码历史记录ID_DelHistoryPassword图2.22.为控件添加事件处理函数进入
15、类向导,选择“Message Maps”选项卡。在“Class Name”下拉列表框中选择CMyWeb16View类,然后按照表2.4为上述删除的六个控件添加事件处理函数。对象IDMessagesMember FunctionID_DelHistoryCOMMANDOnDelHistory() ID_DelCookiesCOMMANDOnDelCookies()ID_DelIntenetTempFileCOMMANDOnDelIntenetTempFile()ID_DelHistoryAddressCOMMANDOnDelHistoryAddress() ID_DelHistoryPasswo
16、rdCOMMANDOnDelHistoryPassword()图2.43.添加事件处理函数的代码在myWeb16View.cpp中,添加如下代码。(1)实现文档历史记录的清除void CMyWeb16View:OnDelHistory() /清除文档历史记录TCHAR szPathMAX_PATH;if(SHGetSpecialFolderPath(NULL,szPath,CSIDL_RECENT,FALSE)EmptyDirectory(szPath);SHDeleteKey(HKEY_CURRENT_USER,_T(SoftwareMicrosoftCurrentVersionExplor
17、erRecentDocs);(2)清除Cookievoid 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_PA
18、TH;DeleteUrlCache(File); /删除URL的Cacheif (SHGetSpecialFolderPath(NULL,szPath,CSIDL_INTERNET_CACHE,FALSE) /得到临时目录并清空它EmptyDirectory(szPath);(4)清除地址栏中的历史任务void CMyWeb16View:OnDelHistoryAddress() /浏览器地址栏历史记录的清除SHDeleteKey(HKEY_CURRENT_USER,_T(SoftwareMicrosoftInternet ExplorerTypedURLs);(5)清除密码历史纪录void
19、CMyWeb16View:OnDelHistoryPassword() /清除密码历史记录SHDeleteKey(HKEY_CURRENT_USER,_T(SoftwareMicrosoftInternet ExplorerIntelliForms);(6)实现目录的删除在OnDelIntenetTempFile、OnDelCookies和OnDelHistory这三个函数中都用到了函数EmptyDirectory()。删除目录是一个基本操作,因为有些历史记录是以文件形式保存在某个特定目录下的而且目录下还可能有子目录,所以可以采用递归方法删除整个目录。EmptyDirectory函数负责清空整
20、个目录。在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 CMyWeb16View:EmptyDirectory(
21、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,&wfd)=INVALID_HANDLE_VALUE)return FALSE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 类似 相似 ie vc 编写 浏览器

限制150内