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

Comment redimensionner un formulaire Windows sans bordure ?

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

How to Resize a Borderless Windows Form?

Gestion du redimensionnement des formulaires sans bordure

Déplacer un formulaire Windows sans bordure est facile, mais redimensionner un tel formulaire présente un défi unique. En définissant la propriété "FormBorderStyle" sur "Aucun", la bordure par défaut disparaît, rendant le redimensionnement impossible.

Solution :

Pour surmonter ce problème, utilisez un contrôle dessiné personnalisé dans le coin inférieur droit du formulaire, simulant une poignée de redimensionnement. De plus, implémentez la méthode « WndProc » pour intercepter le message « WM_NCHITTEST » et déterminer la position du curseur par rapport au formulaire. Si le curseur se trouve à l'intérieur de la barre de titre ou de la poignée de la simulation, la valeur "m.Result" est mise à jour en conséquence.

Voici un exemple d'extrait de code :

<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 ces modifications, votre fenêtre sans bordure peut désormais être facilement déplacée et redimensionné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