////////////////////////////////////////////////////////////////////////////////
開発環境 : Visual C++ 6.0 Service Pack 3
動作環境 : Windows 98 Second Edition
MFC使用 MDIベース
////////////////////////////////////////////////////////////////////////////////
CDocumentの派生クラスCXXXDocクラスへのポインタは、CXXXDocクラスと関係のあるクラス
ではとてもよく使うと思います。ViewクラスなどだったらGetDocumentなどで取得できる
と思うのですが、他の自作クラス内ではどのように取得して使うのでしょうか。
私が思いついたものだと、
〔1〕その自作クラス内でメンバ変数m_pDocのように宣言しておき、コンストラクタ時に
メンバイニシャライザのようにして代入して、他の関数内ではいつもこのm_pDocを使う
〔2〕その自作クラス内でメンバ変数m_pDocのように宣言しておき、AfxGetAppからたどって
いって代入して、他の関数内ではいつもこのm_pDocを使う
〔3〕その自作クラス内でstaticでメンバ変数m_pDocのように宣言しておき、CXXXDocクラスの
InitDocument()などで外部から代入して、他の関数内ではいつもこのm_pDocを使う
です。今は〔3〕を主に使っているのですが、少し問題が出てきました。みなさんは
どうやっていますか。
どんなことでも結構です。何かお気づきな点などがあれば教えてください。よろしくおねが
いします。
私は[2]を使います。但しメンバ変数にはしません。
速度を気にする必要がない部分で使う為です。
又、「ドキュメントにいつでも触りたい」事はよくある為、
CDocument* GetDoc( void )という関数にし、ライブラリ化しています。
で、CDocument*を CXXXDoc* へ型変換して 使うって感じです。
こんにちは、くたくたさん。先日は大変失礼しました。
お返事ありがとうございました。AfxGetAppを使っているんですね。私はAfxGetAppを使う
といつも5・6行使ってしまい、コードの大部分を占めてしまうようで敬遠していたのですが、
GetDoc( void )のようにすれば確かに、好きなときにいつでも呼び出せてとても便利そうです
ね。気づきませんでした。
私は[3]を使っていたのですが、すこし問題が出てきました。MDIでプログラムを作って
いるのですが、「新規作成」や「開く」で新しいドキュメントを作ると、m_pDocをstaticで
宣言しているためか、同じクラスでm_pDocを共有してしまい、古い方のドキュメントをささ
なくなってしまっているようです。
自作クラス
m_pDoc----------->もともとのCXXXDoc
m_pDoc----------->新規作成のCXXXDoc
としたいのですが、
自作クラス
m_pDoc-----V もともとのCXXXDoc
m_pDoc----------->新規作成のCXXXDoc
となっているみたいです。
MDIでドキュメントを動的に作るときは、みなさんはどうやってCXXXDocへのアクセスを管理
しているのかと思っていたのですが、くたくたさんの方法でもできないのかと今検討している
ところです。GetFirstDocPosition()とGetNextDoc()で「3番目に新規作成したドキュメン
ト」などをうまくアクセスできないかと思っているのですが、もうすこしやってみようと
思います。ありがとうございました。