简体   繁体   English

PrivateFontCollection给我符号

[英]PrivateFontCollection giving me symbols

I am adding the font using 我正在使用添加字体

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

But when I use it for a label, it just shows up as a bunch of letters(when running). 但是,当我将其用作标签时,它只是显示为一堆字母(运行时)。 I have turned on CompatibleTextRendering. 我已经打开了CompatibleTextRendering。 I am trying to embed "Visitor". 我试图嵌入“访客”。 When I use it without embedding it, it works fine. 当我使用它而不嵌入它时,它可以正常工作。 But I want to embed it as it is not a standard font. 但我想嵌入它,因为它不是标准字体。

Edit: 编辑:

Just tried using AddFile and that works. 只是尝试使用AddFile,这是有效的。 No idea why adding it from memory is failing. 不知道为什么从内存中添加它是失败的。

Apparently AddMemoryFont does not make an additional api call that it should. 显然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();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM