C# 重新定义表单客户端区域

C# 重新定义表单客户端区域,c#,vb.net,winforms,C#,Vb.net,Winforms,在WinForms中,我想创建一个继承自表单的类,并在顶部显示自定义绘制的标题标题区域。现在最好重新定义表单的客户机区域,因此坐标0,0位于标题的左下角。 我读到这是不可能做到的,但我想知道这是不是真的。此外,我发现的信息非常稀少,主要是关于在客户区之外绘图,而不是重新定义它 作为一种解决方法,我当然可以创建一个PointToFormPoint函数,根据标题转换坐标,但这只是一种解决方法 客户端区域与WinForms框架的耦合程度是否如此之深,以致于无法通过编程方式对其进行更改?它与Window

在WinForms中,我想创建一个继承自表单的类,并在顶部显示自定义绘制的标题标题区域。现在最好重新定义表单的客户机区域,因此坐标0,0位于标题的左下角。 我读到这是不可能做到的,但我想知道这是不是真的。此外,我发现的信息非常稀少,主要是关于在客户区之外绘图,而不是重新定义它

作为一种解决方法,我当然可以创建一个PointToFormPoint函数,根据标题转换坐标,但这只是一种解决方法


客户端区域与WinForms框架的耦合程度是否如此之深,以致于无法通过编程方式对其进行更改?

它与Windows的工作方式紧密耦合。当然,您可以更改客户端区域,您必须在WndProc()的覆盖中处理WM_NCCALCSIZE消息。这是令人不快的。好吧,我将对此进行研究,但我想不值得在这个应用程序中实现一些未知的死亡陷阱来增加舒适度。谢谢,当然可以。最简单的方法是在标题下添加一个面板。这将为您提供一个新的坐标系,该坐标系从您想要的(0,0)开始,即面板的客户端区域。这是真的,但在Visual Studio designer中将面板作为主控件桶的实现让我在使用派生控件之前经历了一段艰难的时期。但我会试试这个,看看它在表单中是如何工作的。但这是个好建议。