ダイアログ間でデータを共用するには?

解決


ひよっこ  2004-06-08 04:29:20  No: 53767

VC++初心者のひよっこと申します。
いろいろと調べたのですがどうしても分からなかったので、質問させて頂く事にしました。

OSはXPで、.Netを使ってます。MFCアプリケーションです。

現在、ダイアログベースのアプリケーションを作ってます。
メインのダイアログからモードレスでいくつかのダイアログを表示できるようにし、全てのダイアログで同じデータを扱いたいのですが、値を変更した際のデータの受け渡しの仕方がどうしてもわかりません。
全ダイアログを連動して(同期で)動かしたいのですが・・。
Documentクラスを使ってどうにかできないかとも思ったのですが、どこでオブジェクト宣言してやればよいのか、どうやって共通のデータにアクセスするのかといった部分がわかりません。
よろしければ、ご教授よろしくお願いします。


たく  2004-06-08 19:25:35  No: 53768

一番単純なのは、グローバルにすることですが、
CWinApp派生クラスでデータを持てば、
一応すべてのダイアログから見えますよ。

そのデータをDocumentクラスと呼ぶかどうかはお好みしだいかと。


hiroyuki  2004-06-09 04:06:14  No: 53769

たくさんのアドバイスを具体的に説明しますと
testというプロジェクトを作成すると
test.cppとtest.hが作成されると思います。
そのtest.hにメンバー変数を追加します。
たとえば、int m_iGlobalとかです。

そこで、新規で作成したダイアログのソースファイル
たとえば、dialog1.cppとします。

その中で、CtestApp* pApp = (CtestApp*)AfxGetApp();
するとpAppの中に、testAppのポインタが取れますので
pApp->m_iGlobalとすることで、中身を参照することができます。

また、pAppをdialog1.hでメンバー変数にすると
たとえば CtestApp* m_pAppとかで宣言して
OnInitDialog関数内で
m_pApp = (CtestApp*)AfxGetApp();
としてあげると、このクラス内のどこの場所からでも
参照することができます。

別なダイアログを作った場合でも、同様に
dialog2.h にメンバーを作ってあげると
同じように参照することができます。

注意としてdialog1.hでCtestApp* m_pApp
と宣言した場合、コンパイルエラーが発生した場合は
friend class CtestApp;
CtestApp* m_pApp;
と宣言してみてください。
エラーが解消されます。


ひよっこ  2004-06-10 21:30:15  No: 53770

CWinApp派生クラスを使うことで解決できました。
返事が遅くなりましたが、たくさん、hiroyukiさん、どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加