WebBrowser2的应用

来源:互联网 发布:mac桌面消失 编辑:程序博客网 时间:2024/05/16 00:47

使用方法,选择菜单 Project -> Add to Project -> Components and controls…,在弹出的对话框中选择Registered ActiveX Controls文件夹,然后选中列表中的Microfost Web 浏览控件。或者编辑对话框资源时,右键单击选择Insert ActiveX控件选项,也可以在列表中选择该控件

主要功能:

第一:浏览网页

利用控件的Navigate接口,原型如下:

void CWebBrowser2::Navigate(LPCTSTR URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers)

只要第一个参数填上html文件的全路径名(不能使用相对路径名),其余的参数可以为NULL

 

说起来这是一个很普通的功能,但是有时候灵活使用却也会收到很多意想不到的效果,比如:

>>美化界面:设计一张很酷的网页用这个控件显示出来可以增加界面的美感

>>播放音乐:在网页中播放音乐(midwav),同时把控件隐藏起来,则可以实现程序背景音乐的播放。示例html文件:

<html>

<bgsound src="bksound.mid" loop="-1">

<body></body>

</html>     

>>播放视频:可以支持asfmpeg格式

>>显示图片:利用web浏览器可以简单地显示gifjpegbmp等图片。示例html文件

<html>

<body><img src="image.jpg"></body>

</html>

>>浏览doc文档、pdf文件:利用控件的Navigate接口,可以浏览word文档和pdf文件,只要第一参数填上文件的全路径名,后面的参数都可以为NULL

第二:打印

通过控件的ExecWB接口可以将控件中显示的内容打印出来,并且能够很简单地实现打印预览,和纸张大小设置。

//m_WebBrowse为控件对应的变量

m_WebBrowse.ExecWB(OLECMDID_PRINT,OLECMDEXECOPT_PROMPTUSER,NULL,NULL); //打印

//使用OLECMDEXECOPT_PROMPTUSER参数则打印之前会弹出对话框,让用户选择打印机、页面布局等设置,使
//OLECMDEXECOPT_DONTPROMPTUSER则不会弹出

m_ WebBrowse.ExecWB(OLECMDID_PRINTPREVIEW,OLECMDEXECOPT_DONTPROMPTUSER,NULL,NULL); //打印预览

m_ WebBrowse.ExecWB(OLECMDID_PAGESETUP,OLECMDEXECOPT_PROMPTUSER,NULL,NULL); //纸张尺寸设置

第三:截获提交的数据,进一步还可以使用DHTML显示提交的数据

实现这些功能主要通过修改控件对消息BeforeNavigate2的处理,原型如下:

OnBeforeNavigate2Explorer1(   //该函数在HTML的连接前调用

                   LPDISPATCH pDisp,

                   VARIANT FAR* URL,      //准备浏览的URL,修改它可以实现转向

                   VARIANT FAR* Flags,

                   VARIANT FAR* TargetFrameName,

                   VARIANT FAR* PostData,

                   VARIANT FAR* Headers,

                   BOOL FAR* Cancel)//TRUE:停止 FALSE:继续

 

