添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

下面函数是经常用到的 计算字串长度 的方法:

private double MeasureTextWidth(String str, string fontName, double fontsize, double width)
{
double width = -1;
try
{
System.Drawing.Graphics graphics = System.Drawing.Graphics.FromHwnd(m_hWnd);
graphics.PageUnit = System.Drawing.GraphicsUnit.Point;
System.Drawing.Font font = new System.Drawing.Font(fontName, (float)fontsize);

System.Drawing.SizeF size = graphics.MeasureString(str, font) ;

width = size.width;

font.Dispose();
graphics.Dispose();
}
catch (System.Exception e)
{
}
return width;
}

但是事实上, Graphics.MeasureString 并不可靠,在不同的SKU下得到的结果会不同,原因不明,可能跟显卡驱动也会有关系。今天尝试新的方法经测试有效,贡献出来:

private double MeasureTextWidth(string text, double fontSize, string fontFamily)
{
FormattedText formattedText = new FormattedText(
text,
System.Globalization.CultureInfo.InvariantCulture,
FlowDirection.LeftToRight,
new Typeface(fontFamily.ToString()),
fontSize,
Brushes.Black
);
return formattedText.WidthIncludingTrailingWhitespace ;
}

另,附送 枚举已安装字体 的方法:

System.Drawing.FontFamily[] fontFamilies;
InstalledFontCollection installedFontCollection = new InstalledFontCollection();
fontFamilies = installedFontCollection.Families;

int count = fontFamilies.Length;
log("fontFamilies.Length=" + fontFamilies.Length);
for (int i = 0; i < count; i++)
{
fontName = fontFamilies[i].Name;
log("fontName: " + fontName);
}

参考自:http://zwkufo.blog.163.com/blog/static/258825120116663748213/