C#抽绳字母间距

bec*_*lmw 12 c# system.drawing

在使用Graphics.DrawString时,是否可以以某种方式控制字母间距?我找不到允许我这样做的DrawString或Font的任何重载.

g.DrawString("MyString", 
             new Font("Courier", 44, GraphicsUnit.Pixel), 
             Brushes.Black, 
             new PointF(262, 638));
Run Code Online (Sandbox Code Playgroud)

字母间距我指的是字母之间的距离.如果我添加了足够的空间,那么间距MyString可能看起来很像.

Han*_*ant 14

开箱即用不支持.你要么必须单独绘制每个字母(很难做到正确),要么自己在字符串中插入空格.您可以使用Graphics.ScaleTransform()来拉伸字母,但这看起来很难看.

  • +1.虽然听起来不太好听,但是当有人出来告诉你某些东西不受支持时我会很感激. (5认同)

spl*_*tne 7

或者,您可以使用GDI API函数SetTextCharacterExtra(HDC hdc, int nCharExtra)(MSDN文档):

[DllImport("gdi32.dll", CharSet=CharSet.Auto)] 
public static extern int SetTextCharacterExtra( 
    IntPtr hdc,    // DC handle
    int nCharExtra // extra-space value 
); 

public void Draw(Graphics g) 
{ 
    IntPtr hdc = g.GetHdc(); 
    SetTextCharacterExtra(hdc, 24); //set spacing between characters 
    g.ReleaseHdc(hdc); 

    e.Graphics.DrawString("str",this.Font,Brushes.Black,0,0); 
}  
Run Code Online (Sandbox Code Playgroud)

  • 我知道很久以前就已经回答了,但我似乎无法让它发挥作用。我错过了什么吗? (2认同)
  • 我不明白为什么这个答案有 8 票赞成。这是无稽之谈。SetTextCharacterExtra() 是一个 GDI API,而 Graphics.DrawString() 是一个 GDI++ 函数,完全不受 GDI 设置的影响。但如果您使用 Textrenderer.DrawText() 而不是 Graphics.DrawString(),则此方法有效。 (2认同)