• 締切済み

変数アクセス(MFC)

クラス別の変数間のアクセスについてよくわかりません。 【CADlg.cpp】 void CADlg::OnOK() { CB bdlg; CString str; m_ed.GetwindowText(str); Astr=&str; cdlg.DoModal(); CDialog::OnOK(); } 【CADlg.h】 public: CString *Astr; 【CB.cpp】 void CB::OnOK() { CStr CADlg dlg; dlg.Astr=&bstr;; MessageBox(bstr); CDialog::OnOK(); } 【CB.h】 CString bstr; 中身見てもちゃんと移ってないようです。 どうすればちゃんとできますでしょうか?

みんなの回答

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.2

>メインはAでBは追加されたクラスダイアログになります。 >Bのエデットボックスに書かれた文字をAに持ってきてその内容を >表示するというのはできるんですが、Aの内容をBに送りだすってのが >できないんです。 CB::OnInitDialog()で SetDlgItemText(ID, bstr) すれば良いのではないでしょうか? (IDは表示したいコントロールのIDです) 実は、これはもっと簡単に実装できます。 一旦CB::bstrを削除してください。 ウィザードによって追加する (ウィザードの操作方法はVSのバージョンで異なるので省略します。ヘルプやネットで検索してください) と、bstrとコントロールを結びつけてくれます あとは、呼び出し側でDoModal()の前にbstrへ代入するだけです

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

CBからCADlgのテキストボックスの値を取得したいのでしょうか? void CADlg::OnOK() { // 不要 // CB bdlg; // CString str;   if ( Astr != NULL ) {     m_ed.GetWindowText(*Astr);   } // Astr=&str; // cdlg.DoModal();   CDialog::OnOK(); } void CB::OnOK() {   CADlg dlg;   dlg.Astr = &bstr;   if ( IDOK == dlg.DoModal() ) {     MessageBox(bstr);   }   CDialog::OnOK(); } といった具合でしょう # メンバー変数のポインタはコンストラクタ(またはWM_INITDIALOGのハンドラ)でNULLに初期化しておきましょう

zaqwe
質問者

お礼

多分同じことなきがしますのでじっくりやってみますね ありがとうございました。

zaqwe
質問者

補足

すいません。内容書き忘れてました。。 メインはAでBは追加されたクラスダイアログになります。 Bのエデットボックスに書かれた文字をAに持ってきてその内容を 表示するというのはできるんですが、Aの内容をBに送りだすってのが できないんです。

関連するQ&A