用控件创建WEB浏览器

简介

这篇文章简单介绍了如何用WebBrower控件创建web浏览器。

 

控件基础

WebBrowserActiveX控件的形式实现,很容易就能加到对话框中,就象用普通的控件一样方便。WebBrowser控件的很多功能都继承自COM对象(Shdocvw.dll MSHTML.DLL Urlmon.dll)。该控件的实现都在CWebBrowser2类中。

GoBack           返回到上一浏览界面

GoForward      前进到下一浏览界面

GoHome          直接浏览到主页

Navigate          用具体的URL浏览

Navigate2        用的URL或者文件路径浏览

Refresh           刷新当前页面

 

WebBrowser是一个ActiveX控件,必须用一个对话框(用作容器)来容纳它。该控件通过发送事件的方式来与对话框交互。通用的事件包括:

BeforeNavigate2      该事件由调用NavigateNavigate2的方法引起,当用户点击超连接时也会引发该事件

DownloadBegin     该事件在开始下载文档时发生。即在找到文档,并即将下载时。

DownloadComplete  在三种情况下都会引发该事件:下载文档失败、停止、下载失败

NavigateComplete2 文档已经下载了一部分,并没有完全下载时。

StatusTextChange  浏览器的状态文本改变时发生。即在IE状态条上显示的文本。

DocumentComplete  该事件发生在文档成功下载时。关于该事件有以下两点要注意:

  1. 当下载的页面只有一个框时,该事件会在下载完成该页面所有的内容时发生

  2. 当下载的页面有多个框时,该时间可能会引发多次。但也不是每个框都会对应引发该事件。每个框能引发DownloadBegin和相应的DocumentComplete事件。

项目实施步骤

以下用VC++6.0举例说明

  1. 启动VC++集成开发环境

  选择“新建菜单项”

  选择工程选项:MFC AppWizard (exe)

  输入工程名:例如Browser_Control,并选择工程的目录

  点击OK

  2. MFC AppWizard -1中选择Dialog-based,点击“next

  3. 接下来只要点击“Next”和“Finish”就可以了。

  4. 右键击对话框编辑器,在弹出菜单中选择“Insert ActiveX Control”。接着出现一个对 话框,在对话框中选择“Microsoft Web Browser”,点击OK

  5. 右键点击WebBrowser控件

 在弹出菜单中选择“ClassWizard

 点击“Member Variables”项目,显示控件ID

 选择IDC_EXPLORER1

 点击“Add Variable”,确认消息框弹出

 点击“OK”,输入变量名:例如m_WebBrowser

 

 

程序启动的时候,对话框上的控件就是一块空白,什么都没有。要使其能正常的显示就需要在OnInitDialog中调用WebBrowser控件的Navigate接口。代码如下:

  1. BOOL CBrowser_ControlDlg::OnInitDialog()
  2.  {
  3.       m_WebBrowser.Navigate("http://www.google.com", NULL, NULL, NULL, NULL);
  4.  }        

  

到这一步,程序就可以跑起来了,并能简单的一次浏览单个网页。

为了加入更丰富的功能,例如:输入URL进行浏览、前进、后退、停止、刷新、主页和搜索等,需要继续在上面的基础上添加编辑控件、下拉列表和按钮。添加这些控件的步骤就不在此详细说明了,与上面添加WebBrowser控件的方法差不多。下面仅列出相应的控件ID和名称:

转到--ID_OK,

返回--ID_BACK

前进--ID_FORWARD

停止--ID_STOP

刷新--ID_REFRESH

主页--ID_HOME

搜索--ID_SEARCH

添加完控件之后,就需要给每个控件添加消息响应函数了。以下便是源码:

 

  1. void CBrowser_ControlDlg::OnOK()
  2. {
  3.   // TODO: Add extra validation here
  4.    m_WebBrowser.Navigate(m_sURL , NULL, NULL, NULL, NULL);
  5.   //OR you can also do the following to achieve the same result
  6.   // CString str;
  7.   // m_eURL.GetWindowText(str);
  8.   // m_WebBrowser.Navigate(str , NULL, NULL, NULL, NULL);
  9. }  

返回调用GoBack

  1. void CBrowser_ControlDlg::OnBack()
  2. {
  3.   // TODO: Add your control notification handler code here
  4.   m_WebBrowser.GoBack();
  5. }  

前进调用GoForward

  1. void CBrowser_ControlDlg::OnForward()
  2. {
  3.   // TODO: Add your control notification handler code here
  4.   m_WebBrowser.GoForward();
  5. }

停止调用Stop

  1. void CBrowser_ControlDlg::OnStop()
  2. {
  3.   // TODO: Add your control notification handler code here
  4.   m_WebBrowser.Stop();
  5. }

 

更新调用Refresh

  1. void CBrowser_ControlDlg::OnRefresh()
  2. {
  3.   // TODO: Add your control notification handler code here
  4.   m_WebBrowser.Refresh();
  5. }

 

回到主页

  1. void CBrowser_ControlDlg::OnHome()
  2. {
  3.   // TODO: Add your control notification handler code here
  4.   m_WebBrowser.GoHome();
  5. }

 

调用默认的搜索功能

  1. void CBrowser_ControlDlg::OnSearch()
  2. {
  3.   // TODO: Add your control notification handler code here
  4.   m_WebBrowser.GoSearch();
  5. }

 

接下来就要给完善这个用控件制作的浏览器了:

1)当浏览器处于忙状态时,播放一个.avi文件

2)显示浏览器的当前状态

3)用当前访问的URL更新URL输入框

 要获得这些功能其实很简单,响应几个事件就可以(DownloadBegin, DownloadComplete, StatusTextChange  DocumentComplete )。下面是部分代码:

  1. BOOL CBrowser_ControlDlg::OnInitDialog()
  2. {
  3.  .
  4.   m_Animate.Open("progress.avi");
  5.  .
  6. }     
  7. void CBrowser_ControlDlg::OnDownloadBeginExplorer1()
  8. {
  9.   // TODO: Add your control notification handler code here
  10.   m_Animate.Play(0,-1,-1);
  11. }   
  12. void CBrowser_ControlDlg::OnDownloadCompleteExplorer1()
  13. {
  14.   // TODO: Add your control notification handler code here
  15.    m_Animate.Stop();
  16.    m_Animate.Seek(0);
  17. }
  18. void CBrowser_ControlDlg::OnStatusTextChangeExplorer1(LPCTSTR Text)
  19. {
  20.   // TODO: Add your control notification handler code here
  21.     if (GetSafeHwnd())
  22.   {
  23.     CWnd *pWnd = GetDlgItem(IDC_STATUS_TEXT);
  24.     if (pWnd)
  25.       pWnd->SetWindowText(Text);
  26.   }
  27. }
  28. void CBrowser_ControlDlg::OnDocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT FAR* URL)
  29. {
  30.   // TODO: Add your control notification handler code here
  31.   CString locURL;
  32.   locURL=  m_WebBrowser.GetLocationURL();
  33.   m_eURL.SetWindowText(locURL);
  34. }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值