1

我无法弄清楚 C# TextMetrics 属性是如何工作的。下面的示例,我在某处找到并稍作修改,做了一些事情,但无论我在文本框中设置什么字体,结果似乎都是 7。

TextMetrics metrics;
VisualStyleRenderer renderer = new VisualStyleRenderer(VisualStyleElement.TextBox.TextEdit.Normal);
using (IDeviceContext context = textBox1.CreateGraphics() as IDeviceContext)
{
    metrics = renderer.GetTextMetrics(context);
}
int averageWidth = metrics.AverageCharWidth;
textBox1.Text = averageWidth.ToString(); // 7

MSDN 没有提供任何示例,我也没有在任何其他网站上找到任何可以理解的内容。有人可以解释这是如何工作的吗?

PS:我想使用所有的 TextMetrics 属性。不仅仅是AverageCharWidth。

更新:我正在编写一个字体查看器,使用私有字体集合。我想尽可能多地获取有关每种字体的信息。然后我可以决定在字体查看器中包含什么有用,什么不是。

我的字体查看器提醒 Bitstream Font Navigator ( http://noscope.com/2004/font-management-solution/ ),但我想包含有关字体的更多信息。

更新:我可以使用 FontFamily 方法来获取一些信息,正如 Olivier Jacot-Descombes 在他的回答中指出的那样,但不是全部。我想我需要使用 TextMetrics 来获取有关例如 PitchAndFamily、MaxCharWidth 和 AverageCharWidth 的信息。还是有其他简单的方法来获取这些信息?

4

1 回答 1

3

您可以像这样检索字体指标

var font = new System.Drawing.Font("Arial", 11f);
var style = System.Drawing.FontStyle.Regular;
var ff = font.FontFamily;
int ascent = ff.GetCellAscent(style);
int descent = ff.GetCellDescent(style);
int height = ff.GetEmHeight(style);
int lineSpacing = ff.GetLineSpacing(style);
float pointSize = font.SizeInPoints;

有关详细信息,请参阅如何:获取MSDN 上的字体度量。

于 2013-02-06T17:05:24.273 回答