Créer des formulaires sans bordure redimensionnables et mobiles dans Windows Forms
Dans Windows Forms, des formulaires sans bordure peuvent être facilement créés en définissant la propriété « FormBorderStyle » sur « Aucun ». Toutefois, cette action par défaut désactive la possibilité de redimensionner le formulaire. Pour surmonter cette limitation, des méthodes plus avancées sont nécessaires.
Le code suivant illustre une solution personnalisée qui déplace et redimensionne simultanément un formulaire sans bordure :
<code class="language-csharp">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>
Explication du fonctionnement du code :
OnPaint
La méthode remplacée dessine une barre bleue en haut du formulaire pour simuler une barre de titre. DrawSizeGrip
dessine une poignée de contrôle dans le coin inférieur droit du formulaire, permettant de la faire glisser pour le redimensionner. WndProc
Méthode de remplacement pour intercepter le message WM_NCHITTEST afin de détecter la position du curseur de la souris. Si le curseur se trouve dans la barre de titre ou dans la poignée de contrôle, le code de test de détection approprié est renvoyé. Le pos.Y
dans le code doit être remplacé par pos.X
pour être logique et garantir que la zone de poignée de redimensionnement dans le coin inférieur droit est correctement détecté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!