首页 > 代码库 > MFC控件编程:旋转按钮、进度条和滑块控件

MFC控件编程:旋转按钮、进度条和滑块控件

旋转按钮(微调按钮) : 对应的控件类是CSpinButtonCtrl  

进度条:对应的控件类是CProgressCtrl

滑块:对应的控件类是CSliderCtrl

对这三个控件的操作都是同过与之相关联的控件类完成的,并且这三个控件有极大的相似性,故这里放到一起

先认识下:

Spin:            Progress:             Slider:


常用函数:


   SetRange()/GetRange();        // 设置、获取控件表示的范围
   /* 设置控件的增量(步长) */
   CSpinButtonCtrl::SetAccel
   CProgressCtrl::SetStep
   CSlierCtrl::SetPageSize
   CSliderCtrl::SetLineSize

   SetPos()/GetPos();                    // 设置、获取当前数值

另外:旋转按钮通常和编辑框一起使用,所以使用前需要设置两者的伙伴关系。


使用案列程序:

   Spin控件和编辑框控件的关联设置如下:  勾选:Auto buddy 和  Set buddy interger

   

 程序界面设置如下:

 

为了方便操作控件:分别为Progress、Slider、Spin控件关联三个控件类型的变量:m_wndProgress、m_wndSlider、m_wndSpin

具体功能函数显示如下:

/*************************************
   初始化控件函数
**************************************/
void CCtrl4Dlg::InitCtrl()
{
	// 设置控件的数值范围
	m_wndSpin.SetRange (0, 100);
	m_wndProgress.SetRange (0, 100);
	m_wndSlider.SetRange (0, 100);

	// 设置控件的步长
	UDACCEL accel = {0};
	accel.nSec = 1;// 设置按住几秒时间开始快输增长
	accel.nInc = 1;// 增长率
	m_wndSpin.SetAccel (1, &accel);
    
	m_wndProgress.SetStep (10);
	m_wndSlider.SetLineSize (5); // 设置鼠标点击和光标按键的增量
	m_wndSlider.SetPageSize (20);// 设置键盘翻页按键的增量
    
	// 设置每个刻度的值,需要Slider控件勾选"Tic marks" 和 "Auto tics"样式
        m_wndSlider.SetTicFreq (20);
}

/***********************************************************
   "增长"按钮消息响应函数
************************************************************/
void CCtrl4Dlg::OnBtnAdd() 
{
	// TODO: Add your control notification handler code here
	// 进度条前进一个步长
	m_wndProgress.StepIt ();
	// 获取进度条的当前位置
	int nPos = m_wndProgress.GetPos ();
	// 把获取到的为之设置给Slider和Spin
	m_wndSlider.SetPos (nPos);
	m_wndSpin.SetPos (nPos);	
}


/********************************************************************************
   Slider的NM_CUSTOMDRAW消息响应函数,当用户拖动Slider时设置Progress和Spin的位置
*********************************************************************************/
void CCtrl4Dlg::OnCustomdrawSlider(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	// 获取Slider的当前位置
	int nPos = m_wndSlider.GetPos ();
	// 把获取到的为之设置给Progress和Spin
	m_wndProgress.SetPos (nPos);
	m_wndSpin.SetPos (nPos);

	*pResult = 0;
}


Demo下载地址:点击打开链接