モーダルダイアログからの値取得

[戻る]
まりのちゃん 2006/06/21(水) 20:05:55
どなたかモーダルダイアログからの値の取得方法をご存知ないでしょうか?

やりたいことは以下です。
入力フィールドをもったダイアログを親ダイアログからDoMadalでオープン
↓
入力フィールドに値を入力し、OKボタンを押下(ここで画面クローズ)
↓
親ダイアログでその値を取得
です。

今現在下記のようなロジックを実装していますが、
-------------------------------------------
CString Str;
int BtnKind = (int)ChiledDlg.DoModal();
if (BtnKind == IDOK){
 ChiledDlg.m_User.GetWindowText(Str);
}
--------------------------------------------
Assertion Failedが発生していて、
トレースするとどうやらGetWindowTextの
ASSERT(::IsWindow(m_hWnd))で落ちています。
まずそもそもこの実装方法でいいのか?
(画面クローズした場合ってその後にその画面のメンバにはアクセスできないのかな?)
というところと、
この方法でよかった場合に何か他に手続き的な処理が必要なのか?
などわかる方いらっしゃいましたら返答お願いします。

Blue 2006/06/21(水) 20:14:10
> GetWindowText
はウィンドウがないと使えません。
(ダイアログが閉じれるとウィンドウはなくなります)

別のメンバ変数に入れるようにしてみてはどうでしょうか?

もしくは
> m_User
をコントロール変数ではなく、CStringの変数にしてみるとか(これは自信ない)

まりのちゃん 2006/06/21(水) 20:31:17
[[解決]]
Blueさん
ありがとうございました。
解決です。

子ダイアログにCString m_UserStrのメンバ変数を設定
OnBnClickedOk()のOnOKの前で
m_User.GetWindowText(m_UserStr);
を実装

親ダイアログ側で
CString Str;
int BtnKind = (int)ParamInputDlg.DoModal();
if (BtnKind == IDOK){
    Str = ParamInputDlg.m_UserStr;
}
で値の取得成功しました。

ホントたすかりました。
ありがとうございました。

PATIO 2006/06/22(木) 10:59:08
ちなみに入力されたデータのチェック等が特に必要ないのであれば、
Blueさんが書いているようにCEditのコントロール変数を作成するのではなく、
CString型の値を受け取る変数をCEditに関連付けて作成するだけで
取り込みは可能になりますよ。
確か既定のOnOkが中でCDialog::Updateを呼んでいたはずなので。

VCのバージョンがわからないのでどの機能を使ってとは書きにくいですけれど。

PATIO 2006/06/22(木) 10:59:59
失礼、
CDialog::UpdateではなくてCDialog::UpdateDataでした。

PATIO 2006/06/22(木) 11:01:22
がーん。
CDialog::UpdateDataではなくてCWnd::UpdateDataが正確な表現なのね。
確認してから書くべきでした。

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