メンバ変数以外の変数をDoModalで送るには? – プログラミング – Home

メンバ変数以外の変数をDoModalで...
 
通知
すべてクリア

[解決済] メンバ変数以外の変数をDoModalで送るには?


ree
 ree
(@ree)
ゲスト
結合: 24年前
投稿: 240
Topic starter  

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

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

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

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


引用未解決
トピックタグ
ku
 ku
(@ku)
ゲスト
結合: 25年前
投稿: 312
 

方法はいくつもあると思うけど、まずはグローバル変数。
これならプログラムのどこからでもアクセスできるでしょ?。

あとは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
 ree
(@ree)
ゲスト
結合: 24年前
投稿: 240
 

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました