【问题标题】:Why CSpinButtonCtrl is not handling correctly numbers higher than 1000?为什么 CSpinButtonCtrl 不能正确处理大于 1000 的数字?
【发布时间】:2018-05-07 15:11:31
【问题描述】:

我在 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);

知道发生了什么吗?

【问题讨论】:

    标签: c++ mfc cedit


    【解决方案1】:

    由于我无法找到任何相关问题,我正在发布我的查询:

    问题源于这样一个事实,当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 需要。

    【讨论】:

      猜你喜欢
      • 2013-05-15
      • 2019-05-21
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 2022-01-02
      相关资源
      最近更新 更多