MFC VC++6.0XP
ダイアログバーにエディットボックスを貼り付けて、スピンコントロールをアタッチさ
せたいのですが、スピンコントロールのSetRange()をどこで実行するのか、よくわかり
ません。
ダイアログがベースであれば、OnInitDialog()でおこなうのが一般的だそうですが、ダ
イアログバーがベースの場合、OnInitDialog()は、つかえません、OnCreate()に記述す
ると、まだ、ウインドウができていないためなのか、落ちてしまいます。
OnInitDialog()が使えない場合の一般的な、コントロールの初期化や、属性の設定は、
なにか、一般的な方法があるように思うのですが、詳しい方よろしくおねがいします。
ON_MESSAGEマクロを使ってWM_INITDIALOGハンドラを
手動で追加すればできるようです。
subaruさん、レスありがとうございます。
ON_MESSAGE(WM_INITDIALOG,OnInitDialog)
を記入したことで、OnInitDialog() は、よばれるようになりましたが、スピンコントロ
ールの設定で落ちてしまいます。???どうしましょうかと悩んでいます。
BOOL CXXXX::OnInitDialog()
{
// CDialogBar::OnInitDialog(); // CDialogBarにはOnInitDialog()は、ないで
コンパイルエラーになります。コメントアウトしました
// TODO: この位置に初期化の補足処理を追加してください
AfxMessageBox(OnInitDialog() ) ; // <- お蔭様でちゃんと実行しました
m_spin1.SetPos(135); // <- ここで落ちてしまいます。
return TRUE;
}
おそらくDDXが機能してないのでしょうが
まじめにやるならDoDataExchangeを手動で実装して
使う前にUpdateData(FALSE)を呼ぶことになりそうです。
とりあえず動けばよいのなら以下のように修正。
// TODO: この位置に初期化の補足処理を追加してください
AfxMessageBox(OnInitDialog() ) ; // <- お蔭様でちゃんと実行しました
CSpinButtonCtrl& m_spin1 =
*static_cast<CSpinButtonCtrl*>(GetDlgItem(IDC_SPIN1));
m_spin1.SetPos(135); // <- ここで落ちてしまいます。
return TRUE;
変数名をそのままにしてしまいましたが
m_spin1はクラスメンバでなく、ただのローカル変数です。
subaruさん、レスありがとうございました。
動作しました。
(ソースは、subaruさんが載せていただいたので、載せません)
もう、何日もかんがえてたので、とても助かりました、ありがとうございました。