J'utilise ce code pour créer mon formulaire (FormBorderStyle = none) avec des bords arrondis:
[DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")]
private static extern IntPtr CreateRoundRectRgn
(
int nLeftRect, // x-coordinate of upper-left corner
int nTopRect, // y-coordinate of upper-left corner
int nRightRect, // x-coordinate of lower-right corner
int nBottomRect, // y-coordinate of lower-right corner
int nWidthEllipse, // height of ellipse
int nHeightEllipse // width of ellipse
);
public Form1()
{
InitializeComponent();
Region = System.Drawing.Region.FromHrgn(CreateRoundRectRgn(0, 0, Width, Height, 20, 20));
}
Et ceci pour définir une bordure personnalisée sur l'événement Paint:
ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle, Color.Black, 5, ButtonBorderStyle.Solid, Color.Black, 5, ButtonBorderStyle.Solid, Color.Black, 5, ButtonBorderStyle.Solid, Color.Black, 5, ButtonBorderStyle.Solid);
Mais vois ça .
Le rectangle de la forme intérieure n'a pas d'arêtes arrondies.
Comment faire en sorte que le rectangle intérieur bleu ait un contour arrondi pour ne pas ressembler à la capture d'écran?
Les biens de la région coupent simplement les coins. Pour avoir un vrai coin arrondi, vous devrez dessiner les rectangles arrondis.
Il serait peut-être plus facile de dessiner une image de la forme souhaitée et de la placer sur la forme transparente. Plus facile à dessiner mais ne peut pas être redimensionné.
Notez que vous perdez le descripteur renvoyé par CreateRoundRectRgn () , vous devez le libérer avec DeleteObject () après son utilisation.
Region.FromHrgn () copie la définition afin de ne pas libérer le descripteur.
[DllImport("Gdi32.dll", EntryPoint = "DeleteObject")]
public static extern bool DeleteObject(IntPtr hObject);
public Form1()
{
InitializeComponent();
IntPtr handle = CreateRoundRectRgn(0, 0, Width, Height, 20, 20);
if (handle == IntPtr.Zero)
; // error with CreateRoundRectRgn
Region = System.Drawing.Region.FromHrgn(handle);
DeleteObject(handle);
}
(ajouterait comme commentaire mais la réputation est déduite)