自定义标题栏和表单边框

时间:2010-10-14 14:48:23

标签: c# resize titlebar

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

#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

在形成痛苦等方面我很新,所以任何帮助都会受到赞赏。

谢谢!

1 个答案:

答案 0 :(得分:0)

假设您正在谈论Windows窗体,您不想关闭标题栏。你保持开启状态,然后处理非客户端绘制消息。

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