テクニカル ノート 25: ドキュメント、ビュー、およびフレームの作成

このノートにはされたオブジェクトの所有権、ウィンドウ、ドキュメント、フレームおよびビューの作成および所有権の問題について説明します。Visual の C++ プログラマのガイドのこの情報とその他の興味深い作成および所有権の問題のほとんどを見つけることができます。

[Winapp]

システム内の 1 つのCWinAppオブジェクト。

静的に構築、 WinMainのフレームワークの内部の実装で初期化します。有用な何かをCWinAppから派生する必要があります (例外: 拡張 Dll にはCWinAppのインスタンスがならない ? 初期化はDllMainの代わりに)。

1 つのCWinAppオブジェクト ドキュメント テンプレート ( CPtrList) のリストを所有しています。アプリケーションごとの 1 つまたは複数のドキュメント テンプレートです。ウィンドウは通常、リソース ファイル (つまり、文字列の配列) からCWinApp::InitInstanceで読み込まれる。

pTemplate = 新しい CDocTemplate (IDR_MYDOCUMENT、...)。AddDocTemplate(pTemplate)

1 つのCWinAppオブジェクトにアプリケーション内のすべてのフレーム ウィンドウを所有しています。アプリケーションのメイン フレーム ウィンドウは、 CWinApp::m_pMainWndで格納する必要があります;通常 AppWizard のそれを行うことはできませんが場合、 initinstance 関数の実装でm_pMainWndが設定します。シングル ドキュメント インターフェイス (SDI) をこの 1 つだけのドキュメント フレーム ウィンドウだけでなく、アプリケーションのメイン フレーム ウィンドウとして機能cframewnd クラスです。複数ドキュメント インターフェイス (MDI) これ、MDI はCFrameWnds のすべての子を含む、アプリケーションのメイン フレーム ウィンドウとして機能フレーム (クラスCMDIFrameWnd) です。各子ウィンドウ クラス ( CFrameWndから派生) CMDIChildWndで、1 つの可能性のある多くのドキュメント フレーム ウィンドウとして機能。

ウィンドウ

CDocTemplateは、作成者およびドキュメントのマネージャーです。それには、それを作成し、ドキュメントを所有しています。以下、リソース ベースのアプローチのアプリケーションを使用する場合は、 CDocTemplateから派生する必要はありません。

SDI アプリケーションでは、クラスCSingleDocTemplate 1 つ開いているドキュメントの追跡。MDI アプリケーションでは、クラスのそれは、テンプレートから作成されたすべての現在開いているドキュメントのリスト ( CPtrList) を保持します。CDocTemplate::AddDocumentとCDocTemplate::RemoveDocument仮想メンバーを追加または、テンプレートからドキュメントを削除する機能を提供します。我々 は、ドキュメントを作成元のドキュメント テンプレートに指す保護されたCDocument::m_pDocTemplateバック ポインターを設定できるようにCDocTemplate CDocumentの友人です。

CWinApp既定OnFileOpen実装は、すべてのドキュメント テンプレートにクエリを処理します。既に開いているドキュメントを探したり、何で新しいドキュメントを開く形式かを決める実装が含まれています。

CDocTemplate UI バインド ドキュメントやフレームの管理します。

CDocTemplateは名前のないドキュメントの数を保持します。

CDocument

CDocumentは、 CDocTemplateによって所有されています。

ドキュメント ドキュメント ( CPtrList) を表示する ( CViewからの派生) 現在開いているビューのリストがあります。

ドキュメント作成・閲覧、破壊しないが、それらが作成された後は互いに接続されています。ドキュメントを閉じるとき (つまり、〜 ファイル / 閉じる)、すべての接続されたビューも閉じます。最後のビューでは、文書が閉じられたとき (つまり、ウィンドウ/閉じる)、ドキュメントを閉じるは。

CDocument::AddView、 RemoveViewインターフェイスを使用して、ビューのリストを維持します。CDocument CViewの友人はCView::m_pDocumentバック ポインターを設定することができますのでください。

CFrameWnd

CFrameWnd (フレームとも呼ばれます) MFC 1.0 で同じ役割を果たしているが、今、 CFrameWndクラスが多くの場合、新しいクラスを派生せず使用する設計されています。標準コマンドの多くが既に実装されているので、派生クラスCMDIFrameWnd CMDIChildWndも向上します。

CFrameWndフレームのクライアント領域での windows の作成を担当しています。通常は、フレームのクライアント領域を充填する 1 つのメイン ウィンドウです。

MDI フレーム ウィンドウのクライアント領域のすべての MDI 子フレーム ウィンドウの親は順番に、MDICLIENT コントロールでいっぱいです。SDI フレーム ウィンドウ、MDI 子フレーム ウィンドウは、クライアント領域では、通常、 CViewでいっぱいです-派生ウィンドウ オブジェクト。CSplitterWndの場合、ビューのクライアント領域、 CSplitterWndウィンドウ オブジェクト、およびCViewで満ちている-派生ウィンドウ オブジェクト (分割ウィンドウごとに 1 つ) は、 CSplitterWndの子ウィンドウとして作成されます。

番号順テクニカル ノート|nbsp;カテゴリ別テクニカル ノート(&N)

Index