2

当我使用Graphics.DrawString(... myPoint) 字符串的第一个字母的左侧/顶部时,位于 myPoint。

我可以将 DrawString 与 win32 SetTextAlign 结合使用来设置文本原点 TA_LEFT|TA_BASELINE还是有一些 .NET 等价物?

如果我在 (100,100) 处绘制一个 Rectangle 并在 (100, 100) 处绘制一个字符串,我希望字符串位于矩形上方(而不是在左上角内部)

4

1 回答 1

2

似乎没有内置的方法来执行此操作(即使调用采用StringFormat并在其LineAlignment属性中指定的DrawString()的重载,如果您提供的矩形足够高,只会导致文本底部对齐)。StringAlignment.Far

但是,您可以自己执行计算并相应地修改Y您的坐标PointF。例如,您可以使用Font类的Height属性:

yourPoint.Y -= yourFont.Height;
yourGraphics.DrawString(yourText, yourFont, yourBrush, yourPoint);

请注意,上面的代码实际上并没有实现基线对齐(整个字形将位于 中的原始坐标之上yourPoint.Y)。真正的基线对齐需要字母的“尾部”部分,如py位于该点下方。它可以用更复杂的东西来实现,比如:

FontFamily fontFamily = yourFont.FontFamily;
FontStyle fontStyle = yourFont.Style;
yourPoint.Y -= fontFamily.GetCellAscent(fontStyle) * yourFont.Size
               / fontFamily.GetEmHeight(fontStyle);
于 2012-11-05T11:12:23.840 回答