CMDIFrameWnd クラスCMDIFrameWnd Class

Windows のマルチ ドキュメント インターフェイス (MDI: Multiple Document Interface) のフレーム ウィンドウの機能が用意されています。さらに、ウィンドウを管理するメンバーも用意されています。Provides the functionality of a Windows multiple document interface (MDI) frame window, along with members for managing the window.

構文Syntax

class CMDIFrameWnd : public CFrameWnd

メンバーMembers

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

名前Name 説明Description
CMDIFrameWnd:: CMDIFrameWndCMDIFrameWnd::CMDIFrameWnd CMDIFrameWnd を構築します。Constructs a CMDIFrameWnd.

パブリック メソッドPublic Methods

名前Name 説明Description
CMDIFrameWnd:: CreateClientCMDIFrameWnd::CreateClient このの Windows MDICLIENT ウィンドウを作成し CMDIFrameWnd ます。Creates a Windows MDICLIENT window for this CMDIFrameWnd. のメンバー関数によって呼び出され OnCreate CWnd ます。Called by the OnCreate member function of CWnd.
CMDIFrameWnd:: CreateNewChildCMDIFrameWnd::CreateNewChild 新しい子ウィンドウを作成します。Creates a new child window.
CMDIFrameWnd:: GetWindowMenuPopupCMDIFrameWnd::GetWindowMenuPopup ウィンドウのポップアップメニューを返します。Returns the Window pop-up menu.
CMDIFrameWnd:: MDIActivateCMDIFrameWnd::MDIActivate 別の MDI 子ウィンドウをアクティブにします。Activates a different MDI child window.
CMDIFrameWnd:: MDICascadeCMDIFrameWnd::MDICascade すべての子ウィンドウをカスケード形式で配置します。Arranges all child windows in a cascaded format.
CMDIFrameWnd:: MDIGetActiveCMDIFrameWnd::MDIGetActive 現在アクティブな MDI 子ウィンドウ、および子が最大化されているかどうかを示すフラグを取得します。Retrieves the currently active MDI child window, along with a flag indicating whether or not the child is maximized.
CMDIFrameWnd:: MDIIconArrangeCMDIFrameWnd::MDIIconArrange 最小化されたすべてのドキュメントの子ウィンドウを整列します。Arranges all minimized document child windows.
CMDIFrameWnd:: MDIMaximizeCMDIFrameWnd::MDIMaximize MDI 子ウィンドウを最大化します。Maximizes an MDI child window.
CMDIFrameWnd:: MDINextCMDIFrameWnd::MDINext 現在アクティブな子ウィンドウのすぐ下に子ウィンドウをアクティブにし、現在アクティブな子ウィンドウを他のすべての子ウィンドウの背後に配置します。Activates the child window immediately behind the currently active child window and places the currently active child window behind all other child windows.
CMDIFrameWnd:: MDIPrevCMDIFrameWnd::MDIPrev 前の子ウィンドウをアクティブにし、現在アクティブな子ウィンドウをそのすぐ下に配置します。Activates the previous child window and places the currently active child window immediately behind it.
CMDIFrameWnd:: MDIRestoreCMDIFrameWnd::MDIRestore MDI 子ウィンドウを最大化または最小化されたサイズから復元します。Restores an MDI child window from maximized or minimized size.
CMDIFrameWnd:: MDISetMenuCMDIFrameWnd::MDISetMenu MDI フレームウィンドウ、ウィンドウポップアップメニュー、またはその両方のメニューを置き換えます。Replaces the menu of an MDI frame window, the Window pop-up menu, or both.
CMDIFrameWnd:: MDITileCMDIFrameWnd::MDITile すべての子ウィンドウを並べて表示された形式で配置します。Arranges all child windows in a tiled format.

解説Remarks

アプリケーションに便利な MDI フレームウィンドウを作成するには、からクラスを派生させ CMDIFrameWnd ます。To create a useful MDI frame window for your application, derive a class from CMDIFrameWnd. アプリケーションに固有のデータを格納するために、派生クラスにメンバー変数を追加します。Add member variables to the derived class to store data specific to your application. ウィンドウにメッセージが送られたときに行われる処理を指定するには、派生クラスにメッセージ処理メンバー関数とメッセージ マップを実装します。Implement message-handler member functions and a message map in the derived class to specify what happens when messages are directed to the window.

Create または LoadFrame メンバー関数を呼び出すことによって、MDI フレームウィンドウを構築でき CFrameWnd ます。You can construct an MDI frame window by calling the Create or LoadFrame member function of CFrameWnd.

またはを呼び出す前に、 Create LoadFrame C++ の演算子を使用して、ヒープ上にフレームウィンドウオブジェクトを構築する必要があり new ます。Before you call Create or LoadFrame, you must construct the frame window object on the heap using the C++ new operator. を呼び出す前に、 Create ウィンドウクラスを AfxRegisterWndClass グローバル関数に登録して、フレームのアイコンとクラススタイルを設定することもできます。Before calling Create you can also register a window class with the AfxRegisterWndClass global function to set the icon and class styles for the frame.

メンバー関数を使用し Create て、フレームの作成パラメーターをイミディエイト引数として渡します。Use the Create member function to pass the frame's creation parameters as immediate arguments.

LoadFrame に必要な引数がより少なく Create 、代わりに、フレームのキャプション、アイコン、アクセラレータテーブル、メニューなど、リソースからほとんどの既定値を取得します。LoadFrame requires fewer arguments than Create, and instead retrieves most of its default values from resources, including the frame's caption, icon, accelerator table, and menu. がアクセスするには LoadFrame 、これらのすべてのリソースが同じリソース ID を持つ必要があります (たとえば、IDR_MAINFRAME)。To be accessed by LoadFrame, all these resources must have the same resource ID (for example, IDR_MAINFRAME).

MDIFrameWndはから派生してい CFrameWnd ますが、から派生したフレームウィンドウクラスは、を CMDIFrameWnd 使用して宣言する必要はありません DECLARE_DYNCREATEThough MDIFrameWnd is derived from CFrameWnd, a frame window class derived from CMDIFrameWnd need not be declared with DECLARE_DYNCREATE.

クラスは、 CMDIFrameWnd の既定の実装の多くを継承 CFrameWnd します。The CMDIFrameWnd class inherits much of its default implementation from CFrameWnd. これらの機能の詳細な一覧については、 CFrameWnd クラスの説明を参照してください。For a detailed list of these features, refer to the CFrameWnd class description. クラスには CMDIFrameWnd 、次の追加機能があります。The CMDIFrameWnd class has the following additional features:

  • MDI フレームウィンドウでは、MDICLIENT ウィンドウが管理され、コントロールバーと一緒に再配置されます。An MDI frame window manages the MDICLIENT window, repositioning it in conjunction with control bars. MDI クライアントウィンドウは、MDI 子フレームウィンドウの直接の親です。The MDI client window is the direct parent of MDI child frame windows. に指定された WS_HSCROLL および WS_VSCROLL ウィンドウスタイルは、 CMDIFrameWnd メインフレームウィンドウではなく mdi クライアントウィンドウに適用されるので、ユーザーは mdi クライアント領域 (Windows プログラムマネージャーなど) をスクロールできます。The WS_HSCROLL and WS_VSCROLL window styles specified on a CMDIFrameWnd apply to the MDI client window rather than the main frame window so the user can scroll the MDI client area (as in the Windows Program Manager, for example).

  • MDI フレームウィンドウは、アクティブな MDI 子ウィンドウがないときにメニューバーとして使用される既定のメニューを所有します。An MDI frame window owns a default menu that is used as the menu bar when there is no active MDI child window. アクティブな MDI 子がある場合、mdi フレームウィンドウのメニューバーは MDI 子ウィンドウのメニューに自動的に置き換えられます。When there is an active MDI child, the MDI frame window's menu bar is automatically replaced by the MDI child window menu.

  • MDI フレームウィンドウは、現在の MDI 子ウィンドウと連携して動作します (存在する場合)。An MDI frame window works in conjunction with the current MDI child window, if there is one. たとえば、コマンドメッセージは、MDI フレームウィンドウの前に現在アクティブな MDI 子に委任されます。For instance, command messages are delegated to the currently active MDI child before the MDI frame window.

  • MDI フレームウィンドウには、次の標準ウィンドウメニューコマンドの既定のハンドラーがあります。An MDI frame window has default handlers for the following standard Window menu commands:

    • ID_WINDOW_TILE_VERTID_WINDOW_TILE_VERT

    • ID_WINDOW_TILE_HORZID_WINDOW_TILE_HORZ

    • ID_WINDOW_CASCADEID_WINDOW_CASCADE

    • ID_WINDOW_ARRANGEID_WINDOW_ARRANGE

  • また、MDI フレームウィンドウには ID_WINDOW_NEW の実装もあります。これにより、現在のドキュメントに新しいフレームとビューが作成されます。An MDI frame window also has an implementation of ID_WINDOW_NEW, which creates a new frame and view on the current document. アプリケーションでは、これらの既定のコマンド実装をオーバーライドして、MDI ウィンドウ処理をカスタマイズできます。An application can override these default command implementations to customize MDI window handling.

C++ の演算子を使用して delete フレームウィンドウを破棄しないでください。Do not use the C++ delete operator to destroy a frame window. 代わりに、CWnd::DestroyWindow を使用してください。Use CWnd::DestroyWindow instead. CFrameWndの実装は、 PostNcDestroy ウィンドウが破棄されたときに C++ オブジェクトを削除します。The CFrameWnd implementation of PostNcDestroy will delete the C++ object when the window is destroyed. ユーザーがフレームウィンドウを閉じると、既定の OnClose ハンドラーはを呼び出し DestroyWindow ます。When the user closes the frame window, the default OnClose handler will call DestroyWindow.

の詳細につい CMDIFrameWnd ては、「 フレームウィンドウ」を参照してください。For more information on CMDIFrameWnd, see Frame Windows.

継承階層Inheritance Hierarchy

CObjectCObject

CCmdTargetCCmdTarget

CWndCWnd

CFrameWndCFrameWnd

CMDIFrameWnd

要件Requirements

ヘッダー: afxwin.hHeader: afxwin.h

CMDIFrameWnd:: CMDIFrameWndCMDIFrameWnd::CMDIFrameWnd

CMDIFrameWnd オブジェクトを構築します。Constructs a CMDIFrameWnd object.

CMDIFrameWnd();

解説Remarks

Createまたはの LoadFrame メンバー関数を呼び出して、表示される MDI フレームウィンドウを作成します。Call the Create or LoadFrame member function to create the visible MDI frame window.

Example

// Create main MDI Frame window. CMainFrame is a CMDIFrameWnd-derived
// class. The default CFrameWnd::PostNcDestroy() handler will delete this
// object when destroyed.
CMainFrame *pMainFrame = new CMainFrame;

CMDIFrameWnd:: CreateClientCMDIFrameWnd::CreateClient

オブジェクトを管理する MDI クライアントウィンドウを作成し CMDIChildWnd ます。Creates the MDI client window that manages the CMDIChildWnd objects.

virtual BOOL CreateClient(
    LPCREATESTRUCT lpCreateStruct,
    CMenu* pWindowMenu);

パラメーターParameters

lpCreateStructlpCreateStruct
CREATESTRUCT構造体への long ポインター。A long pointer to a CREATESTRUCT structure.

pWindowMenupWindowMenu
ウィンドウのポップアップメニューへのポインター。A pointer to the Window pop-up menu.

戻り値Return Value

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。Nonzero if successful; otherwise 0.

解説Remarks

メンバー関数を直接オーバーライドする場合は、このメンバー関数を呼び出す必要があり OnCreate ます。This member function should be called if you override the OnCreate member function directly.

Example

// The code below is from winmdi.cpp. It shows how to
// call CMDIFrameWnd::CreateClient(). CMainFrame is a
// CMDIFrameWnd-derived class.
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext * /*pContext*/)
{
   CMenu *pMenu = NULL;
   if (m_hMenuDefault == NULL)
   {
      // default implementation for MFC V1 backward compatibility
      pMenu = GetMenu();
      ASSERT(pMenu != NULL);
      // This is attempting to guess which sub-menu is the Window menu.
      // The Windows user interface guidelines say that the right-most
      // menu on the menu bar should be Help and Window should be one
      // to the left of that.
      int iMenu = pMenu->GetMenuItemCount() - 2;

      // If this assertion fails, your menu bar does not follow the guidelines
      // so you will have to override this function and call CreateClient
      // appropriately or use the MFC V2 MDI functionality.
      ASSERT(iMenu >= 0);
      pMenu = pMenu->GetSubMenu(iMenu);
      ASSERT(pMenu != NULL);
   }

   return CreateClient(lpcs, pMenu);
}

CMDIFrameWnd:: CreateNewChildCMDIFrameWnd::CreateNewChild

新しい子ウィンドウを作成します。Creates a new child window.

CMDIChildWnd* CreateNewChild(
    CRuntimeClass* pClass,
    UINT nResource,
    HMENU hMenu = NULL,
    HACCEL hAccel = NULL);

パラメーターParameters

pClasspClass
作成される子ウィンドウのランタイムクラス。The run-time class of the child window to be created.

nResourcenResource
子ウィンドウに関連付けられている共有リソースの ID。The ID of shared resources associated with the child window.

hMenuhMenu
子ウィンドウのメニュー。The child window's menu.

hAccelhAccel
子ウィンドウのアクセラレータ。The child window's accelerator.

解説Remarks

MDI フレームウィンドウの子ウィンドウを作成するには、この関数を使用します。Use this function to create child windows of an MDI frame window.

Example

// CMainFrame is a CMDIFrameWnd-derived class,
// OnNewDraw is a menu command handler,
// CDrawFrame is a CMDIChildWnd-derived class.
void CMainFrame::OnNewDraw()
{
   CreateNewChild(RUNTIME_CLASS(CDrawFrame), IDR_DRAW, m_hDrawMenu,
                  m_hDrawAccel);
}

CMDIFrameWnd:: GetWindowMenuPopupCMDIFrameWnd::GetWindowMenuPopup

このメンバー関数を呼び出して、"Window" という名前の現在のポップアップメニュー (MDI ウィンドウ管理のメニュー項目を含むポップアップメニュー) へのハンドルを取得します。Call this member function to obtain a handle to the current pop-up menu named "Window" (the pop-up menu with menu items for MDI window management).

virtual HMENU GetWindowMenuPopup(HMENU hMenuBar);

パラメーターParameters

hMenuBarhMenuBar
現在のメニューバー。The current menu bar.

戻り値Return Value

ウィンドウのポップアップメニュー (存在する場合)。それ以外の場合は NULL。The Window pop-up menu if one exists; otherwise NULL.

解説Remarks

既定の実装では、ID_WINDOW_NEW や ID_WINDOW_TILE_HORZ などの標準ウィンドウメニューコマンドを含むポップアップメニューが検索されます。The default implementation looks for a pop-up menu containing standard Window menu commands such as ID_WINDOW_NEW and ID_WINDOW_TILE_HORZ.

標準のメニューコマンド Id を使用しないウィンドウメニューがある場合は、このメンバー関数をオーバーライドします。Override this member function if you have a Window menu that does not use the standard menu command IDs.

Example

// CMainFrame::OnActivateFirstMDIChild() is a menu command handler for
// CMainFrame class, which in turn is a CMDIFrameWnd-derived class.
// It looks for the caption of the first created MDI child window from
// the Window popup menu, and then activate the child window.
void CMainFrame::OnActivateFirstMDIChild()
{
   // Get handle to the Window pop-up menu.
   CMenu *menubar = GetMenu();
   CMenu *wmenu = CMenu::FromHandle(GetWindowMenuPopup(menubar->GetSafeHmenu()));
   if (wmenu == NULL)
      return;

   // Get the caption of the first created MDI child window.
   CString caption;
   if (!wmenu->GetMenuString(AFX_IDM_FIRST_MDICHILD, caption, MF_BYCOMMAND))
      return;

   // Get the actual name of the first created MDI child window by
   // getting rid of the number and space, e.g. "&1 MDI 1".
   int pos = caption.FindOneOf(_T(" "));
   if (pos == -1)
      return;

   caption = caption.Right(caption.GetLength() - (pos + 1));

   // Get the CWnd* of the first created MDI child window by comparing
   // the caption of each MDI child window in the MDI application.
   // Activate the first created MDI child window if found.
   CMDIChildWnd *child = MDIGetActive();
   do
   {
      CString str;
      child->GetWindowText(str);
      if (str == caption)
      {
         child->MDIActivate(); // or MDIActivate(child);
         break;
      }

      child = (CMDIChildWnd*)child->GetWindow(GW_HWNDNEXT);
   } while (child);
}

CMDIFrameWnd:: MDIActivateCMDIFrameWnd::MDIActivate

別の MDI 子ウィンドウをアクティブにします。Activates a different MDI child window.

void MDIActivate(CWnd* pWndActivate);

パラメーターParameters

pWndActivatepWndActivate
アクティブにする MDI 子ウィンドウをポイントします。Points to the MDI child window to be activated.

解説Remarks

このメンバー関数は、アクティブ化されている子ウィンドウと非アクティブ化されている子ウィンドウの両方に WM_MDIACTIVATE メッセージを送信します。This member function sends the WM_MDIACTIVATE message to both the child window being activated and the child window being deactivated.

これは、ユーザーがマウスまたはキーボードを使用して MDI 子ウィンドウにフォーカスを変更した場合に送信されるメッセージと同じです。This is the same message that is sent if the user changes the focus to an MDI child window by using the mouse or keyboard.

注意

Mdi 子ウィンドウは、MDI フレームウィンドウとは別にアクティブ化されます。An MDI child window is activated independently of the MDI frame window. フレームがアクティブになると、最後にアクティブ化された子ウィンドウに WM_NCACTIVATE メッセージが送信され、アクティブなウィンドウフレームとキャプションバーが描画されますが、別の WM_MDIACTIVATE メッセージは受信されません。When the frame becomes active, the child window that was last activated is sent a WM_NCACTIVATE message to draw an active window frame and caption bar, but it does not receive another WM_MDIACTIVATE message.

Example

CMDIFrameWnd:: GetWindowMenuPopupの例を参照してください。See the example for CMDIFrameWnd::GetWindowMenuPopup.

CMDIFrameWnd:: MDICascadeCMDIFrameWnd::MDICascade

すべての MDI 子ウィンドウをカスケード形式で配置します。Arranges all the MDI child windows in a cascade format.

void MDICascade();
void MDICascade(int nType);

パラメーターParameters

nTypenType
Cascade フラグを指定します。Specifies a cascade flag. 次のフラグのみを指定できます。 MDITILE_SKIPDISABLED、無効になっている MDI 子ウィンドウをカスケードできないようにします。Only the following flag can be specified: MDITILE_SKIPDISABLED, which prevents disabled MDI child windows from being cascaded.

解説Remarks

の最初のバージョン MDICascade では、パラメーターを使用せずに、無効な子ウィンドウを含むすべての MDI 子ウィンドウをカスケードします。The first version of MDICascade, with no parameters, cascades all MDI child windows, including disabled ones. 2番目のバージョンでは、 nType パラメーターに MDITILE_SKIPDISABLED を指定した場合、無効になっている MDI 子ウィンドウはカスケードされません。The second version optionally does not cascade disabled MDI child windows if you specify MDITILE_SKIPDISABLED for the nType parameter.

Example

// CMainFrame::OnWindowCommand() is a menu command handler for
// CMainFrame class, which is a CMDIFrameWnd-derived
// class. It handles menu commands for the Windows pop-up menu.
// Its entries in the message map are of the following form:
//    ON_COMMAND_EX(ID_WINDOW_ARRANGE, &CMainFrame::OnWindowCommand)
BOOL CMainFrame::OnWindowCommand(UINT nID)
{
   switch (nID)
   {
   case ID_WINDOW_ARRANGE: // For Window\Arrange Icons menu item, arrange
      MDIIconArrange();    // all minimized document child windows.
      break;

   case ID_WINDOW_CASCADE: // For Window\Cascade menu item, arrange
      MDICascade();        // all the MDI child windows in a cascade format.
      break;

   case ID_WINDOW_TILE_HORZ:       // For Window\Tile Horizontal menu item,
      MDITile(MDITILE_HORIZONTAL); // tile MDI child windows so that
      break;                       // one window appears above another.

   case ID_WINDOW_TILE_VERT:     // For Window\Tile Vertical menu item,
      MDITile(MDITILE_VERTICAL); // tile MDI child windows so that
      break;                     // one window appears beside another.
   }

   return TRUE;
}

CMDIFrameWnd:: MDIGetActiveCMDIFrameWnd::MDIGetActive

現在アクティブな MDI 子ウィンドウ、および子ウィンドウが最大化されているかどうかを示すフラグを取得します。Retrieves the current active MDI child window, along with a flag indicating whether the child window is maximized.

CMDIChildWnd* MDIGetActive(BOOL* pbMaximized = NULL) const;

パラメーターParameters

pbMaximizedpbMaximized
BOOL 戻り値へのポインター。A pointer to a BOOL return value. ウィンドウが最大化されている場合は、戻るときに TRUE に設定します。それ以外の場合は FALSE。Set to TRUE on return if the window is maximized; otherwise FALSE.

戻り値Return Value

アクティブな MDI 子ウィンドウへのポインター。A pointer to the active MDI child window.

Example

CMDIChildWnd:: MDIMaximizeの例を参照してください。See the example for CMDIChildWnd::MDIMaximize.

CMDIFrameWnd:: MDIIconArrangeCMDIFrameWnd::MDIIconArrange

最小化されたすべてのドキュメントの子ウィンドウを整列します。Arranges all minimized document child windows.

void MDIIconArrange();

解説Remarks

最小化されていない子ウィンドウには影響しません。It does not affect child windows that are not minimized.

Example

CMDIFrameWnd:: MDICascadeの例を参照してください。See the example for CMDIFrameWnd::MDICascade.

CMDIFrameWnd:: MDIMaximizeCMDIFrameWnd::MDIMaximize

指定した MDI 子ウィンドウを最大化します。Maximizes the specified MDI child window.

void MDIMaximize(CWnd* pWnd);

パラメーターParameters

pWndpWnd
最大化するウィンドウをポイントします。Points to the window to maximize.

解説Remarks

子ウィンドウが最大化されると、クライアント領域がクライアントウィンドウに収まるように、ウィンドウのサイズが変更されます。When a child window is maximized, Windows resizes it to make its client area fill the client window. 子ウィンドウのコントロールメニューがフレームのメニューバーに配置されるため、ユーザーは子ウィンドウを復元したり閉じたりできます。Windows places the child window's Control menu in the frame's menu bar so the user can restore or close the child window. また、子ウィンドウのタイトルがフレームウィンドウのタイトルに追加されます。It also adds the title of the child window to the frame-window title.

現在アクティブな MDI 子ウィンドウが最大化されているときに、別の MDI 子ウィンドウがアクティブになっている場合、現在アクティブな子ウィンドウが復元され、新しくアクティブになった子ウィンドウが最大化されます。If another MDI child window is activated when the currently active MDI child window is maximized, Windows restores the currently active child and maximizes the newly activated child window.

Example

CMDIChildWnd:: MDIMaximizeの例を参照してください。See the example for CMDIChildWnd::MDIMaximize.

CMDIFrameWnd:: MDINextCMDIFrameWnd::MDINext

現在アクティブな子ウィンドウのすぐ下に子ウィンドウをアクティブにし、現在アクティブな子ウィンドウを他のすべての子ウィンドウの背後に配置します。Activates the child window immediately behind the currently active child window and places the currently active child window behind all other child windows.

void MDINext();

解説Remarks

