メンバ変数以外の変数をDoModalで送るには?

[戻る]
ree 2001/10/03(水) 02:18:09
reeといいます。
本を片手に勉強中なのですが、メンバ変数以外の変数をDoModal()で送るにはどうしたら
いいのですか?また子ダイアログからもメンバ関数以外のローカル変数を戻り値として受け取る
ことができますか?


たとえば、
/* 親ダイアログ */

CString hensuu = "c:\test";
char hen[]=".....";      /* 子ダイアログに送りたいローカル変数 */

ret = kodlg.DoModal();
                /* 子ダイアログからローカル変数を受け取る */
if(ret == IDOK)
{
}

ku 2001/10/03(水) 06:27:57
方法はいくつもあると思うけど、まずはグローバル変数。
これならプログラムのどこからでもアクセスできるでしょ?。

あとはCWinAppの派生クラスにpublic:で変数を宣言しておいて
(もうちょっとよい方法もあるけど)それを使う方法。
class CMyWinApp : public CWinApp
{
public:
    int m_nPos;
    〜
};
CMyWinApp* pMyApp = (CMyWinApp*)AfxGetApp();
pMyApp->m_nPosとやってアクセスする。

MFCじゃないけどWindowsAPIを使うのならCreateDialogParam等を使うと
WM_INITDIALOGのLPARAMをダイアログプロシージャに渡すこともできます
構造体のアドレスを渡せばオート変数を渡すのも簡単です

メンバ変数を使うけど、簡単なのは渡したい型のポインタを
ダイアログのメンバ変数にする方法
class CMyDlg : public CDialog
{
public:
    CString* m_pHensuu;
    char* pHen;
    int m_nPos;
    〜
};
CMyDlg
CString hensuu = "c:\test";
char hen[] = ".....";
CMyDlg kodlg;
kodlg.m_pHensuu = &hensuu;
kodlg.pHen = hen;
ret = kodlg.DoModal();
if(ret == IDOK)
{
    kodlg.m_nPos;
}

ree 2001/10/05(金) 09:24:24
[[解決]]
とりあえずグローバル変数をexternしてつかいました。
ほかの方法も参考になりました。
クラスはこれから勉強します。まだ、自作のクラスってどこに定義すればいいの・・・という
レベルなので。
kuさんどうもありがとうございました。

古いスレッドには追加発言できません。