他ダイアログのEditの値を取得

[戻る]
けん★ 2002/01/15(火) 13:34:28
MFC使用でダイアログベースのアプリで、メインダイアログのボタン押下で
起動させたサブダイアログからメインダイアログのEditの値を取得したいの
ですが、

★ JIKUはメインダイアログのEdit名

    CEdit* Edit_Jiku    = (CEdit*)GetDlgItem(JIKU);
    CString    csJiku;

    Edit_Jiku->GetWindowText(csJiku);

このようにするとコンパイルは通るのですが、
実行時にアプリケーションエラーで強制終了になってしまいます。

今度は

★ JIKUはメインダイアログのEdit名
★ MAINはメインダイアログ名

    CEdit* Edit_Jiku    = (CEdit*)GetDlgItem(MAIN,JIKU);
    CString    csJiku;

    Edit_Jiku->GetWindowText(csJiku);

とやるとコンパイルが通らなくなってしまいました。

GetDlgItemにメインダイアログのハンドルを指定してやればいいと思うのですが、
どうなんでしょうか?

TAKA 2002/01/15(火) 13:48:19
こんにちわ
メインダイアログでボタン押下時にEditボックスの内容を取得して
サブダイアログに引数で渡すではだめなんでしょうか?
だめなら、サブダイアログ作成時に、メインダイアログのアドレスを渡して
そこから取得してみては?

けん★ 2002/01/15(火) 13:58:33
お返事ありがとうございます。

メインダイアログからサブダイアログ起動はボタン押下時にDoModal 関数を
使用しているのですが、引数で渡すことなんて可能なのでしょうか?

sugar 2002/01/15(火) 14:08:21
class CSubDlg
{
    ...

Public:
    CString m_strParam;       // データ受け渡し用に定義
    ...
}

CMainDlg::OnButtonClick()
{
    ...

    CSubDlg dlg;
    dlg.m_strParam = "...";   // 任意の文字列をセット
    dlg.DoModal();

    ...
}

こんな感じでもいいと思います。

TAKA 2002/01/15(火) 14:09:43
えっと、サブダイアログ作成時
コンストラクタに引数でわたしてあげれば可能です。

CdS 2002/01/15(火) 14:13:18
引数というか一番簡単なのはサブダイアログダイアログにpublicなCString型のメンバ変数を作り(例えばm_csText)、

    CEdit* Edit_Jiku    = (CEdit*)GetDlgItem(JIKU);
    CString    csJiku;
    Edit_Jiku->GetWindowText(csJiku);

    CSubDlg dlg;
    dlg.m_csText = csJiku;
    dlg.DoModal();

などとしてやって、サブダイアログ側でm_csTextを使えばいいです。

#この辺はWindowsプログラミングというよりC++の基本的なことだと思います。
そういったところをもう一度学習されることをお薦めします。

けん★ 2002/01/15(火) 14:19:37
[[解決]]
みなさんありがとうございました。

サブダイアログにpublicの変数を作成し、
起動前にセットする方法で解決いたしました。

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