当我使用Graphics.DrawString(... myPoint)
字符串的第一个字母的左侧/顶部时,位于 myPoint。
我可以将 DrawString 与 win32 SetTextAlign 结合使用来设置文本原点 TA_LEFT|TA_BASELINE
还是有一些 .NET 等价物?
如果我在 (100,100) 处绘制一个 Rectangle 并在 (100, 100) 处绘制一个字符串,我希望字符串位于矩形上方(而不是在左上角内部)
似乎没有内置的方法来执行此操作(即使调用采用StringFormat并在其LineAlignment属性中指定的DrawString()的重载,如果您提供的矩形足够高,只会导致文本底部对齐)。StringAlignment.Far
但是,您可以自己执行计算并相应地修改Y
您的坐标PointF
。例如,您可以使用Font类的Height属性:
yourPoint.Y -= yourFont.Height;
yourGraphics.DrawString(yourText, yourFont, yourBrush, yourPoint);
请注意,上面的代码实际上并没有实现基线对齐(整个字形将位于 中的原始坐标之上yourPoint.Y
)。真正的基线对齐需要字母的“尾部”部分,如p
或y
位于该点下方。它可以用更复杂的东西来实现,比如:
FontFamily fontFamily = yourFont.FontFamily;
FontStyle fontStyle = yourFont.Style;
yourPoint.Y -= fontFamily.GetCellAscent(fontStyle) * yourFont.Size
/ fontFamily.GetEmHeight(fontStyle);