プロが教える店舗&オフィスのセキュリティ対策術

下記コードを記入し、スピンボタンの増加をクリックすると
最初の一回目に触った時のみ値がマイナスされる現象がでます。
なぜでしょうか?

1)INIファイルから値を読み込みエデットボックスに表示する。
2)スピンボタンの増加をクリックすると、最初の一回目に触った時のみ値がマイナスされる
(エデットボックスの値が50だとすると49になる)
3)再度INIファイルから値を読み込みエデットボックスに表示する。
4)二回目からマイナスされない。
(エデットボックスの値が50だとすると51になる)

スピンボタンのOnDeltapos


UDACCEL stUD;
stUD.nSec = 1;
stUD.nInc = 1; // ここで変化量設定

CSpinButtonCtrl* m_Spin=(CSpinButtonCtrl*)GetDlgItem(IDC_SPIN1);
m_Spin->SetRange32(0,300); //レンジ

CString str;
((CEdit*)GetDlgItem(IDC_EDIT1))->GetWindowText(str);//エディットから文字列を
int a=atoi(str);//文字列を数字に変換
m_Spin->SetPos(a); //初期値
m_Spin->SetAccel(1,&stUD);//変化量
m_Spin->SetBuddy((CSpinButtonCtrl*)GetDlgItem(IDC_EDIT1));//エディットに関連付け

環境
Windwos XP,Microsoft Visual C++ 6.0

「初回のスピンボタンの挙動」の質問画像

A 回答 (1件)

提示されたコードは、初期化に相当するコードでしょうから、スピンボタンがクリックされるたびに呼び出されるOnDeltaposで処理するのは不適切ではないですか?



おそらく、原因は、最初にスピンボタンがクリックされた時には、SetRange32が呼び出されていないため、初期状態の動作である減算を行っていて、その処理の途中でSetRange32しただけでは、すでに開始されている減算の処理を変えることはできないということでしょう。

初期化処理は、ダイアログならOnInitDialog、ビューならOnInitialUpdateなどで行うべきでしょう。
    • good
    • 0
この回答へのお礼

OnInitDialogでうまくなりました。
ありがとうございました。

お礼日時:2011/10/07 15:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!