找回密码
 注册
查看: 5240|回复: 0

CHtmlView \\ WebBrowser2 如何真正知道DocumentComplete

[复制链接]
发表于 2003-12-22 17:00:37 | 显示全部楼层 |阅读模式
CHtmlView \ WebBrowser2 如何真正知道DocumentComplete3 P) y, ?2 _0 e# v4 }4 g# \; R
# i3 H5 y) e9 B1 @1 v! f" k. O' b
  (下文针对CHtmlView,由于WebBrowser2与其类似不再累赘。)
3 U8 }* K' i5 b4 h- w, k虽然CHtmlView提供了下面虚函数来得到文档解析完毕的事件。
+ A4 _' n8 Z  J! L( M- v
5 r; r4 M2 y( F: L6 p3 w0 Cvirtual void OnDocumentComplete(3 |0 M! r& V, G5 c& X
   LPCTSTR lpszURL
8 z/ X) R3 Y  S: A; ~6 X& d);' _2 m, w$ }, z$ O
但这个事件在网页存在 frame 的时候不再那么有效了,因为一旦某个frame激发了OnDownloadBegin,那么就会激发OnDocumentComplete,结果你会发现你的一个网页激发了多个OnDocumentComplete,而你也不知道哪个OnDocumentComplete真正能告诉你网页处理完毕了。% _2 O9 `2 D% A) G7 c4 q' B% q
  v+ N" r& m$ u' J8 e2 c! u/ {( x

0 E" e& H, z2 X& W( [8 P  v. x# w& j. b' I
解决办法有三个:
+ L8 O5 p) Q! P$ P1 Z3 F
5 a' i! V' C, }2 i& N  方法一: 通过CHtmlView::OnProgressChange获取结束事件。 不理会OnDocumentComplete," N. _5 t9 t; U& a$ j8 [% {
1 f! ~# t, Z+ n- Y! ^3 D: z
在OnProgressChange中有两个参数:
5 a& c5 o& X8 E1 fvirtual void OnProgressChange() C8 ~/ F( C* k3 p6 @+ f! b* {6 J2 i4 k
   long nProgress,5 K" [/ h  }, [6 Y1 A/ w! R/ ?
   long nProgressMax 6 Y; k8 e2 a3 C  V2 ?* t
);/ \& m# Z  k) C- w
  当第一个参数nProgress为-1时表示网页处理完毕。
$ a9 c5 F; B9 }/ r/ Y, e7 ?6 K$ n7 O! l8 @( A8 |
  另外两种方法可以在微软的知识库获得:
. J. L( o; [* \/ `3 P3 @) h7 _  http://support.microsoft.com/support/kb/articles/q180/3/66.asp
! Q+ y: H: o+ J$ ~* o- J  HOWTO: Determine When a Page Is Done Loading in WebBrowser Control" W1 {. {  e8 l
  Q180366
+ k. Q# L$ B. p6 U  - E' W& t! g  |6 r- e) r- H
  对于其中的方法一有一点补充,在上文support的代码中其在通过调用GetControlUnknown()获得WebBrowser控件的IUnknown指针后调用Release将接口释放了。& v! ]3 \  m. N" t
这是千万不行的!这将导致你的WebBrowser控件无法清除,详细可以参见MSDN对CWnd::GetControlUnknown的介绍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-1 23:11 , Processed in 0.015961 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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