【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

クラス別の変数間のアクセスについてよくわかりません。
【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;

中身見てもちゃんと移ってないようです。
どうすればちゃんとできますでしょうか?

A 回答 (2件)

>メインはAでBは追加されたクラスダイアログになります。


>Bのエデットボックスに書かれた文字をAに持ってきてその内容を
>表示するというのはできるんですが、Aの内容をBに送りだすってのが
>できないんです。

CB::OnInitDialog()で
SetDlgItemText(ID, bstr)
すれば良いのではないでしょうか?
(IDは表示したいコントロールのIDです)

実は、これはもっと簡単に実装できます。
一旦CB::bstrを削除してください。
ウィザードによって追加する
(ウィザードの操作方法はVSのバージョンで異なるので省略します。ヘルプやネットで検索してください)
と、bstrとコントロールを結びつけてくれます

あとは、呼び出し側でDoModal()の前にbstrへ代入するだけです
    • good
    • 0

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に送りだすってのが
できないんです。

補足日時:2009/03/18 18:54
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/03/18 19:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!