VC中调用什么函数判断网页下载完成了,能给出代码的更好 在自已的程序中加入了WEB控件,调用Navigate2后用什么函数判断网页下载完成,高手快来呀!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 handle DWebBrowserEvent2::DocumentCompletesee alsohttp://blog.csdn.net/jiangsheng/archive/2003/11/09/3790.aspx How To Determine When a Page Is Done Loading in WebBrowser Controlhttp://support.microsoft.com/kb/180366/EN-US/ 看不明白:请问高手void myObject::DocumentComplete(LPDISPATCH pDisp, VARIANT* URL){ HRESULT hr; IUnknown* pUnkBrowser = NULL; IUnknown* pUnkDisp = NULL; IStream* pStream = NULL; HGLOBAL hHTMLText; static TCHAR szHTMLText[] = "<html><h1>流测试</h1><p>本HTML内容已经从流中加载。</html>"; // 这个 DocumentComplete 事件是否是顶层框架窗口的? // 检查 COM 标识: 比较IUnknown 接口指针. hr = m_pBrowser->QueryInterface( IID_IUnknown, (void**)&pUnkBrowser ); if ( SUCCEEDED(hr) ) { hr = pDisp->QueryInterface( IID_IUnknown, (void**)&pUnkDisp ); if ( SUCCEEDED(hr) ) { if ( pUnkBrowser == pUnkDisp ) { // 这是顶层框架窗口的DocumentComplete 事件 —— 页面 载入完成! // 建立一个包含HTML内容的流 // 另外, 这个流可以是被传递过来的(而不是被创建的) size_t = cchLength; // TODO: 安全地判断 szHTMLText的长度,单位是TCHAR. hHTMLText = GlobalAlloc( GPTR, cchLength+1 ); if ( hHTMLText ) { size_t cchMax = 256; StringCchCopy((TCHAR*)hHTMLText, cchMax + 1, szHTMLText); // TODO: 在这里加入错误处理代码。 hr = CreateStreamOnHGlobal( hHTMLText, TRUE, &pStream ); if ( SUCCEEDED(hr) ) { // 调用辅助函数让网络浏览器加载流。 LoadWebBrowserFromStream( m_pBrowser, pStream ); pStream->Release(); } GlobalFree( hHTMLText ); } } pUnkDisp->Release(); } pUnkBrowser->Release(); }}在这个函数中没有引用DWebBrowserEvents2::DocumentComplete 事件呀而它只是作了一个相同的函数我的程序中需要如下调用 HRESULT hr2; IUnknown* pUnkBrowser = NULL; IUnknown* pUnkDisp = NULL; LPDISPATCH pDisp; DWebBrowserEvents2::DocumentComplete(pDisp,_bstr_t("http://.....")); hr2 = m_web.QueryInterface( IID_IUnknown, (void**)&pUnkBrowser ); if ( SUCCEEDED(hr2) ) { hr2 = pDisp->QueryInterface( IID_IUnknown, (void**)&pUnkDisp ); if ( SUCCEEDED(hr2) ) { if ( pUnkBrowser == pUnkDisp ) { ........................ } } }可是不行我用的是WEB控件(也就是CWebBrowser2类)高手请问用CWebBrowser2有没有判断网页下载完全的函数,应该怎么用? 把CHTMLView源代码里面的Event处理代码拿出来就可以 现在还有一个问题是:我在同一个函数内用m_web.Navigate("....", &vtEmpty, &vtEmpty, &vtEmpty, &vtEmpty);网页后用DocumentComplete判断网页是否下载完成可是总是不成功是否需要进行延时判断因该怎么做呀!!!! GZ我也被这个问题困扰了一段时间。目前,我用的办法是在 readyState 变为 interactive 后,延时一段时间,然后就判断为载入完成。 你可以在函数中再启动一个消息循环,不过不推荐这么做。推荐的方法还是把代码放在DocumentComplete的处理里面。 可是,某些情况下DocumentComplete无法触发,状态栏显示正在下载网页,也没法手动停止。 那你可以在beforenavigate2事件中设置一个timer,在一段时间内没有documentcomplete就认为浏览失败。 读到数据没有时,while(true){} 在beforenavigate2事件中设置一个timer,在一段时间内没有documentcomplete就认为浏览失败。这是最好的解决方法:) 还有一个方法是在documentcomplete的时候判断document的title是不是page not found或者找不到服务器之类,但是服务器可以自定义错误页面的,这个方法不太保险。 谢谢 jiangsheng(蒋晟.MSMVP2004Jan) 的帮助问题已解决 获取一个网页的alexa排名和Google的pagerank MFC CEdit 改变大小写 onsize 中获得控件的句柄?? 空中SOS,望达人相助!!!! socket 的一个小问题,请大家帮忙指点... 急. 关于调试dll的问题 这是给tyzyx测试用的。 求vc中的类. 【求助】小弟新手,正拿MFC写MySQL数据库密码重置工具,但卡住了,不知道怎么写了,100块钱求助! 请教高手,怎样将一块硬盘虚拟成内存,并实现内存碎片的整理,某个学校的题目,帮别人问的 ?????????关于自绘listBox的MeasureItem问题(急!!!!) socket的Create问题
see also
http://blog.csdn.net/jiangsheng/archive/2003/11/09/3790.aspx
void myObject::DocumentComplete(LPDISPATCH pDisp, VARIANT* URL)
{
HRESULT hr;
IUnknown* pUnkBrowser = NULL;
IUnknown* pUnkDisp = NULL;
IStream* pStream = NULL;
HGLOBAL hHTMLText;
static TCHAR szHTMLText[] = "<html><h1>流测试</h1><p>本HTML内容已经从流中加载。</html>";
// 这个 DocumentComplete 事件是否是顶层框架窗口的?
// 检查 COM 标识: 比较IUnknown 接口指针.
hr = m_pBrowser->QueryInterface( IID_IUnknown, (void**)&pUnkBrowser );
if ( SUCCEEDED(hr) )
{
hr = pDisp->QueryInterface( IID_IUnknown, (void**)&pUnkDisp );
if ( SUCCEEDED(hr) )
{
if ( pUnkBrowser == pUnkDisp )
{ // 这是顶层框架窗口的DocumentComplete 事件 —— 页面 载入完成!
// 建立一个包含HTML内容的流
// 另外, 这个流可以是被传递过来的(而不是被创建的)
size_t = cchLength;
// TODO: 安全地判断 szHTMLText的长度,单位是TCHAR.
hHTMLText = GlobalAlloc( GPTR, cchLength+1 );
if ( hHTMLText )
{
size_t cchMax = 256;
StringCchCopy((TCHAR*)hHTMLText, cchMax + 1, szHTMLText);
// TODO: 在这里加入错误处理代码。
hr = CreateStreamOnHGlobal( hHTMLText, TRUE, &pStream );
if ( SUCCEEDED(hr) )
{
// 调用辅助函数让网络浏览器加载流。
LoadWebBrowserFromStream( m_pBrowser, pStream );
pStream->Release();
}
GlobalFree( hHTMLText );
}
}
pUnkDisp->Release();
}
pUnkBrowser->Release();
}
}
在这个函数中没有引用DWebBrowserEvents2::DocumentComplete 事件呀而它只是作了一个相同的函数我的程序中需要如下调用
HRESULT hr2;
IUnknown* pUnkBrowser = NULL;
IUnknown* pUnkDisp = NULL;
LPDISPATCH pDisp;
DWebBrowserEvents2::DocumentComplete(pDisp,_bstr_t("http://....."));
hr2 = m_web.QueryInterface( IID_IUnknown, (void**)&pUnkBrowser );
if ( SUCCEEDED(hr2) )
{
hr2 = pDisp->QueryInterface( IID_IUnknown, (void**)&pUnkDisp );
if ( SUCCEEDED(hr2) )
{
if ( pUnkBrowser == pUnkDisp )
{ ........................
}
}
}
可是不行我用的是WEB控件(也就是CWebBrowser2类)高手请问用CWebBrowser2有没有判断网页下载完全的函数,应该怎么用?
while(true)
{}
这是最好的解决方法:)