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

CHtmlView \\ WebBrowser2 如何真正知道DocumentComplete

[复制链接]
发表于 2003-12-22 17:00:37 | 显示全部楼层 |阅读模式
CHtmlView \ WebBrowser2 如何真正知道DocumentComplete
6 Y/ s* L0 q% U2 d; k9 r! h/ d3 h( }: h3 l5 W  O1 y: N6 g
  (下文针对CHtmlView,由于WebBrowser2与其类似不再累赘。)% z% _% o' Z9 V0 q5 z
虽然CHtmlView提供了下面虚函数来得到文档解析完毕的事件。9 u! K3 P( Q  I' {' \

& L! a0 v: k5 ^$ s# ?, Wvirtual void OnDocumentComplete(
) S+ C0 I- J$ S: l   LPCTSTR lpszURL
; |7 k7 s+ n) Q- O6 o);: m4 A& {  G* n" F! M
但这个事件在网页存在 frame 的时候不再那么有效了,因为一旦某个frame激发了OnDownloadBegin,那么就会激发OnDocumentComplete,结果你会发现你的一个网页激发了多个OnDocumentComplete,而你也不知道哪个OnDocumentComplete真正能告诉你网页处理完毕了。
5 P& o0 C9 D% t/ R0 w$ s4 j$ V$ H$ O) L  E  j0 B8 Z; C0 y: G$ V; X! t1 k
# h# J1 J7 ]0 P" ]

1 H1 H, c. @# `1 Y' k$ l, R解决办法有三个:
3 y1 c/ c3 K1 ~. Z/ H+ i
% T$ E  h! u" J; ]1 v6 o9 P  方法一: 通过CHtmlView::OnProgressChange获取结束事件。 不理会OnDocumentComplete,# U# t& a6 ^7 Q$ ^4 o
) }  v! M$ w& C/ H, T8 L- Q
在OnProgressChange中有两个参数:
* z* k2 x7 }8 H- C& Zvirtual void OnProgressChange(
8 t9 c, q' V8 T: `6 X0 N# [   long nProgress,4 J! J/ T+ Z& x1 e7 x" Z
   long nProgressMax ' q2 |7 C4 `$ _$ Y$ I: o
);; n1 N6 E9 K/ d/ y9 ~+ i$ a) m" X
  当第一个参数nProgress为-1时表示网页处理完毕。
/ P' Q# p7 T6 H8 R6 a! v
8 E. d6 F/ f$ t" d; P$ s1 [  k  另外两种方法可以在微软的知识库获得:
0 F& V" U" `: o; A. y1 ^  http://support.microsoft.com/support/kb/articles/q180/3/66.asp
- t& ]8 N" w8 z1 K( d- y1 h  HOWTO: Determine When a Page Is Done Loading in WebBrowser Control
6 v5 l9 J# _6 H& |  Q180366
$ t, U2 Z; {" D/ s. O- T7 `  
3 u; g  _7 ]1 R6 I! {& d- ?  对于其中的方法一有一点补充,在上文support的代码中其在通过调用GetControlUnknown()获得WebBrowser控件的IUnknown指针后调用Release将接口释放了。
% |% \1 Z! L" ]- @- \# I4 E 这是千万不行的!这将导致你的WebBrowser控件无法清除,详细可以参见MSDN对CWnd::GetControlUnknown的介绍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 10:54 , Processed in 0.017925 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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