衆所周知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, 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 plain copy print ?
- 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();
}
}
}
[cpp] view plain copy print ?
- 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;
- }
- // m_pBrowserApp->Release();
- }