モーダルダイアログに値を渡す。

[戻る]
ccgrape 2004/12/14(火) 01:55:59
VC++6.0なのですが、
ダイアログA(モードレス)上のボタンクリックをトリガーに
ダイアログB(モーダル)を表示しています。
その時に、ダイアログA上のエディットボックスの値を加工し、
ダイアログBに渡したいのですが、
みなさん、どんな方法を使ってらっしゃいますか?
ご経験ある方いらっしゃいましたら
教えていただけますでしょうか。
よろしくお願いします。

KING・王 2004/12/14(火) 08:32:28
最適かどうかはわかりませんが、私は次のような方法で実装したことがあります。

(1)CxxxAppクラスにメンバ変数Cを追加する。
(2)ダイアログAで、AfxGetApp()を用いてCxxxAppオブジェクトへのポインタを取得する。
(3)取得したCxxxAppオブジェクトを用いて、メンバCに値を設定する。
(4)ダイアログBで、AfxGetApp()を用いてCxxxAppオブジェクトへのポインタを取得する。
(5)取得したCxxxAppオブジェクトを用いて、メンバCの値を取得する。

MFCのダイアログベースのアプリで用いた手法です。
メンバへのアクセスなどに関しては、適宜、アクセス用のメンバ関数を用意するなり、
メンバ変数をpublicにするなりして下さい。

123 2004/12/14(火) 09:50:11
DoModal()の前に、DialogBへ値を渡すだけじゃないの

void CDialogA::On*****()
{
UpdateData(TRUE);
dataNew = データ加工;
CDialogB dlgB;
digB.**** = dataNew;
dlgB.Domodal();
}

PATIO 2004/12/14(火) 10:10:07
ダイアログAとダイアログBの関係が書かれていないので
なんとも言いかねますね。
ダイアログAがダイアログBを直接出しているのであれば、
123さんの書かれている通りだろうし、
KING・王さんのやり方ならダイアログAが設定さえしていれば、
ダイアログBが何処から表示されても出せるでしょう。
ウインドウ間でデータの受け渡しをしたい時には、
受け渡しをするウインドウ間の関係が大きくかかわってくるので
必ず説明する必要があります。
ご注意を。

ccgrape 2004/12/16(木) 19:26:43
[[解決]]
KING・王さん、123さん、PATIOさん
ご返答いただきありがとうございます.

単純に、DialogAからDialogBを直接出していますので、
123さんの書かれている通りでOKでした。

質問の仕方が悪く申し訳ございませんでした.

皆様本当にありがとうございました.

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