MFC、VC++4.0でダイアログのリストボックスの中にループ処理ごとに得られるデータを書き込
み、ループの最後に得られたデータを書き込んだときに、結果としてこのダイアログを表示させ
たいのですが、なにかアドバイスをいただけたらうれしいです。
やりたい事だけを説明しても、
「じゃあ、がんばってくださいね」
としか言えません。
この機能を実現するためにめんたいさんが行ったとこ、
現状、および問題点を明記してください。
読み込んだデータをリストボックスへ出力し、そのデータを保存させるにはどのようにすればよ
ろしいのでしょうか?
VC++4.0、MFCで作業してます。
残念ながらまだ情報が足りません。
最初の内容も合わせて読んでもまだ良くわからないです。
単語の省略をせずに自分ではあたりまえと思っているような部分もきちんと書いてください。
貴方にとってのあたりまえが呼んでいる人にとってあたりまえとは限りません。
例えば、
ループの最後に得られたデータを書き込んだときにダイアログを表示とありますけれど、
ということは最後のデータが得られるまでダイアログを出したくないということでしょうか?
読み込んだデータとはどこから読み込むのですか?
データを保存させるとはどこに保存するのですか?
質問なれしていないのかも知れませんが、今書き込んでいる内容で回答を望んでも
多分、満足な回答は得られないと思いますよ。
今の内容で回答できるのは貴方の隣で作業しているような身近な人だけでしょう。
>貴方にとってのあたりまえが呼んでいる人にとってあたりまえとは限りません。
もとい、
貴方にとってのあたりまえが読んでいる人にとってあたりまえとは限りません。
ですね。
説明が足らず申し訳ありません。最後のデータを読み込むまでダイアログは表示させないように
して、ループ間に読み込んだデータを全て表示させたいと思っています。
もう少し詳しく、1ループで1データをとってくるのですが、1ループごとにデータをダイアログ
のリストボックスに移し、このデータをリストボックスに記憶させ、最後のデータを読み込んで
リストボックスに移したところで、データが全て入った状態のリストボックスを読み込んだファ
イルを確認するための結果として、最後に表示させたいのですが、リストボックスに記憶させる
ことはできるのでしょうか?よろしくお願いします。
> (略)...はできるのでしょうか?
できます。
>> この機能を実現するためにめんたいさんが行ったとこ、
>> 現状、および問題点を明記してください。
あいかわらず、この部分の説明がないですが…。
めんたいさんは単に可能か否かの回答を求めているわけではないですよね?
めんたいさんの分からない部分はどこですか?
1) 1ループで1データを取ってくる処理
2) 1ループごとにデータをダイアログのリストボックスに移す処理
3) このデータをリストボックスに記憶させる処理
4) データが全て入った状態のリストボックスを表示させる処理
5) その他
また、めんたいさんはこの処理を行うプログラムを作成していますか?
作成したならば、プログラムはどのような状態ですか?
コンパイルできますか?
コンパイルは可能であれば、一部分でも動作しますか?
デバッガを使って動作を確認しましたか?
それとも、プログラムを丸ごと作って欲しいのですか?
リストボックスの内容を保存する方法を知りたいです。
コンパイルはできます。現状として、ダイアログの表示はできます。読み込んだデータがリスト
ボックスに1つしか表示されていない状態です。
デバッガで追跡してます...?
>リストボックスの内容を保存する方法を知りたいです
リストボックスの内容を取得する方法知ってますか?
保存場所はどこですか
構造体ポインタ、データファイルなどいろいろありますけど...
実際に書いたソースコードを抜粋してアドバイスもらったほうが良くないですかね
やりたいことは、なんとなくしか分からないので
もう少し具体的回答もらえるかも知れませんよ!
リストボックスの内容を 保存する。っていうのが、方針として違うような気がしますが?
保存したいのは、(どこに表示されていようがいなかろうが)
ループごとに得られるデータ ですよね。
表示と保存は全然別の行為なのでいっしょに考えないほうがいいと思います。
問題をもうちょっと分割して一つ一つ片付けましょう。
コードを載せて説明します。
/////////////////////////////////////////////////////////////////////////////
//
// 関数 : SetStatus()
//
// 機能 : 読込結果を取得する
//
// 戻り値 : なし
//
void CFDList::SetStatus(LPREADSTA lpsta)
{
sta = *lpsta;
}
BOOL CFDList::OnInitDialog()
{
CDialog::OnInitDialog();
char szData[256];
// TODO: この位置に初期化の補足処理を追加してください
wsprintf(szData,%s %d %d %d %s %4d %4d,
sta.szFileName, // ファイル名
sta.szDate, // 送信日付
sta.szStartTime, // 開始時刻
sta.szEndTime, // 終了時刻
sta.szProgram, // 放送行事名
sta.wReadCnt, // 読込会館数
sta.wReceiveCnt // 受信会館数
);
// リストボックスに追加
m_FDL.AddString(szData);
return TRUE; // コントロールにフォーカスを設定しないとき、戻り値は TRUE
となります
// 例外: OCX プロパティ ページの戻り値は FALSE となります
}
staに取得してきた情報を入れて、szDataへ移し、AddStringでリストボックスへ表示させてい
ます。staにデータが入る部分がループによって繰り返され、その都度この処理が繰り返され
る。伺いたいのは、1度AddStringでリストボックスに表示させた情報をそのままリストボック
スに残しておく方法を教えてください。現状では、1つしかデータが残りません。
MFC、VC++4.0で開発しています。
リストボックスに複数の項目を表示するには、
AddStringを複数回呼び出します。
LPCTSTR data[] = { joe, alice, bob };
for (int i = 0; i < 3; i++)
m_listBox.AddString(data[i]);
めんたいさんのコードにループが見当たりません。
OnInitDialogは、CDialogの表示を開始する時に一回しか呼ばれませんよ。
ダイアログへの表示データの設定をOnInitDialogでやるのでしたら、
ダイアログクラスにstaの配列でも用意して、予めデータを全てセットしてから
DoModalをコールしないと駄目です。
この辺はCDialogクラスの動作についてきちんと勉強された方がよろしいと思います。
中途半端な状態で進むとますますこんがらがると思いますので。