WM_VSCROLL,WM_HSCROLL,在OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 中
分别处理nSBCode参考代码:
case SB_LINELEFT : //单击左箭头
SetScrollPos(SB_HORZ,pos-1);
if (pos !=0)
ScrollWindow(1,0);
break;

解决方案 »

  1.   

    不太懂你的意思!能否说明白一点?谢 谢了.
    我是用易语言写的程序,通过API发送信息给其它软件来控制该软件的窗口滚动.
      

  2.   

    这个得看该程序对滚动消息的处理了,如果最小单位就是行,那也没办法;否则,就取每次滚动最小单位(就是1,通过GetScrollInfo获取SCROLLINFO里面的其他信息)即可。
      

  3.   

    必须是通过发送消息的方式啊
    我是这样做的:
    static position=0;
    ::PostMessage(IEHwnd,WM_SYSCOMMAND,SC_VSCROLL,0);   
    ::PostMessage(IEHwnd,WM_VSCROLL,MAKELONG(SB_THUMBTRACK,position),0);
    position++;
    然后在一个线程里循环执行这段代码。
    这样是可以实现平滑滚动了,可是这样也不大好,最好是可以获得滚动条的当前位置,然后这样:
    ::PostMessage(IEHwnd,WM_SYSCOMMAND,SC_VSCROLL,0);   
    ::PostMessage(IEHwnd,WM_VSCROLL,MAKELONG(SB_THUMBTRACK,滚动条当前位置+1),0);
      

  4.   

    void CMyClientDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    int pos,min,max,thumbwidth; SCROLLINFO ssi;
    pScrollBar->GetScrollInfo(&ssi); pos=ssi.nPos;
    max=ssi.nMax;
    min=ssi.nMin;
    thumbwidth=ssi.nPage; switch(nSBCode)
    {
    case SB_THUMBTRACK: //拖动滚动条
    pScrollBar->SetScrollPos(nPos);
    TempX-=pos-nPos;
    if(TempX<0)
    TempX=0;
    else if(TempX>width-WD)
    TempX=width-WD;
    else
    DrawBmp(*GetDC()); break; case SB_LINELEFT: //单击左箭头
    if(pos!=0)
    {
    pScrollBar->SetScrollPos(pos-1);
    TempX--;
    if(TempX<0)
    TempX=0;
    else
    DrawBmp(*GetDC());
    }
    break; case SB_LINERIGHT: //单击右箭头
    if(pos+thumbwidth<=max)
    {
    pScrollBar->SetScrollPos(pos+1);
    TempX++;
    if(TempX>width-WD)
    TempX=width-WD;
    else
    DrawBmp(*GetDC());
    }
    break; case SB_PAGELEFT: //在滚动块的左方空白滚动区域单击
    if(pos>=thumbwidth)
    {
    pScrollBar->SetScrollPos(pos-thumbwidth);
    }
    else
    {
    pScrollBar->SetScrollPos(0);
    }
    TempX-=thumbwidth;
    if(TempX<0)
    TempX=0;
    else
    DrawBmp(*GetDC());
    break; case SB_PAGERIGHT: //在滚动块的右方空白滚动区域单击
    if(pos+thumbwidth<=max-thumbwidth)
    {
    pScrollBar->SetScrollPos(pos+thumbwidth);
    }
    else
    {
    pScrollBar->SetScrollPos(max-thumbwidth);
    }
    TempX+=thumbwidth;
    if(TempX>width-WD)
    TempX=width-WD;
    else
    DrawBmp(*GetDC());
    break;
    } CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
    }

    我的这个代码是载入图片时进行水平滚动时的变化的,如果需要响应所谓的鼠标点击拖动的话,你需要添加
    case SB_LINERIGHT:

    case SB_LINERIGHT:
    然后自己计算点击一次滚动的位移。
    至于文本的滚动相对来说更简单点,把代码里面的DrawBmp(*GetDC());换成LoadText就行了。