Megosztás a következőn keresztül:


CMDIChildWnd osztály

Megjegyzés:

A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

Biztosítja a Windows több dokumentumfelület (MDI) gyermekablakának funkcióit, valamint az ablak kezeléséhez szükséges tagokat.

Szemantika

class CMDIChildWnd : public CFrameWnd

Tagok

Nyilvános konstruktorok

Név Description
CMDIChildWnd::CMDIChildWnd Egy CMDIChildWnd objektumot hoz létre.

Nyilvános metódusok

Név Description
CMDIChildWnd::Létrehozás Létrehozza az objektumhoz társított Windows MDI gyermekablakot CMDIChildWnd .
CMDIChildWnd::GetMDIFrame Az MDI-ügyfélablak szülő MDI-keretét adja vissza.
CMDIChildWnd::MDIActivate Aktiválja ezt az MDI gyermekablakot.
CMDIChildWnd::MDIDestroy Elpusztítja ezt az MDI gyermekablakot.
CMDIChildWnd::MDIMaximize Maximalizálja ezt az MDI gyermekablakot.
CMDIChildWnd::MDIRestore Visszaállítja ezt az MDI gyermekablakot a teljes vagy a minimális méretből.
CMDIChildWnd::SetHandles Beállítja a menü- és gyorsítóerőforrások leíróit.

Megjegyzések

Az MDI gyermekablakok úgy néznek ki, mint egy tipikus keretablak, azzal a kivételrel, hogy az MDI gyermekablaka nem az asztalon, hanem egy MDI-keretablakban jelenik meg. Az MDI gyermekablakában nincs saját menüsáv, hanem az MDI-keretablak menüjét osztja meg. A keretrendszer automatikusan módosítja az MDI keretmenüt, hogy az a jelenleg aktív MDI gyermekablakot jelölje.

Ha hasznos MDI gyermekablakot szeretne létrehozni az alkalmazáshoz, származtass egy osztályt a következőből CMDIChildWnd: . Tagváltozók hozzáadása a származtatott osztályhoz az alkalmazásra jellemző adatok tárolásához. Üzenetkezelő tagfüggvények és üzenettérkép implementálása a származtatott osztályban annak meghatározásához, hogy mi történik, amikor az üzeneteket az ablakba irányítják.

Az MDI gyermekablakának létrehozásának három módja van:

  • Közvetlenül a következő használatával Createhozhatja létre: .

  • Közvetlenül a következő használatával LoadFramehozhatja létre: .

  • Közvetetten egy dokumentumsablonon keresztül hozza létre.

A hívás Create előtt vagy LoadFramea C++ new operátorral kell létrehoznia a keretablak objektumot a halomra. A hívás Create előtt regisztrálhat egy ablakosztályt az AfxRegisterWndClass globális függvénnyel a keret ikonjának és osztálystílusainak beállításához.

Create A tagfüggvény használatával azonnali argumentumként adja át a keret létrehozási paramétereit.

LoadFrame kevesebb argumentumot igényel, mint Createa , és ehelyett lekéri az alapértelmezett értékek többségét az erőforrásokból, beleértve a keret feliratát, ikonját, gyorsítótábláját és menüjét. Ahhoz, hogy elérhető LoadFramelegyen, ezeknek az erőforrásoknak ugyanazzal az erőforrás-azonosítóval kell rendelkezniük (például IDR_MAINFRAME).

Ha egy CMDIChildWnd objektum nézeteket és dokumentumokat tartalmaz, azokat közvetetten a keretrendszer hozza létre, nem pedig közvetlenül a programozó. Az CDocTemplate objektum a keret létrehozását, az azt tartalmazó nézetek létrehozását és a nézetek és a megfelelő dokumentum közötti kapcsolatot vezényli. A konstruktor paraméterei meghatározzák CDocTemplate a CRuntimeClass három érintett osztályt (dokumentum, keret és nézet). A CRuntimeClass keretrendszer egy objektumot használ az új keretek dinamikus létrehozásához, amikor a felhasználó megadja (például az Új fájl vagy az MDI-ablak új parancsával).

A fenti RUNTIME_CLASS mechanizmus megfelelő működéséhez DECLARE_DYNCREATE kell deklarálni egy keretablak-osztályt CMDIChildWnd .

Az CMDIChildWnd osztály az alapértelmezett implementáció nagy részét a következőtől CFrameWndörökli: . A funkciók részletes listáját a CFrameWnd osztály leírásában találja. Az CMDIChildWnd osztály a következő további funkciókkal rendelkezik:

  • Az osztálysal CMultiDocTemplate együtt ugyanazon dokumentumsablon több CMDIChildWnd objektuma is ugyanazt a menüt használja, és windowsos rendszererőforrásokat ment.

  • A jelenleg aktív MDI gyermekablak menü teljes mértékben lecseréli az MDI-keretablak menüjét, és a jelenleg aktív MDI gyermekablak felirata felkerül az MDI-keretablak feliratára. Az MDI-keretablakokkal együtt implementált MDI gyermekablakfüggvényekre további példákat az osztály leírásában CMDIFrameWnd talál.

Ne használja a C++ delete operátort a keretablak elpusztításához. A CWnd::DestroyWindow használható helyette. A CFrameWnd végrehajtás PostNcDestroy törli a C++ objektumot, amikor az ablak megsemmisül. Amikor a felhasználó bezárja a keretablakot, az alapértelmezett OnClose kezelő fog hívni DestroyWindow.

További információ: CMDIChildWndKeretablakok.

Öröklési hierarchia

CObject

CCmdTarget

CWnd

CFrameWnd

CMDIChildWnd

Requirements

Fejléc: afxwin.h

CMDIChildWnd::CMDIChildWnd

Hívás objektum létrehozásához CMDIChildWnd .

CMDIChildWnd();

Megjegyzések

Hívás Create a látható ablak létrehozásához.

Example

Lásd a CMDIChildWnd::Create példát.

CMDIChildWnd::Létrehozás

A tagfüggvény meghívásával hozzon létre egy Windows MDI gyermekablakot, és csatolja az CMDIChildWnd objektumhoz.

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);

Paraméterek

lpszClassName
Egy null értékű karaktersztringre mutat, amely a Windows osztályt ( WNDCLASS-struktúrát ) nevezi el. Az osztálynév bármely, az AfxRegisterWndClass globális függvényben regisztrált név lehet. Standard CMDIChildWndesetén NULL értékűnek kell lennie.

lpszWindowName
Egy null értékű karaktersztringre mutat, amely az ablak nevét jelöli. Szövegként használatos a címsorhoz.

dwStyle
Megadja az ablakstílus attribútumait. A WS_CHILD stílus megadása kötelező.

téglalap
Az ablak méretét és pozícióját tartalmazza. Az rectDefault érték lehetővé teszi a Windows számára az új CMDIChildWndméret és pozíció megadását.

pParentWnd
Megadja az ablak szülőjét. Null érték esetén a rendszer a fő alkalmazásablakot használja.

pContext
A CCreateContext struktúrát adja meg. Ez a paraméter null értékű lehet.

Visszaadott érték

Nonzero, ha sikeres; egyéb esetben 0.

Megjegyzések

A jelenleg aktív MDI gyermekkeretablak meghatározhatja a szülőkeret ablakának feliratát. Ez a funkció le van tiltva a gyermekkeret ablakának FWS_ADDTOTITLE stílusának kikapcsolásával.

A keretrendszer egy felhasználói parancsra válaszul meghívja ezt a tagfüggvényt egy gyermekablak létrehozásához, és a keretrendszer a pContext paraméterrel megfelelően csatlakoztatja a gyermekablakot az alkalmazáshoz. Híváskor a CreatepContext null értékű lehet.

1. példa

Ez a példamenü parancskezelője Create MDI-gyermekablak létrehozásához hív meg:

// 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. példa

A példakód a Create következőből CMDIChildWndszármaztatott osztály metódusát CHelloWndhívja meg:

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

Ez a példa az Create osztály implementálását CHelloWnd mutatja be:

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

Hívja meg ezt a függvényt az MDI szülőkeretének visszaadásához.

CMDIFrameWnd* GetMDIFrame();

Visszaadott érték

Mutató az MDI szülőkeret ablakára.

Megjegyzések

A visszaadott keret két szülőt távolít el a CMDIChildWnd rendszerből, és az objektumot kezelő CMDIChildWnd MDICLIENT típusú ablak szülője. Hívja meg a GetParent tagfüggvényt, hogy ideiglenes mutatóként CWnd adja vissza az CMDIChildWnd objektum közvetlen MDICLIENT szülőjét.

Example

Lásd a CMDIFrameWnd::MDISetMenu példát.

CMDIChildWnd::MDIActivate

Hívja meg ezt a tagfüggvényt, hogy az MDI-keretablaktól függetlenül aktiváljon egy MDI-gyermekablakot.

void MDIActivate();

Megjegyzések

Amikor a keret aktívvá válik, a legutóbb aktivált gyermekablak is aktiválódik.

Example

Lásd a CMDIFrameWnd::GetWindowMenuPopup példát.

CMDIChildWnd::MDIDestroy

Hívja meg ezt a tagfüggvényt egy MDI-gyermekablak elpusztításához.

void MDIDestroy();

Megjegyzések

A tagfüggvény eltávolítja a gyermekablak címét a keretablakból, és inaktiválja a gyermekablakot.

Example

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

Hívja meg ezt a tagfüggvényt az MDI gyermekablakának maximalizálásához.

void MDIMaximize();

Megjegyzések

Ha egy gyermekablak teljes méretű, a Windows átméretezi, hogy az ügyfélterülete kitöltse a keretablak ügyfélterületét. A Windows a gyermekablak Vezérlő menüjét a keret menüsávján helyezi el, hogy a felhasználó visszaállíthassa vagy bezárhassa a gyermekablakot, és hozzáadhassa a gyermekablak címét a keretablak címéhez.

Example

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

Hívja meg ezt a tagfüggvényt, hogy visszaállítsa az MDI gyermekablakát a teljes méretről vagy a minimális méretről.

void MDIRestore();

Example

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

Beállítja a menü- és gyorsítóerőforrások leíróit.

void SetHandles(
    HMENU hMenu,
    HACCEL hAccel);

Paraméterek

hMenu
Egy menüerőforrás fogópontja.

hAccel
Egy gyorsítóerőforrás kezelője.

Megjegyzések

Hívja meg ezt a függvényt az MDI gyermekablak-objektum által használt menü- és gyorsítóerőforrások beállításához.

Lásd még

MFC-minta MDI
MFC-minta MDIDOCVW
MFC-minta SNAPVW
CFrameWnd osztály
hierarchiadiagram
CWnd osztály
CMDIFrameWnd osztály