VC++初心者のひよっこと申します。
いろいろと調べたのですがどうしても分からなかったので、質問させて頂く事にしました。
OSはXPで、.Netを使ってます。MFCアプリケーションです。
現在、ダイアログベースのアプリケーションを作ってます。
メインのダイアログからモードレスでいくつかのダイアログを表示できるようにし、全てのダイアログで同じデータを扱いたいのですが、値を変更した際のデータの受け渡しの仕方がどうしてもわかりません。
全ダイアログを連動して(同期で)動かしたいのですが・・。
Documentクラスを使ってどうにかできないかとも思ったのですが、どこでオブジェクト宣言してやればよいのか、どうやって共通のデータにアクセスするのかといった部分がわかりません。
よろしければ、ご教授よろしくお願いします。
一番単純なのは、グローバルにすることですが、
CWinApp派生クラスでデータを持てば、
一応すべてのダイアログから見えますよ。
そのデータをDocumentクラスと呼ぶかどうかはお好みしだいかと。
たくさんのアドバイスを具体的に説明しますと
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;
と宣言してみてください。
エラーが解消されます。
CWinApp派生クラスを使うことで解決できました。
返事が遅くなりましたが、たくさん、hiroyukiさん、どうもありがとうございました。
ツイート | ![]() |