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
Název | Popis |
---|---|
CMDIChildWnd::CMDIChildWnd | CMDIChildWnd Vytvoří objekt. |
Veřejné metody
Název | 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 LoadFrame
je 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ů.
LoadFrame
vyžaduje méně argumentů než Create
a místo toho načte většinu výchozích hodnot z prostředků, včetně titulku rámečku, 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íceCMDIChildWnd
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 titulek aktuálně aktivního podřízeného okna MDI se přidá do titulku okna rámce 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 CFrameWnd
PostNcDestroy
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 CMDIChildWnd
tématu Rámová okna.
Hierarchie dědičnosti
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.
Návratová hodnota
Nenulové, pokud je úspěšné; jinak 0.
Poznámky
Aktuálně aktivní okno podřízeného rámce MDI může určit titulek 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 Create
CHelloWnd
, 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 Create
CHelloWnd
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();
Návratová 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