MFC中CSliderCtrl的使用(收集)

MFC中滑动条(CSliderCtrl)的使用与多控件处理
本文详细介绍了MFC中的滑动条(CSliderCtrl)控件的使用方法,包括设置滑动范围、滑块位置等属性,并通过实例展示了如何响应滑动消息及处理多个滑动条控件的方法。

在MFC中滑动条(CSliderCtrl)是个常用的控件,用法如下:

主要要方法有:

1、设置、取得滑动范围:
void SetRange( int nMin, int nMax, BOOL bRedraw = FALSE );
void GetRange( int& nMin, int& nMax ) const;
2、设置、取得按下左右箭头滑动间隔:

int SetLineSize( int nSize );
int GetLineSize( ) const;
3、设置、取得按下PgUp、PgDown时滑动间隔:

int SetPageSize( int nSize );
int GetPageSize( ) const;
4、设置、取得滑块位置:

void SetPos( int nPos );
int GetPos( ) const;
5、设置滑动条刻度的频度:

void SetTicFreq( int nFreq );//将Tick marks和Auto ticks两个属性同时选中才能看到刻度,在下拉框中可以选择刻度的显示位置

实例:

在对话框中放一个Slider控件,添加相应的Ctrl型变量为m_slider。在对话框初始化函数OnInitDialog()中添加:

BOOL CDlgSetup::OnInitDialog()
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here

m_slider.SetRang(0,100);//设置滑动范围

m_slider.SetTicFreq(10);//每10个单位画一刻度
return TRUE; // return TRUE unless you set the focus to a control
               // EXCEPTION: OCX Property Pages should return FALSE
}

Slider控件本身并没有响应滑动的消息函数,但可以通过主窗体的OnHScroll()响应。在类向导中为对话框添加WM_HSCROLL消息,在响应函数中添加:

void CDlgSetup::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
CSliderCtrl   *pSlidCtrl=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
m_int=pSlidCtrlHue->GetPos();//取得当前位置值 
  CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

//m_int 即为当前滑块的值。

当有多个slider控件时,我的处理方法,自认为还是比较巧妙的

void CCameraParamDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
UINT* pD;
CSliderCtrl* pS = (CSliderCtrl*)pScrollBar;

if((void*)pScrollBar == (void*)&m_ctrH)
  pD = &m_H;
else if((void*)pScrollBar == (void*)&m_ctrV)
  pD = &m_V;
else if((void*)pScrollBar == (void*)&m_ctrNx)
  pD = &m_nX;
else if((void*)pScrollBar == (void*)&m_ctrNy)
  pD = &m_nY;
else if((void*)pScrollBar == (void*)&m_ctrNz)
  pD = &m_nZ;
else if((void*)pScrollBar == (void*)&m_ctrUx)
  pD = &m_uX;
else if((void*)pScrollBar == (void*)&m_ctrUy)
  pD = &m_uY;
else if((void*)pScrollBar == (void*)&m_ctrUz)
  pD = &m_uZ;

*pD = pS->GetPos();
UpdateData(FALSE);
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);

}

另一种多Slider处理方法:
http://www.03964.com/read/ee32ee76d3c8fdee3584cf72.html

void CTestDialog::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    Slider CSliderCtrl* pSlider = (CSliderCtrl*)pScrollBar;
    CString strText; int dValue[10] = {0};
  
   //多个 SLIDER 控件控制
    switch( pSlider->GetDlgCtrlID() )
   {
    Slider1 case IDC_SLIDER1:
        strText.Format( _T("%d"), pSlider->GetPos() );
        SetDlgItemText( IDC_STATIC_SLIDER1, strText );
        break;
    Slider2 case IDC_SLIDER2:
        strText.Format( _T("%3.1f"), dValue[pSlider->GetPos()] );
        SetDlgItemText( IDC_STATIC_SLIDER2, strText );
        break;
   }
    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

 

 

 

 

 

### MFC中`CSliderCtrl`控件滑动事件处理及用法 #### 处理滑动条变化的通知消息 为了使用户与滑动条的每次交互都能获得及时的界面反馈,需确保应用程序能够响应来自滑动条的变化通知。对于水平或垂直方向上的滑动操作,在MFC框架下通常会接收到`WM_HSCROLL` 或 `WM_VSCROLL` 消息[^1]。 当定义了一个继承自`CDialogEx` 的类用于创建对话框窗口时,可以在该类内部重载虚函数以捕获特定类型的滚动条事件。例如: ```cpp BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx) ON_WM_VSCROLL() END_MESSAGE_MAP() void CMyDialog::OnVScroll(UINT nSBCode, UINT nPos, CWnd* pWndScroll) { // 调用基类默认行为 CDialogEx::OnVScroll(nSBCode, nPos, pWndScroll); // 更新受影响的UI组件状态 UpdateUIElements(nPos); } ``` 上述代码片段展示了如何针对垂直滑动条配置消息映射表并实现相应的成员函数来接收和处理滚轮动作触发的消息。这里的关键在于理解参数的意义——特别是`nSBCode` 和 `nPos` 参数分别表示了具体的滚动命令(比如向上/向下翻页)以及新的指针位置。 #### 使用`CSliderCtrl` 控制器的具体属性设置 除了基本的消息传递机制外,还可以利用一系列的方法进一步定制化滑动条的行为特性。这些方法允许开发者调整诸如范围边界、增量大小等重要参数,从而更好地满足实际应用场景的需求[^4]。 以下是几个常用的API调用方式及其作用说明: - **SetRangeMin/SetRangeMax**: 设定滑块可以到达的最低点和最高点; - **SetLineSize/SetPageSize**: 定义单次按键导航或是分页跳转所引起的位移量; - **SetTicFreq**: 规定刻度标记之间的间距频率; 下面给出一段完整的示例程序,它不仅实现了对滑动条变动情况的有效监听,还演示了一些典型的功能设定过程: ```cpp // 初始化阶段:指定合理的初始区间和其他选项 m_slider.SetRange(0, 100); // 设置滑块活动区域为[0..100] m_slider.SetTicFreq(10); // 显示每隔十个单位就有一个小格子作为指示符 m_slider.SetPos(50); // 默认放置于中间位置即数值50处 ... // 当检测到任何一次拖拽结束后的回调逻辑 void CSlidDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){ int newPos; switch (nSBCode){ case SB_THUMBPOSITION: case SB_ENDSCROLL : newPos = ((CSliderCtrl *)pScrollBar)->GetPos(); break; default: newPos = nPos; } // 刷新关联显示项的内容... m_staticText.SetWindowText(_T("Current Value:") + CString(newPos)); } ``` 此段代码首先设置了滑块的工作范围,并启用了周期性的刻度线以便更直观地反映当前位置信息。接着在`OnHScroll()` 方法内根据不同种类的操作获取最新的坐标值,并据此刷新界面上其他依赖于此输入源的对象的状态[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值