CHtmlView:OnDocumentComplete()为什么会被调用多次?该如何处理
CHtmlView::OnDocumentComplete()为什么会被调用多次?
按我理解,OnDownloadBegin()是打开一个网页的开始,OnDocumentComplete()是网页显示完毕后调用的事件。这些事件发生一次就行了。但我发现,在程序中,这两个函数都被调用了多次。
而我在OnDocumentComplete()中写了一些很耗时耗资源的代码,多次执行使得这些耗时的代码也被多次执行,影响了程序的效率。
想问一下,为什么这些事件会发生多次?
------解决方案--------------------
一般是调用一次的
但是如果这个页面有多个Frame的话
就会调用多次
你试一下打开baidu和sina
打开baidu是调用一次
打开sina是多次?
------解决方案--------------------
判断最后一次就是ondocumentcomplete的接点和你取得的节点一致的时候
说明是最后一次了。
void CTexDlg::OnDocumentComplete(LPDISPATCH lpDisp,
VARIANT FAR* URL)
{ IUnknown* pUnk;
LPDISPATCH lpWBDisp;
HRESULT hr;
pUnk = m_WebBrowser.GetControlUnknown();
ASSERT(pUnk);
hr = pUnk-> QueryInterface(IID_IDispatch, (void**)&lpWBDisp);
ASSERT(SUCCEEDED(hr));
if (lpDisp == lpWBDisp )
{
这里就说明完成了下载了
}
}
------解决方案--------------------
不用OnDocumentComplete
重载未公开函数DocumentComplete
按我理解,OnDownloadBegin()是打开一个网页的开始,OnDocumentComplete()是网页显示完毕后调用的事件。这些事件发生一次就行了。但我发现,在程序中,这两个函数都被调用了多次。
而我在OnDocumentComplete()中写了一些很耗时耗资源的代码,多次执行使得这些耗时的代码也被多次执行,影响了程序的效率。
想问一下,为什么这些事件会发生多次?
------解决方案--------------------
一般是调用一次的
但是如果这个页面有多个Frame的话
就会调用多次
你试一下打开baidu和sina
打开baidu是调用一次
打开sina是多次?
------解决方案--------------------
判断最后一次就是ondocumentcomplete的接点和你取得的节点一致的时候
说明是最后一次了。
void CTexDlg::OnDocumentComplete(LPDISPATCH lpDisp,
VARIANT FAR* URL)
{ IUnknown* pUnk;
LPDISPATCH lpWBDisp;
HRESULT hr;
pUnk = m_WebBrowser.GetControlUnknown();
ASSERT(pUnk);
hr = pUnk-> QueryInterface(IID_IDispatch, (void**)&lpWBDisp);
ASSERT(SUCCEEDED(hr));
if (lpDisp == lpWBDisp )
{
这里就说明完成了下载了
}
}
------解决方案--------------------
不用OnDocumentComplete
重载未公开函数DocumentComplete