2010-12-09 27 views
0

J'ajoute la police à l'aidePrivateFontCollection me donner des symboles

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

Mais quand je l'utilise pour une étiquette, il montre juste comme un tas de lettres (lors de l'exécution). J'ai activé CompatibleTextRendering. J'essaie d'intégrer "Visiteur". Quand je l'utilise sans l'intégrer, ça fonctionne bien. Mais je veux l'intégrer car ce n'est pas une police standard.

Edit:

juste essayé d'utiliser AddFile et qui fonctionne. Aucune idée pourquoi l'ajout de mémoire échoue.

Répondre

2

Apparemment, AddMemoryFont n'effectue pas d'appel API approprié.

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