Sdílet prostřednictvím


CMDIChildWnd – třída

Poskytuje funkce podřízeného okna windows s více rozhraními dokumentů (MDI) společně se členy pro správu okna.

Syntaxe

class CMDIChildWnd : public CFrameWnd

Členové

Veřejné konstruktory

Jméno popis
CMDIChildWnd::CMDIChildWnd CMDIChildWnd Vytvoří objekt.

Veřejné metody

Jméno popis
CMDIChildWnd::Create Vytvoří podřízené okno MDI systému Windows přidružené k objektu CMDIChildWnd .
CMDIChildWnd::GetMDIFrame Vrátí nadřazený rámec MDI okna klienta MDI.
CMDIChildWnd::MDIActivate Aktivuje toto podřízené okno MDI.
CMDIChildWnd::MDIDestroy Zničí toto podřízené okno MDI.
CMDIChildWnd::MDIMaximize Maximalizuje toto podřízené okno MDI.
CMDIChildWnd::MDIRestore Obnoví toto podřízené okno MDI z maximalizované nebo minimalizované velikosti.
CMDIChildWnd::SetHandles Nastaví popisovače pro prostředky nabídky a akcelerátoru.

Poznámky

Podřízené okno MDI vypadá podobně jako typické okno rámečku s tím rozdílem, že podřízené okno MDI se zobrazí v okně rámečku MDI místo na ploše. Podřízené okno MDI nemá vlastní řádek nabídek, ale místo toho sdílí nabídku okna rámce MDI. Architektura automaticky změní nabídku rámce MDI tak, aby představovala aktuálně aktivní podřízené okno MDI.

Chcete-li vytvořit užitečné podřízené okno MDI pro vaši aplikaci, odvození třídy z CMDIChildWnd. Přidejte do odvozené třídy členské proměnné pro ukládání dat specifických pro vaši aplikaci. Implementujte členské funkce obslužné rutiny zpráv a mapu zpráv v odvozené třídě a určete, co se stane, když jsou zprávy směrovány do okna.

Existují tři způsoby vytvoření podřízeného okna MDI:

  • Přímo ho sestavujte pomocí Create.

  • Přímo ho sestavujte pomocí LoadFrame.

  • Nepřímo ho sestavíte prostřednictvím šablony dokumentu.

Před voláním Create nebo LoadFrameje nutné vytvořit objekt okna rámce v haldě pomocí operátoru C++ new . Před voláním Create můžete také zaregistrovat třídu okna s globální funkcí AfxRegisterWndClass , která nastaví ikonu a styly tříd pro rámec.

Create Členské funkce slouží k předání parametrů vytvoření rámce jako okamžitých argumentů.

LoadFramevyžaduje méně argumentů než Createa místo toho načte většinu výchozích hodnot z prostředků, včetně popis rámce, ikony, tabulky akcelerátoru a nabídky. Aby byly všechny tyto prostředky přístupné LoadFrame, musí mít stejné ID prostředku (například IDR_MAINFRAME).

CMDIChildWnd Pokud objekt obsahuje zobrazení a dokumenty, jsou vytvořeny nepřímo architekturou místo přímo programátorem. Objekt CDocTemplate orchestruje vytvoření rámce, vytvoření obsahujících zobrazení a propojení zobrazení s příslušným dokumentem. Parametry konstruktoru CDocTemplate určují CRuntimeClass tři zahrnuté třídy (dokument, rámec a zobrazení). Objekt CRuntimeClass je používán architekturou k dynamickému vytváření nových snímků při zadání uživatelem (například pomocí příkazu Nový soubor nebo příkazu MDI Window New).

Třída oken s rámečkem odvozená z CMDIChildWnd musí být deklarována s DECLARE_DYNCREATE, aby výše uvedený mechanismus RUNTIME_CLASS fungoval správně.

Třída CMDIChildWnd dědí většinu své výchozí implementace z CFrameWnd. Podrobný seznam těchto funkcí najdete v popisu třídy CFrameWnd . Třída CMDIChildWnd má následující další funkce:

  • Ve spojení s CMultiDocTemplate třídou sdílí více CMDIChildWnd objektů ze stejné šablony dokumentu stejnou nabídku a ukládá systémové prostředky Systému Windows.

  • Nabídka aktuálně aktivního podřízeného okna MDI zcela nahrazuje nabídku okna rámce MDI a do popis okna rámce MDI se přidá popis aktuálně aktivního podřízeného okna MDI. Další příklady podřízených funkcí okna MDI implementovaných ve spojení s oknem rámečku MDI najdete v CMDIFrameWnd popisu třídy.

Nepoužívejte operátor C++ delete ke zničení okna rámce. Místo toho použijte CWnd::DestroyWindow. Implementace CFrameWndPostNcDestroy odstraní objekt C++ při zničení okna. Když uživatel zavře okno rámce, bude výchozí OnClose obslužná rutina volat DestroyWindow.

Další informace naleznete v CMDIChildWndtématu Rámová okna.

Hierarchie dědičnosti

Objekt CObject

CCmdTarget

Cwnd

CFrameWnd

CMDIChildWnd

Požadavky

Hlavička: afxwin.h

CMDIChildWnd::CMDIChildWnd

Volání k vytvoření objektu CMDIChildWnd

CMDIChildWnd();

Poznámky

Volání Create pro vytvoření viditelného okna

Příklad

Podívejte se na příklad pro CMDIChildWnd::Create.

CMDIChildWnd::Create

Voláním této členské funkce vytvoříte podřízené okno MDI systému Windows a připojíte ho k objektu 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);

Parametry

lpszClassName
Odkazuje na řetězec znaků s ukončenou hodnotou null, který pojmenuje třídu Windows ( strukturu WNDCLASS ). Název třídy může být libovolný název registrovaný globální funkcí AfxRegisterWndClass . Měla by mít hodnotu NULL pro standard CMDIChildWnd.

lpszWindowName
Odkazuje na řetězec znaků s ukončenou hodnotou null, který představuje název okna. Slouží jako text pro záhlaví.

dwStyle
Určuje atributy stylu okna. Je vyžadován styl WS_CHILD.

Rect
Obsahuje velikost a umístění okna. Tato rectDefault hodnota umožňuje systému Windows určit velikost a umístění nového CMDIChildWnd.

pParentWnd
Určuje nadřazený objekt okna. Pokud je hodnota NULL, použije se hlavní okno aplikace.

pContext
Určuje CCreateContext struktury. Tento parametr může mít hodnotu NULL.

Vrácená hodnota

Nenulové, pokud je úspěšné; jinak 0.

Poznámky

Aktuálně aktivní okno podřízeného rámce MDI může určit popis nadřazeného okna rámce. Tato funkce je zakázána vypnutím bitu stylu FWS_ADDTOTITLE podřízeného okna rámečku.

Architektura volá tuto členovou funkci v reakci na uživatelský příkaz k vytvoření podřízeného okna a rozhraní používá parametr pContext k správnému připojení podřízeného okna k aplikaci. Při volání Create, pContext může být NULL.

Příklad 1

Tato ukázková obslužná rutina Create příkazu nabídky vyvolá vytvoření podřízeného okna 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
}

Příklad 2

Příklad kódu volá metodu CreateCHelloWnd, třídy odvozené z 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
}

Tento příklad ukazuje implementaci CreateCHelloWnd třídy:

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

Voláním této funkce vrátíte nadřazený rámec MDI.

CMDIFrameWnd* GetMDIFrame();

Vrácená hodnota

Ukazatel na nadřazené okno rámce MDI.

Poznámky

Vrácený rámec je ze dvou nadřazených CMDIChildWnd objektů odebrán a je nadřazeným objektem okna typu MDICLIENT, který objekt spravuje CMDIChildWnd . Voláním getParent členské funkce vrátí CMDIChildWnd objekt okamžitě MDICLIENT nadřazený jako dočasný CWnd ukazatel.

Příklad

Podívejte se na příklad pro CMDIFrameWnd::MDISetMenu.

CMDIChildWnd::MDIActivate

Voláním této členské funkce aktivujte podřízené okno MDI nezávisle na okně rámce MDI.

void MDIActivate();

Poznámky

Jakmile se rámec aktivuje, aktivuje se také podřízené okno, které bylo naposledy aktivováno.

Příklad

Podívejte se na příklad pro CMDIFrameWnd::GetWindowMenuPopup.

CMDIChildWnd::MDIDestroy

Voláním této členské funkce zničíte podřízené okno MDI.

void MDIDestroy();

Poznámky

Členová funkce odebere název podřízeného okna z okna rámce a deaktivuje podřízené okno.

Příklad

// 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

Voláním této členské funkce maximalizujete podřízené okno MDI.

void MDIMaximize();

Poznámky

Když je podřízené okno maximalizované, windows změní jeho velikost tak, aby jeho klientská oblast vyplňovala oblast klienta okna rámečku. Systém Windows umístí ovládací nabídku podřízeného okna do řádku nabídek rámce, aby uživatel mohl podřízené okno obnovit nebo zavřít a přidat název podřízeného okna do názvu okna rámečku.

Příklad

// 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

Voláním této členské funkce obnovíte podřízené okno MDI z maximalizované nebo minimalizované velikosti.

void MDIRestore();

Příklad

// 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

Nastaví popisovače pro prostředky nabídky a akcelerátoru.

void SetHandles(
    HMENU hMenu,
    HACCEL hAccel);

Parametry

hMenu
Popisovač prostředku nabídky

hAccel
Popisovač prostředku akcelerátoru

Poznámky

Voláním této funkce nastavíte prostředky nabídky a akcelerátoru používané objektem podřízeného okna MDI.

Viz také

MFC – ukázka MDI
MFC – ukázka MDIDOCVW
MFC – Ukázka SNAPVW
CFrameWnd – třída
Graf hierarchie
CWnd – třída
CMDIFrameWnd – třída