3

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

知道发生了什么吗?

4

1 回答 1

5

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

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

于 2018-05-07T15:11:31.160 回答