MFC对话框中有一些按钮和列表,想要做一个垂直滚动条使得当对话框较小,里面内容显示不全时,能通过滚动条显示。
现在遇到的问题是,滚动条滚动至最下方,按理来说对话框也应该显示到最下方的内容,但是会多显示一部分空白,这是为什么啊?
目前用的是对话框的垂直滚动条属性,没用垂直滚动条控件
void CUIDialog::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
SCROLLINFO scrollinfo;
GetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
int unit = 3;
switch (nSBCode)
{
case SB_LINEUP: //滚动一行
scrollinfo.nPos -= 1;
if (scrollinfo.nPos < scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
ScrollWindow(0, unit);
break;
case SB_LINEDOWN: //向下滚动一行
scrollinfo.nPos += 1;
if (scrollinfo.nPos + scrollinfo.nPage > scrollinfo.nMax) //此处要加上滑块的长度,再作判断
{
scrollinfo.nPos = scrollinfo.nMax;
break;
}
SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
ScrollWindow(0, -unit);
break;
case SB_PAGEUP: //滚动一页
scrollinfo.nPos -= 5;
if (scrollinfo.nPos <= scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
ScrollWindow(0, unit * 5);
break;
case SB_PAGEDOWN: //向下滚动一页
scrollinfo.nPos += 5;
if (scrollinfo.nPos + scrollinfo.nPage >= scrollinfo.nMax) //此处要加上滑块的长度,再作判断
{
scrollinfo.nPos = scrollinfo.nMax;
break;
}
SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
ScrollWindow(0, -unit * 5);
break;
case SB_ENDSCROLL:
break;
case SB_THUMBPOSITION:
break;
case SB_THUMBTRACK: //将滚动条拖动到指定位置
ScrollWindow(0, (scrollinfo.nPos - nPos) * 10);
scrollinfo.nPos = nPos;
SetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);
break;
}
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}