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

CHtmlView \\ WebBrowser2 如何真正知道DocumentComplete

[复制链接]
发表于 2003-12-22 17:00:37 | 显示全部楼层 |阅读模式
CHtmlView \ WebBrowser2 如何真正知道DocumentComplete
' v5 T+ w7 I' |7 ~* ^3 g; z+ j* e
  (下文针对CHtmlView,由于WebBrowser2与其类似不再累赘。)
% x+ K* Z/ O0 y2 s( a虽然CHtmlView提供了下面虚函数来得到文档解析完毕的事件。+ q2 R! h( b3 I; D2 }2 p% a  S8 g
0 E2 m0 V2 g% p9 f: T4 V6 |1 [
virtual void OnDocumentComplete(  \8 \2 t9 B9 Q
   LPCTSTR lpszURL ) y, c1 f: a6 Z: `, C4 g  z: X: A
);
( V3 W- z' n) r: T' k9 m: E但这个事件在网页存在 frame 的时候不再那么有效了,因为一旦某个frame激发了OnDownloadBegin,那么就会激发OnDocumentComplete,结果你会发现你的一个网页激发了多个OnDocumentComplete,而你也不知道哪个OnDocumentComplete真正能告诉你网页处理完毕了。
: P' E# ^: ?: j* ?% H
; D4 O: R, v; l$ h* L" ~+ c 5 B# ]7 [* E9 c

* I" d. d" L# f( s! j解决办法有三个:
; F5 `* F6 \" P+ z3 {, n) b9 _( a$ l( f* |% X
  方法一: 通过CHtmlView::OnProgressChange获取结束事件。 不理会OnDocumentComplete," V4 \/ y2 w- f
9 \; P; V: l# f  p. o: v% i
在OnProgressChange中有两个参数:
( B: k* ~: A' P# I) u3 _virtual void OnProgressChange(
* P& D5 G7 X0 E  b   long nProgress,1 G; G8 P# Y) o4 c
   long nProgressMax
3 L9 R2 d' o* s);
1 C5 {! u4 m7 Y: {! o* U) m2 ]: w2 l7 A  当第一个参数nProgress为-1时表示网页处理完毕。
- i: Z' G. B7 b0 q+ O% ]7 t( C" w1 D' E3 ?6 G7 e5 S, z
  另外两种方法可以在微软的知识库获得:
4 v4 R1 Q7 [$ w5 v( f0 {) G  http://support.microsoft.com/support/kb/articles/q180/3/66.asp
& t# w( N2 M3 Q/ A  HOWTO: Determine When a Page Is Done Loading in WebBrowser Control; @9 D7 w" P: f9 S* c% F( F4 f' F
  Q180366
2 J/ r5 M+ X% _) L  
) b; Q" q3 K9 n& Y) x  对于其中的方法一有一点补充,在上文support的代码中其在通过调用GetControlUnknown()获得WebBrowser控件的IUnknown指针后调用Release将接口释放了。
& S4 G' u! H+ W' e& M 这是千万不行的!这将导致你的WebBrowser控件无法清除,详细可以参见MSDN对CWnd::GetControlUnknown的介绍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 06:28 , Processed in 0.033417 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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