我在从CView派生过来的视图里面创建了一个滚动条,在OnVScroll消息函数里面来进行滚动操作,档我每当拖动滚动条的时候, 里面传来的参数nPos怎么每此都是0,怎么来获取滚动条拖动的距离啊 ?????????

解决方案 »

  1.   

    CWnd::GetScrollPosint GetScrollPos( int nBar ) const;返回值:如果成功,则返回滚动条中滚动块的当前位置;否则返回0。参数: nBar 指定了要检查的滚动条。这个参数可以是下列值之一: · SB_HORZ 获取水平滚动条的位置。  
    · SB_VERT 获取垂直滚动条的位置。  
     说明:
    这个函数获得滚动条的滚动块的当前位置。当前位置是一个相对值,依赖于当前的滚动范围。例如,如果滚动范围是50到100,并且滚动块位于滚动条的中间,则当前位置为75。请参阅:::GetScrollPos, CScrollBar::GetScrollPos 
      

  2.   

    设好滚动条的滚动范围
    获得位置的话可以用GetScrollPos()
      

  3.   

    int CShowImageView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    if (CView::OnCreate(lpCreateStruct) == -1)
    return -1;

    // TODO: Add your specialized creation code here
    RECT r;
    GetClientRect(&r);
    m_ScrollBar.Create(SBS_VERT | SBS_TOPALIGN | WS_CHILD | WS_VISIBLE,r,this,100);
    //m_ScrollBar.SetScrollRange(0,100);
    SCROLLINFO scrollinfo;
    scrollinfo.cbSize=sizeof(SCROLLINFO);
    scrollinfo.fMask=SIF_ALL;
    scrollinfo.nMax=100;
    scrollinfo.nMin=0;
    scrollinfo.nPage=2;
    scrollinfo.nPos=50;
    scrollinfo.nTrackPos=2;
        m_ScrollBar.SetScrollInfo(&scrollinfo); return 0;
    }void CShowImageView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    // TODO: Add your message handler code here and/or call default
        ScrollWindow(0,nPos);
    CView::OnVScroll(nSBCode, nPos, pScrollBar);
    }
    这样做了,但是一拖动滚动条,,就把那个滚动条整个拖下来了(就是那个顶端的小三角尖都滑下来了!),怎么回事?》?
      

  4.   

    只有在nSBCode为SB_THUMBPOSITION or SB_THUMBTRACK时,nPos才有意义;其他消息中用GetScrollPos或者GetScrollInfo获取当前位置,然后根据nSBCode类型修改位置,最后用SetScrollPos或者SetScrollInfo设置修改滚动条位置。至于你的窗口怎么来响应滚动条位置的改变,又是另外一回事情了。一般是刷新,然后在绘图函数中根据当前滚动条位置修改绘图坐标。也可以用ScrollWindow/ScrollDC函数滚动窗口,但是滚动后刷新部分需要重新绘制。