當我使用Graphics.DrawString(... myPoint)
時,字符串的第一個字母的左側/頂部位於myPoint。帶有原點左/基線的DrawString
我可以將DrawString與win32 SetTextAlign結合來設置文本原點TA_LEFT|TA_BASELINE
還是有一些.NET等價物?
如果我畫在(100,100)創建一個矩形,並在(100,100)的字符串我希望字符串是矩形上方(不是內部頂部/左上角)
當我使用Graphics.DrawString(... myPoint)
時,字符串的第一個字母的左側/頂部位於myPoint。帶有原點左/基線的DrawString
我可以將DrawString與win32 SetTextAlign結合來設置文本原點TA_LEFT|TA_BASELINE
還是有一些.NET等價物?
如果我畫在(100,100)創建一個矩形,並在(100,100)的字符串我希望字符串是矩形上方(不是內部頂部/左上角)
似乎沒有給是一種內置的方式來做到這一點(即使調用DrawString()的過載需要StringFormat並在其LineAlignment屬性中指定StringAlignment.Far
只會導致底部對齊文本,如果您提供的矩形足夠高)。
但是,您可以自己執行計算並相應地修改PointF
的Y
座標。例如,你可以使用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);
如果您使用對齊而不是LineAlignment? – LightStriker
@LightStriker,屬性控制水平對齊,所以它不會幫助我們在這裏:) –
啊!對不起,只是注意到他想繪製矩形的外側。 – LightStriker
您的字符串是否只包含一行文本? –
是一行Frederic – albert