vs2008 edit spin 十六进制实现
添加时间:2013-8-6 点击量:
因为做的器材中涉及到一个控件,查了一下叫spin box,然则,spin box控件只在对话框里面才干应用,并且斗劲麻烦,更何况还要用十六进制,查到就有可多edit+spin来做,后来找到一个样例着手开端做,做到后来发明只支撑十进制,于是就本身测验测验着来做
起首申明一下我做的spin box的目标结果:
1、可以直接输入
2、点击高低箭头加减1
申明:所有过程都是十六进制
接下来介绍一下edit+spin的应用
1、控件属性设置:
Spin:①Auto Buddy:True②Set Buddy Integer:False③Arrow Keys:True
关于第二点申明一下:底本参考别人的是True,后来发明一向是十进制,十六进制显示不了,查看微软注释就熟悉打听了:Set Buddy Integer,指定命值调节钮控件在它的地位改变时设置合作者窗口的文本。
Edit:默认
2、变量定义及事务添加
①在窗口类里面定义两个变量:
CSpinButtonCtrl m_spinAddress;
CString m_editAddress;
②DoDataExchange(CDataExchange pDX)函数里面接洽关系控件跟变量(关于这个参考MSDN)
DDX_Control(pDX, IDC_SPIN_ADDRESS, m_spinAddress);
DDX_Text(pDX, IDC_EDIT_ADDRESS, m_editAddress);
③在spin控件添加UDN_DELTAPOS(指导控件的地位即将更改)
3、OnDeltaposSpinAddress(NMHDR pNMHDR, LRESULT pResult)事务内容
void CSolutionDlg::OnDeltaposSpinAddress(NMHDR pNMHDR, LRESULT pResult)
{
LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
// TODO: 在此添加控件通知处理惩罚法度代码
UpdateData(TRUE); //用控件的值更新控件变量的值
if(pNMUpDown->iDelta > 0) //spin往上
{
if(!m_editAddress.IsEmpty())
{
int value = _tcstoul(m_editAddress, 0, 16);
value ++;
m_editAddress.Format(%X, value);
}
}
else if(pNMUpDown->iDelta < 0)
{
if(!m_editAddress.IsEmpty())
{
int value = _tcstoul(m_editAddress, 0, 16);
value --;
m_editAddress.Format(%X, value);
}
}
UpdateData(FALSE); //用控件变量的值更新控件
pResult = 0;
}
补充小常识:UpdateData()
对于可以接管数据的控件,如编辑控件来说,UpdateData()函数至关首要。当控件内容产生变更时,对应的控件变量的值并没有跟着变更,同样,当控件变量值变更时,控件内容也不会跟着变。
UpdateData()函数就是解决这个题目的。
UpdateData(true); 把控件内容装入控件变量
UpdateData(false); 用控件变量的值更新控件
最后补一张成果靓照
容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永
因为做的器材中涉及到一个控件,查了一下叫spin box,然则,spin box控件只在对话框里面才干应用,并且斗劲麻烦,更何况还要用十六进制,查到就有可多edit+spin来做,后来找到一个样例着手开端做,做到后来发明只支撑十进制,于是就本身测验测验着来做
起首申明一下我做的spin box的目标结果:
1、可以直接输入
2、点击高低箭头加减1
申明:所有过程都是十六进制
接下来介绍一下edit+spin的应用
1、控件属性设置:
Spin:①Auto Buddy:True②Set Buddy Integer:False③Arrow Keys:True
关于第二点申明一下:底本参考别人的是True,后来发明一向是十进制,十六进制显示不了,查看微软注释就熟悉打听了:Set Buddy Integer,指定命值调节钮控件在它的地位改变时设置合作者窗口的文本。
Edit:默认
2、变量定义及事务添加
①在窗口类里面定义两个变量:
CSpinButtonCtrl m_spinAddress;
CString m_editAddress;
②DoDataExchange(CDataExchange pDX)函数里面接洽关系控件跟变量(关于这个参考MSDN)
DDX_Control(pDX, IDC_SPIN_ADDRESS, m_spinAddress);
DDX_Text(pDX, IDC_EDIT_ADDRESS, m_editAddress);
③在spin控件添加UDN_DELTAPOS(指导控件的地位即将更改)
3、OnDeltaposSpinAddress(NMHDR pNMHDR, LRESULT pResult)事务内容
void CSolutionDlg::OnDeltaposSpinAddress(NMHDR pNMHDR, LRESULT pResult)
{
LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
// TODO: 在此添加控件通知处理惩罚法度代码
UpdateData(TRUE); //用控件的值更新控件变量的值
if(pNMUpDown->iDelta > 0) //spin往上
{
if(!m_editAddress.IsEmpty())
{
int value = _tcstoul(m_editAddress, 0, 16);
value ++;
m_editAddress.Format(%X, value);
}
}
else if(pNMUpDown->iDelta < 0)
{
if(!m_editAddress.IsEmpty())
{
int value = _tcstoul(m_editAddress, 0, 16);
value --;
m_editAddress.Format(%X, value);
}
}
UpdateData(FALSE); //用控件变量的值更新控件
pResult = 0;
}
补充小常识:UpdateData()
对于可以接管数据的控件,如编辑控件来说,UpdateData()函数至关首要。当控件内容产生变更时,对应的控件变量的值并没有跟着变更,同样,当控件变量值变更时,控件内容也不会跟着变。
UpdateData()函数就是解决这个题目的。
UpdateData(true); 把控件内容装入控件变量
UpdateData(false); 用控件变量的值更新控件
最后补一张成果靓照
容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永