2010-12-09 34 views
0

我加入使用PrivateFontCollection给我的符号

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

字体但是,当我使用它的一个标签,它只是显示为一串字母(运行时)。我已打开CompatibleTextRendering。我试图嵌入“访问者”。当我没有嵌入它时使用它,它工作正常。但我想嵌入它,因为它不是一个标准的字体。

编辑:

只需使用AddFile和工作的尝试。不知道为什么从内存中添加它失败。

回答

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