CMultiDocTemplate クラス
MDI (マルチ ドキュメント インターフェイス) を実装するドキュメント テンプレートを定義します。
構文
class CMultiDocTemplate : public CDocTemplate
メンバー
このクラスのメンバー関数は仮想です。 ドキュメントについては、 CDocTemplate および CCmdTarget を参照してください。
パブリック コンストラクター
名前 | 説明 |
---|---|
CMultiDocTemplate::CMultiDocTemplate | CMultiDocTemplate オブジェクトを構築します。 |
解説
MDI アプリケーションでは、メイン フレーム ウィンドウをワークスペースとして使用します。ユーザーは 0 個以上のドキュメント フレーム ウィンドウを開き、それぞれがドキュメントを表示します。 MDI の詳細については、「 Windows Interface Guidelines for Software Designを参照してください。
ドキュメント テンプレートは、次の 3 種類のクラス間のリレーションシップを定義します。
ドキュメント クラス。 CDocument から派生します。
ビュー クラス。上記のドキュメント クラスのデータを表示します。 このクラスは、 CView、
CScrollView
、CFormView
、またはCEditView
から派生できます。 (CEditView
を直接使用することもできます)。ビューを含むフレーム ウィンドウ クラス。 MDI ドキュメント テンプレートの場合は、
CMDIChildWnd
からこのクラスを派生させることができます。また、ドキュメント フレーム ウィンドウの動作をカスタマイズする必要がない場合は、 CMDIChildWnd 独自のクラスを派生させずに直接使用できます。
MDI アプリケーションは複数の種類のドキュメントをサポートでき、異なる種類のドキュメントを同時に開くことができます。 アプリケーションには、サポートされているドキュメントの種類ごとに 1 つのドキュメント テンプレートがあります。 たとえば、MDI アプリケーションがスプレッドシートとテキスト ドキュメントの両方をサポートしている場合、アプリケーションには 2 つの CMultiDocTemplate
オブジェクトがあります。
アプリケーションは、ユーザーが新しいドキュメントを作成するときにドキュメント テンプレートを使用します。 アプリケーションが複数の種類のドキュメントをサポートしている場合、フレームワークは、サポートされているドキュメントの種類の名前をドキュメント テンプレートから取得し、[ファイルの新規作成] ダイアログ ボックスの一覧に表示します。 ユーザーがドキュメントの種類を選択すると、アプリケーションはドキュメント クラス オブジェクト、フレーム ウィンドウ オブジェクト、およびビュー オブジェクトを作成し、それらを相互にアタッチします。
コンストラクターを除き、 CMultiDocTemplate
のメンバー関数を呼び出す必要はありません。 フレームワークは CMultiDocTemplate
オブジェクトを内部的に処理します。
CMultiDocTemplate
の詳細については、「Document テンプレート」および「ドキュメント/ビュー作成プロセス」を参照してください。
継承階層
CMultiDocTemplate
要件
ヘッダー: afxwin.h
CMultiDocTemplate::CMultiDocTemplate
CMultiDocTemplate
オブジェクトを構築します。
CMultiDocTemplate(
UINT nIDResource,
CRuntimeClass* pDocClass,
CRuntimeClass* pFrameClass,
CRuntimeClass* pViewClass);
パラメーター
nIDResource
ドキュメントの種類で使用されるリソースの ID を指定します。 これには、メニュー、アイコン、アクセラレータ テーブル、および文字列リソースが含まれる場合があります。
文字列リソースは、'\n' 文字で区切られた最大 7 個の部分文字列で構成されます (部分文字列が含まれていない場合、'\n' 文字はプレース ホルダーとして必要です。ただし、末尾の '\n' 文字は必要ありません)。これらの部分文字列は、ドキュメントの種類を記述します。 部分文字列の詳細については、「 CDocTemplate::GetDocString を参照してください。 この文字列リソースは、アプリケーションのリソース ファイルにあります。 次に例を示します。
// MYCALC.RC
STRINGTABLE PRELOAD DISCARDABLE
BEGIN
IDR_SHEETTYPE "\nSheet\nWorksheet\nWorksheets (*.myc)\n.myc\n MyCalcSheet\nMyCalc Worksheet"
END
最初の部分文字列は MDI アプリケーションでは使用されないため、文字列は '\n' 文字で始まります。そのため、含まれません。 この文字列は、文字列エディターを使用して編集できます。文字列全体は、7 つの個別のエントリではなく、文字列エディターで 1 つのエントリとして表示されます。
これらのリソースの種類の詳細については、「 リソース エディター」を参照してください。
pDocClass
ドキュメント クラスの CRuntimeClass
オブジェクトをポイントします。 このクラスは、ドキュメントを表すために定義する CDocument
派生クラスです。
pFrameClass
フレーム ウィンドウ クラスの CRuntimeClass
オブジェクトをポイントします。 このクラスは、 CMDIChildWnd
派生クラスにすることも、ドキュメント フレーム ウィンドウの既定の動作が必要な場合はそれ自体 CMDIChildWnd
することもできます。
pViewClass
ビュー クラスの CRuntimeClass
オブジェクトをポイントします。 このクラスは、ドキュメントを表示するために定義する CView
派生クラスです。
解説
アプリケーションがサポートするドキュメントの種類ごとに 1 つのCMultiDocTemplate
オブジェクトを動的に割り当て、アプリケーション クラスの InitInstance
メンバー関数からCWinApp::AddDocTemplate
に渡します。
例
// Code fragment from CMyApp::InitInstance
// Establish all of the document types
// supported by the application
AddDocTemplate(new CMultiDocTemplate(IDR_BRUSHDOCTYPE,
RUNTIME_CLASS(CBrushDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CBrushView)));
AddDocTemplate(new CMultiDocTemplate(IDR_DCDOCTYPE,
RUNTIME_CLASS(CDCDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CDCView)));
2 番目の例を次に示します。
// Code fragment taken from CMyApp::InitInstance
// Normally, an application creates a document
// template and registers it with MFC as a part
// of its initialization.
// IDR_EXAMPLEDOCTYPE is a resource ID string; see
// the CDocTemplate class overview documentation
// for more information on its format.
// The next three parameters use the RUNTIME_CLASS()
// macro to get runtime type information for the doc,
// frame, and view classes that will be associated
// by the template.
pDocTemplate = new CMultiDocTemplate(IDR_EXAMPLEDOCTYPE,
RUNTIME_CLASS(CExampleDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CExampleView));
if (!pDocTemplate)
return FALSE;
// After the following call, MFC is aware of the doc
// template and will free it when the application is
// shut down. The doc templates known to MFC will
// automatically be used when CWinApp:OnFileOpen()
// or CWinApp::OnFileNew() are called.
AddDocTemplate(pDocTemplate);
関連項目
CDocTemplate クラス
階層図
CDocTemplate クラス
CSingleDocTemplate クラス
CWinApp クラス