Heim > Backend-Entwicklung > C++ > Wie erstelle ich in Windows Forms skalierbare randlose Formulare?

Wie erstelle ich in Windows Forms skalierbare randlose Formulare?

Susan Sarandon
Freigeben: 2025-01-11 13:01:40
Original
366 Leute haben es durchsucht

How to Create Resizable Borderless Forms in Windows Forms?

Erstellen Sie eine randlose Form: sowohl schön als auch skalierbar

Beim Entwerfen benutzerdefinierter Formularschnittstellen bevorzugen Entwickler normalerweise ein einfaches randloses Erscheinungsbild. Obwohl Windows über die Eigenschaft „FormBorderStyle“ eine einfache Möglichkeit bietet, die Standardrahmen zu entfernen, führt dies dazu, dass die Größe des Formulars nicht geändert werden kann.

Um diese Einschränkung zu überwinden, erkunden wir eine umfassende Codelösung, die gleichzeitig randlose Ästhetik und nahtlose Größenänderungsmöglichkeiten ermöglicht:

<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>
Nach dem Login kopieren

Durch die Implementierung dieses Codes in Ihr randloses Formular können Sie die Größenänderungsfunktion effektiv aktivieren und gleichzeitig die gewünschte Ästhetik beibehalten. Eine simulierte Titelleiste und benutzerdefinierte Greifindikatoren sorgen für ein intuitives und umfassendes Benutzererlebnis, sodass Benutzer die Größe von Formularen problemlos ändern können.

Das obige ist der detaillierte Inhalt vonWie erstelle ich in Windows Forms skalierbare randlose Formulare?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage