Heim > Backend-Entwicklung > C++ > Wie ändere ich die Größe eines randlosen Windows-Formulars?

Wie ändere ich die Größe eines randlosen Windows-Formulars?

Mary-Kate Olsen
Freigeben: 2025-01-11 13:16:42
Original
202 Leute haben es durchsucht

How to Resize a Borderless Windows Form?

Verwaltung der Größenänderung von randlosen Formularen

Das Verschieben eines randlosen Windows-Formulars ist einfach, aber die Größenänderung eines solchen Formulars stellt eine einzigartige Herausforderung dar. Wenn Sie die Eigenschaft „FormBorderStyle“ auf „None“ setzen, verschwindet der Standardrahmen, wodurch eine Größenänderung unmöglich wird.

Lösung:

Um dieses Problem zu lösen, verwenden Sie ein benutzerdefiniertes gezeichnetes Steuerelement in der unteren rechten Ecke des Formulars, das einen Größenänderungsgriff simuliert. Implementieren Sie außerdem die Methode „WndProc“, um die Nachricht „WM_NCHITTEST“ abzufangen und die Position des Cursors relativ zum Formular zu bestimmen. Befindet sich der Cursor innerhalb der Titelleiste oder des Handles der Simulation, wird der „m.Result“-Wert entsprechend aktualisiert.

Hier ist ein Beispielcode-Snippet:

<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 diesen Änderungen kann Ihr randloses Fenster jetzt einfach verschoben und in der Größe geändert werden.

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