문제

C#의 사용자 시스템에 설치된 모든 고정 된 범위 (Monospaced) 글꼴 목록을 얻는 간단한 방법이 있는지 궁금합니다.

.NET 3.5를 사용하고 있으므로 WPF System.Windows.Media 네임 스페이스 및 LINQ에 액세스하여 글꼴 정보를 얻으려면 무엇을 찾고 있는지 잘 모르겠습니다.

나는 Monospaced 글꼴의 필터링 된 목록을 제공하거나 더 큰 글꼴 목록에서 Monospaced 글꼴을 선택할 수 있기를 원합니다 (VS 옵션 대화 상자에서 볼 수 있듯이).

도움이 되었습니까?

해결책

다음을 살펴보십시오.

http://www.pinvoke.net/default.aspx/structures/logfont.html

거기에있는 구조 중 하나를 사용한 다음 가족을 고려하고 글꼴을 인스턴스화하고 로그 폰트 값을 얻고 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() );
                }
            }

        }

그들은 몇 가지 잘못된 긍정, 예를 들어 윙 딩스입니다.

afaik 당신은 bcl 라이브러리만을 사용하지 못합니다. Winapi Interop을 사용해야합니다.

가장 낮은 비트 2 개를 분석해야합니다 로그 폰트.lfpitchandfamily 멤버. LFPitchandFamily의 비트 마스크로 사용할 수있는 일정한 고정 _pitch (FONT가 고정 된 넓음임을 의미합니다)가 있습니다.

다음은 유용한 기사입니다.

열거 된 글꼴

열거하는 글꼴은 약간 혼란 스러울 수 있으며, 시스템의 모든 글꼴을 열거하고 싶지 않으면 MSDN이 제안한 것보다 조금 더 어려울 수 있습니다. 이 기사는 시스템의 모든 고정 폭 글꼴을 찾기 위해 사용해야 할 단계를 정확하게 설명하고 각 개별 글꼴에 대해 가능한 모든 크기를 열거합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top