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.