C# 自定义标题栏和窗体边框

C# 自定义标题栏和窗体边框,c#,resize,titlebar,C#,Resize,Titlebar,我有一个表单,我想画一个自定义标题栏,并在应用程序周围自定义边框,以接管表单的大小调整。我关闭了应用程序的常规标题栏,并用我设置为锚定到应用程序的两个图像构建了自己的标题栏。问题是,当窗体被调整大小时,它看起来非常不稳定,因为窗体在绘制窗体之前不会调整大小。我需要做些什么来平滑调整边界。另外,当我使用边框调整窗体大小时,窗体开始大量闪烁,并且调整大小并不完全正确。它会调整大小,但不会调整其假定的大小。下面是我用来调整带有边框的窗体大小的代码示例 #region formDragResize

我有一个表单,我想画一个自定义标题栏,并在应用程序周围自定义边框,以接管表单的大小调整。我关闭了应用程序的常规标题栏,并用我设置为锚定到应用程序的两个图像构建了自己的标题栏。问题是,当窗体被调整大小时,它看起来非常不稳定,因为窗体在绘制窗体之前不会调整大小。我需要做些什么来平滑调整边界。另外,当我使用边框调整窗体大小时,窗体开始大量闪烁,并且调整大小并不完全正确。它会调整大小,但不会调整其假定的大小。下面是我用来调整带有边框的窗体大小的代码示例

#region formDragResize
    private Point startDrag = new Point(0, 0);
    private bool resize = false;
    private void rightSideBarMid_MouseDown(object sender, MouseEventArgs e)
    {
        this.startDrag = e.Location;
        this.resize = true;
    }

    private void rightSideBarMid_MouseUp(object sender, MouseEventArgs e)
    {
        this.resize = false;
    }

    private void rightSideBarMid_MouseMove(object sender, MouseEventArgs e)
    {
        if (this.resize)
        {
            Point p1 = new Point(e.X, e.Y);
            Point p2 = this.PointToScreen(p1);
            this.Width = p2.X - this.startDrag.X;
        }
    }
 #endregion
我是一个非常新的当它涉及到形成痛苦和这样的任何帮助是感激的


谢谢

假设您谈论的是Windows窗体,您不想关闭标题栏。您将其保持打开状态,但随后处理非客户端绘制消息


但是,Winforms不包括非客户端绘制事件,因此您必须重写WndProc并自行处理NC_*消息,或者使用第三方库来执行此操作。

是的,我指的是windows窗体。为什么我们不想关掉标题栏?如果我要做你所说的,有什么教程吗?谢谢第二个Alex的问题。考虑到我是用双缓冲绘制的,代码的逻辑对应于标题栏的所有必要逻辑(包括当用户双击图标时关闭窗口,以及图标的菜单等),我自己做这一切有什么问题?除了主题不符合用户的口味(我会尽量避免),我看不出会出什么问题。