gpt4 book ai didi

vb.net - windows窗体的坐标系在哪里停止和开始?

转载 作者:行者123 更新时间:2023-12-04 02:27:58 25 4
gpt4 key购买 nike

我正在使用 VB.NET 编写一个在使用碰撞检测的 Windows 窗体中运行的游戏。为了实现这一点,我必须能够理解定位系统。我知道窗口窗体坐标从左上角开始,不包括底部或右侧边缘。但是坐标在什么数字开始和停止? (我的意思是什么是左上角坐标,什么是几乎右下角坐标)

最佳答案

坐标系取决于您是在谈论客户端坐标还是屏幕坐标。这是一个基本的 Windows UI 管理器,WinForms 包装器遵循相同的模式。

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

客户区的独特之处在于它排除了表单的非客户区——边框、标题栏和其他与系统相关的属性。


(图片来自 Jose Menendez Póo's article,用于创建 Aero ToolStrip 的说明目的)

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

您将不得不处理 的情况非常罕见。屏幕坐标 .如果您想在屏幕上移动表单(窗口),您只需要这些(这也应该很少见,因为您不知道用户的屏幕大小,也不应该尝试控制她放置窗口的位置)。在屏幕坐标中,主显示器的左上角具有坐标 (0, 0) .坐标系的其余部分基于 virtual screen ,这考虑了多显示器配置。



表单的 LocationSize属性为您提供屏幕坐标值。如果您需要在客户端和屏幕坐标之间映射(转换),有 PointToClientPointToScreen方法。分别传递根据屏幕坐标或客户端坐标定义的位置,它们会将其转换为其他坐标系。

唯一需要注意的其他复杂问题是 Windows 使用 endpoint-exclusive rectangles . WinForms 包装器在其 Rectangle 中保留了该约定。结构体。您几乎不必担心这一点,因为一旦您了解它,这确实是一个非常自然的系统。另外,WinForms 框架的所有部分和部分都使用约定,因此如果您只是传递点、大小和矩形,则不太可能遇到麻烦。但这是需要注意的。可以这样想:您的客户区有一个矩形 { (0, 0) × (ClientSize.Width, ClientSize.Height) },正如我们之前看到的。如果你用纯色填充这个矩形,填充将从点 (0, 0) 开始。指向(ClientSize.Width - 1, ClientSize.Height - 1) .

关于vb.net - windows窗体的坐标系在哪里停止和开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35086046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com