Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mencipta Borang Tanpa Sempadan Boleh Resizable dalam Borang Windows?

Bagaimana untuk Mencipta Borang Tanpa Sempadan Boleh Resizable dalam Borang Windows?

Susan Sarandon
Lepaskan: 2025-01-11 13:01:40
asal
365 orang telah melayarinya

How to Create Resizable Borderless Forms in Windows Forms?

Buat bentuk tanpa sempadan: cantik dan boleh diubah saiz

Apabila mereka bentuk antara muka bentuk tersuai, pembangun biasanya lebih suka penampilan tanpa sempadan yang ringkas. Walaupun Windows menyediakan cara mudah untuk mengalih keluar sempadan lalai melalui sifat "FormBorderStyle", ini menyebabkan borang tidak boleh diubah saiz.

Untuk mengatasi had ini, mari kita terokai penyelesaian kod komprehensif yang membolehkan estetika tanpa sempadan dan keupayaan mengubah saiz yang lancar pada masa yang sama:

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

Dengan melaksanakan kod ini dalam bentuk tanpa sempadan anda, anda boleh mendayakan fungsi saiz semula dengan berkesan sambil mengekalkan estetika yang diingini. Bar tajuk simulasi dan penunjuk rampasan tersuai memberikan pengalaman pengguna yang intuitif dan berciri penuh, membolehkan pengguna mengubah saiz borang dengan mudah.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Borang Tanpa Sempadan Boleh Resizable dalam Borang Windows?. 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