Maison > développement back-end > C++ > Comment rendre un WinForms sans bordure redimensionnable ?

Comment rendre un WinForms sans bordure redimensionnable ?

Mary-Kate Olsen
Libérer: 2025-01-11 13:07:44
original
543 Les gens l'ont consulté

How to Make a Borderless WinForms Resizable?

Créer des formulaires WinForms redimensionnables sans frontières

Créer des formulaires sans frontières et redimensionnables n'est pas facile dans WinForms. Cependant, avec seulement quelques modifications, il peut être rendu sans bordure et redimensionnable.

Pour désactiver la bordure Windows par défaut, définissez la propriété "FormBorderStyle" sur "Aucun". Mais cela supprime également la possibilité de redimensionner le formulaire. Pour ce faire, des ajustements de code sont nécessaires.

L'exemple de code suivant définit un gestionnaire personnalisé pour dessiner des poignées de redimensionnement et simuler la barre de titre, tout en remplaçant "WndProc" pour gérer le message 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>
Copier après la connexion

Avec ce code, vous pouvez créer un formulaire sans bordure qui peut toujours être redimensionné en faisant glisser la poignée inférieure droite et la barre de titre simulée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal