滑动条SliderCtrl及实例

薛兴言
2023-12-01

      滑动条是一种交互式的、直观的控件。它包括一个沿着控件长度滑动的滑动框和用于显示值范围的可选刻度标志。滑动条控件还有一个内置的键盘界面,所以可用键盘上的箭头键来移动滑块。

      MFC类使用CSliderCtrl类来提供滑动条的各项服务。我们同样可以做一个对话框,上面放置红色绿色和蓝色共三个滑动条控件,通过颜色配比来实现区域颜色显示。过程如下:

(1)建立一个对话框工程SliderCtrl,放置三个滑动条控件IDC_SLIDER_RED、IDC_SLIDER_GREEN、IDC_SLIDER_BLUE。在CCSliderCtrlDlg的初始化函数中对这三个控件初始化执行。

//红色

 CSliderCtrl *pSliderRed = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_RED);
 pSliderRed->SetRange(0,255);            //红色滑动条值域
 pSliderRed->SetPos(128);                   //默认

//绿色

 CSliderCtrl *pSliderGreen = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_GREEN);
 pSliderGreen->SetRange(0,255);         //绿色滑动条值域
 pSliderGreen->SetPos(128);

//蓝色

 CSliderCtrl *pSliderBlue = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_BLUE);
 pSliderBlue->SetRange(0,255);             //蓝色滑动条值域
 pSliderBlue->SetPos(128);

(2)为CSliderCtrl类添加WM_HSCROLL消息处理方法,在对话框上点击右键insert event handler,然后编辑滑动事件处理函数即可。

void CCSliderCtrlDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
       int iRed,iGreen,iBlue;
       if((pScrollBar->GetDlgCtrlID() == IDC_SLIDER_RED)
             ||(pScrollBar->GetDlgCtrlID() == IDC_SLIDER_GREEN)
             ||(pScrollBar->GetDlgCtrlID() == IDC_SLIDER_BLUE))
       {
              CSliderCtrl *pSliderRed = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_RED);
              CSliderCtrl *pSliderGreen = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_GREEN);
              CSliderCtrl *pSliderBlue = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_BLUE);

              iRed = pSliderRed->GetPos();
              iGreen = pSliderGreen->GetPos();
              iBlue = pSliderBlue->GetPos();
        }

        UpdateData(TRUE);


        CBrush colorBrush;                     //画刷的使用
        COLORREF clRGB;

        clRGB = RGB(iRed,iGreen,iBlue);
        CClientDC *pClientDC;

        pClientDC = new CClientDC(this);
        colorBrush.CreateSolidBrush(clRGB);
        CRect rect(80,120,160,200);

        pClientDC->FillRect(rect,&colorBrush);
        delete pClientDC;

 

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

 

 类似资料: