当前位置 : 主页 > 编程语言 > c语言 >

vb.net – Windows窗体的坐标系停止和启动的位置在哪里?

来源:互联网 收集:自由互联 发布时间:2021-06-24
我正在使用VB.NET编写一个使用碰撞检测的 Windows窗体运行的游戏.为了实现这一点,我必须能够理解定位系统.我知道窗体坐标从左上角开始,不包括底边或右边.但坐标开始和停止的数量是多
我正在使用VB.NET编写一个使用碰撞检测的 Windows窗体运行的游戏.为了实现这一点,我必须能够理解定位系统.我知道窗体坐标从左上角开始,不包括底边或右边.但坐标开始和停止的数量是多少? (我的意思是左上角坐标是什么,几乎是右下角坐标是什么) 坐标系统取决于您是在谈论客户坐标还是屏幕坐标.这是一个基本的Windows UI管理器,WinForms包装器遵循相同的模式.

当您处理客户端坐标时,原点(左上角)点具有坐标(0,0).总是.范围由表单的宽度和高度定义,可分别通过Me.ClientSize.Width和Me.ClientSize.Height访问.因此,客户端矩形是:
{(0,0)×(ClientSize.Width,ClientSize.Height)},也可以使用ClientRectangle属性进行检索.

客户区的独特之处在于它排除了表单的非客户区域 – 边框,标题栏和其他依赖于系统的属性.

(图片用于创建Aero ToolStrip时从Jose Menendez Póo’s article开始的说明)

您不必担心计算这些尺寸(也不应该,因为它们可能会发生变化).您只需在客户端坐标中工作,框架将负责其余部分.在父窗体上定位子对象(如控件)时使用客户端坐标,甚至可以通过指定客户端大小来调整窗体大小.考虑到非客户区域,其实际大小将自动计算.

您将不得不处理屏幕坐标是非常罕见的.如果你想在屏幕上移动一个窗体(窗口),你只需要那些(这也应该是罕见的,因为你不知道用户有什么尺寸的屏幕,你也不应该试着控制她放置窗户的位置).在屏幕坐标中,主监视器的左上角有坐标(0,0).坐标系的其余部分基于virtual screen,它考虑了多监视器配置.

表单的“位置”和“大小”属性为您提供屏幕坐标值.如果需要在客户端和屏幕坐标之间进行映射(转换),可以使用PointToClient和PointToScreen方法.传递这些分别根据屏幕或客户端坐标定义的位置,并将它们转换为其他坐标系.

唯一需要注意的其他复杂因素是Windows使用endpoint-exclusive rectangles.WinForms包装器在其Rectangle结构中保留了该约定.你几乎不必担心这一点,因为一旦你理解它,这真的是一个非常自然的系统.此外,WinForms框架的所有部分和部分都使用约定,因此如果您只是绕过点,大小和矩形,则不太可能遇到麻烦.但需要注意的是.可以这样想:您的客户区域具有矩形{(0,0)×(ClientSize.Width,ClientSize.Height)},如前所述.如果要用纯色填充此矩形,则填充将从点(0,0)延伸到点(ClientSize.Width – 1,ClientSize.Height – 1).

网友评论