Classe CMDIChildWnd

Fornece a funcionalidade de uma Windows janela filho MDI (interface de documento múltipla), juntamente com membros para gerenciar a janela.

Sintaxe

class CMDIChildWnd : public CFrameWnd

Membros

Construtores públicos

Name Descrição
CMDIChildWnd::CMDIChildWnd Constrói um objeto CMDIChildWnd.

Métodos públicos

Name Descrição
CMDIChildWnd::Create Cria a Windows de MDI filho associada ao CMDIChildWnd objeto .
CMDIChildWnd::GetMDIFrame Retorna o quadro MDI pai da janela do cliente MDI.
CMDIChildWnd::MDIActivate Ativa essa janela filho MDI.
CMDIChildWnd::MDIDestroy Destrói essa janela filho MDI.
CMDIChildWnd::MDIMaximize Maximiza essa janela filho MDI.
CMDIChildWnd::MDIRestore Restaura essa janela filho MDI do tamanho maximizada ou minimizada.
CMDIChildWnd::SetHandles Define os alças para recursos de menu e acelerador.

Comentários

Uma janela filho MDI se parece muito com uma janela de quadro típica, exceto que a janela filho MDI aparece dentro de uma janela de quadro MDI em vez de na área de trabalho. Uma janela filho MDI não tem uma barra de menus própria, mas, em vez disso, compartilha o menu da janela de quadro MDI. A estrutura altera automaticamente o menu de quadro MDI para representar a janela filho MDI ativa no momento.

Para criar uma janela filho MDI útil para seu aplicativo, derive uma classe de CMDIChildWnd. Adicione variáveis de membro à classe derivada para armazenar dados específicos ao seu aplicativo. Implemente funções de membro do manipulador de mensagens e um mapa de mensagens na classe derivada para especificar o que acontece quando as mensagens são direcionadas para a janela.

Há três maneiras de construir uma janela filho MDI:

  • Construa-o diretamente usando Create.

  • Construa-o diretamente usando LoadFrame.

  • Construa-o indiretamente por meio de um modelo de documento.

Antes de chamar Create ou LoadFrame, você deve construir o objeto de janela de quadro no heap usando o operador C+ new +. Antes de Create chamar, você também pode registrar uma classe de janela com a função global AfxRegisterWndClass para definir o ícone e os estilos de classe para o quadro.

Use a Create função membro para passar os parâmetros de criação do quadro como argumentos imediatos.

LoadFrame requer menos argumentos do Createque e, em vez disso, recupera a maioria de seus valores padrão de recursos, incluindo legenda, ícone, tabela de acelerador e menu do quadro. Para ser acessível pelo LoadFrame, todos esses recursos devem ter a mesma ID de recurso (por exemplo, IDR_MAINFRAME).

Quando um CMDIChildWnd objeto contém exibições e documentos, eles são criados indiretamente pela estrutura em vez de diretamente pelo programador. O CDocTemplate objeto orquestra a criação do quadro, a criação das exibições que contêm e a conexão das exibições com o documento apropriado. Os parâmetros do construtor CDocTemplate especificam o das CRuntimeClass três classes envolvidas (documento, quadro e exibição). Um CRuntimeClass objeto é usado pela estrutura para criar dinamicamente novos quadros quando especificado pelo usuário (por exemplo, usando o comando Arquivo Novo ou o comando MDI Window New).

Uma classe de janela de CMDIChildWnd quadro derivada de deve ser declarada com DECLARE_DYNCREATE para que o mecanismo RUNTIME_CLASS acima funcione corretamente.

A CMDIChildWnd classe herda grande parte de sua implementação padrão de CFrameWnd. Para ver uma lista detalhada desses recursos, consulte a descrição da classe CFrameWnd . A CMDIChildWnd classe tem os seguintes recursos adicionais:

  • Em conjunto com a classe CMultiDocTemplate , vários CMDIChildWnd objetos do mesmo modelo de documento compartilham o mesmo menu, salvando Windows do sistema.

  • O menu da janela filho MDI atualmente ativa substitui totalmente o menu da janela de quadro MDI e a legenda da janela filho MDI ativa no momento é adicionada à legenda da janela de quadro MDI. Para mais exemplos de funções de janela filho MDI implementadas em conjunto com uma janela de quadro MDI, consulte a descrição CMDIFrameWnd da classe.

