gpt4 book ai didi

c# - 带有图形转换的 TextRenderer

转载 作者:行者123 更新时间:2023-11-30 13:33:43 34 4
gpt4 key购买 nike

我一直在研究自定义控件,但我遇到了一个问题,TextRenderer 的表现有点出乎意料。在我的 OnPaint 事件中,我将转换应用于 Graphics 对象以补偿滚动位置,如下所示:

e.Graphics.Transform = new System.Drawing.Drawing2D.Matrix(1, 0, 0, 1, this.AutoScrollPosition.X, this.AutoScrollPosition.Y);

然后我将图形对象传递给控件的所有子元素,以便它们将自己绘制到它上面。其中一个元素应该将文本字符串绘制到图形表面上。这就是我遇到问题的地方。滚动时此行似乎可以正常工作:

 e.Graphics.DrawString(this.Text, this.Font, brush, new PointF(this.Rectangle.X, this.Rectangle.Y));

但是当我使用 TextRenderer 时,我得到了完全不同的结果。这是应该绘制文本的文本行:

TextRenderer.DrawText(e.Graphics, this.Text, this.Font, this.Rectangle, this.TextColor, TextFormatFlags.PreserveGraphicsClipping | TextFormatFlags.PreserveGraphicsTranslateTransform);

我认为这两行应该产生相同的结果。但由于某种原因,第二个以不同的方式应用图形变换,结果,当我滚动控件时,所有文本行以与绘图表面上其余元素不同的速度移动。有人可以向我解释为什么会这样吗?

最佳答案

这是我对此的最佳猜测:TextRenderer.DrawText基于 GDI,因此依赖于分辨率。 Graphics.DrawString是 GDI+,因此与分辨率无关。另见 this article .

既然您说文本“以不同的速度四处移动”,可能发生的情况是 GDI 调用使用了与您的 Graphics 对象所具有的分辨率不同的“默认”分辨率。这意味着您必须调整 AutoScrollCoordinates 以考虑 Graphics 对象分辨率和“默认”GDI 分辨率之间的差异。

关于c# - 带有图形转换的 TextRenderer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6107280/

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