C++ 为什么CSpinButtonCtrl不能正确处理大于1000的数字?
我在MFC中有一个对话框,带有一个C++ 为什么CSpinButtonCtrl不能正确处理大于1000的数字?,c++,mfc,cedit,C++,Mfc,Cedit,我在MFC中有一个对话框,带有一个CSpinButtonCtrl和一个附加的好友(CEdit)。当自旋控制的最大值低于1000时,它们可以正常工作,但如果该值较高,则当该值为1000或更高时,CEdit中的值被钳制为千个单位(例如,它被钳制为4,而不是4345) 以编程方式设置范围: const int max_value = 5000; auto spin = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_1); spin->SetRange(1, max_
CSpinButtonCtrl
和一个附加的好友(CEdit
)。当自旋控制的最大值低于1000时,它们可以正常工作,但如果该值较高,则当该值为1000或更高时,CEdit
中的值被钳制为千个单位(例如,它被钳制为4,而不是4345)
以编程方式设置范围:
const int max_value = 5000;
auto spin = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_1);
spin->SetRange(1, max_value);
知道发生了什么吗?由于我找不到任何相关问题,我将发布我的查询: 问题产生于这样一个事实,即当CSpinButtonCtrl设置好友的文本时,它会将其数值转换为默认包含千位分隔符的字符串。可以注意到,
CEdit
控件设置为仅接受数字。由于千位分隔符不是一个数字,CEdit
将文本夹在其上,只将文本保留在分隔符的左侧(在我的例子中是千位)
要解决此问题,只需将样式添加到旋转控件:
CONTROL "",IDC_SPIN_1,"msctls_updown32",UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,313,42,11,14
当然,另一个选项是从编辑控件中删除ES_编号
,但这不是我的UI需要
CONTROL "",IDC_SPIN_1,"msctls_updown32",UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,313,42,11,14