CMDIChildWnd クラス
ウィンドウ管理用のメンバーも含めて、Windows のマルチ ドキュメント インターフェイス (MDI: multiple document interface) の子ウィンドウの機能が用意されています。
構文
class CMDIChildWnd : public CFrameWnd
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CMDIChildWnd::CMDIChildWnd | CMDIChildWnd オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
CMDIChildWnd::Create | オブジェクトに関連付けられている Windows MDI 子ウィンドウを CMDIChildWnd 作成します。 |
CMDIChildWnd::GetMDIFrame | MDI クライアント ウィンドウの親 MDI フレームを返します。 |
CMDIChildWnd::MDIActivate | この MDI 子ウィンドウをアクティブにします。 |
CMDIChildWnd::MDIDestroy | この MDI 子ウィンドウを破棄します。 |
CMDIChildWnd::MDIMaximize | この MDI 子ウィンドウを最大化します。 |
CMDIChildWnd::MDIRestore | この MDI 子ウィンドウを、最大化または最小化されたサイズから復元します。 |
CMDIChildWnd::SetHandles | メニュー リソースとアクセラレータ リソースのハンドルを設定します。 |
解説
MDI 子ウィンドウは一般的なフレーム ウィンドウとよく似ていますが、MDI 子ウィンドウはデスクトップではなく MDI フレーム ウィンドウ内に表示されます。 MDI 子ウィンドウには独自のメニュー バーはありませんが、代わりに MDI フレーム ウィンドウのメニューを共有します。 フレームワークは、現在アクティブな MDI 子ウィンドウを表す MDI フレーム メニューを自動的に変更します。
アプリケーションに便利な MDI 子ウィンドウを作成するには、CMDIChildWnd
派生クラスにメンバー変数を追加して、アプリケーションに固有のデータを格納します。 ウィンドウにメッセージが送られたときに行われる処理を指定するには、派生クラスにメッセージ処理メンバー関数とメッセージ マップを実装します。
MDI 子ウィンドウを構築するには、次の 3 つの方法があります。
を使用して直接構築します
Create
。を使用して直接構築します
LoadFrame
。ドキュメント テンプレートを使用して間接的に構築します。
またはLoadFrame
呼び出すCreate
前に、C++ new
演算子を使用してヒープ上にフレーム ウィンドウ オブジェクトを構築する必要があります。 呼び出す Create
前に、ウィンドウ クラス を AfxRegisterWndClass グローバル関数に登録して、フレームのアイコンとクラス スタイルを設定することもできます。
フレームの作成パラメーターを Create
即時引数として渡すには、メンバー関数を使用します。
LoadFrame
は、フレームのキャプション、アイコン、アクセラレータ テーブル、メニューなど、リソースから既定値の大部分を取得するよりも少ない引数Create
を必要とします。 アクセスできるようにするには LoadFrame
、これらすべてのリソースが同じリソース ID (たとえば、IDR_MAINFRAME) を持っている必要があります。
オブジェクトに CMDIChildWnd
ビューとドキュメントが含まれている場合、プログラマが直接作成するのではなく、フレームワークによって間接的に作成されます。 オブジェクトは CDocTemplate
、フレームの作成、含まれているビューの作成、および適切なドキュメントへのビューの接続を調整します。 コンストラクターのパラメーターは、 CDocTemplate
関係する CRuntimeClass
3 つのクラス (ドキュメント、フレーム、ビュー) を指定します。 CRuntimeClass
オブジェクトは、ユーザーが指定した場合に新しいフレームを動的に作成するためにフレームワークによって使用されます (たとえば、File New コマンドまたは MDI Window New コマンドを使用)。
上記のRUNTIME_CLASSメカニズムが正しく機能するためには、DECLARE_DYNCREATEで派生 CMDIChildWnd
したフレーム ウィンドウ クラスを宣言する必要があります。
このクラスは CMDIChildWnd
、既定の実装 CFrameWnd
の多くを . これらの機能の詳細な一覧については、CFrameWnd クラスの説明を参照してください。 この CMDIChildWnd
クラスには、次の追加機能があります。
クラスと
CMultiDocTemplate
組み合わせて、同じドキュメント テンプレートの複数CMDIChildWnd
のオブジェクトが同じメニューを共有し、Windows システム リソースを保存します。現在アクティブな MDI 子ウィンドウ メニューは、MDI フレーム ウィンドウのメニューを完全に置き換え、現在アクティブな MDI 子ウィンドウのキャプションが MDI フレーム ウィンドウのキャプションに追加されます。 MDI フレーム ウィンドウと組み合わせて実装される MDI 子ウィンドウ関数のその他の例については、クラスの説明を
CMDIFrameWnd
参照してください。
C++ delete
演算子を使用してフレーム ウィンドウを破棄しないでください。 CWnd::DestroyWindow
を代わりに使用します。 の実装PostNcDestroy
ではCFrameWnd
、ウィンドウが破棄されたときに C++ オブジェクトが削除されます。 ユーザーがフレーム ウィンドウを閉じると、既定 OnClose
のハンドラーが呼び出 DestroyWindow
します。
詳細についてはCMDIChildWnd
、「フレーム ウィンドウ」を参照してください。
継承階層
CMDIChildWnd
必要条件
ヘッダー: afxwin.h
CMDIChildWnd::CMDIChildWnd
オブジェクトを構築 CMDIChildWnd
するための呼び出し。
CMDIChildWnd();
解説
表示されるウィンドウを作成する呼び出し Create
。
例
CMDIChildWnd::Create の例を参照してください。
CMDIChildWnd::Create
このメンバー関数を呼び出して、Windows MDI 子ウィンドウを作成し、オブジェクトに CMDIChildWnd
アタッチします。
virtual BOOL Create(
LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW,
const RECT& rect = rectDefault,
CMDIFrameWnd* pParentWnd = NULL,
CCreateContext* pContext = NULL);
パラメーター
lpszClassName
Windows クラス (WNDCLASS 構造体) の名前を指定する null で終わる文字列を指します。 クラス名には、AfxRegisterWndClass グローバル関数に登録されている任意の名前を指定できます。 標準 CMDIChildWnd
の場合は NULL にする必要があります。
lpszWindowName
ウィンドウ名を表す null で終わる文字列を指します。 タイトル バーのテキストとして使用されます。
dwStyle
ウィンドウ スタイル 属性を指定します。 WS_CHILD スタイルが必要です。
rect
ウィンドウのサイズと位置を格納します。 この rectDefault
値により、Windows は新しい CMDIChildWnd
サイズと位置を指定できます。
pParentWnd
ウィンドウの親を指定します。 NULL の場合は、メイン アプリケーション ウィンドウが使用されます。
pContext
CCreateContext 構造体を指定します。 このパラメーターは、NULL でもかまいません。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
現在アクティブな MDI 子フレーム ウィンドウは、親フレーム ウィンドウのキャプションを決定できます。 この機能は、子フレーム ウィンドウのFWS_ADDTOTITLE スタイル ビットをオフにすることで無効になります。
フレームワークは、子ウィンドウを作成するユーザー コマンドに応答してこのメンバー関数を呼び出し、フレームワークは pContext パラメーターを使用して子ウィンドウをアプリケーションに適切に接続します。 呼び出 Create
す場合、 pContext は NULL にすることができます。
例 1
次のメニュー コマンド ハンドラーの例は、 Create
MDI 子ウィンドウを作成するために呼び出します。
// CMainFrame::OnFileNewCMdiChildWnd() is a menu command handler for the
// CMainFrame class, which in turn is a CMDIFrameWnd-derived class.
// It shows the creation of a standard Windows MDI child window using
// the registered CMDIChildWnd class.
void CMainFrame::OnFileNewMdiChildWnd()
{
CMDIChildWnd *pMDIChildWnd = new CMDIChildWnd;
VERIFY(pMDIChildWnd->Create(
NULL, // standard CMDIChildWnd class
_T("My MDIChildWnd"), // caption of MDI child window
WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW, // window styles
rectDefault, // default rectangle size
this)); // parent window; can be NULL
// the default PostNcDestroy handler will delete this object when destroyed
}
例 2
このコード例では、 Create
次から派生したクラスである CHelloWnd
、のメソッドを CMDIChildWnd
呼び出します。
// CMainFrame::OnHello() is a menu command handler for the CMainFrame
// class, which in turn is a CMDIFrameWnd-derived class.
// It shows the creation of a Windows MDI child window using a custom
// window class. The custom window class is registered in
// CHelloWnd::Create(). CHelloWnd is a CMDIChildWnd-derived class.
void CMainFrame::OnHello()
{
CHelloWnd *pHelloWnd = new CHelloWnd;
if (!pHelloWnd->Create(_T("Hello"),
WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW,
rectDefault, this))
return;
// the default PostNcDestroy handler will delete this object when destroyed
}
この例では、クラスの Create
実装を CHelloWnd
示します。
BOOL CHelloWnd::Create(
LPCTSTR szTitle,
LONG style /* = 0 */,
const RECT &rect /* = rectDefault */,
CMDIFrameWnd *parent /* = NULL */)
{
// Setup the shared menu
SetHandles(::LoadMenu(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_HELLO)),
NULL);
// Register a custom WndClass and create a window.
// This must be done because CHelloWnd has a custom icon.
LPCTSTR lpszHelloClass =
AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
LoadCursor(NULL, IDC_ARROW),
(HBRUSH)(COLOR_WINDOW + 1),
LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_HELLO)));
return CMDIChildWnd::Create(lpszHelloClass, szTitle, style, rect, parent);
}
CMDIChildWnd::GetMDIFrame
この関数を呼び出して、MDI 親フレームを返します。
CMDIFrameWnd* GetMDIFrame();
戻り値
MDI 親フレーム ウィンドウへのポインター。
解説
返されるフレームは、オブジェクトを管理CMDIChildWnd
する MDICLIENT 型のウィンドウの親である 2 つの親からCMDIChildWnd
削除されます。 GetParent メンバー関数を呼び出して、CMDIChildWnd
オブジェクトの即時 MDICLIENT 親を一時CWnd
ポインターとして返します。
例
CMDIFrameWnd::MDISetMenu の例を参照してください。
CMDIChildWnd::MDIActivate
MDI フレーム ウィンドウとは別に MDI 子ウィンドウをアクティブ化するには、このメンバー関数を呼び出します。
void MDIActivate();
解説
フレームがアクティブになると、最後にアクティブ化された子ウィンドウもアクティブになります。
例
CMDIFrameWnd::GetWindowMenuPopup の例を参照してください。
CMDIChildWnd::MDIDestroy
MDI 子ウィンドウを破棄するには、このメンバー関数を呼び出します。
void MDIDestroy();
解説
メンバー関数は、フレーム ウィンドウから子ウィンドウのタイトルを削除し、子ウィンドウを非アクティブ化します。
例
// CMainFrame::OnCloseWindow() is a menu command handler for
// CMainFrame class, which in turn is a CMDIFrameWnd-derived
// class. It closes and destroys the current active MDI child window.
void CMainFrame::OnCloseWindow()
{
CMDIChildWnd *child = MDIGetActive();
if (child)
child->MDIDestroy();
}
CMDIChildWnd::MDIMaximize
MDI 子ウィンドウを最大化するには、このメンバー関数を呼び出します。
void MDIMaximize();
解説
子ウィンドウが最大化されると、Windows によってサイズが変更され、そのクライアント領域がフレーム ウィンドウのクライアント領域全体に表示されます。 Windows は、子ウィンドウのコントロール メニューをフレームのメニュー バーに配置して、ユーザーが子ウィンドウを復元または閉じ、子ウィンドウのタイトルをフレーム ウィンドウのタイトルに追加できるようにします。
例
// CMainFrame::OnMaximizeWindow() is a menu command handler for
// CMainFrame class, which in turn is a CMDIFrameWnd-derived
// class. It maximizes the current active MDI child window.
void CMainFrame::OnMaximizeWindow()
{
BOOL maximized;
CMDIChildWnd *child = MDIGetActive(&maximized);
if (child && (!maximized))
child->MDIMaximize(); // or MDIMaximize(child);
}
CMDIChildWnd::MDIRestore
このメンバー関数を呼び出して、MDI 子ウィンドウを最大化または最小化されたサイズから復元します。
void MDIRestore();
例
// CMainFrame::OnRestoreWindow() is a menu command handler for
// CMainFrame class, which in turn is a CMDIFrameWnd-derived class.
// It restores the current active MDI child window from maximized
// or minimized size.
void CMainFrame::OnRestoreWindow()
{
BOOL maximized;
CMDIChildWnd *child = MDIGetActive(&maximized);
if (child && (maximized || child->IsIconic()))
child->MDIRestore(); // or MDIRestore(child);
}
CMDIChildWnd::SetHandles
メニュー リソースとアクセラレータ リソースのハンドルを設定します。
void SetHandles(
HMENU hMenu,
HACCEL hAccel);
パラメーター
hMenu
メニュー リソースのハンドル。
hAccel
アクセラレータ リソースのハンドル。
解説
この関数を呼び出して、MDI 子ウィンドウ オブジェクトによって使用されるメニューリソースとアクセラレータ リソースを設定します。
関連項目
MFC サンプル MDI
MFC サンプル MDIDOCVW
MFC サンプル SNAPVW
CFrameWnd クラス
階層図
CWnd クラス
CMDIFrameWnd クラス
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示