Maison > développement back-end > C++ > Comment créer un formulaire sans bordure redimensionnable et mobile dans Windows Forms ?

Comment créer un formulaire sans bordure redimensionnable et mobile dans Windows Forms ?

Mary-Kate Olsen
Libérer: 2025-01-11 13:21:42
original
635 Les gens l'ont consulté

How to Create a Resizable and Movable Borderless Form in Windows Forms?

Créer des formulaires sans bordure redimensionnables et mobiles dans Windows Forms

Dans Windows Forms, des formulaires sans bordure peuvent être facilement créés en définissant la propriété « FormBorderStyle » sur « Aucun ». Toutefois, cette action par défaut désactive la possibilité de redimensionner le formulaire. Pour surmonter cette limitation, des méthodes plus avancées sont nécessaires.

Le code suivant illustre une solution personnalisée qui déplace et redimensionne simultanément un formulaire sans bordure :

<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);
    }

    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

Explication du fonctionnement du code :

  • Barre de titre personnalisée : OnPaintLa méthode remplacée dessine une barre bleue en haut du formulaire pour simuler une barre de titre.
  • Poignée de redimensionnement : La fonction DrawSizeGrip dessine une poignée de contrôle dans le coin inférieur droit du formulaire, permettant de la faire glisser pour le redimensionner.
  • Événement WM_NCHITTEST : WndProc Méthode de remplacement pour intercepter le message WM_NCHITTEST afin de détecter la position du curseur de la souris. Si le curseur se trouve dans la barre de titre ou dans la poignée de contrôle, le code de test de détection approprié est renvoyé. Le pos.Y dans le code doit être remplacé par pos.X pour être logique et garantir que la zone de poignée de redimensionnement dans le coin inférieur droit est correctement détecté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