Windows Forms: не удается правильно отобразить ресурс шрифта - PullRequest
0 голосов
/ 16 декабря 2010

добавил шрифт TrueType к ресурсам моего проекта («MyFontResource»), и я установил действие сборки «Resource». Я собираюсь заменить шрифт объекта Label этим ресурсом.

Вот мой код:

PrivateFontCollection myFonts = new PrivateFontCollection();
unsafe {
    fixed (byte* fontBytes = Properties.Resources.MyFontResource)
        myFonts.AddMemoryFont((IntPtr)fontBytes, Properties.Resources.MyFontResource.Length);
}
myLabel.Font = new Font(myFonts.Families[0], 10f);

Шрифт отображается как положено, только если у меня установлен шрифт локально. Если я не установил шрифт, я вижу шрифт, изначально назначенный myLabel, в моем проекте на C #.

Что теперь?

1 Ответ

3 голосов
/ 16 декабря 2010

Неважно, нашел причину, по которой это не работает здесь .

Вот решение, которое работает (оригинальный код здесь ):

class MyClass {
    [DllImport("gdi32.dll")]
    private static extern IntPtr AddFontMemResourceEx(IntPtr pbFont, uint cbFont, IntPtr pdv, [In] ref uint pcFonts);

    public MyClass() {
        uint installCount = 1;
        PrivateFontCollection myFonts = new PrivateFontCollection();
        unsafe {
            fixed (byte* pFontData = Properties.Resources.MyFont) {
                myFonts.AddMemoryFont((IntPtr)pFontData, Properties.Resources.MyFont.Length);
                AddFontMemResourceEx((IntPtr)pFontData, (uint)Properties.Resources.MyFont.Length, IntPtr.Zero, ref installCount);
            }
        }
        myLabel.Font = new Font(myFonts.Families[0], 20f);
    }
}
...