要求:将滑块与编辑框、进度条相连接。调整滑块位置同时显示滑块当前对应数值,达到设定要求时改变进度条的进度。
一、界面设计
滑块是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);
}