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

CHtmlView \\ WebBrowser2 如何真正知道DocumentComplete

[复制链接]
发表于 2003-12-22 17:00:37 | 显示全部楼层 |阅读模式
CHtmlView \ WebBrowser2 如何真正知道DocumentComplete
' [9 q6 ^4 S3 T: d8 V/ U0 Q
- h9 l5 Z2 {1 p6 R8 P+ b3 h  (下文针对CHtmlView,由于WebBrowser2与其类似不再累赘。)
/ A" s2 W* ?8 D7 l# a# o' F虽然CHtmlView提供了下面虚函数来得到文档解析完毕的事件。' n& M" X7 G! ]; ]( }; _; x
3 V8 }! m8 Y. P' d" M. H$ F/ p
virtual void OnDocumentComplete(- i7 i  ^# [9 n" @( n' N; O0 O
   LPCTSTR lpszURL
% W5 \- M( M4 f% ~5 X! _; x);
) T3 I- }  m5 W但这个事件在网页存在 frame 的时候不再那么有效了,因为一旦某个frame激发了OnDownloadBegin,那么就会激发OnDocumentComplete,结果你会发现你的一个网页激发了多个OnDocumentComplete,而你也不知道哪个OnDocumentComplete真正能告诉你网页处理完毕了。8 E, o+ z# d5 ^2 y! F, C6 v
# s& V/ p, S9 l" ~! J
( \; k/ z$ C: E
/ p( ]( N, M. [% ]
解决办法有三个:
- N8 E/ \( q1 A, y0 s2 x/ O9 f0 }# I1 S- c! Y" O: `
  方法一: 通过CHtmlView::OnProgressChange获取结束事件。 不理会OnDocumentComplete,8 C5 l+ |$ C- i! [) w+ n) i4 T

7 K# P. J' L: U% N, }在OnProgressChange中有两个参数:+ b1 s' o6 _4 ^
virtual void OnProgressChange(
8 [# q8 d0 N7 D, \+ i% o   long nProgress,
/ ^- z4 [+ Z+ y   long nProgressMax " w6 n2 ]" P7 S# }; |3 F# I9 i: Z
);; ~  b  @- r/ s6 Y0 |
  当第一个参数nProgress为-1时表示网页处理完毕。5 v+ u) E  ~9 l, S( s/ F
% H8 @7 @+ k. W' [5 F' T
  另外两种方法可以在微软的知识库获得:
: S* @/ _" _7 ~6 N3 z: ^) r  http://support.microsoft.com/support/kb/articles/q180/3/66.asp. O! Y& K  P* X3 w" H- v
  HOWTO: Determine When a Page Is Done Loading in WebBrowser Control; u; C2 x$ r, {" y, {
  Q180366
5 X. i% u  [; B2 q; _  
: p0 \4 `7 R! n' k; x  对于其中的方法一有一点补充,在上文support的代码中其在通过调用GetControlUnknown()获得WebBrowser控件的IUnknown指针后调用Release将接口释放了。
  A* \$ G) z0 e2 {+ X 这是千万不行的!这将导致你的WebBrowser控件无法清除,详细可以参见MSDN对CWnd::GetControlUnknown的介绍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 22:34 , Processed in 0.018741 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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