您的位置:首页 > 其它

MFC中ScrollBar滚动条控件的使用

2017-03-14 14:59 956 查看
在MFC需要有时需要用到混动条拖动屏幕和显示。现将滚动条控件ScrollBar的相关用法总结如下。
一、使用的步骤
1、在对话框中拖入CScrollBar控件,并修改ID,
2、在对话框的InitDialog函数中增加如下代码,完成CScrollBar的初始化.
CScrollBar* pScrollBar = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR_HORIZONTAL);
pScrollBar->SetScrollRange(0,100);//滑块移动的位置为0——100;
pScrollBar = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR_VERTICAL);
pScrollBar->SetScrollRange(0,100);
pScrollBar = (CScrollBar*)GetDlgItem(IDC_SCROLLBAR3);
pScrollBar->SetScrollRange(0,100);
3、针对对话框添加WM_HSCROLL和WM_VSCROLL两个消息处理函数,如下所示:
void CTestScrollBarDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
int TempPos = pScrollBar->GetScrollPos();
switch(nSBCode)
{
case SB_THUMBPOSITION://拖动滑块
pScrollBar->SetScrollPos(nPos);
break;
case SB_LINELEFT://点击左边的箭头
if(TempPos > 1)
{
TempPos--;
}
pScrollBar->SetScrollPos(TempPos);
break;
case SB_LINERIGHT://点击右边的箭头
if(TempPos<100)
{
TempPos++;
}
pScrollBar->SetScrollPos(TempPos);
break;
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
注意:为对话框的消息添加消息处理函数步骤:打开对话框的类向导,单击消息列表,选择需要添加的消息的,再选择编辑代码即可。中间过程截图如下:



、滚动条控件的使用方法总结

  滚动条分为水平滚动条和竖直滚动条。滚动条通常是通过设置一个数值范围,通常是和其它的控件或视图结合使用。在对话框中加载滚动条方法如下:
  
1在对话框中加入变量(利用类向导将控件和变量连接):CScrollBar m_scroll;

    2初始化滚动条:利用CScrollBar::SetScrollRange(int nMin,int nMax,BOOL bReDraw=TRUE)函数初始化滚动条,即设置滚动条的最大最小值。

   3在父窗口中处理滚动条消息:水平滚动条响应OnHScroll函数,竖直滚动条响应OnVScroll函数。一般在函数中必须经过一下步骤:

        1)得到滚动条的范围:CScrollBar::GetScrollRange(nMin,nMax);

       2)得到当前滚动条的位置,即取值:int nCurpos=pScrollBar->GetScrollPos();

       3)处理滚动信息。按左右健,鼠标键。

       4)判断滚动后当前值是否大于或小于最大最小值。

       5)更新滚动条信息。

       6)根据滚动条当前取值,设置其它控件的值(这才是使用滚动条的目的)。
   
下面给出一个详细的函数:
void CMyDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
int nMin,nMax,nCurpos;
pScrollBar->GetScrollRange((&nMin,&nMax); //取得滚动条范围
nCurpos=pScrollBar->GetScrollPos(); //取得当前值
switch(nSBCode) //处理滚动信息
{
case SB_LINELEFT: //向左的箭头被按下
nCurpos=nCurpos-5;break;
case SB_lINERIGHT:
nCurpos++;break; //向右的箭头被按下
case SB_THUMBTRACK: //鼠标拖动
nCurpos=nPos;break;
}
if(nCurpos if(nCurpos>nMax) nCurpos=nMax;
pScrollBar->SetScrollPos(nCurpos); //更新信息
//处理你想处理的东西
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: