您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 第4章 万维网:浏览器中的因特网
4.1浏览器发展简史4.2MFC对浏览器应用开发的支持4.3浏览器开发4.4浏览器中的因特网4.1.1浏览器概述浏览器(Browser)是万维网(Web)服务的客户端浏览程序。可向万维网(Web)服务器发送各种请求,并对从服务器返回的超文本信息和各种多媒体数据格式进行解释、显示和播放。浏览器可以显示网页服务器或者文件系统的HTML文件内容,并让用户与这些文件交互。网页浏览器主要通过HTTP协议与网页服务器交互并获取网页,这些网页由URL指定,文件格式通常为HTML,并由MIME在HTTP协议中指明。最早的商品化浏览器是NCSAMosaic,它使因特网得以迅速发展。它最初是一个只在UNIX运行的图像浏览器,很快便发展到在AppleMacintosh和MicrosoftWindows上也能运行。1993年9月发表了1.0版本。NCSA中Mosaic项目的负责人MarcAndreesen辞职并建立了网景通信公司。网景公司在1994年10月发布了他们的旗舰产品NetscapeNevigator(网络航海家),但第二年Netscape的优势就被削弱了。错失了互联网浪潮的微软在这个时候匆促地购入了Spyglass公司的技术,改成InternetExplorer,掀起了软件巨头微软和网景之间的浏览器大战。而这反而加快了万维网发展。MozillaFirefox(火狐浏览器)GoogleChrome(谷歌浏览器)。TheWorld(世界之窗浏览器)。Maxthon(傲游浏览器)。4.2.1文档/视图结构与CHtmlView类在“MFC应用程序向导”中有一个“应用程序类型”页面,如图4.1所示。1.文档/视图结构文档/视图结构的主要优点如下:(1)首先是将数据操作和数据显示、用户界面分离开。(2)MFC在文档/视图结构上提供了许多标准操作界面,包括新建文件、打开文件、保存文件、打印等,减轻了用户的工作量。(3)支持打印预览和电子邮件发送功能。用户无须编写代码或只需要编写很少的代码,就可以为应用程序提供打印预览功能。2.CHtmlView类在MFC9.0类库体系结构图中的CView类及其子类的继承结构,即视图CView类家族如图4.2所示。CHtmlView类成员函数及其功能见表4.1。函数名功能描述GetLocalionName得到站点名称GetOffline判断是否离线SetOffline指示是否离线浏览GetLocaionURL得到站点的URLGetFullName得到浏览器的完整本地路径GetType得到当前页面类型Navigate浏览当前的URL文件Navigate2浏览当前的URL文件,或者全路径表明的文件GoBack在历史记录中浏览前一项GoForward在历史记录中浏览后一项GoHome浏览开始页面GoSearch浏览当前的搜索页面Refresh重新下载当前页面Stop停止打开一个文件相关类的继承关系如图4.3所示。在WinInet提供的类中,共分为以下3种类型:处理因特网会话的类,处理因特网连接的类和处理文件的类。WinInet类功能的简要描述见表4.2。类名描述CInternetSession创建因特网会话CInternetConnection管理和因特网服务器的连接CFtpConnection管理和FTP服务器的连接CGopherConnection管理和Gopher服务器的连接CHttpConnection管理和HTTP服务器的连接CFileFind执行本地文件搜索CFtpFileFind搜索FTP服务器上的文件CGopherFileFind搜索Gopher服务器上的文件CGopherLocator得到Gopher定位器CInternetException因特网操作相关异常4.3.1创建基于文档/视图结构的浏览器工程在“MFC应用程序向导”对话框的“应用程序类型”页面中选择“单文档”类型的程序,如图4.4所示。单击“下一步”按钮,在“用户界面功能”页面中选择工具栏为浏览器样式,如图4.5所示。如图4.6所示,在“生成的类”列表中选择视图类CSelfBrowserView,在下面“基类”下拉列表框中选择它的基类为CHtmlView,单击“完成”按钮。工程刚创建好就可以运行了,界面效果如图4.7所示。1.添加地址栏功能在资源视图展开的目录树下双击Dialog目录的第二个项目IDR_MAINFRAME,在工作区设计地址栏界面如图4.8所示。将输入网址的文本编辑框ID设置为IDC_EDIT_ADDRESS,程序代码中要引用。给“浏览”按钮添加事件过程(如图4.9所示)。代码如下:CStringsWebAddress;//从编辑框获取用户输入的Web地址m_wndDlgBar.GetDlgItem(IDC_EDIT_ADDRESS)-GetWindowText(sWebAddress);//浏览相应的网页((CHtmlView*)GetActiveView())-Navigate(sWebAddress);在文件MainFrm.h中声明消息映射OnInputAddress()函数,并在MainFrm.cpp中定义对应的消息映射:afx_msgvoidOnInputAddress();//消息映射函数ON_COMMAND(IDOK,OnInputAddress)//消息映射上面两句代码添加的具体位置如图4.10所示。2.设计主菜单在资源视图展开的目录树下双击Menu目录下的IDR_MAINFRAME项,打开菜单设计工作区,设计主菜单如图4.11所示。为了能在工具栏中定制与菜单项里一样的功能,同时也是为了后面程序编码的需要,在这里先给每个菜单项指定ID标识,如图4.12和表4.3所示。属性菜单项IDPrompt后退(B)ID_BACK转到上一页\n后退前进(F)ID_FORWARD转到下一页\n前进主页(H)ID_HOME转到主页\n主页停止(S)ID_STOP停止加载当前页\n停止刷新(R)ID_REFRESH刷新当前页内容\n刷新源文件(C)ID_CODE显示该页的HTML源文件\n源文件给“后退”子菜单项添加事件处理程序,如图4.13所示。编写OnBack()函数过程的代码,如图4.14所示。用上述方法调用适当的函数,分别实现主菜单中设计的各个子菜单项的功能,代码如下://CSelfBrowserView消息处理程序voidCSelfBrowserView::OnBack(){CSelfBrowserView::GoBack();//后退}voidCSelfBrowserView::OnForward(){CSelfBrowserView::GoForward();//前进}voidCSelfBrowserView::OnHome(){CSelfBrowserView::GoHome();//主页}voidCSelfBrowserView::OnStop(){CSelfBrowserView::Stop();//停止}voidCSelfBrowserView::OnRefresh(){CSelfBrowserView::Refresh();//刷新}3.自定义工具栏在工具栏里定制与前面菜单项一样的功能。在资源视图展开的目录树下双击Toolbar目录下的IDR_MAINFRAME项(如图4.15所示),打开工具栏定制区。需要用户自己绘制对应于前面菜单项里的功能按钮,绘制完成后将它的ID和Prompt属性设置成与菜单项一样,这样在程序运行时单击工具栏上的按钮,就和选择相应的菜单项的效果一样了,如图4.16所示。最终设计完成的工具栏如图4.17所示。4.完善程序,试运行图4.18是用微软IE浏览网页的效果。登录“南京师范大学教务处菁林园”首页,IE标题栏上显示“菁林园—南京师范大学教务处”,网址栏地址为“”;单击首页上的“组织机构”链接,跳转到教务处处长办公室页面,IE标题栏变为“组织机构—菁林园”,地址栏也实时更新为“”,如图4.19所示。为视图类CSelfBrowserView添加OnDocumentComplete()方法(如图4.20所示)。浏览器接收到服务器发来的新页面时就执行这个函数,在这个函数中,可以编写使浏览器标题栏和地址栏随显示的页面同步更新的代码,如下://每次当前页面改变,更新地址栏的内容和窗口的标题((CMainFrame*)GetParentFrame())-SetURL(lpszURL);GetDocument()-SetTitle(lpszURL);①在类视图中右击CMainFrame类,在弹出的菜单中选择“添加”→“添加函数...”命令,如图4.21所示。②在弹出的“添加成员函数向导”对话框中填写函数名为SetURL,选择参数类型为LPCTSTR,单击“添加”按钮添加成员函数,如图4.22所示。③在SelfBrowserView.cpp文件中包含头文件声明:#includeMainFrm.h④在MainFrm.cpp中编写SetURL()函数:voidCMainFrame::SetURL(LPCTSTRlpszURL){m_wndDlgBar.GetDlgItem(IDC_EDIT_ADDRESS)-SetWindowTextA(lpszURL);}编译运行程序,浏览器将默认访问“VisualC++开发中心”首页(如图4.23所示)。在地址栏里输入南师大教务处网址“”,单击“浏览”按钮或直接按回车键,浏览器将显示“南京师范大学教务处菁林园”首页(如图4.24所示)。单击首页上的“组织机构”链接,将跳转到教务处处长办公室页面,可以看到浏览器的标题栏和地址栏都随之更新了,如图4.25所示。单击工具栏上的“后退”按钮或选择菜单命令“视图”→“转到”→“后退”,网页又回到“南京师范大学教务处菁林园”首页,如图4.26所示。单击工具栏“主页”按钮或选择菜单命令“视图”→“转到”→“主页”,浏览器将显示默认的主页面,如图4.27所示。5.用WinInet类扩展浏览器功能给工程添加一个对话框,如图4.28所示。设计这个新的对话框为浏览网页源码的窗口,界面布局如图4.29所示。为项目添加一个新的MFC类。在“MFC类向导”中给新类命名为CHtmlCodeViewDlg,在“对话框ID”下拉列表中选择IDD_DIALOG1,这样就将新添加的对话框与类关联起来(如图4.30所示)。在类视图中可以看到新添加的类(如图4.31所示)。在主菜单“视图”下新增设一个子菜单项“源文件”,并为其添加事件处理程序。处理过程命名为OnCode(),消息类型选COMMAND,类列表中选择CSelfBrowserView类,如图4.32所示。OnCode()函数过程代码如下:voidCSelfBrowserView::OnCode(){CHtmlCodeViewDlgdlg;//对话框对象dlg.DoModal();//生成显示网页源码的对话框}此代码位于文件SelfBrowserView.cpp中,为了能在程序中引用CHtmlCodeViewDlg类,必须在源文件SelfBrowserView.cpp中包含头文件:#includeHtmlCodeViewDlg.h为CHtmlCodeViewDlg类添加初始化过程(如图4.33所示)。在HtmlCodeViewDlg.cpp中包含头文件:#includeMainFrm.h#includeafxinet.h//用到WinInet类给显示网页源码对话框中的文本框添加变量关联m_htmlCode,如图4.34所示。为了下面编写程序代码引用的方便,将浏览器工具栏对象变量设置成public类型(如图4.35所示)。编写网页源码对话框的初始化代码如下:
本文标题:第4章 万维网:浏览器中的因特网
链接地址:https://www.777doc.com/doc-3208184 .html