IWebBrowser2* CDoHtml::GetWebBrowser(CString &strError,HWND hIEWindow)
{
 HWND hTempWnd = (NULL != hIEWindow)?hIEWindow:GetIEHandle();
 //显示装载OLEACC.DLL才知道有没有安装MSAA
 HINSTANCE hInst = LoadLibrary( _T("OLEACC.DLL") );
 if( NULL == hInst )
 {//如果没有安装MSAA
     MessageBox(NULL,_T("Please Install Microsoft Active Accessibility"),"Error",MB_OK); 
  return NULL;
 }

 IWebBrowser2* pWebBrowser2=NULL;
    UINT nMsg = ::RegisterWindowMessage("WM_HTML_GETOBJECT");

 DWORD dwRes = 0;
    ::SendMessageTimeout(hTempWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, &dwRes);

 LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
 if ( pfObjectFromLresult != NULL )
 {
  HRESULT hr;
  CComPtr<IHTMLDocument2>spDoc;

  hr=pfObjectFromLresult(dwRes,IID_IHTMLDocument2,0,(void**)&spDoc);
  if ( SUCCEEDED(hr) )
  {
   CComPtr<IHTMLWindow2>spWnd2;
   CComPtr<IServiceProvider>spServiceProv;
   hr=spDoc->get_parentWindow ((IHTMLWindow2**)&spWnd2);
   if(SUCCEEDED(hr))
   {
    hr=spWnd2->QueryInterface (IID_IServiceProvider,(void**)&spServiceProv);
    if(SUCCEEDED(hr))
    {
     hr = spServiceProv->QueryService(SID_SWebBrowserApp,IID_IWebBrowser2,(void**)&pWebBrowser2);
    }
   }
  }

 }
 ::FreeLibrary(hInst);
 return pWebBrowser2;
}

 

/*  CComPtr<IOleObject>   spOleObj;
 
  CComPtr<IWebBrowser2>   m_spWebBrowser; 
  //   Create   WebBrowser--store   pointer   in   class   member   variable   m_spWebBrowser  
  CoCreateInstance(CLSID_WebBrowser,   NULL,   CLSCTX_INPROC,   IID_IWebBrowser2,   (void**)      &m_spWebBrowser);  
   
  //   Query   WebBrowser   for   IOleObject   pointer  

  //CComQIPtr<IWebBrowser2,&IID_IWebBrowser2>   pWebBrowser(m_spOleObjectPreloadBrowser);  

  m_spWebBrowser->QueryInterface(IID_IOleObject,   (void**)&spOleObj);  
   
  //   Set   client   site  
  spOleObj->SetClientSite(this);  
   
  //   In-place   activate   the   WebBrowser   control  
  RECT   rcClient; 
  GetClientRect(&rcClient);  
  spOleObj->DoVerb(OLEIVERB_INPLACEACTIVATE,   NULL,   this,   0,   GetTopLevelWindow(),   &rcClient);  
   
  //   Register   container   to   intercept   WebBrowser   events  
  AtlAdvise(m_spWebBrowser,   GetUnknown(),   DIID_DWebBrowserEvents2,   &m_dwCookie);  
   
  //   Navigate   to   start   page  
  m_spWebBrowser->Navigate(L"res://webhost.exe/startpage.htm",   NULL,   NULL,   NULL,   NULL); */

 

 

 

 

http://hi.baidu.com/chenrubo012/blog/item/d1c5910b7e0ef91a94ca6b5c.html

http://hi.baidu.com/chenrubo012/blog/item/d1c5910b7e0ef91a94ca6b5c.html

http://blog.csdn.net/vcmfc/archive/2000/12/14/3577.aspx

http://www.cnblogs.com/henryzc/archive/2005/11/11/273783.html

http://hi.baidu.com/iswq/blog/item/61f2bffd99956a1308244d46.html

http://blog.csdn.net/skyremember/archive/2008/12/02/3432544.aspx

http://hi.baidu.com/tuzi___520/blog/item/8d187302bd8780064afb517f.html

http://hi.baidu.com/chenrubo012/blog/item/d1c5910b7e0ef91a94ca6b5c.html

http://www.vckbase.com/document/viewdoc/?id=883

http://msdn.microsoft.com/zh-cn/library/aa741857(en-us,VS.85).aspx

http://www.cnblogs.com/henryzc/archive/2005/11/11/273951.html

http://blog.163.com/ygdljg/blog/static/546010462008101191835269/

http://zhidao.baidu.com/question/88526186.html

http://msdn.microsoft.com/en-us/library/aa752127(VS.85).aspx

http://hi.baidu.com/ben2000/blog/item/2902e7ce5a1ecb0493457e8d.html