Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menjadikan WinForms Tanpa Sempadan Boleh Resizable?

Bagaimana untuk Menjadikan WinForms Tanpa Sempadan Boleh Resizable?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-11 13:07:44544semak imbas

How to Make a Borderless WinForms Resizable?

Buat borang WinForms boleh ubah saiz tanpa sempadan

Mencipta borang tanpa sempadan dan boleh diubah saiz bukanlah mudah dalam WinForms. Walau bagaimanapun, dengan hanya beberapa pengubahsuaian, ia boleh dibuat tanpa sempadan dan boleh diubah saiz.

Untuk melumpuhkan sempadan Windows lalai, tetapkan sifat "FormBorderStyle" kepada "Tiada". Tetapi ini juga mengalih keluar keupayaan untuk mengubah saiz borang. Untuk melakukan ini, pelarasan kod diperlukan.

Contoh kod berikut mentakrifkan pengendali tersuai untuk melukis pemegang ubah saiz dan mensimulasikan bar tajuk, sambil mengatasi "WndProc" untuk mengendalikan mesej 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>

Dengan kod ini, anda boleh mencipta borang tanpa sempadan yang masih boleh diubah saiznya dengan menyeret pemegang kanan bawah dan bar tajuk simulasi.

Atas ialah kandungan terperinci Bagaimana untuk Menjadikan WinForms Tanpa Sempadan Boleh Resizable?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn