1、把edit control ID为IDC_EDIT2 的属性number改成true
2、分别给绑定变量m_IDC_EDIT2并设置其最大和最小值,添加控件spin control 并绑定变量m_spin
3、将滑块绑定变量m_mIDC_SLIDER1
4、在初始化函数中设定滑块的范围
m_mIDC_SLIDER1.SetRange(0,100);//设置滑块的范围
m_mIDC_SLIDER1.SetPos(90); //设置滑块的初始位置
m_mIDC_SLIDER1.SetLineSize(1);
m_mIDC_SLIDER1.SetPageSize(3);
m_spin.SetRange(0,100); //设置选值范围
m_spin.SetBuddy(GetDlgItem(IDC_EDIT2));//跟edit控件绑定,buddy这个单词的意思就是朋友,伙伴
5、Slider控件本身并没有响应滑动的消息函数,但可以通过主窗体的WM_HSCROLL消息响应。在类向导中为对话框添加WM_HSCROLL消息,在响应函数中添加:
在类视图中选择要添加事件的类,右键属性,选择消息添加函数OnHScroll回车,编译函数如下:
void CToolBoxTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(*pScrollBar == m_mIDC_SLIDER1) //判断是不是该滑块
{
m_IDC_EDIT2 = m_mIDC_SLIDER1.GetPos();//取得当前位置值
UpdateData(false); //更新Edit control控件
}
Invalidate(); //刷新对话框, 从而刷新预览控件
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}
6、给edit添加事件(EN_CHANGE)的响应函数OnEnChangeEdit如下:
void CToolBoxTestDlg::OnEnChangeEdit()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
UpdateData(TRUE); //更新m_IDC_EDIT2
m_mIDC_SLIDER1.SetPos(m_IDC_EDIT2);
Invalidate(); //刷新对话框, 从而刷新预览控件
}
7、添加spin control响应事件(UDN_DELTAPOS-指示控件位置即将更改)方法OnDeltaposSpin1
void CToolBoxTestDlg::OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMUPDOWN pNMUpDown = reinterpret_cast(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
if(pNMUpDown->iDelta == -1) // 如果此值为-1 , 说明点击了Spin的往下的箭头
{
if(m_IDC_EDIT2 == 0 )// 不能小于他的范围
{
return;
}
m_IDC_EDIT2--;//=wcstod(m_Edit1,NULL)-1;
m_mIDC_SLIDER1.SetPos(m_IDC_EDIT2);
}
else if(pNMUpDown->iDelta == 1) // 如果此值为1, 说明点击了Spin的往上的箭头
{
if( m_IDC_EDIT2 ==100)//不能大于他的范围
{
return;
}
m_IDC_EDIT2++;
m_mIDC_SLIDER1.SetPos(m_IDC_EDIT2);
/*double a;
a=wcstod(m_Edit1,NULL)+1;
ss.Format(_T("%.1f"),a);*/
}
UpdateData(false);
*pResult = 0;
}
注意:弱要限制Edit输入字符串的长度:
((CEdit *)GetDlgItem(IDC_EDIT1))->SetLimitText(5);//其中IDC_EDIT1是edit control 的ID