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)
以上就是滑动条的简单的使用,欢迎大家评论指导。