建立無邊框可調整大小的WinForms窗體
在WinForms中,建立無邊框且可調整大小的窗體並非易事。然而,只需少量修改,即可實現無邊框和可調整大小的功能。
要停用預設的Windows邊框,需將"FormBorderStyle"屬性設為"None"。但這也會移除調整窗體大小的功能。為此,需要進行程式碼調整。
以下程式碼範例定義了用於繪製調整大小手把和模擬標題列的自訂處理程序,同時重寫"WndProc"以處理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>
透過這段程式碼,您可以建立一個無邊框窗體,仍然可以透過拖曳右下角的手柄和模擬的標題列來調整其大小。
以上是如何使無邊框 WinForms 調整大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!