3

MFC で、CSpinButtonCtrlとアタッチされたバディ ( CEdit) を含むダイアログがあります。スピン コントロールの最大値が 1000 よりも小さい場合は正しく機能しますが、それよりも大きい場合CEdit、値が 1000 以上の場合、値は 1000 単位に固定されます (4345 ではなく 4 に固定されます)。例えば)。

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 に答える