之前的方法繁瑣,這裏抄了別人的方法,作了簡單修改。記錄下。函數
首先要在CHtmlView的子類中,重載以下函數:this
virtual void DocumentComplete(LPDISPATCH pDisp, VARIANT* URL); virtual void NavigateComplete2(LPDISPATCH pDisp, VARIANT* URL);
這2個函數,不是下面的函數:spa
virtual void OnDocumentComplete(VARIANT* URL); virtual void OnNavigateComplete2(VARIANT* URL);
在CHtmlView的子類中,添加一個成員,並在構造函數時初始化爲NULL:code
LPDISPATCH m_lpURLDisp;
在NavigateComplete2中記錄訪問的LPDISPATCH。blog
void CXxxView::NavigateComplete2(LPDISPATCH pDisp, VARIANT* URL) { if ( !m_lpURLDisp ) m_lpURLDisp = pDisp; /* 能夠不調用父類的方法, 建議調用。不調用Navigate相關的其餘函數可能受到印象 */ CHtmlView::NavigateComplete2(pDisp, URL); }
在DocumentComplete中判斷這個DISPATCH。class
void CXxxView::DocumentComplete(LPDISPATCH pDisp, VARIANT* URL) { if ( m_lpURLDisp && m_lpURLDisp == pDisp ) { CUtils::DbgView(TEXT("真在完成: %s\n"), (LPCTSTR)(_bstr_t)URL); } /* 不調用父類的方法, 會致使OnDocumentComplete不會觸發 */ CHtmlView::DocumentComplete(pDisp, URL); }
在訪問URL前,重置m_lpWBDisp成員爲NULL。構造函數
void CXxxView::_FreeDISP() { if ( m_lpURLDisp ) m_lpURLDisp->Release(); m_lpURLDisp = NULL; } void CXxxView::Browser(LPCTSTR Url) { this->_FreeDISP(); DWORD dwFlags = navNoHistory; CHtmlView::Navigate2(Url, dwFlags, NULL); }