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にメインダイアログのハンドルを指定してやればいいと思うのですが、
どうなんでしょうか?
こんにちわ
メインダイアログでボタン押下時にEditボックスの内容を取得して
サブダイアログに引数で渡すではだめなんでしょうか?
だめなら、サブダイアログ作成時に、メインダイアログのアドレスを渡して
そこから取得してみては?
お返事ありがとうございます。
メインダイアログからサブダイアログ起動はボタン押下時にDoModal 関数を
使用しているのですが、引数で渡すことなんて可能なのでしょうか?
class CSubDlg
{
...
Public:
CString m_strParam; // データ受け渡し用に定義
...
}
CMainDlg::OnButtonClick()
{
...
CSubDlg dlg;
dlg.m_strParam = ...; // 任意の文字列をセット
dlg.DoModal();
...
}
こんな感じでもいいと思います。
えっと、サブダイアログ作成時
コンストラクタに引数でわたしてあげれば可能です。
引数というか一番簡単なのはサブダイアログダイアログに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++の基本的なことだと思います。
そういったところをもう一度学習されることをお薦めします。
みなさんありがとうございました。
サブダイアログにpublicの変数を作成し、
起動前にセットする方法で解決いたしました。