FAQ:如何访问WebBrowser的滚动条

——谨以怀念写邮件回答网友关于Internet Explorer编程问题的青春岁月

Posted by eagleboost on November 5, 2004

本文转载自我2004年在csdn发布的博客

我使用webbrowser控件,但是想用自己的滚动条,但不知如何得到webbrowser中滚动条的长度,怎么办?谢谢!!

2004-10-24

抱歉拖了很久才回复你的问题。

WebBrowser的滚动条不是一般的Windows滚动条,用GetScrollPosGetScrollInfoAPI是不能访问的。下面的代码演示了在VC中如何通过HTML接口来访问浏览器的滚动条。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
  HRESULT hr;    
  IDispatch *pDisp = GetHtmlDocument();    
  ASSERT(pDisp); //if NULL, we failed        

  // 获得Html文档指针    
  IHTMLDocument2 *pDocument = NULL;    
  hr = pDisp->QueryInterface( IID_IHTMLDocument2, (void**)&pDocument);    
  ASSERT(SUCCEEDED(hr));    
  ASSERT(pDocument);    

  IHTMLElement *pBody = NULL;    
  hr = pDocument->get_body( &pBody);    
  ASSERT(SUCCEEDED(hr));    
  ASSERT(pBody);    

  // 从body获得IHTMLElement2接口指针,用以访问滚动条    
  IHTMLElement2 *pElement = NULL;    
  hr = pBody->QueryInterface(IID_IHTMLElement2, (void**)&pElement);    
  ASSERT(SUCCEEDED(hr));    
  ASSERT(pElement);    

  // 向下滚动100个像素    
  pElement->put_scrollTop( 100);         

  // 获得文档真正的高度,不是可见区域的高度    
  long scroll_height;     
  pElement->get_scrollHeight( &scroll_height);    

  // 获得文档真正的宽度,不是可见区域的宽度    
  long scroll_width;     
  pElement->get_scrollWidth( &scroll_width);    

  // 获得滚动条位置,从顶端开始    
  long scroll_top;    
  pElement->get_scrollTop( &scroll_top);