转自:http://blog.sina.com.cn/s/blog_4de6a48a0100ap9l.html
ScrollBar和Slider控件的使用
ScrollBar控件和Slider控件分别对应于MFC的CScrollBar类和CSliderCtrl类,这两个类中包含了对滚动条和滑动条操作的一些函数。而ScrollBar和Slider的通知消息则是通过ClassWizard在它们的父窗口(一般为对话框)中进行消息映射,WM_HSCROLL或WM_VSCROLL,从而发送相应的消息,其产生的消息映射函数分别为OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)和OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)。
1、ScrollBar的基本操作(CScrollBar类)
SetScrollRange(int nMinPos,int nMacPos,BOOL bRedraw=TRUE) //设置滚动条的滚动范围
GetScrollRange(LPINT lpMinPos,LPINT lpMaxPos) //得到滚动条的当前范围
SetScrollPos(int nPos,BOOL bRedraw=TRUE) //设置滚动条中滚动块的当前位置
GetScrollPos() //得到滚动块的当前滚动位置
2、Slider的基本操作(CSliderCtrl类)
SetRange(int nMin,int nMax,BOOL bRedraw=FALSE) //设置滑动条的范围
SetPos(int nPos) //设置滑动条的当前位置
GetPos() //得到滑动条的当前位置
SetTic(int nTic) //设置滑动条中的一个刻度线的位置
SetTicFreq(int nFreq) //设置显示在滑动条中的刻度线的疏密程度。如果参数被设置为5,则在滑动条的范围中每五个增量之间显示一个刻度线
3、ScrollBar和Slider的通知消息
(1)、ScrollBar主要的通知消息(水平滚动条)
SB_THUMBTRACK //滚动条被拖动
SB_LINELEFT: //向左滚动一行(列)
SB_LINERIGHT: //向右滚动一行(列)
SB_PAGELEFT: //向左滚动一页
SB_PAGERIGHT : //向右滚动一页
对于垂直滚动条,只需将相应的LEFT、RIGHT改为TOP、BOTTOM即可。
(2)、Slider的通知消息
Slider的滚动消息与ScrollBar类似,只需要将SB改为TB即可。
4、ScrollBar和Slider的使用示例
这两个控件的基本设置比较简单,也就是设置范围和当前位置,以及与相应的显示控件的联系,如Edit。这里就它们的消息响应给出一段示例代码。
void CScrollDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
if(pScrollBar==GetDlgItem(IDC_SLIDER1)) //判断是ScrollBar控件
{
m_GValue=m_Slider.GetPos();
UpdateData(FALSE); //将滚动条中的新值显示到Edit控件
}
else if(pScrollBar==GetDlgItem(IDC_SCROLLBAR1))
{
switch(nSBCode) //滚动条的通知消息码
{
case SB_THUMBTRACK: //滚动框被拖动
m_Scroll.SetScrollPos(nPos);
m_RValue=nPos;
break;
case SB_LINERIGHT: //向右滚动一行(列)
m_RValue=m_Scroll.GetScrollPos()+1;
m_Scroll.SetScrollPos(m_RValue);
if(m_RValue>255)
m_RValue=255;
break;
case SB_LINELEFT: //向左滚动一行(列)
m_RValue=m_Scroll.GetScrollPos()-1;
m_Scroll.SetScrollPos(m_RValue);
if(m_RValue<0)
m_RValue=0;
break;
case SB_PAGERIGHT : //向右滚动一页
m_RValue=m_Scroll.GetScrollPos()+10;
m_Scroll.SetScrollPos(m_RValue);
if(m_RValue>255)
m_RValue=255;
break;
case SB_PAGELEFT: //向左滚动一页
m_RValue=m_Scroll.GetScrollPos()-10;
m_Scroll.SetScrollPos(m_RValue);
if(m_RValue<0)
m_RValue=0;
break;
default:
break;
}
UpdateData(FALSE);
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
现在拖动滚动条和滑动条,相应的编辑框中便会同步的显示出当前的位置了。