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

Bagaimana untuk Menjadikan WinForms Tanpa Sempadan Boleh Resizable?

Mary-Kate Olsen
Lepaskan: 2025-01-11 13:07:44
asal
543 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan