为什么 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 需要。
我在 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 需要。