CMDIChildWnd-Klasse
Stellt die Funktionalität eines untergeordneten Windows-MDI-Fensters (Multiple Document Interface) bereit, zusammen mit Membern zum Verwalten des Fensters.
Syntax
class CMDIChildWnd : public CFrameWnd
Member
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
CMDIChildWnd::CMDIChildWnd | Erstellt ein CMDIChildWnd -Objekt. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
CMDIChildWnd::Create | Erstellt das untergeordnete Windows MDI-Fenster, das dem CMDIChildWnd Objekt zugeordnet ist. |
CMDIChildWnd::GetMDIFrame | Gibt den übergeordneten MDI-Frame des MDI-Clientfensters zurück. |
CMDIChildWnd::MDIActivate | Aktiviert dieses untergeordnete MDI-Fenster. |
CMDIChildWnd::MDIDestroy | Zerstört dieses untergeordnete MDI-Fenster. |
CMDIChildWnd::MDIMaximize | Maximiert dieses untergeordnete MDI-Fenster. |
CMDIChildWnd::MDIRestore | Stellt dieses untergeordnete MDI-Fenster aus maximierter oder minimierter Größe wieder her. |
CMDIChildWnd::SetHandles | Legt die Handles für Menü- und Zugriffstastenressourcen fest. |
Hinweise
Ein untergeordnetes MDI-Fenster sieht ähnlich wie ein typisches Rahmenfenster aus, mit der Ausnahme, dass das untergeordnete MDI-Fenster in einem MDI-Rahmenfenster statt auf dem Desktop angezeigt wird. Ein untergeordnetes MDI-Fenster verfügt nicht über eine eigene Menüleiste, sondern teilt stattdessen das Menü des MDI-Rahmenfensters. Das Framework ändert automatisch das MDI-Framemenü so, dass es das derzeit aktive untergeordnete MDI-Fenster darstellt.
Um ein nützliches untergeordnetes MDI-Fenster für Ihre Anwendung zu erstellen, leiten Sie eine Klasse von CMDIChildWnd
. Fügen Sie der abgeleiteten Klasse Membervariablen hinzu, um datenspezifisch für Ihre Anwendung zu speichern. Implementieren Sie Meldungshandler-Memberfunktionen und eine Meldungszuordnung in der abgeleiteten Klasse, um anzugeben, was passiert, wenn Meldungen an das Fenster weitergeleitet werden.
Es gibt drei Möglichkeiten zum Erstellen eines untergeordneten MDI-Fensters:
Erstellen Sie es direkt mithilfe von
Create
.Erstellen Sie es direkt mithilfe von
LoadFrame
.Erstellen Sie sie indirekt über eine Dokumentvorlage.
Bevor Sie das Framefensterobjekt auf dem Heap mit dem C++new
-Operator aufrufen Create
oder LoadFrame
erstellen, müssen Sie das Framefensterobjekt erstellen. Vor dem Aufrufen Create
können Sie auch eine Fensterklasse mit der globalen Funktion AfxRegisterWndClass registrieren, um die Symbol- und Klassenformatvorlagen für den Frame festzulegen.
Verwenden Sie die Create
Memberfunktion, um die Erstellungsparameter des Frames als direkte Argumente zu übergeben.
LoadFrame
erfordert weniger Argumente als Create
, und ruft stattdessen die meisten Standardwerte aus Ressourcen ab, einschließlich der Beschriftung, des Symbols, der Zugriffstastentabelle und des Menüs des Frames. Um auf LoadFrame
diese Ressourcen zugreifen zu können, müssen alle diese Ressourcen über dieselbe Ressourcen-ID verfügen (z. B. IDR_MAINFRAME).
Wenn ein CMDIChildWnd
Objekt Ansichten und Dokumente enthält, werden sie indirekt vom Framework statt direkt vom Programmierer erstellt. Das CDocTemplate
Objekt koordiniert die Erstellung des Frames, die Erstellung der enthaltenden Ansichten und die Verbindung der Ansichten mit dem entsprechenden Dokument. Die Parameter des CDocTemplate
Konstruktors geben die CRuntimeClass
drei beteiligten Klassen an (Dokument, Frame und Ansicht). Ein CRuntimeClass
Objekt wird vom Framework verwendet, um dynamisch neue Frames zu erstellen, wenn er vom Benutzer angegeben wird (z. B. mithilfe des Befehls "Datei neu" oder mit dem Befehl "MDI-Fenster neu").
Eine von CMDIChildWnd
DECLARE_DYNCREATE abgeleitete Framefensterklasse muss mit DECLARE_DYNCREATE deklariert werden, damit der oben genannte RUNTIME_CLASS Mechanismus ordnungsgemäß funktioniert.
Die CMDIChildWnd
Klasse erbt einen Großteil der Standardimplementierung von CFrameWnd
. Eine detaillierte Liste dieser Features finden Sie in der CFrameWnd-Klassenbeschreibung . Die CMDIChildWnd
Klasse verfügt über die folgenden zusätzlichen Features:
In Verbindung mit der
CMultiDocTemplate
Klasse verwenden mehrereCMDIChildWnd
Objekte aus derselben Dokumentvorlage dasselbe Menü, wodurch Windows-Systemressourcen gespeichert werden.Das derzeit aktive untergeordnete MDI-Fenstermenü ersetzt das Menü des MDI-Rahmenfensters vollständig, und die Beschriftung des derzeit aktiven untergeordneten MDI-Fensters wird der Beschriftung des MDI-Rahmenfensters hinzugefügt. Weitere Beispiele für untergeordnete MDI-Fensterfunktionen, die in Verbindung mit einem MDI-Framefenster implementiert werden, finden Sie in der
CMDIFrameWnd
Klassenbeschreibung.
Verwenden Sie nicht den C++ delete
-Operator, um ein Framefenster zu zerstören. Verwenden Sie stattdessen CWnd::DestroyWindow
. Durch die CFrameWnd
Implementierung PostNcDestroy
wird das C++-Objekt gelöscht, wenn das Fenster zerstört wird. Wenn der Benutzer das Framefenster schließt, wird der Standardhandler OnClose
aufgerufen DestroyWindow
.
Weitere Informationen finden CMDIChildWnd
Sie unter Frame Windows.
Vererbungshierarchie
CMDIChildWnd
Anforderungen
Header: afxwin.h
CMDIChildWnd::CMDIChildWnd
Aufrufen zum Erstellen eines CMDIChildWnd
Objekts.
CMDIChildWnd();
Hinweise
Rufen Sie Create
auf, um das sichtbare Fenster zu erstellen.
Beispiel
Sehen Sie sich das Beispiel für CMDIChildWnd::Create an.
CMDIChildWnd::Create
Rufen Sie diese Memberfunktion auf, um ein untergeordnetes Windows MDI-Fenster zu erstellen und an das CMDIChildWnd
Objekt anzufügen.
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);
Parameter
lpszClassName
Verweist auf eine mit Null beendete Zeichenfolge, die die Windows-Klasse (eine WNDCLASS-Struktur ) benennt. Der Klassenname kann ein beliebiger Name sein, der mit der globalen Funktion AfxRegisterWndClass registriert ist. Sollte NULL für einen Standard CMDIChildWnd
sein.
lpszWindowName
Verweist auf eine mit Null beendete Zeichenfolge, die den Fensternamen darstellt. Wird als Text für die Titelleiste verwendet.
dwStyle
Gibt die Attribute der Fensterformatvorlage an. Die WS_CHILD Formatvorlage ist erforderlich.
rect
Enthält die Größe und Position des Fensters. Mit rectDefault
dem Wert kann Windows die Größe und Position des neuen CMDIChildWnd
Werts angeben.
pParentWnd
Gibt das übergeordnete Fenster an. Wenn NULL, wird das Hauptanwendungsfenster verwendet.
pContext
Gibt eine CCreateContext-Struktur an. Dieser Parameter kann NULL sein.
Rückgabewert
Ungleich Null, wenn erfolgreich, andernfalls 0 (Null).
Hinweise
Das derzeit aktive untergeordnete MDI-Framefenster kann die Beschriftung des übergeordneten Framefensters bestimmen. Dieses Feature ist deaktiviert, indem das FWS_ADDTOTITLE Formatvorlagenbit des untergeordneten Framefensters deaktiviert wird.
Das Framework ruft diese Memberfunktion als Reaktion auf einen Benutzerbefehl auf, um ein untergeordnetes Fenster zu erstellen, und das Framework verwendet den pContext-Parameter , um das untergeordnete Fenster ordnungsgemäß mit der Anwendung zu verbinden. Wenn Sie aufrufen Create
, kann pContext NULL sein.
Beispiel 1
In diesem Beispielmenübefehlshandler wird aufgerufen, um ein untergeordnetes Create
MDI-Fenster zu erstellen:
// 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
}
Beispiel 2
Der Beispielcode ruft die Create
Methode der CHelloWnd
Klasse auf, die von 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
}
Dieses Beispiel zeigt die Create
Implementierung der CHelloWnd
Klasse:
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
Rufen Sie diese Funktion auf, um den übergeordneten MDI-Frame zurückzugeben.
CMDIFrameWnd* GetMDIFrame();
Rückgabewert
Ein Zeiger auf das übergeordnete MDI-Rahmenfenster.
Hinweise
Der zurückgegebene Frame ist zwei übergeordnete Elemente, die aus dem CMDIChildWnd
Fenster des Typs MDICLIENT entfernt wurden, das das CMDIChildWnd
Objekt verwaltet. Rufen Sie die GetParent-Memberfunktion auf, um das direkt übergeordnete MDICLIENT-Element des CMDIChildWnd
Objekts als temporären CWnd
Zeiger zurückzugeben.
Beispiel
Sehen Sie sich das Beispiel für CMDIFrameWnd::MDISetMenu an.
CMDIChildWnd::MDIActivate
Rufen Sie diese Memberfunktion auf, um ein untergeordnetes MDI-Fenster unabhängig vom MDI-Framefenster zu aktivieren.
void MDIActivate();
Hinweise
Wenn der Frame aktiv wird, wird auch das zuletzt aktivierte untergeordnete Fenster aktiviert.
Beispiel
Sehen Sie sich das Beispiel für CMDIFrameWnd::GetWindowMenuPopup an.
CMDIChildWnd::MDIDestroy
Rufen Sie diese Memberfunktion auf, um ein untergeordnetes MDI-Fenster zu zerstören.
void MDIDestroy();
Hinweise
Die Memberfunktion entfernt den Titel des untergeordneten Fensters aus dem Rahmenfenster und deaktiviert das untergeordnete Fenster.
Beispiel
// 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
Rufen Sie diese Memberfunktion auf, um ein untergeordnetes MDI-Fenster zu maximieren.
void MDIMaximize();
Hinweise
Wenn ein untergeordnetes Fenster maximiert wird, ändert Windows seine Größe, damit der Clientbereich den Clientbereich des Framefensters ausfüllt. Windows platziert das Menü "Steuerelement" des untergeordneten Fensters in der Menüleiste des Frames, sodass der Benutzer das untergeordnete Fenster wiederherstellen oder schließen kann und den Titel des untergeordneten Fensters dem Titel des Rahmenfensters hinzufügt.
Beispiel
// 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
Rufen Sie diese Memberfunktion auf, um ein untergeordnetes MDI-Fenster aus maximierter oder minimierter Größe wiederherzustellen.
void MDIRestore();
Beispiel
// 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
Legt die Handles für Menü- und Zugriffstastenressourcen fest.
void SetHandles(
HMENU hMenu,
HACCEL hAccel);
Parameter
hMenu
Das Handle einer Menüressource.
hAccel
Das Handle einer Zugriffstastenressource.
Hinweise
Rufen Sie diese Funktion auf, um die Menü- und Zugriffstastenressourcen festzulegen, die vom untergeordneten MDI-Fensterobjekt verwendet werden.
Siehe auch
MFC-Beispiel-MDI
MFC-Beispiel MDIDOCVW
MFC-Beispiel SNAPVW
CFrameWnd-Klasse
Hierarchiediagramm
CWnd-Klasse
CMDIFrameWnd-Klasse