Desenvolvimento - C#
Habilitando o Aero Glass em Winforms
Neste artigo o autor mostra como colocar o efeito "Glass" em um Winform de maneira a deixar a aplicação mais com cara de Windows Vista.
por Murilo Maciel CurtiO glass é o efeito introduzido pelo tema Aero do Windows Vista que dá um efeito translúscido às janelas. O Windows Desktop Manager redireciona todas as nossas ações com o GDI+ para o seu contexto e transforma as janelas, desde as mais antigas em "Aeroed".
O Aero proporciona uma série de efeitos às janelas por padrão e algumas funcionalidades podem ser extendidas, de acordo com a nossa necessidade e assim podemos personalizar os efeitos e fazer nossas aplicações ficaram com a cada do Windows Vista.
Exemplos interessante de extensões de utilização do glass são as implementações do Explorer, Windows Media Player e o Visualizador de Imagens do Windows. Cada um deles utiliza o Aero para exaltar suas características de navegação para o conteúdo o qual é destinado.
O exemplo mostrado aqui ainda é o mais básico possível, sendo que diversos outros recursos podem ser utilizados. Veremos como aumentar a area do glass em nossa janela.
Primeiramente precisamos interoperar com a API do glass, localizada na dwmapi.dll
[ DllImport("dwmapi.dll")] public static extern int DwmExtendFrameIntoClientArea( IntPtr hWnd, ref MARGINS pMarInset );
Lembre-se de adicionar a referência para interoperabilidade no seu código using System.Runtime.InteropServices;
Esta chamada à API do DWM extende a área do glass em nossa janela, notem que precisamo passar o Handle da janela em qual o efeito ocorrerá e quais são as espessuras da margens, sendo assim o glass vai ocupando as bordas da janela.
As margens são representadas pela estrutura MARGINS que devemos declarar de acordo com a estrutura que a API reconhece de maneira a podermos trabalhar com ela nos dois mundos, o nosso Winform e a API.
[StructLayout(LayoutKind.Sequential)] public struct MARGINS { public int cxLeftWidth; public int cxRightWidth; public int cyTopHeight; public int cyBottomHeight; }
A estrutura MARGINS é simples, ela apenas contém informações para as quatro margens de nossa janela.
Com a função e a estrutura prontas, já temos nosso Winform habilitado a receber áreas personalizadas do glass, e para isto devemos colocar no evento Load do Form a chamada para a função, setando os valores que nos interessam para o efeito final.
MARGINS margins = new MARGINS(); margins.cxLeftWidth = 0; margins.cxRightWidth = 0; margins.cyTopHeight = 45; margins.cyBottomHeight = 0; IntPtr hWnd = this.Handle; int result = DwmExtendFrameIntoClientArea(hWnd, ref margins);
Primeiro inicializamos nossa estrutura e atribuimos os valores das bordas, sendo que queremos que somente a borda superior seja maior que o padrão para todas as janelas, assumindo uma espessura de 45 pixels. Este espaço pode ser útil para colocar o nome do software por exemplo.
Com isto o glass já ocupa as áreas necessárias, porém os controles que vamos espalhar sobre a janela devem ter seu fundo transparente, para que não se sobreponham de maneira errada ao glass. Isto é bastante simples em um Winform, basta setar a propriedade Transparency Key do Winform para a sua cor de fundo (Background). Lembrando que os controles também devem utilizar a mesma cor de fundo transparente.
Com toda as configurações devidamente implementadas, podemos brincar com os controles e valorizar a aparência que o glass oferece.
No meu exemplo utilizei a parte superior do Form para colocar a logomarca do meu site, entretando é um exemplo ilustrativo para que possamos visualizar o que é possível fazer com as aplicações existentes.
Este exemplo é bem simples e pode ser melhorado, para podermos arrastar a janela utilizando a camada do glass, adicionar efeitos de brilho e desfoque e até escrever sobre ele, mas fica para os próximos artigos.
Espero que tenham apreciado e que possamos desvendar todos os segredos que o Vista nos trará!