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

CHtmlView \\ WebBrowser2 如何真正知道DocumentComplete

[复制链接]
发表于 2003-12-22 17:00:37 | 显示全部楼层 |阅读模式
CHtmlView \ WebBrowser2 如何真正知道DocumentComplete6 J0 a$ A: T" E; B4 x3 X, ?8 A

# H2 R: n9 F- J- k  (下文针对CHtmlView,由于WebBrowser2与其类似不再累赘。)
" V" Z! y+ E2 z$ L/ f! N3 w9 V虽然CHtmlView提供了下面虚函数来得到文档解析完毕的事件。
5 }" k+ u5 U; M
* t# B% b6 z% yvirtual void OnDocumentComplete(( X7 |7 s9 g* `5 I( T, c! Y# u$ C
   LPCTSTR lpszURL
" i$ u6 A4 w- y' p);% G$ |% d4 \. x( j/ M% u- k4 c
但这个事件在网页存在 frame 的时候不再那么有效了,因为一旦某个frame激发了OnDownloadBegin,那么就会激发OnDocumentComplete,结果你会发现你的一个网页激发了多个OnDocumentComplete,而你也不知道哪个OnDocumentComplete真正能告诉你网页处理完毕了。% j, o/ y7 I. Q) ^5 u9 c0 e
1 e2 J- ^2 y. h; h% k0 i+ O- ]8 {

" S3 Y8 |$ j  T0 U: [4 y' I5 M
3 i3 n$ ]: R% A解决办法有三个:
1 {) V, d1 R/ M; o/ l0 O; U9 K& \0 s: O  u4 _
  方法一: 通过CHtmlView::OnProgressChange获取结束事件。 不理会OnDocumentComplete,
9 |$ S) H* U% Z& z- V" A
9 H. U7 l* x0 [在OnProgressChange中有两个参数:+ C, {8 b( W8 X0 n% J; C  [
virtual void OnProgressChange(
9 ~6 S' a) Y4 I" ^1 D   long nProgress,$ c$ D: l' A- a( W* A
   long nProgressMax 7 f4 ?8 O# O* F/ m
);1 ?' g6 Z# S" Y% b! i
  当第一个参数nProgress为-1时表示网页处理完毕。
! }* M) l) @/ o9 Z6 _& ?
% X, ]' S( S4 O& ]  另外两种方法可以在微软的知识库获得:5 k+ R# l) ]4 ~7 n
  http://support.microsoft.com/support/kb/articles/q180/3/66.asp) d6 L* g/ e/ V: G) d, A2 Z1 M. l  D
  HOWTO: Determine When a Page Is Done Loading in WebBrowser Control& K2 M  a3 b3 ?- G- \) `
  Q180366# m5 S; ~9 Y) |4 ~6 C' A6 z
  
" ]1 `1 r, k# O- T  对于其中的方法一有一点补充,在上文support的代码中其在通过调用GetControlUnknown()获得WebBrowser控件的IUnknown指针后调用Release将接口释放了。1 L) C; |# r+ \8 ~* p
这是千万不行的!这将导致你的WebBrowser控件无法清除,详细可以参见MSDN对CWnd::GetControlUnknown的介绍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-19 23:11 , Processed in 0.037363 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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