Créer des formulaires WinForms redimensionnables sans frontières
Créer des formulaires sans frontières et redimensionnables n'est pas facile dans WinForms. Cependant, avec seulement quelques modifications, il peut être rendu sans bordure et redimensionnable.
Pour désactiver la bordure Windows par défaut, définissez la propriété "FormBorderStyle" sur "Aucun". Mais cela supprime également la possibilité de redimensionner le formulaire. Pour ce faire, des ajustements de code sont nécessaires.
L'exemple de code suivant définit un gestionnaire personnalisé pour dessiner des poignées de redimensionnement et simuler la barre de titre, tout en remplaçant "WndProc" pour gérer le message WM_NCHITTEST :
<code class="language-c#">public partial class Form1 : Form { public Form1() { InitializeComponent(); this.FormBorderStyle = FormBorderStyle.None; this.DoubleBuffered = true; this.SetStyle(ControlStyles.ResizeRedraw, true); } private const int cGrip = 16; // 手柄大小 private const int cCaption = 32; // 标题栏高度 protected override void OnPaint(PaintEventArgs e) { // 绘制手柄 Rectangle rc = new Rectangle(this.ClientSize.Width - cGrip, this.ClientSize.Height - cGrip, cGrip, cGrip); ControlPaint.DrawSizeGrip(e.Graphics, this.BackColor, rc); // 绘制标题栏 rc = new Rectangle(0, 0, this.ClientSize.Width, cCaption); e.Graphics.FillRectangle(Brushes.DarkBlue, rc); } protected override void WndProc(ref Message m) { if (m.Msg == 0x84) // WM_NCHITTEST { Point pos = new Point(m.LParam.ToInt32()); pos = this.PointToClient(pos); if (pos.X >= this.ClientSize.Width - cGrip && pos.Y >= this.ClientSize.Height - cGrip) { m.Result = (IntPtr)17; // HTBOTTOMRIGHT return; } } base.WndProc(ref m); } }</code>
Avec ce code, vous pouvez créer un formulaire sans bordure qui peut toujours être redimensionné en faisant glisser la poignée inférieure droite et la barre de titre simulée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!