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

CHtmlView \\ WebBrowser2 如何真正知道DocumentComplete

[复制链接]
发表于 2003-12-22 17:00:37 | 显示全部楼层 |阅读模式
CHtmlView \ WebBrowser2 如何真正知道DocumentComplete, `0 ]; U+ a. W
+ `/ O2 r6 W. x" I  Y9 g
  (下文针对CHtmlView,由于WebBrowser2与其类似不再累赘。)0 j( ?8 V' K" L. H. A% W
虽然CHtmlView提供了下面虚函数来得到文档解析完毕的事件。1 i" b+ H2 J0 I3 q
  z2 W6 [0 l" y& I  \" ^: T7 V4 U1 Q
virtual void OnDocumentComplete(
, m, d3 ]1 U1 O   LPCTSTR lpszURL
% u. w+ {& j7 ^);8 i/ e+ \) D& W, }! C: W
但这个事件在网页存在 frame 的时候不再那么有效了,因为一旦某个frame激发了OnDownloadBegin,那么就会激发OnDocumentComplete,结果你会发现你的一个网页激发了多个OnDocumentComplete,而你也不知道哪个OnDocumentComplete真正能告诉你网页处理完毕了。
2 }/ @1 L5 u8 Z! J4 k; U, Z* i- X: }
( `+ [) K. Y' E2 d

3 e. q# l; f9 d' z9 D解决办法有三个:
( O" v& n5 H; U% [, c! a. V( [7 s) [( w3 ?& U- A4 n
  方法一: 通过CHtmlView::OnProgressChange获取结束事件。 不理会OnDocumentComplete,
& v3 u; Z5 T. {+ u: L
1 m4 ]: X4 P2 y" U5 S& u在OnProgressChange中有两个参数:
1 |  X$ r7 Y) X3 b; @. Mvirtual void OnProgressChange(
+ p  K) l8 J: h5 }% B: C. D   long nProgress,
3 P& Z5 N5 l* Y1 U% z   long nProgressMax * `; s' \/ i; K( o7 L# k5 X
);/ \. X& X3 e6 v( p9 T
  当第一个参数nProgress为-1时表示网页处理完毕。9 j: {5 H* m2 u5 h  z

+ w* n+ Y. r# A7 p. g) b  另外两种方法可以在微软的知识库获得:2 V$ u, }) M  F; H* }
  http://support.microsoft.com/support/kb/articles/q180/3/66.asp. j: q$ d' D9 {+ u# I. R
  HOWTO: Determine When a Page Is Done Loading in WebBrowser Control
& i& W" S4 s% u- C7 o: x  Q180366, Z7 M4 ?+ }2 o7 E
  
+ ]! ~- f' j/ p5 D  对于其中的方法一有一点补充,在上文support的代码中其在通过调用GetControlUnknown()获得WebBrowser控件的IUnknown指针后调用Release将接口释放了。$ c" P! v4 m/ i9 a3 K- c$ k9 h( U( [
这是千万不行的!这将导致你的WebBrowser控件无法清除,详细可以参见MSDN对CWnd::GetControlUnknown的介绍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-29 22:23 , Processed in 0.019180 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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