MFC中滑动条ScrollBar和Slider Control的使用

宇文和同
2023-12-01

MFC中滑动条ScrollBar和Slider Control的使用

这几天做项目了一点关于MFC的项目,将MFC中滑动条的简单使用做个总结,也将调试过程中出现过的问题进行归纳。

1.滑动条 scrollbar

	在工具箱中找到滑动条Horizontal Scroll Bar或者Vertical Scroll bar拖动添加到当前的dialog中去,右键控件
	选择添加变量,一般变量的命名以m_开头,点击完成既可,但是如果出现添加不成功的现象时,需要手动添加变量。
	添加的步骤如下:
			①需要再对应的.h文件中,添加变量的类型和变量名
			②需要DodataExchange()添加DDX_Control(pDX,IDC_SCROLLBAR6,m_radius_Scrollbar);语句,其中
			IDC_SCROLLBAR6为控件的ID,m_radius_Scrollbar为控件定义的变量名
	然后需要添加显示的edit控件,同样为它添加变量,手动添加的方法同上。
	再oninitdialog( )函数中添加下列语句,完成滑动条的初始化设置
m_radius_Scrollbar.SetScrollRange(1,127);//1 127 设置滑动条的范围
m_radius_Scrollbar.SetScrollPos(20); //设置滑动条初始的位置
SetDlgItemInt(IDC_RADIUS_EDIT, 20); //设置初始编辑框的显示的数值
	滑动条的控制,实际上是对onHScroll函数的重载,右键控件,选择添加类向导,在消息(message)这列中中,选择
	onHScroll函数,点击添加代码,代码如下:
void CCVideo_DemoDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
if(pScrollBar == &m_radius_Scrollbar) //如果存在多个滑动条则在此进行选择
       {
              radius_pos = m_radius_Scrollbar.GetScrollPos();// 获取水平滚动条当前位置 
              switch (nSBCode)   
              {   
                     // 如果向左滚动一列,则pos减1  
              case SB_LINELEFT:   
                     radius_pos -= 1;   
                     break;   
                     //如果向右滚动一列,则pos加1 
              case SB_LINERIGHT:   
                     radius_pos  += 1;   
                     break;   
                     // 如果向左滚动一页,则pos减10 
              case SB_PAGELEFT:   
                     radius_pos -= 10;   
                     break;   
                     // 如果向右滚动一页,则pos加10 
              case SB_PAGERIGHT:   
                     radius_pos  += 10;   
                     break;   
                     //如果滚动到最左端,则pos为1  
              case SB_LEFT:   
                     radius_pos = 1;   
                     break;   
                     //如果滚动到最右端,则pos为100
              case SB_RIGHT:   
                     radius_pos = 100;   
                     break;     
                     // 如果拖动滑动块到指定的位置,则pos的赋值为npos的值
              case SB_THUMBPOSITION:   
                     radius_pos = nPos;   
                     break;   
              default:   
                     SetDlgItemInt(IDC_RADIUS_EDIT, radius_pos);  
                     return;   
              }   
              m_radius_Scrollbar.SetScrollPos(radius_pos);
       }
    CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}
	这样就完成了对滑动条的控制和显示,如果需要对滑动条的返回的值进行二次使用,可以将Pos设着称为一个静态变量
	就可以在不同的函数中调用了。代码实现的效果如下:
	![在这里插入图片描述](https://img-blog.csdnimg.cn/2020011614015738.png)

2.滑动条Slider control

	拖动slider control控件,添加变量,手动添加变量的步骤同上
	添加edit编辑框,添加变量,这里是需要创建一个int类型的变量来获取指针位置的返回值(int)。
	手动创建的方法如下:
		①在.h文件中添加对应的类型(int)和变量名
		②在DoDataExchange( )函数中添加DDX_Text(pDX, IDC_EDIT1, m_slider_edit1);
		其中IDC_EDIT1为控件的ID,m_slider_edit1为控件创建的变量名。
	在oninitdialog( )函数中,完成对滑动条的初始化设置
m_slider.SetRange(1,100); //设置滑动条的范围
m_slider.SetTicFreq(1); //设置每一小格的取值
m_slider.SetPos(0); //设置滑动条初始的位置
	完成了初始化之后,对onHScroll函数进行重载,完成对滑动条的控制,和scrollbar的思想是类似的,但是操作的
	代码不相同,如果操作pScrollBar指针,会报不兼容的错误。
void CLabel::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
       // TODO: 在此添加消息处理程序代码和\或调用默认值
       UpdateData(true);
       CSliderCtrl *m_slider =(CSliderCtrl*)GetDlgItem(IDC_SLIDER1); //使用滑动条创建的变量获取滑动条,IDC_SLIDER1是滑动条的ID号
       m_slider_edit1 = m_slider->GetPos();// 获取滑动条当前的位置,返回给编辑框对应的变量
       CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
       UpdateData(false); //两条updatedata语句中完成对数据的更新
       //必须调用UpdateDdata(true)完成将数据传递给变量,调用UpdateData(false)才能在edit中显示已经更新了的值
       
}
	代码实现的效果如下:
	![在这里插入图片描述](https://img-blog.csdnimg.cn/2020011614061454.png)
	以上就是滑动条的简单的使用,欢迎大家评论指导。
 类似资料: