生成したダイアログで再描画

[戻る]
おぐけん [E-Mail] 2001/11/03(土) 22:48:37
こんにちわ。おぐけんといいます。
VC++でプログラムを組んでいるのですが、どうしても分からない
ところがあるので教えてください。
今、簡単な住所録を作っています。(VC++の勉強として)検索結果(例えば氏名に
*を使い検索させる。)を別画面で表示し、その中で「次へ」「前へ」
というボタンを用意し、生成した画面上でデータを表示させようと考えているので
すが、うまく再描画してくれません。一件目はうまく表示できます。(検索結果画面
を生成し表示するとき。)でその画面で、次のデータを表示させようとしてもうまく
表示できません。メンバ変数に入れ、UpdateData(FALSE)を実行しているのですが、
それでは駄目なのでしょうか。
初歩的なことで申し訳ありませんが、教えてください。

ku 2001/11/05(月) 09:36:55
ダイアログを作ってエディットを実装しClassWizardでメンバ変数を
m_strとして追加したとします

あるボタンのイベントで
static int n = 0;
static char* apTest[] = {"test0", "test1", "test2", "test3", "test4"};
n++;
if (n >= sizeof(apTest) / sizeof(char*)) {
    n = 0;
}
m_str = apTest[n];
UpdateData(FALSE);

とやればエディットを更新できましたよ

たけみ 2001/11/05(月) 22:27:03
UpdateData関数は変数のあるオブジェクトのデータを一括してやり取りします。
「『名前』のトコだけでいいんですけど…」
とかでしたらGet/SetDialogItem関数とかもありますが、
こだわりがない限りUpdateDataの方がラクです。

ところで一括してデータを扱うというのは適切な表現ではないのですが、
・取れと言われればムキになって全部とってくる
・出せと言われれば洗いざらい出してしまう
という見方によってはおバカさんな行動をとります。

またUpdateData関数に限らず、出力する時は
kuさんのサンプルソースの様に関数の一番最後で呼び出すのが普通です。

基本的なことをだらだらと書いてしまいました。
ソース見てないのでなんとも言えませんが
もしかしたら変数処理系の方がまずいのかもしれませんね。
(2件目(以降)のデータがうまく入っていないとか。)

おぐけん [E-Mail] 2001/11/05(月) 22:33:27
[[解決]]
再度じっくり見直してみると、生成したダイアログのDoDataExchangeメソッドの中で
初期化していたため、画面更新するたびに初期化されていたみたいです。
kuさん、たけみさん、コメントありがとうございます。
初歩的な間違いでした。どうもすいません。

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