電子書籍の厳選無料作品が豊富!

<プログラム環境>
Windows XP
VC++6.0
MFC AppWizard(exe)
ダイアログベース

<症状>
ダイアログエディタでスピンボタンを配置し、ClassWizardでCSpinButtonCtrl型のメンバ変数を追加しました。

その後コンパイルするとエラー出ないのですが、実行出来ませんでした。

デバッグをすると、「ハンドルされていない例外は、試作.exeに
あります:0xC0000005: Access Violation。」
が表示されて、それ以上先には進めません。

メンバ変数を削除すると、症状は無くなります。

<質問>
メンバ変数を追加するだけで何故このような症状が出るのでしょうか?

スピンボタンでは
初期値40
レンジ:0~80
増加幅:10
減少幅:-10
で設定したいのですが、どのようにしたら良いのでしょか?

宜しければご指摘お願い致します。

A 回答 (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の使い道としては
・くっついているエディットボックス内の数字の初期値の設定
・その数字の範囲の設定
・その数字の増分の設定
といったことをしてくれます.
    • good
    • 0
この回答へのお礼

fujtomo様、有難うございます。

以下のコーディングで、範囲、増分の設定ができました。
UDACCELudAccel;//構造体
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);

また、以下のコーディングでエディットボックスの値を取得する
事もできました。
charpcScaleDown[3] = {3,0,0};
BYTEbScaleDown;//エディットボックスの値
CEdit* m_bScaleDown;
m_bScaleDown = (CEdit*)GetDlgItem(IDC_EDIT5);
m_bScaleDown->GetLine(0,pcScaleDown);
bScaleDown = atoi(pcScaleDown);

スピンボタンの使用を諦めかけていたので、出来て本当にうれしいです。
有難うございました。

お礼日時:2008/06/30 16:15

こんにちは.自分もまだまだVCはじめたばっかりなのですが,前に同じ症状になったことがあったので回答させて頂きます.


まず,メンバ変数を追加したら「ハンドルされていない~」っていうのがデバック時にでる理由はよくまだわからないのですが,自分のときは
CSpinButtonCtrl* m_*** = (CSpinButtonCtrl*)GetDlgIte(IDC_***)
とメンバ変数をClassWizardを使わないで定義したらうまくコンパイルが通りました.

スピンボタンの設定ですが
初期値40はSetPos(40)
レンジ0~80はSetRange(0,40)
増加幅,減少幅の設定は
http://athomejp.com/goldfish/mfc/cobject/spinste …
をみてみたらいかがでしょうか?

この回答への補足

fujtomo様、有難うございます。

CSpinButtonCtrl* m_Spin = (CSpinButtonCtrl*)GetDlgIte(IDC_SPIN1)
を、OnInitDialog()の関数内にコーディングしました。

スピンボタンの設定で
SetPos()
SetRange()
を使ったのですが、どちらも「定義されていない識別子です。」
とエラーが出ました。
何かインクルードする必要があるのでしょうか?

また、変数m_Spinの使い道が分からないのですが、
スピンボタンをクリックして、変化した値がm_Spinに格納されるので
しょうか?

宜しければご指摘お願い致します。

補足日時:2008/06/25 16:32
    • good
    • 0

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