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

CHtmlView \\ WebBrowser2 如何真正知道DocumentComplete

[复制链接]
发表于 2003-12-22 17:00:37 | 显示全部楼层 |阅读模式
CHtmlView \ WebBrowser2 如何真正知道DocumentComplete
& m: _$ W3 {- v' _, M8 i% o
  ]( z. D9 a, s* W; u  (下文针对CHtmlView,由于WebBrowser2与其类似不再累赘。)8 O, s% ?; f" |7 a! ?! a
虽然CHtmlView提供了下面虚函数来得到文档解析完毕的事件。
4 j) m' A, w7 O5 Y& P4 W" B/ O8 ?7 X2 i5 K9 G; s3 `) Q
virtual void OnDocumentComplete(
0 Z( {+ [, O9 S8 h- v, K1 u. L   LPCTSTR lpszURL
/ K9 n1 W/ J' h8 v);7 \4 O  m) a3 N; Q
但这个事件在网页存在 frame 的时候不再那么有效了,因为一旦某个frame激发了OnDownloadBegin,那么就会激发OnDocumentComplete,结果你会发现你的一个网页激发了多个OnDocumentComplete,而你也不知道哪个OnDocumentComplete真正能告诉你网页处理完毕了。
% s0 ~$ v/ ?, Y. a6 `2 }' F/ c5 t$ A/ q1 \+ Y
/ ^* C. g0 Q7 c9 _, V* T+ E" R" y
( z  n( Q0 o- {, d; z4 D1 P
解决办法有三个:
0 [  v+ C$ w, L0 p9 R  q, s2 W
% A8 f- l# t2 X- G+ J) Y5 P  方法一: 通过CHtmlView::OnProgressChange获取结束事件。 不理会OnDocumentComplete,
# k. \! Y* Z. j/ `. _; d5 p  \8 P3 z6 \
在OnProgressChange中有两个参数:
- e: `, f% }9 {. L7 qvirtual void OnProgressChange(
( s! J" L8 B6 X" U. D4 k) i   long nProgress,
3 i% E# E; E3 l# Z* S6 u) v   long nProgressMax , ^$ Z- q5 G2 g
);
* O- d$ A6 W4 W! F- G  当第一个参数nProgress为-1时表示网页处理完毕。
2 H9 i) P$ E* c& w  R9 _
0 t6 Z6 J/ H6 s5 P1 `  E  另外两种方法可以在微软的知识库获得:
/ t% j; J. T1 o* K% W; d  http://support.microsoft.com/support/kb/articles/q180/3/66.asp( ^$ [; m7 X0 Z- m/ f# I
  HOWTO: Determine When a Page Is Done Loading in WebBrowser Control/ J1 [; R6 \% `: D6 q0 \
  Q180366! ?+ ~  g; Y, H" z" h+ t
  * z( y1 B( T) k6 A8 I( L7 j  Y
  对于其中的方法一有一点补充,在上文support的代码中其在通过调用GetControlUnknown()获得WebBrowser控件的IUnknown指针后调用Release将接口释放了。
; d3 ^: Q8 K! ^6 w- _8 r 这是千万不行的!这将导致你的WebBrowser控件无法清除,详细可以参见MSDN对CWnd::GetControlUnknown的介绍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 06:57 , Processed in 0.020667 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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