Classe CMDIChildWnd
Fornece a funcionalidade de uma janela filho MDI (interface de documento múltiplo) do Windows, além dos membros para gerenciar a janela.
Sintaxe
class CMDIChildWnd : public CFrameWnd
Membros
Construtores públicos
Nome | Descrição |
---|---|
CMDIChildWnd::CMDIChildWnd | Constrói um objeto CMDIChildWnd . |
Métodos públicos
Nome | Descrição |
---|---|
CMDIChildWnd::Create | Cria a janela filho MDI do Windows associada ao objeto CMDIChildWnd . |
CMDIChildWnd::GetMDIFrame | Retorna o quadro MDI pai da janela do cliente MDI. |
CMDIChildWnd::MDIActivate | Ativa essa nova janela filho MDI. |
CMDIChildWnd::MDIDestroy | Destrói essa janela filho MDI. |
CMDIChildWnd::MDIMaximize | Maximiza essa nova janela filho MDI. |
CMDIChildWnd::MDIRestore | Restaura essa janela filho MDI do tamanho maximizado ou minimizado. |
CMDIChildWnd::SetHandles | Define os identificadores dos recursos de menu e de acelerador. |
Comentários
Uma janela filho MDI se parece muito com uma janela do quadro típica, exceto que a janela filho MDI aparece dentro de uma janela do quadro MDI em vez de na área de trabalho. Uma janela filho MDI não possui uma barra de menus própria, mas compartilha o menu da janela do quadro MDI. A estrutura altera automaticamente o menu do quadro MDI para representar a janela filho MDI atualmente ativa.
Para criar uma janela filho MDI útil para o aplicativo, derive uma classe de CMDIChildWnd
. Adicione variáveis de membro à classe derivada para armazenar os dados específicos do aplicativo. Implemente funções membro do manipulador de mensagens e um mapa de mensagens na classe derivada para especificar o que acontecerá quando as mensagens forem direcionadas para a janela.
Há três maneiras de construir uma janela filho MDI:
Construí-la diretamente usando
Create
.Construí-la diretamente usando
LoadFrame
.Construir indiretamente por meio de um modelo de documento.
Antes de chamar Create
ou LoadFrame
, será necessário construir o objeto de janela do quadro no heap usando o novo operador C++ new
. Antes de chamar Create
você também poderá registrar uma classe de janela com a função global AfxRegisterWndClass para definir os estilos de ícone e classe para o quadro.
Use a função membro Create
para passar os parâmetros de criação do quadro como argumentos imediatos.
LoadFrame
exige menos argumentos do que Create
e, em vez disso, recupera a maioria dos valores padrão dos recursos incluindo a legenda, o ícone, a tabela de aceleradores e o menu do quadro. Para serem acessíveis pelo LoadFrame
, todos esses recursos deverão ter a mesma ID do recurso (por exemplo, IDR_MAINFRAME).
Quando um objeto CMDIChildWnd
contém exibições e documentos, eles são criados indiretamente pela estrutura em vez de diretamente pelo programador. O objeto CDocTemplate
orquestra a criação do quadro, a criação dos modos de exibição que contêm e a conexão dos modos de exibição com o documento apropriado. Os parâmetros do construtor CDocTemplate
especificam o CRuntimeClass
das três classes envolvidas (documento, quadro e exibição). Um objeto CRuntimeClass
é usado pela estrutura para criar dinamicamente novos quadros quando especificado pelo usuário (por exemplo, usando o comando Arquivo Novo ou o comando Nova Janela MDI).
Uma classe de janela do quadro derivada de CMDIChildWnd
deverá ser declarada com DECLARE_DYNCREATE para que o mecanismo RUNTIME_CLASS acima funcione corretamente.
A classe CMDIChildWnd
herda grande parte da implementação padrão do CFrameWnd
. Para obter uma lista detalhada desses recursos, consulte a descrição de classe CFrameWnd. A classe CMDIChildWnd
tem os seguintes recursos adicionais:
Em conjunto com a classe
CMultiDocTemplate
, vários objetosCMDIChildWnd
do mesmo modelo de documento compartilham o mesmo menu, economizando recursos do sistema Windows.O menu da janela filho MDI ativa no momento substitui inteiramente o menu da janela do quadro MDI e a legenda da janela filho MDI ativa no momento é adicionada à legenda da janela do quadro MDI. Para obter mais exemplos de funções de janela filho MDI implementadas em conjunto com uma janela do quadro MDI, consulte a descrição da classe
CMDIFrameWnd
.
Não use o operador delete
do C++ para destruir uma janela com moldura. Use o CWnd::DestroyWindow
em vez disso. A implementação CFrameWnd
de PostNcDestroy
excluirá o objeto C++ quando a janela for destruída. Quando o usuário fechar a janela com moldura, o manipulador OnClose
padrão chamará DestroyWindow
.
Para obter mais informações sobre CMDIChildWnd
, confira Janelas com Moldura.
Hierarquia de herança
CMDIChildWnd
Requisitos
Cabeçalho: afxwin.h
CMDIChildWnd::CMDIChildWnd
Chame para construir um objeto CMDIChildWnd
.
CMDIChildWnd();
Comentários
Chame Create
para criar a janela visível.
Exemplo
Consulte o exemplo para CMDIChildWnd::Create.
CMDIChildWnd::Create
Chame essa função membro para criar uma janela filho MDI do Windows e anexá-la ao 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
Aponta para uma cadeia de caracteres terminada em nulo que nomeia a classe do Windows (uma estrutura WNDCLASS). O nome da classe pode ser qualquer nome registrado com a função global AfxRegisterWndClass. Deverá ser NULL para um padrão CMDIChildWnd
.
lpszWindowName
Aponta para uma cadeia de caracteres terminada em nulo que representa o nome da janela. Usado como texto para a barra de título.
dwStyle
Especifica os atributos de estilo de janela. O estilo WS_CHILD é obrigatório.
rect
Contém o tamanho e a posição da janela. O valor rectDefault
permite que o Windows especifique o tamanho e a posição do novo CMDIChildWnd
.
pParentWnd
Especifica o pai da janela. Se for NULL, será usada a janela principal do aplicativo.
pContext
Especifica uma estrutura CCreateContext. Este parâmetro pode ser NULO.
Valor de retorno
Diferente de zero se tiver êxito; caso contrário, 0.
Comentários
A janela do quadro filho MDI atualmente ativa pode determinar a legenda da janela do quadro pai. É possível desabilitar esse recurso desativando o bit de estilo FWS_ADDTOTITLE da janela do quadro filho.
A estrutura chama essa função membro em resposta a um comando do usuário para criar uma janela filho e a estrutura usa o parâmetro pContext para conectar corretamente a janela filho ao aplicativo. Ao chamar Create
, pContext poderá se NULO.
Exemplo 1
Este exemplo de manipulador de comando de menu invocará Create
para criar uma janela filho 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
}
Exemplo 2
O código de exemplo chama o método Create
de CHelloWnd
, uma classe 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 exemplo mostra a implementação Create
da classe 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
Chame essa função para retornar o quadro pai MDI.
CMDIFrameWnd* GetMDIFrame();
Valor de retorno
Um ponteiro para a janela do quadro pai MDI.
Comentários
O quadro retornado é, dois pais removidos do CMDIChildWnd
e é o pai da janela do tipo MDICLIENT que gerencia o objeto CMDIChildWnd
. Chame a função membro GetParent para retornar o pai MDICLIENT imediato do objeto CMDIChildWnd
como um ponteiro CWnd
temporário.
Exemplo
Consulte o exemplo para CMDIFrameWnd::MDISetMenu.
CMDIChildWnd::MDIActivate
Chame essa função membro para ativar uma janela filho MDI independentemente da janela do quadro MDI.
void MDIActivate();
Comentários
Quando o quadro se tornar ativo, a janela filha que foi ativada por último também será ativada.
Exemplo
Consulte o exemplo para CMDIFrameWnd::GetWindowMenuPopup.
CMDIChildWnd::MDIDestroy
Chame essa função membro para destruir uma janela filho MDI.
void MDIDestroy();
Comentários
A função membro remove o título da janela filho da janela do quadro e desativa a janela filho.
Exemplo
// 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
Chame essa função membro para maximizar uma janela filho MDI.
void MDIMaximize();
Comentários
Quando uma janela filho é maximizada, o Windows a redimensiona para fazer com que a área de cliente preencha a área de cliente da janela do quadro. O Windows coloca o menu Controle da janela filho na barra de menus do quadro para que o usuário possa restaurar ou fechar a janela filho e adicionar o título da janela filho ao título da janela do quadro.
Exemplo
// 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
Chame essa função membro para restaurar uma janela filho MDI de tamanho maximizado ou minimizado.
void MDIRestore();
Exemplo
// 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
Define os identificadores dos recursos de menu e de acelerador.
void SetHandles(
HMENU hMenu,
HACCEL hAccel);
Parâmetros
hMenu
O identificador de um recurso de menu.
hAccel
O identificador de um recurso de acelerador.
Comentários
Chame essa função para definir os recursos de menu e acelerador usados pelo objeto de janela filho MDI.
Confira também
MDI de exemplo do MFC
MFC Sample MDIDOCVW
MFC Sample SNAPVW
Classe CFrameWnd
Gráfico da hierarquia
Classe CWnd
Classe CMDIFrameWnd