在回答C#字符串字母间距关于字母间距的旧帖子时,我看到:
[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);
} 我尝试了正数和负数(转换为VB.NET),但没有任何效果。它是一个有效的代码块还是不正确的?
<DllImport("gdi32.dll", CharSet:=CharSet.Auto)> _
Public Shared Function SetTextCharacterExtra(ByVal hdc As IntPtr, ByVal nCharExtra As Integer) As Integer
' extra-space value
End Function在一个功能上:
With gClsGraphics1
'Drawstring
.SmoothingMode = SmoothingMode.HighQuality
.TextRenderingHint = Text.TextRenderingHint.ClearTypeGridFit
.CompositingQuality = CompositingQuality.HighQuality
Dim hdc As IntPtr = .GetHdc()
SetTextCharacterExtra(hdc, 30)
.ReleaseHdc(hdc)
End With发布于 2017-08-13 08:38:22
这不是你文章正文中问题的答案,只是标题中问题的一个解决办法。
因此,虽然我甚至不尝试使用任何遗留函数,但我只是在普通字符之间添加空格。
使用普通空间可能比较粗糙,但还有其他一些不错的空白字符
char thin_space = (char)0x2009;
char hair_space = (char)0x200a;
char narrow_nbr_space = (char)0x202f;使用这样的简单函数:
string spaced(string text, int spacing, char space)
{
string spaces = "".PadLeft(spacing, space);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < text.Length; i++) sb.Append(text[i] + spaces);
return sb.ToString().Trim(space);
}..you可以观察到有趣的差异:

正如您所看到的,对于单行文本,发空间将允许对伪字符间距进行最好的调整;但对于多行文本,则更倾向于使用不间断的空间。不过,它仍将允许在线条前面留出空白。
但是,由于没有实用的方法,或者至少对于缺少的行距没有简单的解决办法,因此得出的结论仍然是: GDI+中的字体支持是贫穷的。
https://stackoverflow.com/questions/45605800
复制相似问题