MFC滑块控件Slider Control的使用

⌚Time: 2022-06-02 01:51:14

👨‍💻Author: Jack Ge

新建MFC工程TestSlider

在窗口中加入三个Slider Control控件,三个Static Text控件。将静态文本控件Caption属性设置为0/100,实现滑动滑杆,静态文本能够实时显示滑杆数值

对于垂直滑杆,只需要将Orientation属性设置为Vertical

Slider控件本身并没有响应滑动的消息函数,因此对于水平Slider控件,可以通过滑杆所在窗体的OnHScroll()响应。在窗体的属性,消息,中找到WM_HSCROLL,点击添加OnHScroll添加消息处理函数

系统会自动做以下三步:

在CTestSliderDlg类中声明OnHScroll函数


public:

    afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);

实现OnHScroll函数


void CTestSliderDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

    // TODO: 在此添加消息处理程序代码和/或调用默认值

    

    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);

}

添加消息映射


BEGIN_MESSAGE_MAP(CTestSliderDlg, CDialog)

    ...

    ON_WM_HSCROLL()

END_MESSAGE_MAP()

我们需要修改OnHScroll函数,实现静态文本控件实时显示滑杆数值


void CTestSliderDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

    // TODO: 在此添加消息处理程序代码和/或调用默认值

    CString sliderPos;

    //当有多个水平滑杆,通过与pScrollBar比较,来判断是哪一个水平滑杆被滑动

    if (pScrollBar == GetDlgItem(IDC_SLIDER1))

    {

        sliderPos.Format(L"%d/100",((CSliderCtrl*)GetDlgItem(IDC_SLIDER1))->GetPos());

        GetDlgItem(IDC_STATIC1)->SetWindowText(sliderPos);

    }

    if (pScrollBar == GetDlgItem(IDC_SLIDER3))

    {

        sliderPos.Format(L"%d/100",((CSliderCtrl*)GetDlgItem(IDC_SLIDER3))->GetPos());

        GetDlgItem(IDC_STATIC3)->SetWindowText(sliderPos);

    }

    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);

}

同样对于垂直Slider控件,可以通过滑杆所在窗体的OnVScroll()响应。在窗体的属性,消息,中找到WM_VSCROLL,点击添加OnVScroll添加消息处理函数


void CTestSliderDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

    // TODO: 在此添加消息处理程序代码和/或调用默认值

    CString sliderPos;

    if (pScrollBar == GetDlgItem(IDC_SLIDER2))

    {

        sliderPos.Format(L"%d/100",100 - ((CSliderCtrl*)GetDlgItem(IDC_SLIDER2))->GetPos());

        GetDlgItem(IDC_STATIC2)->SetWindowText(sliderPos);

    }

    CDialog::OnVScroll(nSBCode, nPos, pScrollBar);

}

在BOOL CTestSliderDlg::OnInitDialog()函数中对于三个滑杆设置滑动范围


// TODO: 在此添加额外的初始化代码

((CSliderCtrl*)GetDlgItem(IDC_SLIDER1))->SetRange(0,100);

((CSliderCtrl*)GetDlgItem(IDC_SLIDER2))->SetRange(0,100);

((CSliderCtrl*)GetDlgItem(IDC_SLIDER3))->SetRange(0,100);

效果: