Csharp/C#教程:如何获得所有已安装的固定宽度字体?分享


如何获得所有已安装的固定宽度字体?

我想知道是否有任何简单的方法来获取在C#中安装在用户系统上的所有固定宽度(等宽字体)字体的列表?

我正在使用.net 3.5,因此可以访问WPF System.Windows.Media命名空间和LINQ来获取字体信息,但我不确定我在寻找什么。

我希望能够提供一个过滤的等宽字体列表和/或从更大的字体列表中选择等宽字体(如VS选项对话框中所示)。

看一下:

https://www.pinvoke.net/default.aspx/Structures/LOGFONT.html

使用其中的一个结构,然后循环遍历族,实例化Font,获取LogFont值并检查lfPitchAndFamily。

下面的代码是动态编写的,未经测试,但以下代码应该有效:

foreach (FontFamily ff in System.Drawing.FontFamily.Families) { if (ff.IsStyleAvailable(FontStyle.Regular)) { Font font = new Font(ff, 10); LOGFONT lf = new LOGFONT(); font.ToLogFont(lf); if (lf.lfPitchAndFamily ^ 1) { do stuff here...... } } } 

不幸的是, ToLogFont函数没有填充lfPitchAndFamily字段来更正值。 在我的情况下,它总是0。

检测哪些字体可能被修复的一个近似值如下

  foreach ( FontFamily ff in FontFamily.Families ) { if ( ff.IsStyleAvailable( FontStyle.Regular ) ) { float diff; using ( Font font = new Font( ff, 16 ) ) { diff = TextRenderer.MeasureText( "WWW", font ).Width - TextRenderer.MeasureText( "...", font ).Width; } if ( Math.Abs( diff ) < float.Epsilon * 2 ) { Debug.WriteLine( ff.ToString() ); } } } 

请记住,他们是几个误报,例如Wingdings

AFAIK你不能只使用BCL库。 您必须使用WinAPI互操作。

您需要分析LOGFONT .lfPitchAndFamily成员的2个最低位。 有一个常量FIXED_PITCH(表示字体是固定宽度),可用作lfPitchAndFamily的位掩码。

这是一篇有用的文章:

枚举字体

枚举字体可能有点令人困惑,除非你想枚举系统中的所有字体,否则比MSDN建议的要困难一些。 本文将准确解释您在系统中查找每个固定宽度字体所需的步骤,并列出每种字体的每个可能大小。

上述就是C#学习教程:如何获得所有已安装的固定宽度字体?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/959687.html

(0)
上一篇 2021年11月24日
下一篇 2021年11月24日

精彩推荐