各種 MFC オブジェクト間の関係
ドキュメントおよびビューの作成プロセスを見通しに置くために、実行中のプログラムを検討します。ドキュメントがビューに使用するフレーム ウィンドウ、ドキュメントに関連付けられたビュー。
ドキュメントは、そのビューのリストと、ドキュメントを作成したドキュメント テンプレートへのポインターを保持します。
ビューは、そのドキュメントへのポインターを保持します。ビューの親はフレーム ウィンドウです。
ドキュメント フレーム ウィンドウは、現在アクティブなビューへのポインターを保持します。
ドキュメント テンプレートは、開いているドキュメントのリストを保持します。
アプリケーションは、ドキュメント テンプレートのリストを保持します。
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 のメンバー変数です。