枠のないフォームを作成: 美しくサイズ変更可能
カスタム フォーム インターフェイスを設計する場合、開発者は通常、シンプルな境界線のない外観を好みます。 Windows では、「FormBorderStyle」プロパティを使用してデフォルトの枠線を簡単に削除する方法が提供されていますが、これによりフォームのサイズを変更できなくなります。
この制限を克服するために、境界線のない美しさとシームレスなサイズ変更機能を同時に可能にする包括的なコード ソリューションを検討してみましょう。
<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); } // 拦截 WM_NCHITTEST 消息以实现自定义调整大小行为 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>
このコードをボーダーレスフォームに実装すると、望ましい美しさを維持しながらサイズ変更機能を効果的に有効にすることができます。シミュレートされたタイトル バーとカスタム グラブ インジケーターにより、直感的でフル機能のユーザー エクスペリエンスが提供され、ユーザーはフォームのサイズを簡単に変更できます。
以上がWindows フォームでサイズ変更可能なボーダレス フォームを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。