我建立了一个基于CScrollView的CWBView类,想在文本框中输入一个值来控制CScrollBar的位置。是这样写吗?
void CWBView::OnScrollPosView(int npos)
{
CScrollBar* pBar = GetScrollBarCtrl(SB_VERT);
pBar->SetScrollPos(npos);
}
但是运行后程序没响应?请高手指点,谢谢!!

解决方案 »

  1.   

    我跟踪了一下,npos不是空值,是不是CScrollBar* pBar = GetScrollBarCtrl(SB_VERT);
    的问题?还是事件的问题?如果是后者,要建立什么事件呢?
      

  2.   

    我这样就可以了
    void CWBView::OnScrollPosView(int npos)
    {
    SetScrollPos(SB_VERT,npos, TRUE);
    }
    但又出现另一个问题,滚动条会自动回滚,还有视图里面的内容不会动。
      

  3.   

    通常CScrollView不必控制bar位置,它自己能Scroll,但要在:
    void CShowFontView::OnInitialUpdate()//设置scroll范围,如文件有100行,那就设100*行的点数
    {
    CScrollView::OnInitialUpdate();
    //
    CShowFontDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    int CharHei=pDoc->m_fntSize+2;
    //
    CSize sizeTotal=GetTotalSize();
    CSize page(0,0);
    CSize line(0,0);
    if(sizeTotal.cx==0 && sizeTotal.cy==0)
    {
    sizeTotal.cx = 60*8;
    sizeTotal.cy = 7240;//3710;
    SetScrollSizes(MM_TEXT, sizeTotal);
    }
    else
    {
    page.cy=CharHei*20;
    line.cy=CharHei;
    SetScrollSizes(MM_TEXT, sizeTotal,page,line);
    }
    }
      

  4.   

    不要相应滚屏事件,一旦获得输入的需要滚动到的位置,直接
    ScrollToPosition(pt);
    就可以,pt是屏幕左上角位置
      

  5.   

    ScrollToposition();
    如果视图没有改变,则加下面语句:
    RedrawWindow();
    立即重绘。
      

  6.   

    视图有改变了
    ScrollWindow(0,(scrollinfo.nPos-npos)*10);//按步长滚动窗口  
    scrollinfo.nPos = npos; //将新位置的值传入  
    SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);//scrollinfo并设置  最后一个问题就是滚动条会自动回0,怎么解决?其实我是想远程控制CScrollView中的滚动条,具体请看
    http://topic.csdn.net/u/20110228/13/ec2d77ba-207a-44ea-8753-93f9aeb4f2f2.html