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

CHtmlView \\ WebBrowser2 如何真正知道DocumentComplete

[复制链接]
发表于 2003-12-22 17:00:37 | 显示全部楼层 |阅读模式
CHtmlView \ WebBrowser2 如何真正知道DocumentComplete; ?0 W, y9 o: P) Q) z, A

! q" Y* X! s' ?- d. w3 }  (下文针对CHtmlView,由于WebBrowser2与其类似不再累赘。)
' V' ]/ n1 {( ]4 A# K# \虽然CHtmlView提供了下面虚函数来得到文档解析完毕的事件。
/ H2 b3 _5 ~2 Z9 P" s9 x3 D5 c' O" c( b" O, A3 d7 ]* I% A" H7 e
virtual void OnDocumentComplete($ ^' h5 o4 l& u0 G
   LPCTSTR lpszURL 1 ?# z, D$ z5 U' r
);
3 P4 ?% k* Y1 ^- \+ y6 P但这个事件在网页存在 frame 的时候不再那么有效了,因为一旦某个frame激发了OnDownloadBegin,那么就会激发OnDocumentComplete,结果你会发现你的一个网页激发了多个OnDocumentComplete,而你也不知道哪个OnDocumentComplete真正能告诉你网页处理完毕了。3 s. c1 _' @+ O$ ^1 U
' D% z% x# b0 `; j9 ?
( u/ A4 ]& ^% K& ]5 S" X

. p; f0 X& h; L. @) ~解决办法有三个:* j! x4 @5 n5 d2 h, O

* u$ h4 q) E+ N# D, w( X$ A# m  方法一: 通过CHtmlView::OnProgressChange获取结束事件。 不理会OnDocumentComplete,% K8 }0 G( ?* e- F7 }

+ t  z: o6 x0 M0 v/ n; [在OnProgressChange中有两个参数:
  F# ]/ M; I1 I1 X: E& s2 E$ D! Xvirtual void OnProgressChange(
3 `* H! t: G% Q! h4 O   long nProgress,9 m- f$ U. H; Q0 Y% s* ?
   long nProgressMax 6 X; t. @+ {' m4 ]6 U6 a$ q7 l
);2 u5 U# p% [5 n* t6 g
  当第一个参数nProgress为-1时表示网页处理完毕。) m% Z5 s$ x, P; D% w
: q' ]* J' z0 |1 {
  另外两种方法可以在微软的知识库获得:% ^) e. _3 k! Y" c9 ^
  http://support.microsoft.com/support/kb/articles/q180/3/66.asp0 C+ M) ], `( {0 q. a
  HOWTO: Determine When a Page Is Done Loading in WebBrowser Control1 V1 _4 @0 w& n- C
  Q180366
  ?+ y/ d3 R; v3 I% c  7 {, ]) _0 P  A, k5 {3 D8 O( a
  对于其中的方法一有一点补充,在上文support的代码中其在通过调用GetControlUnknown()获得WebBrowser控件的IUnknown指针后调用Release将接口释放了。7 R9 }; \# d4 q5 Q3 r; ?+ m  o& l
这是千万不行的!这将导致你的WebBrowser控件无法清除,详细可以参见MSDN对CWnd::GetControlUnknown的介绍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 08:48 , Processed in 0.034457 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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