Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
CMultiDocTemplateegyütt ugyanazon dokumentumsablon többCMDIChildWndobjektuma 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
CMDIFrameWndtalá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
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