はじめまして。ダイアログAにダイアログBを貼り付けているのですが、
ダイアログAからダイアログBのOnInitDialog関数処理をさせたいのですが、
どうしたらよいでしょう?ダイアログAからはダイアログBのOnInitDialogは動かせませんよね。
どのように貼り付けているのですか?
普通は、ダイアログBの表示時点で、OnInitDialogは呼ばれているはずです。
ダイアログA上のピクチャーコントロールにCreate()とMoveWindow()とShowWindow()を使ってダイアログBを貼り付けています。
詳細を申しますと、ダイアログAに保存・読み込みボタンがありまして、
ダイアログBの各コントロールの値をCSV形式に保存して、読み込むことをしているのですが、ダイアログBはダイアログAのポインタで値を設定しているのでダイアログAで読み込んでもダイアログBの各コントロールは更新されないのです・・・。
ポインタであろうがなんだろうが、OnInitDialogは呼ばれるはずです。
例え、それが意図したタイミングではないとしても。
もしかして、任意のタイミングで処理したいのですか?
ひょっとして、OnInitDialogが呼ばれるタイミング&目的を誤認している?
> ダイアログAで読み込んでもダイアログBの各コントロールは更新されない
そりゃそうでしょう。ダイアログBのコントロールの値を更新してあげなきゃ。
環境が記載されていないので、詳しくは書きませんが。
ダイアログBのクラスにダイアログAから呼び出す為の更新関数を用意すれば
良いと思いますけれど。MFCの場合、CDialogクラスから派生して各ダイアログ用の
クラスを作成しているのは、こういった独自コードを追加しやすくする為だと思います。
OnXXXX系の関数はウインドウメッセージに対応した処理を行う為の関数ですから
ウインドウメッセージが送られてこなければ、動作しません。
別に既存の関数だけにこだわる必要はないので追加すればよい話です。
逆に既存の関数は呼び出される場面が想定されている場合があるので
いつでも呼べるとは限りません。
この辺はきちんとCWndクラスやCDialogクラスの勉強をしてください。
ただ使っているだけでは覚えられないと思いますので。
ツイート | ![]() |