VC6重载BeforeNavigate2和DocumentComplete函数方法 .

来源:互联网 发布:mac按哪个键切换输入法 编辑:程序博客网 时间:2024/06/01 09:38

众所周知BeforeNavigate2和DocumentComplete函数是IE未公开的接口,如果你做基于IE的二次开发的话,而且很不幸因为种种原因只能用VC6的话,那么本文将帮助你,告诉你如何正确识别网页下载完毕以及在网页未下载完成的时候正确识别真正的url


重载这两个函数的方法是:

第一步

在chtmlxxxview.h文件添加

    void DocumentComplete(LPDISPATCH pDisp,VARIANT *URL);
    void BeforeNavigate2(LPDISPATCH pDisp, VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers, BOOL* Cancel);
以及

    DECLARE_EVENTSINK_MAP()

第二步:

  

在CPP文件添加

END_MESSAGE_MAP()
BEGIN_EVENTSINK_MAP(CTyreaderView,CHtmlView)
ON_EVENT(CHtmlView,   AFX_IDW_PANE_FIRST,   259   /*   DocumentComplete   */,   DocumentComplete,   VTS_DISPATCH   VTS_PVARIANT)
ON_EVENT(CHtmlView, AFX_IDW_PANE_FIRST, 250,BeforeNavigate2,VTS_DISPATCH VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PBOOL)

END_EVENTSINK_MAP()


第三部:

在CPP文件天津爱函数实体


[cpp] view plaincopyprint?
  1. void CTyreaderView::BeforeNavigate2(LPDISPATCH pDisp, VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers, BOOL* Cancel)  
  2. {  
  3.             IDispatchPtr       spDisp;  
  4.             HRESULT             hr;  
  5.             CString             url;  
  6.             CString             CurUrl = CString(m_curPath);  
  7.             hr   =   m_pBrowserApp->QueryInterface(IID_IDispatch,(void**)&spDisp);  
  8.         //  m_pBrowserApp->Release();   
  9.       //   Is   the   IDispatch*   passed   to   us   for   the   top-level   window   ?  
  10.       m_IsDown = 0;  
  11.       if(pDisp ==  spDisp)  
  12.             {  
  13.                 url = VariantToString(*URL);  
  14.                 if(url == CurUrl)  
  15.                 {  
  16.   
  17.                 }  
  18.                 else  
  19.                 {  
  20.                         m_url = url;          
  21.                         if(1 == m_ReadMode) OnReadAuthor();   
  22.                 }  
  23.             }         
  24. }  

[cpp] view plaincopyprint?
  1. void   CTyreaderView::DocumentComplete(LPDISPATCH   pDisp,   VARIANT*   URL)  
  2. {  
  3.             IDispatchPtr       spDisp;  
  4.             HRESULT             hr;  
  5.             CString             url;  
  6.             CString             CurUrl = CString(m_curPath);  
  7.             hr   =   m_pBrowserApp->QueryInterface(IID_IDispatch,(void**)&spDisp);  
  8.             m_pBrowserApp->Release();  
  9.       //   Is   the   IDispatch*   passed   to   us   for   the   top-level   window   ?  
  10.       if(pDisp   ==   spDisp)  
  11.             {  
  12.                 url = VariantToString(*URL);  
  13.                 m_IsDown = 1;/*下载完成 added by songbin 2011-8-24*/  
  14.             }  
  15.         //  m_pBrowserApp->Release();  
  16. }