要求:将滑块与编辑框、进度条相连接。调整滑块位置同时显示滑块当前对应数值,达到设定要求时改变进度条的进度。

一、界面设计

滑块是slider control,进度条是progress control

对于三个滑块,修改属性:

对于三个示例编辑框,修改属性:

二、添加变量

三、初始化滑块和进度条

在Dlg.cpp中找到初始化函数 BOOL COOPEx3Dlg::OnInitDialog(),设置滑块、进度条的刻度范围、单位刻度。

在该函数里“添加额外初始化代码”下添加:

    m_CSlider1.SetRange(0, 255);///滑块1的范围
    m_CSlider1.SetTicFreq(15);///刻度
    m_CSlider1.SetPos(0);///初始指在0刻度上

    m_CSlider2.SetRange(0, 255);///滑块2
    m_CSlider2.SetTicFreq(15);
    m_CSlider2.SetPos(0);

    m_CSlider3.SetRange(0, 255);///滑块3
    m_CSlider3.SetTicFreq(15);
    m_CSlider3.SetPos(0);

    m_CProgress.SetRange(0, 100);///进度条的范围

四、添加事件

为对话框添加消息函数 OnHScroll,实现滑块、进度条、编辑框之间相互传递信息。
 
右键单击主对话框空白部分,打开类向导,选择“消息”,找到“WM_HSCROLL”,添加处理程序。
 
 
在Dlg.cpp里添加操作实现代码:
 
void COOPEx3Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	UpdateData(TRUE);

	CString str;

	m_SliderV1 = m_CSlider1.GetPos();///获取滑块1的刻度
	str.Format(_T("%d"), m_SliderV1);///转化为字符串
	SetDlgItemText(IDC_EDIT1, str);///显示在编辑框1中

	m_SliderV2 = m_CSlider2.GetPos();
	str.Format(_T("%d"), m_SliderV2);
	SetDlgItemText(IDC_EDIT2, str);

	m_SliderV3 = m_CSlider3.GetPos();
	str.Format(_T("%d"), m_SliderV3);
	SetDlgItemText(IDC_EDIT3, str);


	int tmp = 0;///设置个变量计数,每符合一个条件计数++
	if (this->m_CSlider1.GetPos() == 150)
		tmp++;
	if (this->m_CSlider2.GetPos() == 255)
		tmp++;
	if (this->m_CSlider3.GetPos() == 125)
		tmp++;
	if(tmp==0)///没有条件满足,进度为0
		this->m_CProgress.SetPos(0);
	if(tmp==1)///只有一个条件满足,进度为1/3
		this->m_CProgress.SetPos(33.3);
	if(tmp==2)///2个条件满足,进度为2/3
		this->m_CProgress.SetPos(66.6);
	if(tmp==3)///三个条件全部满足,进度为100%
		this->m_CProgress.SetPos(100);

	UpdateData(FALSE);

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

六、结果图