CDialogの更新


とと  2005-10-03 21:45:51  No: 59185

はじめまして。ダイアログAにダイアログBを貼り付けているのですが、
ダイアログAからダイアログBのOnInitDialog関数処理をさせたいのですが、
どうしたらよいでしょう?ダイアログAからはダイアログBのOnInitDialogは動かせませんよね。


REE  2005-10-04 01:49:06  No: 59186

どのように貼り付けているのですか?
普通は、ダイアログBの表示時点で、OnInitDialogは呼ばれているはずです。


とと  2005-10-04 04:43:44  No: 59187

ダイアログA上のピクチャーコントロールにCreate()とMoveWindow()とShowWindow()を使ってダイアログBを貼り付けています。
詳細を申しますと、ダイアログAに保存・読み込みボタンがありまして、
ダイアログBの各コントロールの値をCSV形式に保存して、読み込むことをしているのですが、ダイアログBはダイアログAのポインタで値を設定しているのでダイアログAで読み込んでもダイアログBの各コントロールは更新されないのです・・・。


RAPT  2005-10-04 07:58:50  No: 59188

ポインタであろうがなんだろうが、OnInitDialogは呼ばれるはずです。
例え、それが意図したタイミングではないとしても。

もしかして、任意のタイミングで処理したいのですか?
ひょっとして、OnInitDialogが呼ばれるタイミング&目的を誤認している?

> ダイアログAで読み込んでもダイアログBの各コントロールは更新されない
そりゃそうでしょう。ダイアログBのコントロールの値を更新してあげなきゃ。
環境が記載されていないので、詳しくは書きませんが。


PATIO  2005-10-04 18:43:47  No: 59189

ダイアログBのクラスにダイアログAから呼び出す為の更新関数を用意すれば
良いと思いますけれど。MFCの場合、CDialogクラスから派生して各ダイアログ用の
クラスを作成しているのは、こういった独自コードを追加しやすくする為だと思います。
OnXXXX系の関数はウインドウメッセージに対応した処理を行う為の関数ですから
ウインドウメッセージが送られてこなければ、動作しません。
別に既存の関数だけにこだわる必要はないので追加すればよい話です。
逆に既存の関数は呼び出される場面が想定されている場合があるので
いつでも呼べるとは限りません。
この辺はきちんとCWndクラスやCDialogクラスの勉強をしてください。
ただ使っているだけでは覚えられないと思いますので。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加