2012-11-05 21 views
1

當我使用Graphics.DrawString(... myPoint)時,字符串的第一個字母的左側/頂部位於myPoint。帶有原點左/基線的DrawString

我可以將DrawString與win32 SetTextAlign結合來設置文本原點TA_LEFT|TA_BASELINE還是有一些.NET等價物?

如果我畫在(100,100)創建一個矩形,並在(100,100)的字符串我希望字符串是矩形上方(不是內部頂部/左上角)

+0

您的字符串是否只包含一行文本? –

+0

是一行Frederic – albert

回答

1

似乎沒有給是一種內置的方式來做到這一點(即使調用DrawString()的過載需要StringFormat並在其LineAlignment屬性中指定StringAlignment.Far只會導致底部對齊文本,如果您提供的矩形足夠高)。

但是,您可以自己執行計算並相應地修改PointFY座標。例如,你可以使用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); 
+0

如果您使用對齊而不是LineAlignment? – LightStriker

+0

@LightStriker,屬性控制水平對齊,所以它不會幫助我們在這裏:) –

+0

啊!對不起,只是注意到他想繪製矩形的外側。 – LightStriker