今天,遇到一个需求,在Edit框显示一个数值,是16进制格式显示,在Edit框旁边有一个Spin控件,可以用来调整Edit框中的值增加或减少。
实现过程:
1、绑定spin和edit
m_Spin.SetBuddy(GetDlgItem(m_Edit1));
将spin control的属性设置Set Buddy Integer设为True;wrap设置为ture表示允许回绕;
如果将属性Auto Buddy设为True,则Spin会自动和Tap键顺序的前一个控件进行联合控制。
//跟edit控件绑定,buddy这个单词的意思就是朋友,伙伴
//绑定好之后你可以在edit上直接输入数字,然后再点spin控件时它会根据你当前的值加或减1.
2、设置显示范围
m_Spin.SetRange32(0x0000,0xFFFF);
注意:此处不能调用SetRange,因为函数SetRange和SetRange32参数是按照有符号数进行处理,SetRange只接受(-32768,32767)之间的值才能正确显示和操作;0xFFFF超出范围,应该选用SetRange32函数
3、m_Spin.SetBase(n);//
n 仅为10 或16;
m_spin.SetBase(n);//n仅为10或16;
4、实现自定义显示Edit
如果Edit控件中显示的内容不是简单的数字,而是自定义的内容,则可以在Spin的事件响应函数中修改Edit的内容来实现
双击控件添加消息
void CAlarm::OnDeltaposSpin5(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
UpdateData(true);
CString ss;
if(pNMUpDown->iDelta == -1) // 如果此值为-1 , 说明点击了Spin的往下的箭头
{
double a;
a=wcstod(m_Edit1,NULL)-1;
ss.Format(_T(“%.1f”),a);
}
else if(pNMUpDown->iDelta == 1) // 如果此值为1, 说明点击了Spin的往上的箭头
{
double a;
a=wcstod(m_Edit1,NULL)+1;
ss.Format(_T(“%.1f”),a);
}
m_Edit1=ss;
UpdateData(false);
*pResult = 0;
}
5、当可编辑文本框的内容输入不合法时的处理:
应该为编辑框添加EN_CHANGE消息,而不是KillFocus消息。
然后在EN_CHANGE消息处理函数中添加如下代码:
UpdateData(TRUE);//将文本框中的数据取出来放到m_nEditNum里 if ((m_nEditNum>100) || (m_nEditNum<1)) {
MessageBox("输入数字不合法!"); m_nEditNum = 1; UpdateData(FALSE);//将m_nEditNum的值传给可编辑文本框 }