ドキュメントクラスへのポインタの使い方 – プログラミング – Home

ドキュメントクラスへのポインタの使い方
 
通知
すべてクリア

[解決済] ドキュメントクラスへのポインタの使い方


はまち
 はまち
(@はまち)
ゲスト
結合: 24年前
投稿: 146
Topic starter  

////////////////////////////////////////////////////////////////////////////////

開発環境 : 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〕を主に使っているのですが、少し問題が出てきました。みなさんは
どうやっていますか。
 どんなことでも結構です。何かお気づきな点などがあれば教えてください。よろしくおねが
いします。


引用未解決
トピックタグ
くたくた
 くたくた
(@くたくた)
ゲスト
結合: 23年前
投稿: 119
 

私は[2]を使います。但しメンバ変数にはしません。
速度を気にする必要がない部分で使う為です。

又、「ドキュメントにいつでも触りたい」事はよくある為、
CDocument* GetDoc( void )という関数にし、ライブラリ化しています。

で、CDocument*を CXXXDoc* へ型変換して 使うって感じです。


返信引用
はまち
 はまち
(@はまち)
ゲスト
結合: 24年前
投稿: 146
Topic starter  

こんにちは、くたくたさん。先日は大変失礼しました。

お返事ありがとうございました。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番目に新規作成したドキュメン
ト」などをうまくアクセスできないかと思っているのですが、もうすこしやってみようと
思います。ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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