我在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);
知道发生了什么事吗?
答案 0 :(得分: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需求。