- ベストアンサー
スピンボタンの使い方
- Windows XP、VC++6.0、MFC AppWizard(exe)のプログラム環境でスピンボタンを使う方法について説明します。
- スピンボタンの配置やメンバ変数の追加は問題ありませんが、実行時にエラーが発生してしまいます。
- スピンボタンの初期値やレンジ、増加幅、減少幅の設定方法についてアドバイスをいただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
すみません.ちょっとコードが間違えてました CSpinButtonCtrl* m_Spin = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN1); でしたね.まえのコードでは"GetDlgIte"で,"m"が足りませんでした. このコードで,ClassWizardを使って自動的にメンバ変数を作るところを直接入力して,スピンコントロールのメンバ変数を作っています. このメンバ変数はポインタで定義されているので m_Spin->SetPos()で初期値を,m_Spin->SetRange()で範囲を決定させます.たぶんm_Spin->までうったらVCなら候補がでると思いますよ. >また、変数m_Spinの使い道が分からないのですが、 スピンボタンをクリックして、変化した値がm_Spinに格納されるので しょうか? スピンコントロールは単体で使うことはまずありません.基本的にはエディットボックスにくっつけて使うのがほとんどです. ですのでスピンボックスのアップダウンボタンをクリックすることで,エディットボックス内の数字を上下させます.なので,スピンボタンをクリックして変化した値は,エディットボックスのメンバ変数に格納されますね. スピンボタンのメンバ変数m_Spinの使い道としては ・くっついているエディットボックス内の数字の初期値の設定 ・その数字の範囲の設定 ・その数字の増分の設定 といったことをしてくれます.
その他の回答 (1)
- fujtomo
- ベストアンサー率100% (1/1)
こんにちは.自分もまだまだVCはじめたばっかりなのですが,前に同じ症状になったことがあったので回答させて頂きます. まず,メンバ変数を追加したら「ハンドルされていない~」っていうのがデバック時にでる理由はよくまだわからないのですが,自分のときは CSpinButtonCtrl* m_*** = (CSpinButtonCtrl*)GetDlgIte(IDC_***) とメンバ変数をClassWizardを使わないで定義したらうまくコンパイルが通りました. スピンボタンの設定ですが 初期値40はSetPos(40) レンジ0~80はSetRange(0,40) 増加幅,減少幅の設定は http://athomejp.com/goldfish/mfc/cobject/spinstep.asp をみてみたらいかがでしょうか?
補足
fujtomo様、有難うございます。 CSpinButtonCtrl* m_Spin = (CSpinButtonCtrl*)GetDlgIte(IDC_SPIN1) を、OnInitDialog()の関数内にコーディングしました。 スピンボタンの設定で SetPos() SetRange() を使ったのですが、どちらも「定義されていない識別子です。」 とエラーが出ました。 何かインクルードする必要があるのでしょうか? また、変数m_Spinの使い道が分からないのですが、 スピンボタンをクリックして、変化した値がm_Spinに格納されるので しょうか? 宜しければご指摘お願い致します。
お礼
fujtomo様、有難うございます。 以下のコーディングで、範囲、増分の設定ができました。 UDACCEL udAccel;//構造体 udAccel.nSec = 0;//意味不明 udAccel.nInc = 10;//1クリックの増加数 CSpinButtonCtrl* m_Spin=(CSpinButtonCtrl*)GetDlgItem(IDC_SPIN1); m_Spin->SetPos(40); m_Spin->SetRange(0,100); m_Spin->SetAccel(1,&udAccel); また、以下のコーディングでエディットボックスの値を取得する 事もできました。 char pcScaleDown[3] = {3,0,0}; BYTE bScaleDown;//エディットボックスの値 CEdit* m_bScaleDown; m_bScaleDown = (CEdit*)GetDlgItem(IDC_EDIT5); m_bScaleDown->GetLine(0,pcScaleDown); bScaleDown = atoi(pcScaleDown); スピンボタンの使用を諦めかけていたので、出来て本当にうれしいです。 有難うございました。