各種 MFC オブジェクト間の関係
更新 : 2007 年 11 月
ドキュメントとビューの作成処理を全体的に把握するには、まず、実行するプログラムを検討します。つまり、ドキュメント、ビューを保持するためのフレーム ウィンドウ、ドキュメントに関連付けられるビューについて検討します。
ドキュメントは、そのビューのリストと、ドキュメントを作成したドキュメント テンプレートへのポインタを保持します。
ビューは、そのドキュメントへのポインタを保持します。ビューの親はフレーム ウィンドウです。
ドキュメント フレーム ウィンドウは、現在アクティブなビューへのポインタを保持します。
ドキュメント テンプレートは、開いているドキュメントのリストを保持します。
アプリケーションは、ドキュメント テンプレートのリストを保持します。
Windows は、メッセージを送ることができるように、開いているすべてのウィンドウを記録しています。
これらの関係は、ドキュメントおよびビューの作成時に確立されます。実行中のプログラムにおけるオブジェクト間のアクセス方法を次の表に示します。どのオブジェクトもグローバル関数 AfxGetApp を呼び出して、アプリケーション オブジェクトへのポインタを取得します。
ほかのオブジェクトへのアクセス方法
アクセス元 |
ほかのオブジェクトへのアクセス方法 |
---|---|
ドキュメント |
ドキュメントのビュー リストにアクセスするには、GetFirstViewPosition と GetNextView を使用します。 ドキュメント テンプレートを取得するには、GetDocTemplate を呼び出します。 |
ビュー |
ドキュメントを取得するには、GetDocument を呼び出します。 フレーム ウィンドウを取得するには、GetParentFrame を呼び出します。 |
ドキュメント フレーム ウィンドウ |
現在のアクティブなビューを取得するには、GetActiveView を呼び出します。 現在のビューのドキュメントを取得するには、GetActiveDocument を呼び出します。 |
MDI フレーム ウィンドウ |
現在アクティブな CMDIChildWnd を取得するには、MDIGetActive を呼び出します。 |
通常、フレーム ウィンドウは 1 つのビューを持ちますが、場合によっては、分割ウィンドウのように、同じフレーム ウィンドウに複数のビューを持つこともあります。フレーム ウィンドウは現在アクティブなビューへのポインタを保持します。このポインタは、ほかのビューがアクティブになると更新されます。
メモ : |
---|
メイン フレーム ウィンドウへのポインタは、アプリケーション オブジェクトのメンバ変数 m_pMainWnd に保存されます。CWinApp のメンバ関数 InitInstance をオーバーライドして関数 OnFileNew を呼び出すと、OnFileNew がメンバ変数 m_pMainWnd に値を設定します。関数 OnFileNew を呼び出さない場合は、InitInstance で変数の値を設定する必要があります。SDI COM コンポーネント (サーバー) アプリケーションは、コマンド ラインに /Embedding が指定されていると、この変数を設定しない場合があります。なお、変数 m_pMainWnd は、CWinApp のメンバ変数ではなく、CWinThread のメンバ変数です。 |