我不确定这里要问的确切问题是什么。您的代码片段中没有 Delphi TPoint
;您只需拥有客户矩形逻辑坐标。
原点位于X = 0, Y = 0
客户区的左上角。增加X
使位置向右移动,增加Y
使位置向下移动。逻辑单位是像素,因此从 的原点开始0, 0
,aCanvas.MoveTo(10, 10)
会将新的绘图位置设置为从左边缘 10 个像素到顶部 10 个像素,并且Canvas.LineTo(20, 20)
从那里开始绘制一条从点 at10, 10
到的线20, 20
。
TCanvas.MoveTo
并且TCanvas.LineTo
只是底层 Windows GDI 函数MoveToEx
(始终带有NULL
第三个参数)和LineTo
.
就 C# 等价物而言,如果您指的是System.Drawing.Point
,则使用的单位完全相同(尽管我不确定默认情况下原点在哪里)。给定 的原点0, 0
,System.Drawing.Point(10, 10)
应该是上述相同的位置 - 距左边缘 10 个像素,距上边缘 10 个像素。
快速检查确认 WinForms 应用程序中的原点实际上是客户区的左上角,使用:
// Delphi code
procedure TForm3.FormPaint(Sender: TObject);
begin
Canvas.Pen.Color := clRed;
Canvas.MoveTo(0, 0);
Canvas.LineTo(100, 100);
end;
// C# code
private void Form1_Paint(object sender, PaintEventArgs e)
{
Pen newPen = new System.Drawing.Pen(Color.Red);
e.Graphics.DrawLine(newPen, new Point(0, 0), new Point(100, 100));
}
这会产生以下输出: