PrivateFontCollection给我符号

时间:2010-12-09 02:48:28

标签: c# winforms

我正在使用

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

但是当我将它用作标签时,它只会显示为一堆字母(运行时)。我打开了CompatibleTextRendering。我试图嵌入“访客”。当我使用它而不嵌入它,它工作正常。但我想嵌入它,因为它不是标准字体。

编辑:

刚尝试使用AddFile,这有效。不知道为什么从内存中添加它会失败。

1 个答案:

答案 0 :(得分:2)

显然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();