众所周知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文件天津爱函数实体
- 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();
- }
- }
- }
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();
}
}
}
- void CTyreaderView::DocumentComplete(LPDISPATCH pDisp, VARIANT* URL)
- {
- 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 ?
- if(pDisp == spDisp)
- {
- url = VariantToString(*URL);
- m_IsDown = 1;/*下载完成 added by songbin 2011-8-24*/
- }
- // m_pBrowserApp->Release();
- }