本文转载自我2004年在csdn发布的博客
问
我使用webbrowser
控件,但是想用自己的滚动条,但不知如何得到webbrowser
中滚动条的长度,怎么办?谢谢!!
2004-10-24
答
抱歉拖了很久才回复你的问题。
WebBrowser
的滚动条不是一般的Windows
滚动条,用GetScrollPos
或GetScrollInfo
等API
是不能访问的。下面的代码演示了在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);