其他分享
首页 > 其他分享> > c – 为什么CSpinButtonCtrl没有正确处理高于1000的数字?

c – 为什么CSpinButtonCtrl没有正确处理高于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需求.

标签:c,mfc,cedit
来源: https://codeday.me/bug/20190828/1747486.html