ScrollBar
- CSrollBar
- 水平滚动条控件和垂直滚动条
- 滚动条消息
SB_THUMBTRACK(拖动滚动条)
SB_LINELEFT(左箭头移动)
SB_LINERIGHT(右箭头移动)
SB_PAGELEFT(左边空白移动)
SB_PAGERIGHT(右边空白移动)
构造初始界面
- 初始化滚动条
// TODO: 在此添加额外的初始化代码
SCROLLINFO si = {0};
si.cbSize = sizeof(si);
si.nMin = 0;
si.nMax = 100;
si.nPage = 10;
//传入设置的滚动条信息
m_scroll.SetScrollInfo(&si);
- 滚动条关联控件变量m_scroll
- 添加 WM_HSCROLL 消息处理事件
void CScrollDemoDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//取得滚动条的当前状态信息
SCROLLINFO si = {0};
si.cbSize = sizeof(si);
si.fMask = SIF_ALL;
pScrollBar->GetScrollInfo(&si);
int nNewPos = si.nPos;
switch(nSBCode)
{
//拉动滚动条
case SB_THUMBTRACK:
nNewPos = nPos;
break;
//左右箭头翻页
case SB_LINELEFT:
nNewPos -= 1;
break;
case SB_LINERIGHT:
nNewPos += 1;
break;
//点击空白位置左右翻页
case SB_PAGELEFT:
nNewPos -= si.nPage;
break;
case SB_PAGERIGHT:
nNewPos += si.nPage;
break;
default:
break;
}
//考虑滚动条越界
if(nNewPos>si.nMax){
nNewPos = si.nMax;
}
if(nNewPos<si.nMin){
nNewPos = si.nMin;
}
//更新滚动条位置信息
pScrollBar->SetScrollPos(nNewPos);
//静态文本显示位置信息
CString s;
//nNewPos变成字符串并复制给s
s.Format(_T("%d"),nNewPos);
m_location = s;
UpdateData(false);
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}