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

CHtmlView \\ WebBrowser2 如何真正知道DocumentComplete

[复制链接]
发表于 2003-12-22 17:00:37 | 显示全部楼层 |阅读模式
CHtmlView \ WebBrowser2 如何真正知道DocumentComplete. B0 [0 w5 W' }/ Y
+ o' \: @( D# ^# j) ?4 Z! B5 Q
  (下文针对CHtmlView,由于WebBrowser2与其类似不再累赘。)( ^( B, |3 G% x7 I7 \
虽然CHtmlView提供了下面虚函数来得到文档解析完毕的事件。% T& d: E9 b9 e+ v5 h$ @' \# \7 {, H
" W) t: k! s# A  U* O% A8 u
virtual void OnDocumentComplete(
" l1 n! y4 y  Y: A* v( z* f- \& O   LPCTSTR lpszURL , n) ?6 a" r( [5 p1 |. s
);
0 m2 m8 Y) H9 D' q但这个事件在网页存在 frame 的时候不再那么有效了,因为一旦某个frame激发了OnDownloadBegin,那么就会激发OnDocumentComplete,结果你会发现你的一个网页激发了多个OnDocumentComplete,而你也不知道哪个OnDocumentComplete真正能告诉你网页处理完毕了。0 W" t6 ^. i7 I6 z
* \. k" w7 ~3 y7 ^* t3 J  m

. c$ q5 G( ~  J9 s7 W' H) P4 L
2 i* @' X( A7 ^  ^解决办法有三个:
' y% ?/ A8 @$ b9 u9 A1 Y
7 E5 G. M4 p; c8 O5 h  方法一: 通过CHtmlView::OnProgressChange获取结束事件。 不理会OnDocumentComplete,
. ^" C, _5 w+ N
" K" t# u$ P( C  U& E0 n' s$ i' Q在OnProgressChange中有两个参数:4 b2 t. Z  [- Z2 L8 }2 i
virtual void OnProgressChange(
$ L) Y' z) i! M: `1 o" b2 u   long nProgress,1 R3 D6 f- b7 X# ?
   long nProgressMax 0 S3 _, d( f0 Z5 o5 L, x
);0 W; E. J5 G" L' t9 J
  当第一个参数nProgress为-1时表示网页处理完毕。
+ V; ]* \7 V7 k7 B$ F5 \$ Y* ]: r. q3 P9 d& m) Z4 J9 U
  另外两种方法可以在微软的知识库获得:  e1 ~5 s! a( p& z  k; T) U
  http://support.microsoft.com/support/kb/articles/q180/3/66.asp* E8 w2 T2 i- E9 u
  HOWTO: Determine When a Page Is Done Loading in WebBrowser Control+ z6 W. C# v! Y
  Q180366- z. x( r: K, N, |
  
: A. R1 k9 T9 x2 ?3 x) H  对于其中的方法一有一点补充,在上文support的代码中其在通过调用GetControlUnknown()获得WebBrowser控件的IUnknown指针后调用Release将接口释放了。. H* r; g0 u' y+ y( I3 T
这是千万不行的!这将导致你的WebBrowser控件无法清除,详细可以参见MSDN对CWnd::GetControlUnknown的介绍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-14 02:19 , Processed in 0.020743 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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