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

10-11 17:05