找回密码
 注册
搜索
查看: 5107|回复: 0

CHtmlView \\ WebBrowser2 如何真正知道DocumentComplete

[复制链接]
发表于 2003-12-22 17:00:37 | 显示全部楼层 |阅读模式
CHtmlView \ WebBrowser2 如何真正知道DocumentComplete
& Q5 Y5 G& E* P" k& R+ }% l
* D# h# R$ W. E; z9 R' `  (下文针对CHtmlView,由于WebBrowser2与其类似不再累赘。)8 V$ E' s) f$ c2 x1 F% f
虽然CHtmlView提供了下面虚函数来得到文档解析完毕的事件。
' E0 Z6 ?3 d4 L" d3 u+ ]; U) ]1 G8 X. B: ]
virtual void OnDocumentComplete(
1 O2 r) h+ c) y   LPCTSTR lpszURL
" Y# V& R! s$ H! y0 y; a);
4 ^: D1 h* G6 y但这个事件在网页存在 frame 的时候不再那么有效了,因为一旦某个frame激发了OnDownloadBegin,那么就会激发OnDocumentComplete,结果你会发现你的一个网页激发了多个OnDocumentComplete,而你也不知道哪个OnDocumentComplete真正能告诉你网页处理完毕了。
( x& X) H# |7 z* h3 p  F0 I
$ i) j) j6 O; G+ B
8 |- a* p+ N" z& c! k4 u9 n" a3 ^  n. V" @( s
解决办法有三个:
4 V2 w% H' Z, M( \6 w5 w5 }& z1 g- k
  方法一: 通过CHtmlView::OnProgressChange获取结束事件。 不理会OnDocumentComplete,
3 e) j7 m! b2 G0 [9 W& k7 e" d9 r. W. ?! @1 l% C, R+ `
在OnProgressChange中有两个参数:% X% m+ y% q: {1 P  C( x
virtual void OnProgressChange(
1 n. d" X! I' y& {) @9 B: v1 \+ C   long nProgress," m( W. }, [' r* h8 F& d* e& f
   long nProgressMax
6 o  @9 P) T+ |) J! p, C- b% j);3 j7 R+ b8 C( T& q3 T
  当第一个参数nProgress为-1时表示网页处理完毕。: p! t& ^: g+ l

* i5 \/ Y( U% |) K: W! h& v, c7 q  另外两种方法可以在微软的知识库获得:
0 u! h. w) O" L" f4 q4 }  http://support.microsoft.com/support/kb/articles/q180/3/66.asp
2 i3 ^6 _1 X' H  x- \  w( J  HOWTO: Determine When a Page Is Done Loading in WebBrowser Control
1 d# E( \2 \+ Y  Q180366
, ^9 k; @4 |! I6 ~  6 f3 d  U! q' x3 C4 p
  对于其中的方法一有一点补充,在上文support的代码中其在通过调用GetControlUnknown()获得WebBrowser控件的IUnknown指针后调用Release将接口释放了。. j2 C: P) j: G# M7 r
这是千万不行的!这将导致你的WebBrowser控件无法清除,详细可以参见MSDN对CWnd::GetControlUnknown的介绍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2026-5-4 21:03 , Processed in 0.019774 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表