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

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 ) 
		{ 
			//正式完成
		}		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 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Afterwards_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值