現在MFCでダイアログベースで作成しています。
CADialogからCBDialogを呼び出して、CBDialogでCADialogの
メソッドや変数を利用したいのですが、どのようにすればいいのでしょうか?
基本的なことで申し訳ありません。
---- ソース ---------------------------------------
<ADialog.h>
public:
void fun(tagA num);
typedef struct{
int iNum;
} tagA;
tagA num;
<ADialog.cpp>
CBDialog dlg;
INI_PTR iID=dlg.DoModal();
<BDialog.cpp>
// ここで、CADialogのtagA型の変数を宣言して、funに渡したい。
-------------------------------------------------
環境はMFCv6/Windows2000です。
よろしくお願い致します。
>CADialogのtagA型の変数を宣言
CADialog::tagA a;
funに渡すのはまた別問題ですね。
ADialog::fun は (それがstaticではなければ) ADialogの実体に対して
呼び出しをしなければならない事は理解されてますか?
// ちょっと語弊のありそうな表現ですが・・・
ADialog::fun() を呼べばなんでもいいのであれば、
#include Adialg.h
BDialog::Foo(){
CADialog::tagA a;
ADialog adlg;
adlg.fun(a);
}
とするなり何なりで呼べますが・・・
あー変なコード書いちまった。なぐり書きはするもんじゃないですね。
void CBDialog::Foo(){
CADialog::tagA a;
CADialog adlg;
adlg.fun(a);
}
でしょうか。
余談ですけど、thisに(メンバに)アクセスしてなければ
CADialog* pDlg=NULL;
pDlg->fun();
でも呼べなくはないので、『実体に対して』という表現は適切じゃないんですよね。
なんて言えばいいんだろ。
いつもの手なのですが、こんなのはどうでしょう?
<BDialog.cpp>
#include ADialog.h
extern CADialog* pADlg;
void CBDialog::hoge()
{
CADialog::tagA a;
pADlg->fun(a);
}
<ADialog.cpp>
CADialog* pADlg;
// コンストラクタでthisを代入
CADialog::CADialog(CWnd* pParent /*=NULL*/)
: CDialog(CADialog::IDD, pParent)
{
pADlg = this;
}
寝ぼけてまた変な間違いしてないだろうな?>オレ
できました。
丁寧な回答を頂き、本当にありがとうございました。