reeといいます。
本を片手に勉強中なのですが、メンバ変数以外の変数をDoModal()で送るにはどうしたら
いいのですか?また子ダイアログからもメンバ関数以外のローカル変数を戻り値として受け取る
ことができますか?
たとえば、
/* 親ダイアログ */
CString hensuu = c:\test;
char hen[]=.....; /* 子ダイアログに送りたいローカル変数 */
ret = kodlg.DoModal();
/* 子ダイアログからローカル変数を受け取る */
if(ret == IDOK)
{
}
方法はいくつもあると思うけど、まずはグローバル変数。
これならプログラムのどこからでもアクセスできるでしょ?。
あとは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;
}
とりあえずグローバル変数をexternしてつかいました。
ほかの方法も参考になりました。
クラスはこれから勉強します。まだ、自作のクラスってどこに定義すればいいの・・・という
レベルなので。
kuさんどうもありがとうございました。