gpt4 book ai didi

c++ - 为什么 CSpinButtonCtrl 不能正确处理大于 1000 的数字?

转载 作者:太空狗 更新时间:2023-10-29 20:34:12 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com