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

CHtmlView \\ WebBrowser2 如何真正知道DocumentComplete

[复制链接]
发表于 2003-12-22 17:00:37 | 显示全部楼层 |阅读模式
CHtmlView \ WebBrowser2 如何真正知道DocumentComplete
/ [8 J4 C  t; n0 a, [* r
+ |. f2 F2 F' o6 k! a! S8 }, S  (下文针对CHtmlView,由于WebBrowser2与其类似不再累赘。)
6 k( m6 H- p& p1 Y/ h  X+ h- ?; S虽然CHtmlView提供了下面虚函数来得到文档解析完毕的事件。6 }% e! V$ K& I
2 ]& Z3 q( D0 F" d' ~. B
virtual void OnDocumentComplete(3 a  C$ X$ g. _% N& _6 g
   LPCTSTR lpszURL 3 C6 P" E2 g1 m. n# t: u
);
* }' L/ b/ r3 b- P% H; C' m但这个事件在网页存在 frame 的时候不再那么有效了,因为一旦某个frame激发了OnDownloadBegin,那么就会激发OnDocumentComplete,结果你会发现你的一个网页激发了多个OnDocumentComplete,而你也不知道哪个OnDocumentComplete真正能告诉你网页处理完毕了。: S% C5 i5 G6 M* V; }. \- @' c0 Q5 L
3 A3 w" [" ]. r) b( T
% I0 L* y7 i* h( g5 a# v
. |: m7 \3 a* c, i) l6 @# v
解决办法有三个:
) r" F4 h: |, h, O4 ]& n6 _, M) P3 K" _  S/ ?
  方法一: 通过CHtmlView::OnProgressChange获取结束事件。 不理会OnDocumentComplete,
; I; V" S3 j9 d- s' Y/ X, A$ a% P+ N9 r) j$ E  {+ ^
在OnProgressChange中有两个参数:
* v% d( n$ {4 u# b. E( Ovirtual void OnProgressChange(
7 j; E3 W- a( h! r( @& z, x; R' p9 {   long nProgress,( p4 L( |! x8 F) Z5 T8 m! A- v
   long nProgressMax
5 A4 R1 y- Y, p# ^* }% e);
. w4 M9 r8 i: p- B% z  当第一个参数nProgress为-1时表示网页处理完毕。% W5 i8 i' ]) p/ X! M

. ^1 k+ J$ g" A/ u: `' Z. ~  另外两种方法可以在微软的知识库获得:
4 A" C+ R* @; \5 F  R3 _  http://support.microsoft.com/support/kb/articles/q180/3/66.asp$ M( X4 x( Y/ F% W( A/ I4 A) N' T
  HOWTO: Determine When a Page Is Done Loading in WebBrowser Control0 A/ `! x+ X1 v/ U
  Q180366
+ q" Y+ h& C' B  
4 V. }: V5 ]& n8 u% n  对于其中的方法一有一点补充,在上文support的代码中其在通过调用GetControlUnknown()获得WebBrowser控件的IUnknown指针后调用Release将接口释放了。; q. R( W4 M! n% {: ]' r  D
这是千万不行的!这将导致你的WebBrowser控件无法清除,详细可以参见MSDN对CWnd::GetControlUnknown的介绍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 01:39 , Processed in 0.034304 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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