VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 924|回复: 7

请问怎样捕捉WebBrowser页面的滚动条滚动事件?(急!)

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-2-4 12:30:01 | 显示全部楼层 |阅读模式
请问怎样捕捉WebBrowser页面的滚动条滚动事件?(急!)
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-3-24 08:00:01 | 显示全部楼层
"我在OnDocumentComplete 中用 AfxConnectionAdvise 的方法挂接上了IHTMLWindow2 并且得到了DISPID_HTMLWINDOWEVENTS2_ONSCROLL 的事件函数。但是这个函数只能得到滚动事件的消息,而没办法得到滚动的方向和距离。"

我的情况刚好跟他相反,能得到滚动的方向和距离,不知道怎么得到DISPID_HTMLWINDOWEVENTS2_ONSCROLL 的事件函数,望指点
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-3-27 12:00:02 | 显示全部楼层
HRESULT IHTMLElement2::get_scrollTop(long *p);
HRESULT IHTMLElement2::get_scrollLeft(long *p);
HRESULT IHTMLElement2::get_scrollWidth(long *p);
HRESULT IHTMLElement2::get_scrollHeight(long *p);
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-3-28 15:15:01 | 显示全部楼层
这个已经能得到了,我要的是得到DISPID_HTMLWINDOWEVENTS2_ONSCROLL 的事件函数
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-16 19:15:01 | 显示全部楼层
to siegfried008
我用你的方法,但是获得的:
get_scrollTop(long *p)p是0
get_scrollTop(long *p)p是零
get_scrollWidth(long *p)p的是整个网页的页面宽度
get_scrollHeight(long *p)p是整个网页的页面高度
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-21 21:00:01 | 显示全部楼层
我也要得到DISPID_HTMLWINDOWEVENTS2_ONSCROLL 时间函数,楼主,你解决了吗
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-31 20:00:01 | 显示全部楼层
RESULT hr;
        IDispatch *pDisp = m_cMyWebBrowser.GetDocument();
        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_IHTMLElement,(void**)&pElement);
        ASSERT(SUCCEEDED(hr));
        ASSERT( pElement );
       
        IHTMLTextContainer   *pCont;   
        pBody->QueryInterface(IID_IHTMLTextContainer,   (LPVOID   *)(&pCont));   
        ASSERT(pCont);   
       
       
        // 向下滚动100个像素
        //        pElement->put_scrollTop( 100 );
       
       
        // 获得滚动条高度
        long  scroll_height;
        pCont->get_scrollHeight( &scroll_height );
       
        // 获得滚动条宽度
        long scroll_width;
        if(FAILED(pCont->get_scrollWidth( &scroll_width )))
                AfxMessageBox("get scrollWidth failed.");
       
        // 获得滚动条位置,从顶端开始
        long scroll_top;
        if(FAILED(pCont->get_scrollTop( &scroll_top )))
                AfxMessageBox("get scrollWidth failed.");
        // 获得滚动条位置,从左端开始
        long scroll_left;
        if(FAILED(pCont->get_scrollLeft( &scroll_left )))
                AfxMessageBox("get scrollWidth failed.");
       
        CString str;
        str.Format("%d,%d,%d,%d",scroll_height,scroll_width,scroll_top,scroll_left);
        AfxMessageBox(str);
       
        pCont->Release();
        pElement->Release();
        pBody->Release();
        pDocument->Release();
        pDisp->Release();



Ps:如果页面中用到了
WEB标准会使ScrollTop,ScrollLeft属性失效!!! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-1 11:15:01 | 显示全部楼层
这是我一直未解决的问题,高手出招啊。
我是用CWebBrowser2控件的,所以没有现成的scroll事件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

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