CMultiDocTemplate クラス

MDI (マルチ ドキュメント インターフェイス) を実装するドキュメント テンプレートを定義します。

構文

class CMultiDocTemplate : public CDocTemplate

メンバー

このクラスのメンバー関数は仮想です。 ドキュメントについては、 CDocTemplateCCmdTarget を参照してください。

パブリック コンストラクター

名前 説明
CMultiDocTemplate::CMultiDocTemplate CMultiDocTemplate オブジェクトを構築します。

解説

MDI アプリケーションでは、ユーザーが 0 個以上のドキュメント フレーム ウィンドウを開くことができるワークスペースとして、メイン フレーム ウィンドウが使用され、それぞれがドキュメントを表示します。 MDI の詳細については、「ソフトウェア設計の Windows インターフェイス ガイドライン」を参照してください

ドキュメント テンプレートは、次の 3 種類のクラス間のリレーションシップを定義します。

  • CDocument から派生するドキュメント クラス。

  • ビュー クラス。上記のドキュメント クラスのデータを表示します。 このクラス は、CView、、 CScrollViewCFormViewまたは CEditView. (直接使用 CEditView することもできます)。

  • ビューを含むフレーム ウィンドウ クラス。 MDI ドキュメント テンプレートの場合は、このクラスからCMDIChildWnd派生させることができます。または、ドキュメント フレーム ウィンドウの動作をカスタマイズする必要がない場合は、独自のクラスを派生させずに CMDIChildWnd を直接使用できます。

MDI アプリケーションは複数の種類のドキュメントをサポートでき、異なる種類のドキュメントを同時に開くことができます。 アプリケーションには、サポートされているドキュメントの種類ごとに 1 つのドキュメント テンプレートがあります。 たとえば、MDI アプリケーションがスプレッドシートとテキスト ドキュメントの両方をサポートしている場合、アプリケーションには 2 つの CMultiDocTemplate オブジェクトがあります。

アプリケーションは、ユーザーが新しいドキュメントを作成するときにドキュメント テンプレートを使用します。 アプリケーションが複数の種類のドキュメントをサポートしている場合、フレームワークは、サポートされているドキュメントの種類の名前をドキュメント テンプレートから取得し、[ファイルの新規作成] ダイアログ ボックスの一覧に表示します。 ユーザーがドキュメントの種類を選択すると、アプリケーションはドキュメント クラス オブジェクト、フレーム ウィンドウ オブジェクト、およびビュー オブジェクトを作成し、それらを相互にアタッチします。

コンストラクター以外のメンバー関数 CMultiDocTemplate を呼び出す必要はありません。 フレームワークは内部的にオブジェクトを処理 CMultiDocTemplate します。

詳細についてはCMultiDocTemplate、「ドキュメント テンプレート」および「ドキュメント/ビュー作成プロセス」を参照してください

継承階層

CObject

CCmdTarget

Cdoctemplate

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表すために定義する -derived クラスです。

pFrameClass
フレーム ウィンドウ クラスの CRuntimeClass オブジェクトをポイントします。 このクラスは CMDIChildWnd、-derived クラスにすることも、ドキュメント フレーム ウィンドウの既定の動作が必要な場合はそれ自体に CMDIChildWnd することもできます。

pViewClass
ビュー クラスの CRuntimeClass オブジェクトをポイントします。 このクラスは、ドキュメントを CView表示するために定義する -derived クラスです。

解説

アプリケーションがサポートするドキュメントの種類ごとに 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 クラス