Não use o operador C++ delete para destruir uma janela de quadro. Use CWnd::DestroyWindow em vez disso. A CFrameWnd implementação de PostNcDestroy excluirá o objeto C++ quando a janela for destruída. Quando o usuário fechar a janela do quadro, o manipulador padrão OnClose chamará DestroyWindow.

Para obter mais informações sobre CMDIChildWnd, consulte Frame Windows.

Hierarquia de herança

Cobject

Ccmdtarget

CWnd

CFrameWnd

CMDIChildWnd

Requisitos

Header: afxwin.h

CMDIChildWnd::CMDIChildWnd

Chame para construir um CMDIChildWnd objeto .

CMDIChildWnd();

Comentários

Chame Create para criar a janela visível.

Exemplo

Consulte o exemplo de CMDIChildWnd::Create.

CMDIChildWnd::Create

Chame essa função membro para criar uma Windows MDI filho e anexá-la ao CMDIChildWnd objeto .

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 Windows (uma estrutura WNDCLASS). O nome da classe pode ser qualquer nome registrado com a função global AfxRegisterWndClass . Deve 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 WS_CHILD é necessário.

Rect
Contém o tamanho e a posição da janela. O rectDefault valor permite Windows especificar o tamanho e a posição do novo CMDIChildWnd.

Pparentwnd
Especifica o pai da janela. Se FOR NULL, a janela principal do aplicativo será usada.

pContext
Especifica uma estrutura CCreateContext . Este parâmetro pode ser NULL.

Valor Retornado

Além de zero se for bem-sucedido; caso contrário, 0.

Comentários

A janela de quadro filho MDI ativa no momento pode determinar a legenda da janela do quadro pai. Esse recurso é desabilitado desativndo o FWS_ADDTOTITLE de estilo da janela de quadro filho.

A estrutura chama essa função de membro em resposta a um comando de usuário para criar uma janela filho, e a estrutura usa o parâmetro pContext para conectar corretamente a janela filho ao aplicativo. Quando você chama Create , pContext pode ser nulo.

Exemplo 1

Este manipulador de comando de menu de exemplo é invocado 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 Create método 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 Create implementação da CHelloWnd classe:

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 Retornado

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 CMDIChildWnd objeto. Chame a função de membro GetParent para retornar o CMDIChildWnd pai MdiClient imediato do objeto como um ponteiro temporário CWnd .

Exemplo

Consulte o exemplo de CMDIFrameWnd:: MDISetMenu.

CMDIChildWnd:: MDIActivate

Chame essa função de membro para ativar uma janela filho MDI independentemente da janela do quadro MDI.

void MDIActivate();

Comentários

Quando o quadro se torna ativo, a janela filho que foi ativada pela última vez também será ativada.

Exemplo

Consulte o exemplo de CMDIFrameWnd:: GetWindowMenuPopup.

CMDIChildWnd:: MDIDestroy

Chame essa função de 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 de membro para maximizar uma janela filho MDI.

void MDIMaximize();

Comentários

quando uma janela filho é maximizada, Windows a redimensiona para que sua área cliente preencha a área cliente da janela do quadro. Windows coloca o menu de 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 de membro para restaurar uma janela filho MDI do 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:: sethands

Define os identificadores para os recursos de menu e 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 o menu e os recursos de aceleração usados pelo objeto de janela filho MDI.

Confira também

MDI de exemplo do MFC
Exemplo de MDIDOCVW do MFC
Exemplo de SNAPVW do MFC
Classe CFrameWnd
Gráfico de hierarquia
Classe CWnd
Classe CMDIFrameWnd