如何实现HTML浏览功能的设计

具有非线性表达方法的、契合人类认知模型的超文本方法,已成为文本库安排结构的干流。用户在开发自己的超文本库运用时,往往需求规划、结束风格一同、具有特性、与运用紧密结合的超文本阅览功用。运用 Visual C ++ 的集成开发环境及 IE 控件,可以很方便地在自己的运用程序中结束该功用。
  IE 控件是一组遵循 OLE 控件技术的可重用代码。OLE 控件是一个可重用组件,它支撑广泛的 OLE 功用,除具有可移植性外,还容许控件露出可以编程的特征和方法,以供控件用户调用。控件用户只需构造控件包容器就可以通过运用控件的特征和方法操作控件,并接收从控件宣告的奉告音讯,然后到达代码重用、加快和减化程序规划的意图。
  IE 控件随 Microsoft 公司的 Internet Explorer 3.x 以上的版别一同发行,只需结束该软件的装置,在 Visual C++ 4.0 的组件廊中就会有一个名为 Microsoft Web Browser Control的控件,此即为 IE 控件,它是具有阅览器一般功用的可重用代码。IE 控件供应了可供运用程序访问的一些重要方法和作业,通过这些方法的访问,以及作业音讯的触发,运用程序可以操作 IE控件,结束超文本阅览功用。
  IE 控件供应的方法
  方法在运用和意图上与 C++ 类的成员函数类似。运用程序可以通过方法结束与控件的通讯(vigrxguide)。
  。 BOOL Create(LPCTSTR lpszWindowName, DWORD dwtyle, const RECT& rect,CWnd * pParentWnd, UINT nID, CFile* pPersist=NULL, BOOL bStorage=FALSE, BSTR bstrLicKey=NULL)
  该方法通过调用 CWnd 类的 CreateControl() 成员函数动态创建 IE 控件,作为一种特别类型的子窗口被激活。第一个参数可设为 NULL,第二、三个参数用于指定子窗口的类型和巨细,第四个参数是父窗口指针,第五个参数是在资源文件中定义的一个符号。
  。 void Navigate(LPCTSTR URL, VARIANT * Flags, VARIANT * TargetFrameName, VARIANT
  。 PostData, VARIANT * Headers)
  该方法用于联向某个接点,并装入由 URL 指定的超文本页面。后四个参数可设为 NULL。
  。 void GoBack()
  回来上一级页面,与Internet Explorer 的GoBack对应。
  。 void GoForward()
  进入下一级页面,与Internet Explorer 的GoForward对应。
  。 void Refresh()
  从头装载其时页面,与Internet Explorer 的Refresh对应。
  。 void Stop()
  连续其时作业,与Internet Explorer 的Stop对应。
  。 void GetLocationURL()
  获取其时页面地址。
  IE 控件供应的作业
  作业是用来奉告用户有关控件发作的作业,作为触发音讯与运用程序进行交互。
  。 FrameBeforeNavigate: 多栏式超文本页面被装入前触发。相应的激起函数为:
  OnFrameBeforeNavigateExplorer1(LPCTSTR URL,long FLags, LPCTSTR
  TargetFrameName, VARIANT FAR * PostData, LPCTSTR Headers, BOOL FAR * Cancel)
  其间 URL 参数传递的是将要被装入的页面地址,TargetFrameName 参数是多栏式超文本的栏目名,Headers 参数是前一页面的地址。
  。 BeforeNavigate:每次装入页面前被触发。相应的激起函数为:
  OnBeforeNavigateExplorer1(LPCTSTR URL,long FLags, LPCTSTR TargetFrameName,
  VARIANT FAR * PostData, LPCTSTR Headers, BOOL FAR * Cancel)
  其间参数说明同前。
  。 StatusTextChange:每次IE控件的操作状态改动时被触发。相应的激起函数为:
  OnStatusTextChangeExplorer1(LPCTSTR Text)
  其间Text参数传递的是其时操作命令。
  。 TitleChange: 页面标题改动时被触发。相应的激起函数为:
  OnTitleChangeExplorer1(LPCTSTR Text)
  其间Text参数传递的是其时页面标题。
  IE控件包容器的规划
  创建运用 IE 控件的运用程序,也就是要规划结束一个 IE 控件包容器。IE 控件包容器就是完全支撑 IE 控件,并可以把控件组合进自己的窗口或对话框的程序。控件包容器的结束一般有两种方法,一种是在对话框中运用 IE 控件,另一种是在窗口中运用 IE 控件。
  对话框中运用 IE 控件
  在对话框中运用 IE 控件,可规划结束一个根据对话框的运用,将 IE 控件嵌入在对话框的某个当地。该方法的结束可以完全依赖于 Visual C++ 4.0 供应的编程支撑环境:AppWizard和组件廊,用户只需写入不多几行代码就可以将超文本阅览功用参与到自己的运用程序中。以下简略介绍程序开发的几个进程,具体 AppWizard 和组件廊的运用,用户可参看 Visual C++ 的随机帮助或有关资料。
  进程一:运用 AppWizard 创建一个根据对话框并支撑 OLE Controls的运用。
  进程二:通过组件廊将IE控件刺进到进程一创建的运用中。
  进程三:将 IE 控件参与到对话框资源中,并定义控件变量。
  进程四:根据运用程序的需求,访问 IE 控件供应的方法,并照料 IE 控件在作业进程中激起的各种作业,以结束杂乱程度各异的阅览功用。最简略的一种方法是,在对话框的初始化成员函数中参与对 IE 控件 Navigate 方法的调用,如:
  m-web.Navigate( "http:www.cfets.sjz.cn", NULL, NULL, NUll, NULL)
  即可结束一个阅览地址 www.cfets.sjz.cn 处超文本主页的阅览器,其间,m-web 是在对话框资源中定义的IE控件变量。
  窗口中运用 IE 控件
  所谓窗口中运用 IE 控件,即将 IE 控件以子窗口的方法参与到运用中,Visual C++ 4.0 没有供应象第一种方法那样便利的支撑,程序员需求规划一些程序段。具体的程序规划进程如下:
  进程一:如果在运用 AppWizard 东西创建运用程序的进程中,没有选择支撑 OLE Control选项,则需求手工在运用的 InitInstance() 的成员函数参与 AfxEnableControlContainer()函数调用,然后在 STDAFX.H 头文件中参与如下语句:#include <Afxdisp.h>。通过上述进程,运用程序则具备了对 IE 控件的支撑,可以作为 IE 控件的包容器方便地运用 IE 控件的方法并与之交互。
  进程二:运用组件廊将 IE 控件参与到已创建的运用程序中,这一操作主动在工程文件中参与 webbrowser.h 和 webbrowser.cpp 两个文件。在需求加载 IE 控件的程序段的 .h 头文件中,参与 #include "webbrowser.h" 语句。
  进程三:在需求加载 IE 控件的程序段中,动态央求创建 IE 控件子窗口,使该子窗口获得控制程序作业的权力。动态创建 IE 控件子窗口,首要需求在装载该控件的程序段的 .h 头文件中,将 IE 控件包裹类 CWebBrowser 说明为内嵌方针,语句如下:
  public:
  CWebBrowser m-browser;
  内嵌方针是在栈中被央求的。当需求将 IE 控件激活时,则需在程序的相应方位调用 IE 控件供应的方法 Create(),有关语句如下:
  myrect.SetRect(1,50,635,475);
  CWnd。 pParentWnd = FromHandle(m-hWnd);
  m-browser.Create(NULL,WS-VISIBLE|WS-BORDER,myrect,
  pParentWnd,IDC-EXPLORER1, NULL, FALSE, NULL);
  进程四:运用 IE 控件供应的方法,结束超文本阅览功用。首要调用 Navigate() 方法将超文本加载,然后运用 goback()、goforward() 等对超文本进行阅览进程的操作,还可以通过照料IE 控件触发的作业,使运用程序得到现在 IE 控件的执行情况,例如,当超文本被加载阅览后,可以通过文本中定义的超链进行多文本之间的转化,这样,使得在运用程序中除了其主动加载的第一个超文本页面外,还存在有一些被链入的超文本页面,当运用程序需求获得其时正被阅览的超文本页面信息时,可通过照料 IE 控件触发的 OnBeforeNavigateExplorer1() 作业,由其传递的参数得到。
  运用程序通过作业接收映象表 (Event Sink Map) 机制接收和照料 IE 控件触发作业,(cdzyfcLvs)映象表为每一个需处理的作业指定了一个相应的处理函数。组成作业接收映象表的宏指令有:
  DECLARE-EVENTSINK-MAP: 对作业映象表的声明
  BEGIN-EVENTSINK-MAP: 作业映象表的初步语句
  END-EVENTSINK-MAP: 作业映象表的停止语句
  ON-EVENT:定义某一特定作业的处理函数进口
  在具体的程序规划中,首要,需求在有关程序段的 .h 头文件中,参与该作业处理函数的说明,函数说明语句的前面需加 afx-msg 字段,如:
  public:
  afx-msg void OnTitleChangeExplorer1 (LPCTSTR Text);
  再将 DECLARE-EVENTSINK-MAP() 宏指令加在该头文件结束。其次,在相应的 .cpp 源文件中说明作业映象表,有关代码如下:
  BEGIN-EVENTSINK-MAP(CMainFrame,
  CFrameWnd)
  //{{AFX-EVENTSINK-MAP(CMainFrame)
  ON-EVENT(CMainFrame,IDC-EXPLORER1,113 /*TitleChange*/,
  OnTitleChangeExplorer1,VTS-BSTR)
  ......
  //}}AFX-EVENTSINK-MAP
  END-EVENTSINK-MAP()
  有关 ON-EVENT 宏指令的参数说明,读者可以参看 Visual C++ 的联机帮助。映象表中定义的相应处理函数需求根据具体情况进行编写。例如:
  void CMainFrame::OnTitleChangeExplorer1(LPCTSTR Text)
  {
  // TODO: Add your control notification handler code here
  CString tmp-str;
  tmp-str = Text;
  ......
  }
  进程五:当运用程序不再运用 IE 控件时,调用 CWnd 类的 DestroyWindow() 成员函数封闭IE 控件子窗口。
  3 必要的说明
  在具体项意图开发中,规划结束的是一个不带文档和视结构的运用程序,在该运用程序中,仅运用了基本类库中的结构类和运用类,IE 控件是在结构窗口中被创建和运用的。依照窗口中运用 IE 控件的方法,规划结束了单栏阅览、多栏阅览、单栏多栏彼此切换及多栏中某一栏的切换等多种阅览功用,处理了多栏中部分闪现切换到全屏闪现等问题,到达了规划方针。如果用户规划的是根据文档-视结构的运用程序,则需求根据实际情况调整创建和运用IE 控件的部位,并处理窗口闪现与刷新等问题,但全体思路是不变的。

猜你喜欢

转载自www.cnblogs.com/monkey7788/p/12104523.html