ホームページ > バックエンド開発 > C++ > ボーダレス WinForm のサイズを変更するには?

ボーダレス WinForm のサイズを変更するには?

DDD
リリース: 2025-01-11 13:12:43
オリジナル
610 人が閲覧しました

How to Resize a Borderless WinForm?

サイズ変更可能なボーダレス WinForm の作成: 完全ガイド

Windows フォームの外観をカスタマイズするとき、デフォルトの境界線を削除してサイズ変更を許可したい場合があります。 「FormBorderStyle」プロパティを使用すると境界線を非表示にできますが、サイズ変更も無効になります。

この問題を解決するには、境界線なしで移動とサイズ変更を可能にする次のカスタム コードを検討してください。

<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>
ログイン後にコピー

このコードには次の重要な要素が含まれています:

  • 描画サイズ変更ハンドル: このカスタム描画ハンドルにより、コーナー ハンドルのサイズを変更できます。
  • タイトル バーの描画: シミュレートされたタイトル バーを描画して、フォームを移動するためのクリック アンド ドラッグ ターゲットを提供します。
  • Windows メッセージの処理: メッセージ処理により、ユーザーがハンドルをクリックしたときにサイズ変更が有効になり、正しいマウス カーソルが表示されるようになります。

このコードを実装すると、ボーダレス WinForm の利点を活用し、簡単にサイズ変更できるようになります。

以上がボーダレス WinForm のサイズを変更するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート