コンボボックスの追加

[戻る]
まる 2006/07/19(水) 16:48:45
かなりの初心者なのですが質問があります。今既存のDlg.cppにコンボボックスを追加し
ようとしています。
Dlg.Cppに関数としてコンボボックスのリストを追加する関数作っているのですが
Insertstringをするとエラーが起きてしまいます。

void 〜SetDlg::ComboCondition()
{
m_cmb.InsertString(-1,"test");
}

もともとあるやつにコンボボックスを貼り付けて変数の追加をし名前をm_cmbとしました。
手探りで作っているのですが、よく分からなくなってきました。。どうかお願いします。

επιστημη 2006/07/19(水) 16:56:53
> Insertstringをするとエラーが起きてしまいます。

質問ヘタすぎ。
「エラーが起きてしまいます」だけじゃわかりません。

コンパイル・エラーですか? 実行時エラーですか?
どんな症状(エラーメッセージ)ですか?

まる 2006/07/19(水) 17:15:54
すいませんでした。仰るとおりですね。
エラーは実行時におきます。
メッセージは以下の通りです。
For information on how your program can cause an asertion failure,
see the Visual C++ documentation on asserts.
です。

επιστημη 2006/07/19(水) 17:35:34
- そのエラーはどの行で発生していますか?
- 〜SetDlg::ComboCondition() は何時呼びましたか?
 ダイアログが画面に現れる以前だと(コンボボックスは未だ世の中に存在しないのだから)
  エラーが起こってアタリマエですよ?

まる 2006/07/19(水) 17:58:13
MFCATL\ship\atlmfc\include\afxwin2.inl の 761行目
確かにdlg.DoModalでダイアログを表示させる前にやろうとしていたみたいです。

Blue 2006/07/20(木) 00:51:36
> ダイアログを表示させる前にやろうとしていたみたいです。
DoModalしないと、ダイアログ上のコントロールつまりコンボボックスはまだ作られてい
ないことになります。
コンボボックスもない状態で追加はできません。
(紙がないのに字はかけないということ)

ダイアログを表示する(DoModalする)前に、直接設定せずに
もろもろの情報を渡してあげて、ダイアログを表示した後にその情報からコンボボック
スを設定するようなつくりに変えないとダメでしょう。

まる 2006/07/20(木) 09:45:33
Blue様ありがとうございます。
処理の流れも追えてない状態で質問をしたようで申し訳ございませんでした。

よろしければ質問なのですが、今iniファイルからリストの項目となるデータを構造体に
取り込んで
そのデータをリストとして表示させたいと考えています。

iniファイルからのデータの取得は出来ているのですが、そこからリストの表示が上手く
いっていません。
アドバイスを受けましたので、そのデータを渡してダイアログ表示後コンボボックスを設
定するように作らないといけないと言う事は分かったのですが

>もろもろの情報を渡してあげて、ダイアログを表示した後にその情報からコンボボック
スを設定するようなつくりに変えないとダメでしょう。

のイメージがいまいち沸きません。DoModal後にAddstringなどを行うと言う事でしょうか?

三草 2006/07/20(木) 09:59:05
1.サブダイアログ(でいいのかな?)の変数に「もろもろの情報」を渡しておく
2.サブダイアログのOnInitDialog()内で、「もろもろの情報」を
  コンボボックスに追加する
3.メインダイアログでサブダイアログをDomodalする
4.コンボボックスに表示される

でいかがでしょう

まる 2006/07/20(木) 10:09:51
三草様ありがとうございます。
その手順で色々調べつつ一度挑戦してみようかと思います。
ご丁寧にありがとうございます。

まる 2006/07/20(木) 16:08:43
[[解決]]
チェックを入れるのを忘れていました。
皆様どうもありがとうございました。

古いスレッドには追加発言できません。