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 mdiClient = null;
// Parcourt des contrôles de la Form
for (int i = 0; i < this.Controls.Count; i++)
{

// Si le Form est un MDI Container, il contient un client MDIClient
mdiClient = this.Controls[i] as MdiClient;
if (mdiClient != null)
{

break;

}

}

// Si le contrôle MDIClient est trouvé
if (mdiClient != null)
{

int iStyle = Win32.GetWindowLong(mdiClient.Handle, Win32.GWL_EXSTYLE);
//Suppression du style WS_EX_CLIENTEDGE des styles étendus du contrôle courant
iStyle &= ~Win32.WS_EX_CLIENTEDGE;
//Application du nouveau style
iStyle = 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 public class Win32
{

[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