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