Bonjour,
Lorsque vous créez une application Windows Forms MDI, il se peut que vous ayez envie d'avoir la fenêtre parent qui n'ait pas de bordure du tout (on a le droit, hein...).
Pour cela, vous positionnez alors la propriété IsMdiContainer à True pour indiquer que la fenêtre est le conteneur des fenêtres MDI, mais aussi la propriété FormBorderStyle à None afin de supprimer toute bordure sur cette fenêtre.
Vous compilez et exécutez votre application, mais vous constatez qu'une bordure de type 3D persiste :
Cette bordure qui persiste représente en fait la zone conteneur de la fenêtre MDI.
But du jeu : la supprimer.
La bordure en question n’est pas sur la Form MDI Parent elle-même, mais sur un contrôle de type MDIClient de cette Form (ce contrôle est positionné automatiquement dès que vous spécifiez IsMdiContainer="True".
Le code suivant montre comment retrouver ce contrôle MDIClient et supprimer sa bordure, à l'aide d'APIs Win32:
MdiClient
break;
}
int iStyle = Win32.GetWindowLong(mdiClient.Handle, Win32.GWL_EXSTYLE);//Suppression du style WS_EX_CLIENTEDGE des styles étendus du contrôle courantiStyle &= ~Win32.WS_EX_CLIENTEDGE;//Application du nouveau styleiStyle = Win32.SetWindowLong(mdiClient.Handle, Win32.GWL_EXSTYLE, iStyle);
Où Win32 est une classe statique reprenant certains appels aux APIs système et certaines constantes Win32.Par exemple :
static
[DllImport("user32.dll")]public static extern int GetWindowLong(IntPtr window, int index);[DllImport("user32.dll")]public static extern int SetWindowLong(IntPtr window, int index, int value);public const int GWL_EXSTYLE = -20;public const int WS_EX_CLIENTEDGE = 0x00000200;
Le résultat obtenu est le suivant :
La bordure a bien disparu !
A bientôt,Aurélien