Effet Glass dans vos applications Winform

by Julien Dollon 21. October 2007 05:33

Comment rendre vos applications transparentes sous Windows Vista ?

Introduction

Vous avez sûrement remarqué, les applications de Windows vista possèdent leurs bordures transparentes

AéroGlass sous Windows Vista

Mais comment créer une application utilisant ce principe ? En fait c’est le Desktop Window Manager (DWM) qui est l’API permettant de réaliser cet effet. Cette API (dwmapi.dll) va donc nous permettre d’utiliser le look à la vista Cool

On passe à l’action

  • Tout d’abord assurons nous que notre application tourne bien sous Windows Vista pour cela on utilise les variables d’environnement :
    • if (Environment.OSVersion.Version.Major < 6) Application.Exit();

  • Maintenant nous souhaitons utiliser l’API dwmapi.dll alors il suffit d’ajouter une référence !!! En fait non car cette API n’est pas écrite en .NET. Il faudra donc utilisé P/Invoke qui permet d’acceder à des fonctions de codes non managés.
   1: using System.Runtime.InteropServices;
   2:  
   3: //PreserveSig mit à true permet de traduire les valeurs de retour des fonctions en exceptions
   4: [ DllImport(”dwmapi.dll”, PreserveSig = false) ]
   5: public static extern bool DwmIsCompositionEnabled();
   6: //Permet de vérifier si la transparence est activée sur le système
   7:  
   8: //Redéclaration de la structure non gérée
   9: public struct MARGINS {
  10:  
  11:     public int cxLeftWidth, cxRightWidth, cyTopHeight, cyBottomHeight;
  12:     public MARGINS(int left, int right, int top, int bottom)
  13:     {
  14:         cxLeftWidth = left;
  15:         cyTopHeight = top;
  16:         cxRightWidth = right;
  17:         cyBottomHeight = bottom;
  18:     }
  19: }
  20:  
  21: // Permet d’utiliser la transparence
  22: public static extern void DwmExtendFrameIntoClientArea(IntPtr hWnd, ref MARGINS pMargins);

On utilise la fonction externe qui permet de vérifier si on peux activer la transparence :

   1: if (DwmIsCompositionEnabled()) //on peut activer la transparence
   2: {
   3:     MARGINS marges = new MARGINS(-1, 0, 0, 0);
   4:     DwmExtendFrameIntoClientArea(this.Handle, ref marges);
   5:     this.Invalidate(); //On redessinne notre fenètre
   6: }
  • Pour finir on dois redefinir notre méthode OnPaint en utilisant un brush noir sur notre fenètre
   1: protected override void OnPaint(PaintEventArgs e)
   2: {
   3:     if (DwmIsCompositionEnabled())
   4:     {
   5:         e.Graphics.FillRectangle(Brushes.Black, this.ClientRectangle);
   6:     }
   7:     base.OnPaint(e);
   8: }

Voilà c’est fini vous pouvez donner maintenant le look ‘n’ feel à la vista dans vos applications

Tags:

Comments

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading



About

Fabien Lavocat

Lavocat Fabien
Ingénieur Multimédia - TMM Communication



"Blog-Microsoft.fr is an independent blog and is not affiliated with, nor has it been authorized, sponsored, or otherwise approved by Microsoft Corporation."

Contactez-moi Send mail

MVP
Microsoft Most Valuable Professional
Client Application Development