PrivateFontCollection дает мне символы - PullRequest
0 голосов
/ 09 декабря 2010

Я добавляю шрифт, используя

GCHandle pinnedArray = GCHandle.Alloc(data, GCHandleType.Pinned);
IntPtr pointer = pinnedArray.AddrOfPinnedObject();
CustomFonts.Fonts.AddMemoryFont(pointer, data.Length);
pinnedArray.Free();

Но когда я использую его для метки, он просто отображается как набор букв (при запуске).Я включил CompatibleTextRendering.Я пытаюсь встроить "Посетитель".Когда я использую его без встраивания, он работает нормально.Но я хочу встроить его, поскольку он не является стандартным шрифтом.

Редактировать:

Только что попробовал использовать AddFile, и это работает.Не знаю, почему добавить его из памяти не удается.

1 Ответ

2 голосов
/ 09 декабря 2010

Очевидно, что AddMemoryFont не делает дополнительного вызова API, как это должно быть.

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

GCHandle pinnedArray = GCHandle.Alloc(data, GCHandleType.Pinned);
IntPtr pointer = pinnedArray.AddrOfPinnedObject();
CustomFonts.Fonts.AddMemoryFont(pointer, data.Length);
uint dummy = 0;
AddFontMemResourceEx((IntPtr)pointer, (uint)data.Length, IntPtr.Zero, ref dummy);
pinnedArray.Free();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...