Maison > développement back-end > C++ > Comment créer des formulaires sans bordure redimensionnables dans les formulaires Windows ?

Comment créer des formulaires sans bordure redimensionnables dans les formulaires Windows ?

Susan Sarandon
Libérer: 2025-01-11 13:01:40
original
412 Les gens l'ont consulté

How to Create Resizable Borderless Forms in Windows Forms?

Créez un formulaire sans bordure : à la fois beau et redimensionnable

Lors de la conception d'interfaces de formulaire personnalisées, les développeurs préfèrent généralement une apparence simple et sans bordure. Bien que Windows offre un moyen simple de supprimer les bordures par défaut via la propriété « FormBorderStyle », le formulaire ne peut alors pas être redimensionné.

Pour surmonter cette limitation, explorons une solution de code complète qui permet à la fois une esthétique sans frontières et des capacités de redimensionnement transparentes :

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

    // 拦截 WM_NCHITTEST 消息以实现自定义调整大小行为
    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

En implémentant ce code dans votre formulaire sans bordure, vous pouvez activer efficacement la fonctionnalité de redimensionnement tout en conservant l'esthétique souhaitée. Une barre de titre simulée et des indicateurs de saisie personnalisés offrent une expérience utilisateur intuitive et complète, permettant aux utilisateurs de redimensionner facilement les formulaires.

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