小弟最近在编写跟滚动条有关的程序的时候,碰到一个问题,实在搞不明白,请教大家!我的滚动条是通过窗口的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,这是为何?
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,这是为何?
至于你说的第二个断言的问题,,我想应该是在OnVScroll函数中有使curpos的最大值
不超过(nMax-nPage)的语句吧.这样可以使得滑块到底的同时所显示内容的最后一行也在低.
si.nPos = min(si.nPos + si.nPage, si.nMax);
if (si.nPos + si.nPage > si.nMax)
si.nPos = si.nMax;