Compartilhar via


Alternando os estilos de uma janela criada por MFC

Em sua versão da função WinMain, o MFC registra várias classes de janela padrão para você. Como você normalmente não edita MFCs WinMain, essa função não oferece nenhuma oportunidade de alterar os estilos de janela padrão do MFC. Este artigo explica como você pode alterar os estilos de uma classe de janela pré-registrada em um aplicativo existente.

Alterar estilos em um novo aplicativo MFC

Se você estiver usando o Visual C++ 2.0 ou posterior, poderá alterar os estilos de janela padrão no Assistente de aplicativo ao criar seu aplicativo. Na página Recursos de interface do usuário do Assistente de aplicativo, você pode alterar estilos para a janela de quadro principal e as janelas filho do MDI. Para qualquer tipo de janela, você pode especificar a espessura do quadro (grossa ou fina) e qualquer um dos seguintes itens:

  • Se a janela tem controles Minimizar ou Maximizar.

  • Se a janela aparece inicialmente minimizada, maximizada ou nenhuma das opções.

Para janelas de quadro principal, você também pode especificar se a janela tem um Menu do Sistema. Para janelas filho do MDI, você pode especificar se a janela dá suporte a painéis de divisor.

Alterar estilos em um aplicativo existente

Se você estiver alterando os atributos de janela em um aplicativo existente, siga as instruções no restante deste artigo.

Para alterar os atributos de janela padrão usados por um aplicativo de estrutura criado com o Assistente de aplicativo, substitua a função de membro virtual PreCreateWindow da janela. PreCreateWindow permite que um aplicativo acesse o processo de criação normalmente gerenciado internamente pela classe CDocTemplate. A estrutura chama PreCreateWindow pouco antes de criar a janela. Modificando a estrutura CREATETRUCT passada para PreCreateWindow, seu aplicativo pode alterar os atributos usados para criar a janela. Por exemplo, para garantir que uma janela não use uma barra de título, use a seguinte operação bit a bit:

// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;

O aplicativo de exemplo CTRLBARS demonstra essa técnica para alterar atributos de janela. Dependendo do que seu aplicativo alterar em PreCreateWindow, pode ser necessário chamar a implementação da classe base da função.

A discussão a seguir aborda o caso SDI e o caso MDI.

O caso SDI

Em um único aplicativo de interface de documento (SDI), o estilo de janela padrão na estrutura é uma combinação dos estilos WS_OVERLAPPEDWINDOW e FWS_ADDTOTITLE. O FWS_ADDTOTITLE é um estilo específico do MFC que instrui a estrutura a adicionar o título do documento à barra de título da janela. Para alterar os atributos de janela em um aplicativo SDI, substitua a função PreCreateWindow da classe derivada de CFrameWnd (que o Assistente de aplicativo nomeia CMainFrame). Por exemplo:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT &cs)
{
   // Call the base-class version
   if (!CFrameWnd::PreCreateWindow(cs))
      return FALSE;

   // Create a window without min/max buttons or sizable border
   cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_BORDER;

   // Size the window to 1/3 screen size and center it
   cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / 3;
   cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / 3;
   cs.y = ((cs.cy * 3) - cs.cy) / 2;
   cs.x = ((cs.cx * 3) - cs.cx) / 2;

   return TRUE;
}

Esse código cria uma janela de quadro principal sem botões Minimizar e Maximizar e sem uma borda considerável. Inicialmente, a janela é centralizada na tela.

O caso MDI

Um pouco mais de trabalho é necessário para alterar o estilo de janela de uma janela filho em um aplicativo MDI (interface de documento múltiplo). Por padrão, um aplicativo MDI criado com o Assistente de aplicativo usa a classe CMDIChildWnd padrão definida no MFC. Para alterar o estilo de janela de uma janela filho MDI, você deve derivar uma nova classe de CMDIChildWnd e substituir todas as referências a CMDIChildWnd no seu projeto por referências à nova classe. Provavelmente, a única referência a CMDIChildWnd no aplicativo estará localizada na função membro InitInstance do aplicativo.

O estilo de janela padrão usado em um aplicativo MDI é uma combinação dos estilos WS_CHILD, WS_OVERLAPPEDWINDOW e FWS_ADDTOTITLE. Para alterar os atributos de janela das janelas filho de um aplicativo MDI, substitua a função PreCreateWindow em sua classe derivada de CMDIChildWnd. Por exemplo:

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT &cs)
{
   // Create a child window without the maximize button
   cs.style &= ~WS_MAXIMIZEBOX;

   return CMDIChildWnd::PreCreateWindow(cs);
}

Esse código cria janelas filho MDI sem um botão Maximizar.

O que mais você deseja saber?

Confira também

Estilos de janela de moldura