C#でユーザーのシステムにインストールされているすべての固定幅(等幅)フォントのリストを取得する簡単な方法があるかどうか疑問に思っていますか?
.net 3.5を使用しているので、WPF System.Windows.Media名前空間とLINQにアクセスしてフォント情報を取得できますが、何を探しているのかわかりません。
等幅フォントのフィルターされたリストを提供したり、フォントのより大きなリストから等幅フォントを選択したりできるようにしたい(VSオプションダイアログに表示されているように)。
見て:
http://www.pinvoke.net/default.aspx/Structures/LOGFONT.html
そこにある構造体の 1 つを使用して、ファミリをループし、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......
}
}
}
私の知る限り、BCLライブラリのみを使用してそれを行うことはできません。WinAPI 相互運用を使用する必要があります。
LOGFONT .lfPitchAndFamily メンバーの最下位 2 ビットを分析する必要があります。lfPitchAndFamily のビット マスクとして使用できる定数 FIXED_PITCH (フォントが固定幅であることを意味します) があります。
ここに役立つ記事があります:
フォントの列挙は少し混乱する可能性があり、システム上のすべてのフォントを列挙したくない場合を除き、MSDN が提案するよりも少し難しい場合があります。この記事では、システム上のすべての固定幅フォントを見つけるために必要な手順を正確に説明し、個々のフォントごとに可能なすべてのサイズを列挙します。