Custom titlebars / chrome em um aplicativo do WinForms

Tenho quase certeza de que sei a resposta para essa pergunta, mas espero que haja algo que tenha esquecido.

Certos aplicativos parecem ter a aparência do Vista Aero em suas barras e botões de legenda, mesmo quando executados no Windows XP. (Google Chrome e Galeria de Fotos do Windows Live vêm à mente como exemplos.) Eu sei que uma maneira de fazer isso a partir do WinForms seria criar um formulário sem borda e desenhar a barra de legenda / botões, substituindo WndProc para ter certeza de mover, resize , e os cliques nos botões fazem o que eles devem fazer (não estou claro sobre os detalhes, mas provavelmente conseguiria fazê-lo por um dia para ler a documentação.) Estou curioso para saber se há uma maneira diferente e mais fácil de com vista. Talvez algumas chamadas de API ou estilos de janelas tenham esquecido?

Acredito que o Google respondeu por mim usando a abordagem “role sua própria janela” com o Google Chrome. Deixarei a questão em aberto por mais um dia, caso alguém tenha novas informações, mas acredito que respondi a pergunta pessoalmente.

Veja um artigo com um exemplo de código completo sobre como usar seu próprio “cromo” personalizado para um aplicativo:

http://geekswithblogs.net/kobush/articles/CustomBorderForms3.aspx

Isso parece algo muito bom. Há um total de 3 artigos em sua série, e funciona muito bem, e no Vista também!

O Google Chrome não está usando o SDK do Vista para conseguir isso no XP. Se você observar o src\chrome\browser\views\frame há vários arquivos para definir o quadro do navegador, dependendo dos resources do sistema. No XP, parece que o OpaqueFrame é usado; a linha 19 tem isto a dizer:

 // OpaqueFrame // // OpaqueFrame is a CustomFrameWindow subclass that in conjunction with // OpaqueNonClientView provides the window frame on Windows XP and on Windows // Vista when DWM desktop compositing is disabled. The window title and // borders are provided with bitmaps. 

Parece que está usando os resources em src\chrome\app\theme para desenhar os botões de quadro.

Então parece que minhas esperanças de que haja algum meio barato de ativar o tema do Vista no XP são frustradas. A única maneira de fazer isso é desenhar manualmente a área não-cliente de sua janela. Acredito que algo assim seja provavelmente o caminho certo, já que ele permite que o Windows manipule o material não-cliente, como mover e resize a janela.

A menos que alguém possa encontrar um método para habilitar magicamente o tema Vista no XP, esta é a resposta para a pergunta, mas eu obviamente não posso marcar meu próprio post como a resposta.

Owen, estou usando o Chrome no XP e não vejo o tema de vidro “Vista Aero” na janela do Chrome. Eu vejo isso como azul sólido.

Se é costume theming de controles e barras de título do windows que você quer, isso pode ser feito. Existe um kit de ferramentas de UI excelente e gratuito para WinForms que faz exatamente isso: KryptonToolkit

@ Jonathan Holland: Isso é algo que pode ser feito do .NET?

Sim, usando o DllImport. Aqui está uma boa postagem no blog

O Google Chrome usa o SDK do Windows Vista para obter a aparência do vidro no XP. Você pode baixá-lo aqui:

http://www.microsoft.com/downloads/details.aspx?FamilyID=4377f86d-c913-4b5c-b87e-ef72e5b4e065&displaylang=en

Usando isso, você precisa habilitar o carregamento atrasado das seguintes DLLs para obter o efeito de vidro no XP:

  • uxtheme.dll
  • dwmapi.dl

Não, receio, não há outra maneira fácil de fazer isso.

Você está no caminho certo. Você precisará criar um Winform personalizado e, em seguida, proceder conforme ilustrado neste exemplo .