Maison > développement back-end > C++ > Comment redimensionner un WinForm sans bordure ?

Comment redimensionner un WinForm sans bordure ?

DDD
Libérer: 2025-01-11 13:12:43
original
562 Les gens l'ont consulté

How to Resize a Borderless WinForm?

Créer un WinForm sans bordure redimensionnable : le guide complet

Lors de la personnalisation de l'apparence des Windows Forms, vous souhaiterez peut-être supprimer les bordures par défaut et autoriser le redimensionnement. Bien que la propriété "FormBorderStyle" permette de masquer la bordure, elle désactive également le redimensionnement.

Pour résoudre ce problème, considérez le code personnalisé suivant, qui permet de déplacer et de redimensionner sans bordures :

<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

Ce code contient les éléments clés suivants :

  • Poignées de redimensionnement de dessin : Cette poignée de dessin personnalisée permet de redimensionner les poignées de coin.
  • Dessiner la barre de titre : Dessine une barre de titre simulée pour fournir des cibles de clic et de glisser pour déplacer le formulaire.
  • Gestion des messages Windows : La gestion des messages garantit que le redimensionnement est activé lorsque l'utilisateur clique sur la poignée et que le curseur de la souris correct est affiché.

En implémentant ce code, vous pouvez désormais profiter des avantages d'un WinForm sans bordure et le redimensionner facilement.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal