テクニカル ノート 25: ドキュメント、ビュー、フレームの作成
[!メモ]
次のテクニカル ノートは、最初にオンライン ドキュメントの一部とされてから更新されていません。結果として、一部のプロシージャおよびトピックが最新でないか、不正になります。最新の情報について、オンライン ドキュメントのキーワードで関係のあるトピックを検索することをお勧めします。
ここでは、 WinApps、 DocTemplates、ドキュメント、ゾーンとビューの作成、および所有権の問題について説明します。
WinApp
システムに CWinApp の 1 種類のオブジェクトがあります。
これは、フレームワークの WinMainの内部実装によって静的に作成され、初期化されます。CWinApp から便利な処理を行うために取得します (例外: 拡張ダイナミック リンク ライブラリは CWinApp のインスタンスがないようです —初期化は DllMain の代わりに実行されます)。
CWinApp の 1 種類のオブジェクトはドキュメント テンプレート ( CPtrList)のリストを作成します。一つ以上のアプリケーションに対してドキュメント テンプレートです。DocTemplates は、通常、リソース ファイル (つまり、文字列配列)から CWinApp::InitInstanceに読み込まれます。
pTemplate = new CDocTemplate(IDR_MYDOCUMENT, ...);
AddDocTemplate(pTemplate);
CWinApp の 1 種類のオブジェクトは、アプリケーションのすべてのフレーム ウィンドウを作成します。アプリケーションのメイン フレーム ウィンドウは CWinApp::m_pMainWndに格納する必要があります。; AppWizard を場合は、ではが許可されない場合、通常 InitInstance の実装の m_pMainWnd を設定します。シングル ドキュメント インターフェイス (SDI) アプリケーションのメイン フレーム ウィンドウ、または唯一のドキュメント フレーム ウィンドウとして動作しない場合は 1 CFrameWnd です。複数のドキュメント インターフェイス (MDI) では、子 CFrameWndのすべての秒を含むアプリケーションのメイン フレーム ウィンドウとして使用され、その MDI ゾーン (クラス CMDIFrameWnd)です。各子ウィンドウはクラス CMDIChildWndCFrameWnd(から派生)と機能多くのドキュメント フレーム ウィンドウの 1 文字として、です。
DocTemplates
CDocTemplate は、ドキュメントの作成者とマネージャーです。これは、作成するドキュメントを作成します。アプリケーションが次のリソースに基づく方法を使用した場合 CDocTemplateから派生する必要はありません。
SDI アプリケーションでは、クラス CSingleDocTemplate は 1 個の開いているドキュメントを監視します。MDI アプリケーションでは、クラス CMultiDocTemplate は、そのテンプレートから作成されたすべての現在開いているドキュメントのリスト ( CPtrList)を保持します。CDocTemplate::AddDocument と CDocTemplate::RemoveDocument は、テンプレートからドキュメントを追加または削除する仮想メンバー関数を提供します。CDocTemplate は CDocument のフレンドであるため、文書を作成したドキュメント テンプレートをポイントに保護された CDocument::m_pDocTemplate バック ポインターを設定し直すことができます。
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 はゾーンのクライアント領域のペインを作成する必要があります。通常、ゾーンのクライアント領域全体を占める 1 個のメイン ウィンドウがあります。
MDI ゾーンのウィンドウの場合は、クライアント領域は、すべての MDI 子フレーム ウィンドウの親である MDICLIENT のコントロールで塗りつぶされます。SDI ゾーンのペインまたは MDI 子フレーム ウィンドウの場合は、クライアント領域は、通常 CView派生ペイン オブジェクトが格納されます。CSplitterWndの場合は、ビューのクライアント領域は CSplitterWnd ペイン オブジェクトと CViewで塗りつぶされます派生ペイン オブジェクト (分割ペインごとに 1)は CSplitterWndの子ウィンドウとして作成されます。