类内实现MFC/VC shdocvw IWebbrowser2的OnDocumentComplete等事件响应

来源:互联网 发布:软件招标书范本 编辑:程序博客网 时间:2024/06/07 05:39
void CWebMethod::OnDocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT* URL)

经过多次测试,本函数并非主框架的完成最后一次调用.比如http://www.taobao.com如果有cookies被保存  主框架可能第二个就完成 然后这个函数还会被回调两次.

多数如果无cookies的时候,都是在最后一次或者倒数第二次的回调是关于主框架的.


直接贴代码

void CWebMethod::OnDocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT* URL){my_WebIsBusy = true;if(BT_ByDialog == m_BrowserType){if(m_StateEditCtr)ShowText(L"对话框",*m_StateEditCtr);IUnknown* pUnk; IDispatchPtr lpWBDisp;HRESULT hr; pUnk = my_pWebBrowserCtr->GetControlUnknown(); ASSERT(pUnk); hr = pUnk->QueryInterface(IID_IDispatch, (void**)&lpWBDisp); ASSERT(SUCCEEDED(hr)); if (pDisp == lpWBDisp ) { my_WebIsBusy=false;TRACE("加载完成\r\n"); if(m_StateEditCtr)ShowText(L"对话框 总完",*m_StateEditCtr);//EndModalLoop(0);}}if(BT_ByIE == m_BrowserType){if(m_StateEditCtr)ShowText(L"IE",*m_StateEditCtr);LPDISPATCH pDis;my_IEBrowser ->QueryInterface(IID_IDispatch, (void**)&pDis);if(pDis == pDisp){my_WebIsBusy=false;TRACE("加载完成\r\n"); if(m_StateEditCtr)ShowText(L"IE 总完",*m_StateEditCtr);}}}

其中 
my_pWebBrowserCtr
为MFC对话框内activex控件的变量的指针
my_IEBrowser是SHDOCVW的智能指针   shdocvw并不提供GetControlUnknown函数 而多数网上我们找的资料内 也只有这些说明 就是如同:
Unknown* pUnk; IDispatchPtr lpWBDisp;HRESULT hr; pUnk = my_pWebBrowserCtr->GetControlUnknown(); ASSERT(pUnk); hr = pUnk->QueryInterface(IID_IDispatch, (void**)&lpWBDisp); ASSERT(SUCCEEDED(hr)); if (pDisp == lpWBDisp ) //正式完成}
Shdocvw的代码或许更为简单一些 但是却不那么容易找到资料  比如找shdocvw的OnDocumentComplete 不易找到
以上只是说了一个方法  然而我更希望知道 OnDocumentComplete的可靠性 如前面我所说 程序判断到的正式完成 往往不是最后一次回调这个函数
OnDocumentComplete 
OnDocumentComplete