Erstellen Sie in Windows Forms skalierbare und verschiebbare randlose Formulare
In Windows Forms können randlose Formulare einfach erstellt werden, indem die Eigenschaft „FormBorderStyle“ auf „None“ gesetzt wird. Diese Standardaktion deaktiviert jedoch die Möglichkeit, die Größe des Formulars zu ändern. Um diese Einschränkung zu überwinden, sind fortschrittlichere Methoden erforderlich.
Der folgende Code zeigt eine benutzerdefinierte Lösung, die ein randloses Formular gleichzeitig verschiebt und seine Größe ändert:
<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>
Erklärung zur Funktionsweise des Codes:
OnPaint
Die überschriebene Methode zeichnet oben im Formular eine blaue Leiste, um eine Titelleiste zu simulieren. DrawSizeGrip
zeichnet einen Steuerpunkt in der unteren rechten Ecke des Formulars, der das Ziehen zur Größenänderung ermöglicht. WndProc
Override-Methode zum Abfangen der WM_NCHITTEST-Nachricht, um die Position des Mauszeigers zu erkennen. Befindet sich der Cursor innerhalb der Titelleiste oder des Steuerpunkts, wird der entsprechende Treffertestcode zurückgegeben. Das pos.Y
im Code sollte in pos.X
geändert werden, um logisch zu sein und sicherzustellen, dass der Größenänderungsgriffbereich in der unteren rechten Ecke korrekt erkannt wird. Das obige ist der detaillierte Inhalt vonWie erstelle ich in Windows Forms ein in der Größe veränderbares und verschiebbares randloses Formular?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!