WebBrowser控件——设置滚动条位置
2007-12-26 21:08
465 查看
遇到一个问题:在用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控件——设置滚动条位置
- 设置TextBox控件的滚动条位置
- FLEX gumbo实例:检测FxTextArea控件滚动条的位置.
- 如何设置WebBrowser控件的默认内核
- MFC窗口最大化&移动窗口位置&获取控件句柄,设置控件大小
- datawindow.net数据窗口卡片设置滚动条位置
- [转:IE编程] 如何设置IE8的WebBrowser控件(MSHTML) 的渲染模式
- ios 通过设置UI控件的center和size来设置位置时需注意!
- 关于解决为什么设置控件居中等位置无反应的问题
- scrollview 滑动到指定位置,在java代码中设置控件自适应
- 设置Winform窗体滚动条位置
- FrameLayout中子控件位置设置疑惑
- 设置完在Canvas的位置后,控件HitTest不响应的问题
- Word控件Spire.Doc 教程:如何在C#中设置word 脚注的位置和数字格式
- GTK中设置滚动条到某一特定位置
- richedit设置滚动条的位置和更新内容
- QscrollBar 如何设置滚动条位置
- vb.net webbrowser控件 设置代理IP,webbrowser 代理IP