次の方法で共有


CMDIChildWnd クラス

更新 : 2007 年 11 月

ウィンドウ管理用のメンバも含めて、Windows のマルチ ドキュメント インターフェイス (MDI: multiple document interface) の子ウィンドウの機能が用意されています。

class CMDIChildWnd : public CFrameWnd

解説

MDI 子ウィンドウは、表示位置がデスクトップではなく、MDI フレーム ウィンドウの中である点を除いて、通常のフレーム ウィンドウのように見えます。MDI 子ウィンドウは、自分自身のメニュー バーはありませんが、その代わりに MDI フレーム ウィンドウのメニューを共有します。フレームワークは自動的に MDI フレーム メニューを変更して、現在アクティブな MDI 子ウィンドウに対応させます。

アプリケーションで有用な MDI 子ウィンドウを作るには、CMDIChildWnd クラスから新しいクラスを派生します。アプリケーション固有のデータを格納するには、この派生クラスにメンバ変数を加えます。ウィンドウにメッセージが送られたときに行われる処理を指定するには、派生クラスにメッセージ処理メンバ関数とメッセージ マップを実装します。

MDI 子ウィンドウを構築するには、次の 3 つの方法があります。

  • Create を使って直接構築

  • LoadFrame を使って直接構築

  • ドキュメント テンプレートを使って間接的に構築

Create または LoadFrame を呼び出す前に、C++ の new 演算子を使って、ヒープ上にフレーム ウィンドウ オブジェクトを構築します。Create を呼び出す前に、グローバル関数 AfxRegisterWndClass でウィンドウ クラスを登録すると、フレームのアイコンやクラス スタイルを設定できます。

フレーム作成用のパラメータとして即値を渡すときは、Create メンバ関数を使用します。

LoadFrame で使う引数は Create よりも少なく、その代わりにフレームのタイトル、アイコン、アクセラレータ テーブル、メニューなどのリソースから、既定の値の大部分を補います。LoadFrame がアクセスできるように、これらのリソースすべてに同じリソース ID (たとえば、IDR_MAINFRAME) を付ける必要があります。

CMDIChildWnd オブジェクトがビューやドキュメントを持っていれば、プログラマが直接作成する代わりに、フレームワークが間接的に作成します。CDocTemplate オブジェクトが、フレームの作成、それに含まれるビューの作成、および適切なドキュメントとビューの関連付けを調整します。CDocTemplate のコンストラクタのパラメータには、関連する 3 つのクラス (ドキュメント、フレーム、ビュー) の CRuntimeClass を指定します。フレームワークは CRuntimeClass オブジェクトを使って、ユーザーが指定した新しいフレームを動的に作成します。ユーザーは、[ファイル] メニューの [新規作成]、または MDI (マルチ ドキュメント インターフェイス) の [ウィンドウ] メニューの [新しいウィンドウを開く] などで指定します。

上の RUNTIME_CLASS 機構を正しく動作させるには、CMDIChildWnd から派生したフレーム ウィンドウ クラスに、DECLARE_DYNCREATE を指定して宣言する必要があります。

CMDIChildWnd クラスは、CFrameWnd から既定の実装の大部分を継承します。これらの機能の詳細については、「CFrameWnd クラス」クラスの説明を参照してください。CMDIChildWnd クラスには、継承する機能以外に、次に示す機能があります。

  • CMultiDocTemplate クラスと関連して、同じドキュメント テンプレートから作成された複数の CMDIChildWnd オブジェクトは、Windows のシステム リソースを節約するために、同じメニューを共有します。

  • 現在アクティブな MDI 子ウィンドウのメニュー全体が MDI フレーム ウィンドウのメニューと置き換えられ、現在アクティブな MDI 子ウィンドウのキャプションが MDI フレーム ウィンドウのキャプションに追加されます。MDI フレーム ウィンドウと関連して実装された MDI 子ウィンドウの関数の例については、CMDIFrameWnd クラスの説明を参照してください。

C++ の delete 演算子でフレーム ウィンドウを破棄しないでください。代わりに、CWnd::DestroyWindow を使用します。CFrameWnd での PostNcDestroy の実装では、ウィンドウが破棄されるときに C++ オブジェクトが削除されます。フレーム ウィンドウを閉じるとき、既定の OnClose ハンドラは、DestroyWindow を呼び出します。

CMDIChildWnd の詳細については、「フレーム ウィンドウ」を参照してください。

必要条件

ヘッダー : afxwin.h

スマート デバイス開発者のためのメモ

このクラスは、スマート デバイス プロジェクトではサポートされません。

参照

処理手順

MDI サンプル : ドキュメント/ビュー アーキテクチャを使用しない MDI

MDIDOCVW サンプル : ドキュメント/ビュー アーキテクチャを使用する MDI

SNAPVW サンプル : フォーム ビュー アプリケーションでのプロパティ ページの使用

参照

CFrameWnd クラス

階層図

CWnd クラス

CMDIFrameWnd クラス

その他の技術情報

CMDIChildWnd のメンバ