WebBrowser控件——设置滚动条位置
来源:互联网 发布:淘宝美工ps实例 编辑:程序博客网 时间:2024/06/08 02:22
遇到一个问题:在用WebBrowser控件打开网页后,让网页中的滚动条滚动到最底部。
在网上找到了方法:用DCOM组件技术,获取HTML接口指针。(前一阵做调用网页中的JavaScript函数也是采用这种技术)。代码如下:
boolput_scrollTop()
{
HRESULT hr;
CComPtr <IDispatch > spDisp;
IHTMLDocument2 *spDoc = NULL;
spDisp = m_objWebBrowser.GetDocument();
hr = spDisp->QueryInterface( IID_IHTMLDocument2, ( void** )&spDoc );
ASSERT( SUCCEEDED( hr ) );
IHTMLElement* pElement = NULL;
hr = spDoc->get_body( &pElement );
ASSERT( SUCCEEDED( hr ) );
IHTMLElement2* pElement2 = NULL;
hr = pElement->QueryInterface( IID_IHTMLElement2, ( void** )&pElement2 );
ASSERT( SUCCEEDED( hr ) );
// 获得网页中滚动条的全部高度
long scrollTop;
pElement2->get_scrollHeight( &scrollTop );
// 设置滚动条与顶端的偏移量
pElement2->put_scrollTop( scrollTop );
}
在实现的过程中又发现另外一个问题,对于有多个Frame的网页,上面的方法不好用,于是采用了下面的方法:
boolput_scrollTop( IDispatch* pDisp )
{
HRESULT hr;
IHTMLDocument2 *spDoc = NULL;
IHTMLElementCollection* pCollection;
hr = pDisp->QueryInterface( IID_IHTMLDocument2, (void**)&spDoc );
if ( FAILED( hr ) )
{
return false;
}
hr = spDoc->get_all(&pCollection);
if ( FAILED( hr ) )
{
return false;
}
long len;
hr = pCollection->get_length(&len);
if ( FAILED( hr ) )
{
return false;
}
// 遍历所有的元素
for (long l=0; l <len; l++)
{
VARIANT varIndex, var2;
VariantInit(&varIndex);
VariantInit(&var2);
varIndex.vt = VT_I4;
varIndex.lVal = l;
IDispatch* spDisp = NULL;
pCollection->item( varIndex, var2, &spDisp );
IHTMLElement* pElem;
spDisp->QueryInterface( IID_IHTMLElement, (LPVOID*) &pElem );
CComBSTR tagName;
pElem->get_tagName(&tagName);
CString str = tagName;
str.MakeUpper();
//if ( str.Compare( _T( "IFRAME" ) ) == 0 || str.Compare( _T( "FRAME" ) ) == 0 )
{
IHTMLElement2* pElement2 = NULL;
hr = pElem->QueryInterface( IID_IHTMLElement2, ( void** )&pElement2 );
if ( FAILED( hr ) )
{
return false;
}
long lScrollHeight;
hr = pElement2->get_scrollHeight( &lScrollHeight );
if ( FAILED( hr ) )
{
return false;
}
hr = pElement2->put_scrollTop( lScrollHeight );
if ( FAILED( hr ) )
{
return false;
}
pElement2->Release();
}
pElem->Release();
spDisp->Release();
}
pCollection->Release();
spDoc->Release();
return true;
}
- WebBrowser控件——设置滚动条位置
- WebBrowser控件——设置滚动条位置
- WebBrowser控件——设置滚动条位置
- 设置滚动条位置
- 滚动条位置设置
- WebBrowser中怎么获取滚动条位置
- WPF WebBrowser控件去除滚动条
- juqery 控件滚动条位置
- datagridview 滚动条位置设置
- C# webbrowser如何获取滚动条的位置?
- webbrowser滚动条控制
- webbrowser滚动条问题
- 去掉winform中webBrowser控件的滚动条
- webbrowser禁止右键菜单、滚动条,控件XP外观
- js 设置滚动条的位置
- ScrollView 设置滚动条的初始位置
- ScrollView 设置滚动条的位置
- Swing 设置JScrollPanel 滚动条位置
- 教程/ASP 十天学会ASP之第二天
- 等差数列
- 使用 WebSphere Portlet Factory 构建基于 Web2.0 的灵活 SOA 前端
- 在程序中注册ActiveX控件(.OCX)的函数
- 在程序中执行命令行参数
- WebBrowser控件——设置滚动条位置
- API HOOK 金山词霸取词功能原理
- WebBrowser控件——使用COM组件经验
- 盲山带给我们的
- MySQL优化手记
- 设计模式 - Provider Pattern(提供者模式)
- 默默的生活-----喝酒
- 选择你所需要的Ajax框架
- 设计模式 - Singleton Pattern(单例模式)