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

CHtmlView \\ WebBrowser2 如何真正知道DocumentComplete

[复制链接]
发表于 2003-12-22 17:00:37 | 显示全部楼层 |阅读模式
CHtmlView \ WebBrowser2 如何真正知道DocumentComplete
( ~+ n% k/ I- X* b
9 @! y7 D# a( z( \  (下文针对CHtmlView,由于WebBrowser2与其类似不再累赘。)) F1 H; Q0 ]; b5 l/ B" L7 ^+ G
虽然CHtmlView提供了下面虚函数来得到文档解析完毕的事件。$ J  I4 [* A7 d; i& U2 w+ i
7 P% B6 o/ h  Z* X8 N1 o
virtual void OnDocumentComplete(
* |0 M5 L9 i3 U" H   LPCTSTR lpszURL ' S) b/ d3 U# z" S
);: |( v' v8 }0 i6 u! B6 a
但这个事件在网页存在 frame 的时候不再那么有效了,因为一旦某个frame激发了OnDownloadBegin,那么就会激发OnDocumentComplete,结果你会发现你的一个网页激发了多个OnDocumentComplete,而你也不知道哪个OnDocumentComplete真正能告诉你网页处理完毕了。
9 R2 F0 A5 C8 g6 c0 ~7 x9 c$ [0 ^7 A( x% @
6 U1 _" ^! [7 n5 L4 N3 c2 c3 L
4 v6 h- o* y+ t* h
解决办法有三个:! {2 E* c+ C& ~- v( ?

4 s" Q/ G/ e# M8 l: ^7 h$ _  方法一: 通过CHtmlView::OnProgressChange获取结束事件。 不理会OnDocumentComplete,
  |; ]. I! G& c" x2 v8 K/ {1 |% r6 i3 L: C( P
在OnProgressChange中有两个参数:
0 C: c6 R% A. d( Cvirtual void OnProgressChange(
, l& Z* m  P- N. L# i8 n: h6 I$ y8 \' d   long nProgress,$ P' `3 v: R0 i, \: R& U
   long nProgressMax 9 x( |$ y* q, {! w8 d  f
);( P: K6 ~; U; Z; V$ v
  当第一个参数nProgress为-1时表示网页处理完毕。0 V7 @, @7 _9 I, ~2 \
. s) Y* }# E3 {. `
  另外两种方法可以在微软的知识库获得:) \5 h7 ?$ x/ }; y+ Y
  http://support.microsoft.com/support/kb/articles/q180/3/66.asp) ^0 K7 ]' V& e  q' Y
  HOWTO: Determine When a Page Is Done Loading in WebBrowser Control. \+ k, ?2 X' |" y( t  l2 b
  Q180366: l' c  p/ }9 Y$ s
  2 f0 t4 X' q$ X6 j, A
  对于其中的方法一有一点补充,在上文support的代码中其在通过调用GetControlUnknown()获得WebBrowser控件的IUnknown指针后调用Release将接口释放了。2 U0 Q( }6 C- w7 a( |
这是千万不行的!这将导致你的WebBrowser控件无法清除,详细可以参见MSDN对CWnd::GetControlUnknown的介绍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 20:15 , Processed in 0.015783 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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