我创建了简单的表单,现在我想在相对坐标中绘制单个对象(矩形,圆形,线条......)。 这里的主要问题是在表格中间创建2D笛卡尔坐标系。是否可能以及如何做???
主要问题是如何有效地将绝对坐标转换为相对坐标?如何创建我自己的系统,以便得到数字结果(负数,正数取决于象限)而不是像素?
目前,我制作了MouseMove事件,以Cursor.Position.X
,Cursor.Position.Y
显示鼠标的当前位置,并将其显示在标签中。显示的坐标是像素,如何改变?我已经阅读了有关使用PointToClient
方法转换的内容,但我并不理解它。
我与Windows窗体绑定因为我已经在win表单中创建了一个程序,现在我只想添加此功能。
由于
答案 0 :(得分:0)
您最有可能寻找的是Graphics.TranslateTransform
和Graphics.ScaleTransform
。
private void Transform(PaintEventArgs e)
{
e.Graphics.ScaleTransform(width, height);
e.Graphics.TranslateTransform(xOffset, yOffset);
}
您还需要确保您使用的任何绘图方法都会导致PointF
结构或Single
的重载。
当然,您也可以在最后处理所有这些问题。通过表单的宽度和高度缩放输入/输出坐标,然后将其翻译一半将得到相同的结果。
编辑 - 为了增加一些清晰度,Windows总是希望您的坐标是像素形式。您可以使用上述转换以不同的比例进行工作,然后转换为Windows期望的表单。
设置翻译应该很简单。如果你想要表格的中间部分,你只想翻译宽度的一半和高度的一半。如何选择缩放坐标将取决于您需要使用的范围(即-1.0到1.0,-0.5到0.5等)。