CMDIChildWnd (clase)
Proporciona la funcionalidad de una ventana secundaria de la interfaz de múltiples documentos (MDI) de Windows, junto con los miembros para administrar la ventana.
Sintaxis
class CMDIChildWnd : public CFrameWnd
Miembros
Constructores públicos
Nombre | Descripción |
---|---|
CMDIChildWnd::CMDIChildWnd | Construye un objeto CMDIChildWnd . |
Métodos públicos
Nombre | Descripción |
---|---|
CMDIChildWnd::Create | Crea la ventana secundaria MDI de Windows asociada con el objeto CMDIChildWnd . |
CMDIChildWnd::GetMDIFrame | Devuelve el marco MDI primario de la ventana del cliente MDI. |
CMDIChildWnd::MDIActivate | Activa esta ventana secundaria MDI. |
CMDIChildWnd::MDIDestroy | Destruye esta ventana secundaria MDI. |
CMDIChildWnd::MDIMaximize | Maximiza esta ventana secundaria MDI. |
CMDIChildWnd::MDIRestore | Restaura esta ventana secundaria de MDI a partir de un tamaño maximizado o minimizado. |
CMDIChildWnd::SetHandles | Establece los identificadores de los recursos de menú y acelerador. |
Comentarios
Una ventana secundaria MDI se parece mucho a una ventana de marco típica, salvo que la ventana secundaria MDI aparece dentro de una ventana de marco MDI en lugar de en el escritorio. Una ventana secundaria MDI no tiene una barra de menús propia, sino que comparte el menú de la ventana de marco MDI. El marco cambia automáticamente el menú marco MDI para representar la ventana secundaria MDI actualmente activa.
Para crear una ventana secundaria MDI útil para la aplicación, derive una clase de CMDIChildWnd
. Agregue variables miembro a la clase derivada para almacenar datos específicos de la aplicación. Implemente funciones miembro de controlador de mensajes y un mapa de mensajes en la clase derivada para especificar qué ocurre cuando los mensajes se dirigen a la ventana.
Hay tres maneras de construir una ventana secundaria MDI:
Directamente mediante
Create
.Directamente mediante
LoadFrame
.La construye indirectamente a través de una plantilla de documento.
Antes de llamar a Create
o LoadFrame
, debe construir el objeto frame-window en el montón mediante el operador de C++ new
. Antes de llamar a Create
, también puede registrar una clase de ventana con la función global AfxRegisterWndClass para establecer el icono y los estilos de clase para el marco.
Use la función miembro Create
para pasar los parámetros de creación del marco como argumentos inmediatos.
LoadFrame
requiere menos argumentos que Create
y, en su lugar, recupera la mayoría de sus valores predeterminados de los recursos, incluido el título, el icono, la tabla de aceleradores y el menú del marco. Para que sea accesible por LoadFrame
, todos estos recursos deben tener el mismo identificador de recurso (por ejemplo, IDR_MAINFRAME).
Cuando un objeto CMDIChildWnd
contiene vistas y documentos, el marco crea indirectamente en lugar de directamente por el programador. El objeto CDocTemplate
organiza la creación del marco y las vistas contenedoras, además de la conexión de las vistas al documento adecuado. Los parámetros del constructor CDocTemplate
especifican el CRuntimeClass
de las tres clases implicadas (documento, marco y vista). El marco usa un objeto CRuntimeClass
para crear dinámicamente nuevos marcos cuando lo especifique el usuario (por ejemplo, mediante el comando File New o el comando MDI Window New).
Se debe declarar una clase de ventana de marco derivada de CMDIChildWnd
con DECLARE_DYNCREATE para que el mecanismo de RUNTIME_CLASS anterior funcione correctamente.
La clase CMDIChildWnd
hereda gran parte de su implementación predeterminada de CFrameWnd
. Para obtener una lista detallada de estas características, consulte la descripción de la clase CFrameWnd . La clase CMDIChildWnd
tiene las siguientes características adicionales:
Junto con la clase
CMultiDocTemplate
, varios objetosCMDIChildWnd
de la misma plantilla de documento comparten el mismo menú, guardando los recursos del sistema de Windows.El menú de la ventana secundaria MDI actualmente activa reemplaza por completo el menú de la ventana del marco MDI y el título de la ventana secundaria MDI actualmente activa se agrega al título de la ventana del marco MDI. Para obtener más ejemplos de funciones de ventana secundaria de MDI que se implementan junto con una ventana de marco MDI, vea la descripción de la clase
CMDIFrameWnd
.
No use el operador de C++ delete
para destruir una ventana de marco. Use CWnd::DestroyWindow
en su lugar. La implementación CFrameWnd
de PostNcDestroy
eliminará el objeto de C++ cuando se destruya la ventana. Cuando el usuario cierra la ventana de marco, el controlador predeterminado OnClose
llamará a DestroyWindow
.
Para obtener más información sobre CMDIChildWnd
, vea Ventanas de marco.
Jerarquía de herencia
CMDIChildWnd
Requisitos
Encabezado: afxwin.h
CMDIChildWnd::CMDIChildWnd
Llame para construir un objeto CMDIChildWnd
.
CMDIChildWnd();
Comentarios
Llame a Create
para crear la ventana visible.
Ejemplo
Vea el ejemplo de CMDIChildWnd::Create.
CMDIChildWnd::Create
Llame a esta función miembro para crear una ventana secundaria de Windows MDI y adjuntarla al objeto 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);
Parámetros
lpszClassName
El valor de este parámetro se usa para apuntar a una cadena de caracteres que finaliza en null y que, a su vez, se usa para asignar el nombre de la clase Windows (una estructura WNDCLASS). El nombre de clase puede ser cualquier nombre registrado con la función global AfxRegisterWndClass. Debe ser NULL para un CMDIChildWnd
estándar.
lpszWindowName
El valor de este parámetro se usa para apuntar a una cadena de caracteres que finaliza en null y que, a su vez, se usa para representar el nombre de la ventana. Se usa como texto para la barra de título.
dwStyle
Especifica los atributos de estilo de ventana. Se requiere el estilo WS_CHILD.
rect
Representa el tamaño y la posición de la ventana. El valor rectDefault
se usa para permitir que el tamaño y la posición de la nueva CMDIChildWnd
pueda determinarse desde Windows.
pParentWnd
Especifica el elemento primario de la ventana. Si es NULL, se usa la ventana primaria de la aplicación.
pContext
Especifica una estructura CCreateContext. Este parámetro puede ser NULL.
Valor devuelto
Si es correcta, su valor es distinto de cero. En caso contrario, es cero.
Comentarios
La ventana de marco secundario MDI activa actualmente puede determinar el título de la ventana del marco primario. Esta característica está deshabilitada desactivando el bit de estilo FWS_ADDTOTITLE de la ventana de marco secundario.
El marco llama a esta función miembro en respuesta a un comando de usuario para crear una ventana secundaria y el marco usa el parámetro pContext para conectar correctamente la ventana secundaria a la aplicación. Cuando se llama a Create
, pContext puede ser NULL.
Ejemplo 1
Este controlador de comandos de menú de ejemplo invoca Create
para crear una ventana secundaria de 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
}
Ejemplo 2
El código de ejemplo llama al método Create
de CHelloWnd
, una clase derivada de 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
}
Este ejemplo muestra la implementación Create
de la clase CHelloWnd
:
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
Llame a esta función para devolver el marco primario MDI.
CMDIFrameWnd* GetMDIFrame();
Valor devuelto
Puntero a la ventana del marco primario MDI.
Comentarios
El marco devuelto es dos elementos primarios quitados de CMDIChildWnd
y es el elemento primario de la ventana de tipo MDICLIENT que administra el objeto CMDIChildWnd
. Llame a la función miembro GetParent para devolver el elemento primario MDICLIENT CMDIChildWnd
inmediato del objeto como puntero temporal CWnd
.
Ejemplo
Vea el ejemplo de CMDIFrameWnd::MDISetMenu.
CMDIChildWnd::MDIActivate
Llame a esta función miembro para activar una ventana secundaria MDI independientemente de la ventana de marco MDI.
void MDIActivate();
Comentarios
Cuando el marco se activa, también se activará la ventana secundaria que se activó por última vez.
Ejemplo
Vea el ejemplo de CMDIFrameWnd::GetWindowMenuPopup.
CMDIChildWnd::MDIDestroy
Llame a esta función miembro para destruir una ventana secundaria MDI.
void MDIDestroy();
Comentarios
La función miembro quita el título de la ventana secundaria de la ventana de marco y desactiva la ventana secundaria.
Ejemplo
// 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
Llame a esta función miembro para maximizar una ventana secundaria MDI.
void MDIMaximize();
Comentarios
Cuando se maximiza una ventana secundaria, Windows lo cambia de tamaño para que su área de cliente rellene el área de cliente de la ventana de marco. Windows coloca el menú Control de la ventana secundaria en la barra de menús del marco para que el usuario pueda restaurar o cerrar la ventana secundaria y agrega el título de la ventana secundaria al título de la ventana de marco.
Ejemplo
// 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
Llame a esta función miembro para restaurar una ventana secundaria MDI de tamaño maximizado o minimizado.
void MDIRestore();
Ejemplo
// 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
Establece los identificadores de los recursos de menú y acelerador.
void SetHandles(
HMENU hMenu,
HACCEL hAccel);
Parámetros
hMenu
Identificador de un recurso de menú.
hAccel
Identificador de un recurso de aceleración.
Comentarios
Llame a esta función para establecer los recursos de menú y acelerador utilizados por el objeto de ventana secundaria MDI.
Consulte también
Ejemplo MDI de MFC
Ejemplo MDIDOCVW de MFC
Ejemplo SNAPVW de MFC
CFrameWnd (clase)
Gráfico de jerarquías
CWnd (clase)
CMDIFrameWnd (clase)