C#TextMetrics属性如何工作?

时间:2013-02-06 00:20:05

标签: c#

我无法弄清楚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字体导航器(http://noscope.com/2004/font-management-solution/),但我想要包含有关字体的更多信息。

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

1 个答案:

答案 0 :(得分: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上的How to: Obtain Font Metrics