VC6重载BeforeNavigate2和DocumentComplete函数方法 .

众所周知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文件天津爱函数实体


  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. }  
void CTyreaderView::BeforeNavigate2(LPDISPATCH pDisp, VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers, BOOL* Cancel)
{
			IDispatchPtr       spDisp;
			HRESULT             hr;
			CString             url;
			CString             CurUrl = CString(m_curPath);
			hr   =   m_pBrowserApp->QueryInterface(IID_IDispatch,(void**)&spDisp);
		//	m_pBrowserApp->Release();
      //   Is   the   IDispatch*   passed   to   us   for   the   top-level   window   ?
      m_IsDown = 0;
      if(pDisp ==  spDisp)
			{
				url = VariantToString(*URL);
				if(url == CurUrl)
				{

				}
				else
				{
						m_url = url;		
						if(1 == m_ReadMode) OnReadAuthor();	
				}
			}		
}

  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. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值