为什么 CSpinButtonCtrl 不能正确处理大于 1000 的数字?
Why CSpinButtonCtrl is not handling correctly numbers higher than 1000?
我在MFC中有一个对话框,上面有一个CSpinButtonCtrl
和一个附加的伙伴(CEdit
)。当旋转控制的最大值低于 1000 时,它们可以正常工作,但如果它更高,则当值为 1000 或更高时,CEdit
中的值被钳制为千个单位(例如,它被钳制为 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 需要。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- C++:创建1000次唯一的随机分布,在任何分布中都没有重复的数字
- 为什么 CSpinButtonCtrl 不能正确处理大于 1000 的数字?
- 生成从 1 到 1000 的卡拉奇特系列的程序,其中包括数字和字母
- 这是否可以通过 C++ 或 C# 中的某种数学运算将 1000 万位数字转换为 1000 位数字
- 程序不适用于大于 1000 的数字
- C++STL列表崩溃,数字超过1000 000 000 000
- 如何在 C/C++ 中计算一个数字中的位数,最多 1000 位