現在アクティブな MDI 子ウィンドウが最大化されている場合、メンバー関数は、現在アクティブな子を復元し、新しくアクティブになった子を最大化します。If the currently active MDI child window is maximized, the member function restores the currently active child and maximizes the newly activated child.

Example

// CMainFrame::OnActivateNextWindow() is a menu command handler for
// CMainFrame class, which in turn is a CMDIFrameWnd-derived class.
// It activates the child window immediately behind the currently
// active child window and places the currently active child window
// behind all other child windows.
void CMainFrame::OnActivateNextWindow()
{
   MDINext();
}

CMDIFrameWnd:: MDIPrevCMDIFrameWnd::MDIPrev

前の子ウィンドウをアクティブにし、現在アクティブな子ウィンドウをそのすぐ下に配置します。Activates the previous child window and places the currently active child window immediately behind it.

void MDIPrev();

解説Remarks

現在アクティブな MDI 子ウィンドウが最大化されている場合、メンバー関数は、現在アクティブな子を復元し、新しくアクティブになった子を最大化します。If the currently active MDI child window is maximized, the member function restores the currently active child and maximizes the newly activated child.

CMDIFrameWnd:: MDIRestoreCMDIFrameWnd::MDIRestore

MDI 子ウィンドウを最大化または最小化されたサイズから復元します。Restores an MDI child window from maximized or minimized size.

void MDIRestore(CWnd* pWnd);

パラメーターParameters

pWndpWnd
復元するウィンドウをポイントします。Points to the window to restore.

Example

CMDIChildWnd:: MDIRestoreの例を参照してください。See the example for CMDIChildWnd::MDIRestore.

CMDIFrameWnd:: MDISetMenuCMDIFrameWnd::MDISetMenu

MDI フレームウィンドウ、ウィンドウポップアップメニュー、またはその両方のメニューを置き換えます。Replaces the menu of an MDI frame window, the Window pop-up menu, or both.

CMenu* MDISetMenu(
    CMenu* pFrameMenu,
    CMenu* pWindowMenu);

パラメーターParameters

pFrameMenupFrameMenu
新しいフレームウィンドウメニューのメニューを指定します。Specifies the menu of the new frame-window menu. NULL の場合、メニューは変更されません。If NULL, the menu is not changed.

pWindowMenupWindowMenu
新しいウィンドウのポップアップメニューのメニューを指定します。Specifies the menu of the new Window pop-up menu. NULL の場合、メニューは変更されません。If NULL, the menu is not changed.

戻り値Return Value

このメッセージに置き換えられたフレームウィンドウメニューへのポインター。A pointer to the frame-window menu replaced by this message. ポインターは一時的である可能性があり、後で使用するために格納しないでください。The pointer may be temporary and should not be stored for later use.

解説Remarks

を呼び出した後 MDISetMenu 、アプリケーションはの DrawMenuBar メンバー関数を呼び出してメニューバーを更新する必要があり CWnd ます。After calling MDISetMenu, an application must call the DrawMenuBar member function of CWnd to update the menu bar.

この呼び出しによってウィンドウのポップアップメニューが置き換えられた場合、MDI 子ウィンドウのメニュー項目は、前の [ウィンドウ] メニューから削除され、新しいウィンドウのポップアップメニューに追加されます。If this call replaces the Window pop-up menu, MDI child-window menu items are removed from the previous Window menu and added to the new Window pop-up menu.

MDI 子ウィンドウが最大化されていて、この呼び出しによって MDI フレームウィンドウメニューが置き換えられた場合、コントロールメニューと復元コントロールは、前のフレームウィンドウメニューから削除され、新しいメニューに追加されます。If an MDI child window is maximized and this call replaces the MDI frame-window menu, the Control menu and restore controls are removed from the previous frame-window menu and added to the new menu.

フレームワークを使用して MDI 子ウィンドウを管理する場合は、このメンバー関数を呼び出さないでください。Do not call this member function if you use the framework to manage your MDI child windows.

Example

// CMdiView::OnReplaceMenu() is a menu command handler for CMdiView
// class, which in turn is a CView-derived class. It loads a new
// menu resource and replaces the main application window's menu
// bar with this new menu.
void CMdiView::OnReplaceMenu()
{
   // Load a new menu resource named IDR_SHORT_MENU. m_hDefaultMenu is
   // a member variable of CMdiDoc class (a CDocument-derived class).
   // Its type is HMENU.
   CMdiDoc *pdoc = (CMdiDoc*)GetDocument();
   pdoc->m_hDefaultMenu =
       ::LoadMenu(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_SHORT_MENU));
   if (pdoc->m_hDefaultMenu == NULL)
      return;

   // Get the parent window of this view window. The parent window is
   // a CMDIChildWnd-derived class. We can then obtain the MDI parent
   // frame window using the CMDIChildWnd*. Then, replace the current
   // menu bar with the new loaded menu resource.
   CMDIFrameWnd *frame = ((CMDIChildWnd*)GetParent())->GetMDIFrame();
   frame->MDISetMenu(CMenu::FromHandle(pdoc->m_hDefaultMenu), NULL);
   frame->DrawMenuBar();
}
// GetDefaultMenu() is an undocumented virtual function for
// CDocument class. It allows the document to determine which
// menu to display. m_hDefaultMenu is of type HMENU. Its value
// is initialized to NULL either in the constructor or
// CDocument::OnNewDocument(). And the menu resource is destroyed
// in the destructor to avoid having too many menus loaded at once.
HMENU CMdiDoc::GetDefaultMenu()
{
   if (m_hDefaultMenu)
      return m_hDefaultMenu;

   return COleServerDoc::GetDefaultMenu();
}

// Initialize member variable(s) in the constructor. CMdiDoc is
// a CDocument-derived class.
CMdiDoc::CMdiDoc()
{
   // Use OLE compound files
   EnableCompoundFile();

   m_hDefaultMenu = NULL; // initialize to NULL
}

// Destroy menu resource in CMdiDoc's destructor. CMdiDoc is
// a CDocument-derived class.
CMdiDoc::~CMdiDoc()
{
   if (m_hDefaultMenu)
      ::DestroyMenu(m_hDefaultMenu);
}

CMDIFrameWnd:: MDITileCMDIFrameWnd::MDITile

すべての子ウィンドウを並べて表示された形式で配置します。Arranges all child windows in a tiled format.

void MDITile();
void MDITile(int nType);

パラメーターParameters

nTypenType
タイルフラグを指定します。Specifies a tiling flag. このパラメーターには、次のフラグのいずれかを指定できます。This parameter can be any one of the following flags:

  • 1つのウィンドウが別のウィンドウの上に表示されるように、MDI 子ウィンドウを MDITILE_HORIZONTAL タイルします。MDITILE_HORIZONTAL Tiles MDI child windows so that one window appears above another.

  • MDITILE_SKIPDISABLED 無効になっている MDI 子ウィンドウがタイル化されないようにします。MDITILE_SKIPDISABLED Prevents disabled MDI child windows from being tiled.

  • MDITILE_VERTICAL は、MDI 子ウィンドウを並べて表示し、1つのウィンドウを別のウィンドウの横に表示します。MDITILE_VERTICAL Tiles MDI child windows so that one window appears beside another.

解説Remarks

の最初のバージョン MDITile では、パラメーターを指定しないと、windows は windows のバージョン3.1 以降で垂直方向に並べて配置されます。The first version of MDITile, without parameters, tiles the windows vertically under Windows versions 3.1 and later. 2番目のバージョンでは、 nType パラメーターの値に応じて、ウィンドウが垂直方向または水平方向に並べて配置されます。The second version tiles windows vertically or horizontally, depending on the value of the nType parameter.

Example

CMDIFrameWnd:: MDICascadeの例を参照してください。See the example for CMDIFrameWnd::MDICascade.

関連項目See also

MFC のサンプル MDIMFC Sample MDI
MFC のサンプル MDIDOCVWMFC Sample MDIDOCVW
MFC のサンプル SNAPVWMFC Sample SNAPVW
CFrameWnd クラスCFrameWnd Class
階層図Hierarchy Chart
CWnd クラスCWnd Class
CMDIChildWnd クラスCMDIChildWnd Class