ダイアログバーにエディットボックスを貼り付けて – プログラミング – Home

ダイアログバーにエディットボックスを貼...
 
通知
すべてクリア

[解決済] ダイアログバーにエディットボックスを貼り付けて


熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

MFC VC++6.0XP
ダイアログバーにエディットボックスを貼り付けて、スピンコントロールをアタッチさ
せたいのですが、スピンコントロールのSetRange()をどこで実行するのか、よくわかり
ません。

ダイアログがベースであれば、OnInitDialog()でおこなうのが一般的だそうですが、ダ
イアログバーがベースの場合、OnInitDialog()は、つかえません、OnCreate()に記述す
ると、まだ、ウインドウができていないためなのか、落ちてしまいます。

OnInitDialog()が使えない場合の一般的な、コントロールの初期化や、属性の設定は、
なにか、一般的な方法があるように思うのですが、詳しい方よろしくおねがいします。


引用未解決
トピックタグ
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

ON_MESSAGEマクロを使ってWM_INITDIALOGハンドラを
手動で追加すればできるようです。


返信引用
熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

subaruさん、レスありがとうございます。

ON_MESSAGE(WM_INITDIALOG,OnInitDialog)

を記入したことで、OnInitDialog() は、よばれるようになりましたが、スピンコントロ
ールの設定で落ちてしまいます。???どうしましょうかと悩んでいます。

BOOL CXXXX::OnInitDialog()
{
// CDialogBar::OnInitDialog(); // CDialogBarにはOnInitDialog()は、ないで
コンパイルエラーになります。コメントアウトしました

// TODO: この位置に初期化の補足処理を追加してください

AfxMessageBox(OnInitDialog() ) ; // <- お蔭様でちゃんと実行しました
m_spin1.SetPos(135); // <- ここで落ちてしまいます。

return TRUE;
}


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

おそらくDDXが機能してないのでしょうが
まじめにやるならDoDataExchangeを手動で実装して
使う前にUpdateData(FALSE)を呼ぶことになりそうです。

とりあえず動けばよいのなら以下のように修正。

// TODO: この位置に初期化の補足処理を追加してください

AfxMessageBox(OnInitDialog() ) ; // <- お蔭様でちゃんと実行しました
CSpinButtonCtrl& m_spin1 =
*static_cast<CSpinButtonCtrl*>(GetDlgItem(IDC_SPIN1));
m_spin1.SetPos(135); // <- ここで落ちてしまいます。

return TRUE;


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

変数名をそのままにしてしまいましたが
m_spin1はクラスメンバでなく、ただのローカル変数です。


返信引用
熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

subaruさん、レスありがとうございました。
動作しました。
(ソースは、subaruさんが載せていただいたので、載せません)
もう、何日もかんがえてたので、とても助かりました、ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました