小弟最近在编写跟滚动条有关的程序的时候,碰到一个问题,实在搞不明白,请教大家!我的滚动条是通过窗口的WS_VSCROLL加上去的,不是通过对话框模板或者手工Create的。在窗体的创建OnCreate时:
SCROLLINFO ScrollInfo;
ScrollInfo.cbSize = sizeof(SCROLLINFO);
ScrollInfo.fMask = SIF_ALL;
ScrollInfo.nMin = 0;
ScrollInfo.nPage = 10; 
ScrollInfo.nMax = 100; 
ScrollInfo.nPos = 0; 
ScrollInfo.nTrackPos = 0; 
SetScrollInfo(SB_VERT, &ScrollInfo);然后在窗体的OnVScroll中处理:
......//通过各种方式改变curpos
ASSERT((curpos<= maxpos)&&(curpos>=minpos));//此断言OK
SetScrollPos(SB_VERT, curpos);
ASSERT(curpos == GetScrollPos(SB_VERT));//此断言有问题!!!!我通过SB_PAGEDOWN的方式改变滚动条位置。一开始从0-90都没有问题,但是等到了90时,我再点击
SB_PAGEDOWN时,curpos==100,可是第2个断言不成立,GetScrollPos(SB_VERT))==91,这是为何?

解决方案 »

  1.   

    如果有100行的话,si.nMax 应该等于99才好吧.
    至于你说的第二个断言的问题,,我想应该是在OnVScroll函数中有使curpos的最大值
    不超过(nMax-nPage)的语句吧.这样可以使得滑块到底的同时所显示内容的最后一行也在低.
      

  2.   

    case SB_PAGEDOWN:
    si.nPos = min(si.nPos + si.nPage, si.nMax);
    if (si.nPos + si.nPage > si.nMax)
    si.nPos = si.nMax;
      

  3.   

    好的,谢谢Pigwen(Pigwen)和antshome(安静)