- 締切済み
変数アクセス(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; 中身見てもちゃんと移ってないようです。 どうすればちゃんとできますでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- BLK314
- ベストアンサー率55% (84/152)
>メインはAでBは追加されたクラスダイアログになります。 >Bのエデットボックスに書かれた文字をAに持ってきてその内容を >表示するというのはできるんですが、Aの内容をBに送りだすってのが >できないんです。 CB::OnInitDialog()で SetDlgItemText(ID, bstr) すれば良いのではないでしょうか? (IDは表示したいコントロールのIDです) 実は、これはもっと簡単に実装できます。 一旦CB::bstrを削除してください。 ウィザードによって追加する (ウィザードの操作方法はVSのバージョンで異なるので省略します。ヘルプやネットで検索してください) と、bstrとコントロールを結びつけてくれます あとは、呼び出し側でDoModal()の前にbstrへ代入するだけです
- redfox63
- ベストアンサー率71% (1325/1856)
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に初期化しておきましょう
お礼
多分同じことなきがしますのでじっくりやってみますね ありがとうございました。
補足
すいません。内容書き忘れてました。。 メインはAでBは追加されたクラスダイアログになります。 Bのエデットボックスに書かれた文字をAに持ってきてその内容を 表示するというのはできるんですが、Aの内容をBに送りだすってのが できないんです。