MFC中利用spin control控件和Edit控件实现数值的增减的使用方法

今天,遇到一个需求,在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的值传给可编辑文本框

    }
© 版权声明
THE END
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞0
分享
评论 抢沙发