CMDIChildWnd クラス
ウィンドウ管理用のメンバーも含めて、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 サンプル:フォーム ビュー] アプリケーションをでプロパティ ページを使用します。