滚动条Horizontal SCROLL BAR
Vertical SCROLL BAR
MFC类 CScrollBar
1.对话框中添加一个水平滚动条和静态文本框(显示位置),第一个添加控件变量,第二个添加值变量
2.滚动条工作,必须设置处理滚动条的消息
OnInitDialog()
{
.......
// TODO: 在此添加额外的初始化代码
//添加啦
SCROLLINFO si={0};//关于滚动条信息的结构体
si.cbSize = sizeof(si);//该结构大小
si.fMask = SIF_RANGE | SIF_PAGE ;//设置滚动条的范围|每一页的大小(鼠标点击滚动条空白时)
si.nMin = 0;
si.nMax = 100;//滚动条范围
si.nPage = 20;//点击空白时
m_scroll.SetScrollInfo(&si);//将滚动条的控件与该结构体信息关联,进行设置
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
3.对话框窗口中添加“WM_HSCROLL”消息
void Clb008Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//UINT nSBCode 是滚动条消息
SCROLLINFO si = {0};//用于取得滚动条的当前状态,如位置。下面GetScrollInfo(&si)
si.cbSize = sizeof(si);
si.fMask = SIF_ALL;
pScrollBar->GetScrollInfo(&si);
int nNewPos = si.nPos;
switch(nSBCode)
{
case SB_THUMBTRACK: //拉动滚动条
break;
case SB_LINELEFT: //向左箭头
nNewPos -=5;
break;
case SB_LINERIGHT: //向右箭头
nNewPos +=5;
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); //使滚动条根据nNewPos 值到新位置
//静态文本显示滚动条位置
CString s;
s.Format(_T("%d"),nNewPos);
m_pos = s ;
UpdateData(FALSE);//不可少,向外显示更新数据
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}