Heim > Backend-Entwicklung > C++ > Wie kann ich die Größe eines randlosen WinForms ändern?

Wie kann ich die Größe eines randlosen WinForms ändern?

Mary-Kate Olsen
Freigeben: 2025-01-11 13:07:44
Original
595 Leute haben es durchsucht

How to Make a Borderless WinForms Resizable?

Erstellen Sie randlose, in der Größe veränderbare WinForms-Formulare

Das Erstellen randloser und in der Größe veränderbarer Formulare ist in WinForms nicht einfach. Mit nur wenigen Änderungen kann es jedoch randlos und in der Größe veränderbar gemacht werden.

Um den Standard-Windows-Rahmen zu deaktivieren, setzen Sie die Eigenschaft „FormBorderStyle“ auf „None“. Dadurch entfällt jedoch auch die Möglichkeit, die Größe des Formulars zu ändern. Hierzu sind Codeanpassungen erforderlich.

Das folgende Codebeispiel definiert einen benutzerdefinierten Handler zum Zeichnen von Größenänderungsgriffen und zum Simulieren der Titelleiste, während „WndProc“ überschrieben wird, um die WM_NCHITTEST-Nachricht zu verarbeiten:

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

Mit diesem Code können Sie ein randloses Formular erstellen, dessen Größe noch durch Ziehen des unteren rechten Griffs und der simulierten Titelleiste geändert werden kann.

Das obige ist der detaillierte Inhalt vonWie kann ich die Größe eines randlosen WinForms ändern?. 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