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.
A Windows több dokumentumfelületet (MDI) tartalmazó keretablak funkcióit, valamint az ablak kezeléséhez szükséges tagokat biztosítja.
Szemantika
class CMDIFrameWnd : public CFrameWnd
Tagok
Nyilvános konstruktorok
| Név | Description |
|---|---|
| CMDIFrameWnd::CMDIFrameWnd | Létrehoz egy CMDIFrameWnd-t. |
Nyilvános metódusok
| Név | Description |
|---|---|
| CMDIFrameWnd::CreateClient | Ehhez létrehoz egy Windows MDICLIENT-ablakot CMDIFrameWnd. A függvény tagfüggvénye CWndhívja OnCreate meg. |
| CMDIFrameWnd::CreateNewChild | Új gyermekablakot hoz létre. |
| CMDIFrameWnd::GetWindowMenuPopup | Az Ablak előugró menüt adja vissza. |
| CMDIFrameWnd::MDIActivate | Egy másik MDI gyermekablak aktiválása. |
| CMDIFrameWnd::MDICascade | Az összes gyermekablakot kaszkádolt formátumban rendezi el. |
| CMDIFrameWnd::MDIGetActive | Lekéri a jelenleg aktív MDI gyermekablakot, valamint egy jelölőt, amely jelzi, hogy a gyermek teljes méretű-e. |
| CMDIFrameWnd::MDIIconArrange | Az összes kisméretű dokumentum gyermekablakát elrendezi. |
| CMDIFrameWnd::MDIMaximize | Az MDI gyermekablakának maximalizálása. |
| CMDIFrameWnd::MDINext | Aktiválja a gyermekablakot közvetlenül az aktuálisan aktív gyermekablak mögött, és az aktuálisan aktív gyermekablakot az összes többi gyermekablak mögé helyezi. |
| CMDIFrameWnd::MDIPrev | Aktiválja az előző gyermekablakot, és közvetlenül mögé helyezi az aktuálisan aktív gyermekablakot. |
| CMDIFrameWnd::MDIRestore | Visszaállít egy MDI gyermekablakot a teljes vagy a minimális méretből. |
| CMDIFrameWnd::MDISetMenu | Lecseréli az MDI-keretablak, az Ablak előugró menü vagy mindkettő menüjét. |
| CMDIFrameWnd::MDITile | Csempézett formátumban rendezi el az összes gyermekablakot. |
Megjegyzések
Ha hasznos MDI-keretablakot szeretne létrehozni az alkalmazáshoz, hozzon létre egy osztályt a következőből CMDIFrameWnd: . 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.
MDI-keretablakot úgy hozhat létre, hogy meghívja a Create vagy LoadFrame tag függvényt CFrameWnd.
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. A hozzáféréshez LoadFramemindegyik erőforrásnak ugyanazzal az erőforrás-azonosítóval kell rendelkeznie (például IDR_MAINFRAME).
Bár MDIFrameWnd származik CFrameWnd, a keretablak osztály származtatott CMDIFrameWnd nem kell deklarálni a DECLARE_DYNCREATE.
Az CMDIFrameWnd 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 CMDIFrameWnd osztály a következő további funkciókkal rendelkezik:
Az MDI-keretablak kezeli az MDICLIENT ablakot, és a vezérlősávokkal együtt áthelyezi. Az MDI-ügyfélablak az MDI gyermekkeretablakainak közvetlen szülője. A WS_HSCROLL és WS_VSCROLL ablakstílusok az MDI-ügyfélablakra
CMDIFrameWndvonatkoznak a fő keretablak helyett, hogy a felhasználó görgethesse az MDI-ügyfélterületet (például a Windows Program Managerben).Az MDI-keretablakok alapértelmezett menüt használnak menüsávként, ha nincs aktív MDI gyermekablak. Aktív MDI-gyermek esetén az MDI-keretablak menüsávját automatikusan felváltja az MDI gyermekablak menüje.
Az MDI-keretablak az aktuális MDI gyermekablakkal együtt működik, ha van ilyen. A parancsüzenetek például az MDI-keretablak előtt delegálva lesznek a jelenleg aktív MDI-gyermek számára.
Az MDI-keretablakok alapértelmezett kezelői a következő szabványos Ablak menüparancsokhoz vannak beállítva:
ID_WINDOW_TILE_VERT
ID_WINDOW_TILE_HORZ
ID_WINDOW_CASCADE
ID_WINDOW_ARRANGE
Az MDI-keretablak ID_WINDOW_NEW implementációval is rendelkezik, amely új keretet és nézetet hoz létre az aktuális dokumentumon. Az alkalmazások felülbírálhatják ezeket az alapértelmezett parancsmegvalósításokat az MDI-ablakkezelés testreszabásához.
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ó: CMDIFrameWndKeretablakok.
Öröklési hierarchia
CMDIFrameWnd
Requirements
Fejléc: afxwin.h
CMDIFrameWnd::CMDIFrameWnd
Egy CMDIFrameWnd objektumot hoz létre.
CMDIFrameWnd();
Megjegyzések
Hívja meg a vagy LoadFrame tag Create függvényt a látható MDI-keretablak létrehozásához.
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::CreateClient
Létrehozza az objektumokat kezelő MDI-ügyfélablakot CMDIChildWnd .
virtual BOOL CreateClient(
LPCREATESTRUCT lpCreateStruct,
CMenu* pWindowMenu);
Paraméterek
lpCreateStruct
Hosszú mutató a CREATESTRUCT-struktúra felé .
pWindowMenu
Mutató az Ablak előugró menüre.
Visszaadott érték
Nonzero, ha sikeres; egyéb esetben 0.
Megjegyzések
Ezt a tagfüggvényt akkor kell meghívni, ha közvetlenül felülbírálja a tagfüggvényt OnCreate .
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::CreateNewChild
Új gyermekablakot hoz létre.
CMDIChildWnd* CreateNewChild(
CRuntimeClass* pClass,
UINT nResource,
HMENU hMenu = NULL,
HACCEL hAccel = NULL);
Paraméterek
pClass
A létrehozandó gyermekablak futásidejű osztálya.
nResource
A gyermekablakhoz társított megosztott erőforrások azonosítója.
hMenu
A gyermekablak menüje.
hAccel
A gyermekablak gázpedálja.
Megjegyzések
Ezzel a függvénnyel gyermekablakokat hozhat létre egy MDI-keretablakból.
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::GetWindowMenuPopup
Hívja meg ezt a tagfüggvényt, hogy lekérte az aktuális előugró menü "Ablak" nevű leíróját (az előugró menüt az MDI-ablakkezelés menüelemeivel).
virtual HMENU GetWindowMenuPopup(HMENU hMenuBar);
Paraméterek
hMenuBar
Az aktuális menüsáv.
Visszaadott érték
Az Ablak előugró menü, ha létezik; ellenkező esetben NULL.
Megjegyzések
Az alapértelmezett implementáció olyan előugró menüt keres, amely szabványos Ablak menüparancsokat tartalmaz, például ID_WINDOW_NEW és ID_WINDOW_TILE_HORZ.
Bírálja felül ezt a tagfüggvényt, ha olyan Ablak menüvel rendelkezik, amely nem használja a standard menüparancs azonosítóit.
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::MDIActivate
Egy másik MDI gyermekablak aktiválása.
void MDIActivate(CWnd* pWndActivate);
Paraméterek
pWndActivate
Az aktiválandó MDI gyermekablakra mutat.
Megjegyzések
Ez a tagfüggvény elküldi a WM_MDIACTIVATE üzenetet az aktivált gyermekablaknak és az inaktivált gyermekablaknak is.
Ez ugyanaz az üzenet, amelyet akkor küld a rendszer, ha a felhasználó az egér vagy a billentyűzet használatával MDI gyermekablakra helyezi a fókuszt.
Megjegyzés:
Az MDI gyermekablak az MDI keretablakától függetlenül aktiválódik. Amikor a keret aktívvá válik, a legutóbb aktivált gyermekablak WM_NCACTIVATE üzenetet kap egy aktív ablakkeret és feliratsáv rajzolásához, de nem kap újabb WM_MDIACTIVATE üzenetet.
Example
Lásd a CMDIFrameWnd::GetWindowMenuPopup példát.
CMDIFrameWnd::MDICascade
Az MDI gyermekablakait kaszkádolt formátumban rendezi el.
void MDICascade();
void MDICascade(int nType);
Paraméterek
nType
Kaszkádolt jelölőt ad meg. Csak a következő jelölő adható meg: MDITILE_SKIPDISABLED, amely megakadályozza, hogy a letiltott MDI-gyermekablakok kaszkádoltak legyenek.
Megjegyzések
Az első verzió MDICascadeparaméterek nélkül kaszkádolt minden MDI-gyermekablakot, beleértve a letiltott ablakokat is. A második verzió opcionálisan nem kaszkádozza a letiltott MDI gyermekablakokat, ha MDITILE_SKIPDISABLED az nType paraméterhez.
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::MDIGetActive
Lekéri az aktuális aktív MDI gyermekablakot, valamint egy jelzőt, amely jelzi, hogy a gyermekablak teljes méretű-e.
CMDIChildWnd* MDIGetActive(BOOL* pbMaximized = NULL) const;
Paraméterek
pbMaximized
A BOOL visszatérési értékére mutató mutató. Igaz értékre állítsa vissza, ha az ablak teljes méretű; egyéb esetben HAMIS.
Visszaadott érték
Mutató az aktív MDI gyermekablakra.
Example
Lásd a CMDIChildWnd::MDIMaximize példát.
CMDIFrameWnd::MDIIconArrange
Az összes kisméretű dokumentum gyermekablakát elrendezi.
void MDIIconArrange();
Megjegyzések
Ez nem érinti a nem kis méretű gyermekablakokat.
Example
Lásd a CMDIFrameWnd::MDICascade példát.
CMDIFrameWnd::MDIMaximize
Maximalizálja a megadott MDI gyermekablakot.
void MDIMaximize(CWnd* pWnd);
Paraméterek
pWnd
A teljes méret érdekében az ablakra mutat.
Megjegyzések
Ha egy gyermekablak teljes méretű, a Windows átméretezi, hogy az ügyfélterülete kitöltse az ügyfélablakot. A Windows a gyermekablak Vezérlő menüjét helyezi el a keret menüsávján, hogy a felhasználó visszaállíthassa vagy bezárhassa a gyermekablakot. Emellett hozzáadja a gyermekablak címét a keretablak címéhez.
Ha a jelenleg aktív MDI gyermekablak maximalizálásakor egy másik MDI gyermekablak aktiválódik, a Windows visszaállítja a jelenleg aktív gyermekablakot, és maximalizálja az újonnan aktivált gyermekablakot.
Example
Lásd a CMDIChildWnd::MDIMaximize példát.
CMDIFrameWnd::MDINext
Aktiválja a gyermekablakot közvetlenül az aktuálisan aktív gyermekablak mögött, és az aktuálisan aktív gyermekablakot az összes többi gyermekablak mögé helyezi.
void MDINext();
Megjegyzések
Ha a jelenleg aktív MDI gyermekablak teljes méretű, a tagfüggvény visszaállítja a jelenleg aktív gyermeket, és maximalizálja az újonnan aktivált gyermeket.
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::MDIPrev
Aktiválja az előző gyermekablakot, és közvetlenül mögé helyezi az aktuálisan aktív gyermekablakot.
void MDIPrev();
Megjegyzések
Ha a jelenleg aktív MDI gyermekablak teljes méretű, a tagfüggvény visszaállítja a jelenleg aktív gyermeket, és maximalizálja az újonnan aktivált gyermeket.
CMDIFrameWnd::MDIRestore
Visszaállít egy MDI gyermekablakot a teljes vagy a minimális méretből.
void MDIRestore(CWnd* pWnd);
Paraméterek
pWnd
A visszaállítandó ablakra mutat.
Example
Lásd a CMDIChildWnd::MDIRestore példát.
CMDIFrameWnd::MDISetMenu
Lecseréli az MDI-keretablak, az Ablak előugró menü vagy mindkettő menüjét.
CMenu* MDISetMenu(
CMenu* pFrameMenu,
CMenu* pWindowMenu);
Paraméterek
pFrameMenu
Az új keretablak menüjét adja meg. Null érték esetén a menü nem módosul.
pWindowMenu
Az új ablak előugró menüjének menüje. Null érték esetén a menü nem módosul.
Visszaadott érték
Ez az üzenet a keretablak menüjére mutató mutató. Előfordulhat, hogy a mutató ideiglenes, és nem tárolható későbbi használatra.
Megjegyzések
A hívás MDISetMenuután az alkalmazásnak meg kell hívnia a DrawMenuBar tagfüggvényt a menüsáv frissítéséhez CWnd .
Ha ez a hívás lecseréli az Ablak előugró menüt, az MDI gyermekablak menüelemei törlődnek az előző Ablak menüből, és hozzáadódnak az új Ablak előugró menühöz.
Ha az MDI gyermekablaka teljes méretű, és ez a hívás lecseréli az MDI keretablak menüjét, a Vezérlő menü és a Visszaállítás vezérlők törlődnek az előző keretablak menüből, és hozzáadódnak az új menühöz.
Ne hívja meg ezt a tagfüggvényt, ha a keretrendszert használja az MDI gyermekablakainak kezeléséhez.
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::MDITile
Csempézett formátumban rendezi el az összes gyermekablakot.
void MDITile();
void MDITile(int nType);
Paraméterek
nType
Egy burkoló jelölőt ad meg. Ez a paraméter a következő jelzők bármelyike lehet:
MDITILE_HORIZONTAL Csempék MDI gyermekablakai, hogy az egyik ablak megjelenjen a másik felett.
MDITILE_SKIPDISABLED Megakadályozza, hogy a letiltott MDI-gyermekablakok csempézve legyenek.
MDITILE_VERTICAL Csempék MDI gyermekablakai, hogy az egyik ablak a másik mellett jelenjen meg.
Megjegyzések
A paraméterek nélküli első verzió MDITilefüggőlegesen csempézi az ablakokat a Windows 3.1-es és újabb verziói alá. A második verzió az nType paraméter értékétől függően függőlegesen vagy vízszintesen csempéz ablakokat.
Example
Lásd a CMDIFrameWnd::MDICascade példát.
Lásd még
MFC-minta MDI
MFC-minta MDIDOCVW
MFC-minta SNAPVW
CFrameWnd osztály
hierarchiadiagram
CWnd osztály
CMDIChildWnd osztály