2009-12-23 8 views
8

J'intègre une police dans EmbeddedResource dans mon application et je souhaite l'utiliser dans une zone de texte. L'aide AddMemoryFont indique que je dois définir le rendu de texte compatible sur true pour utiliser GDI + afin que ma police puisse être utilisée, mais d'une manière ou d'une autre, elle n'affiche pas la bonne police.C#: Utilisation d'une police incorporée dans une zone de texte

dans Program.cs Je déclare explicitement: Application.SetCompatibleTextRenderingDefault (true);

Alors pourquoi ça ne marche pas? Quelqu'un a une idée?

Répondre

19

D'accord, je l'ai compris grâce aux interwebs et Google.

Pour référence ultérieure, si quelqu'un a ce problème, le correctif est: après avoir obtenu votre police intégrée comme un flux, et avant d'appeler AddMemoryFont, vous devez appeler AddFontMemResourceEx! (Non disponible en C#, donc vous devez l'importer:

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

puis:.

  //create an unsafe memory block for the data 
     System.IntPtr data = Marshal.AllocCoTaskMem((int)fontStream.Length); 
     //create a buffer to read in to 
     Byte[] fontData = new Byte[fontStream.Length]; 
     //fetch the font program from the resource 
     fontStream.Read(fontData, 0, (int)fontStream.Length); 
     //copy the bytes to the unsafe memory block 
     Marshal.Copy(fontData, 0, data, (int)fontStream.Length); 

     // We HAVE to do this to register the font to the system (Weird .NET bug !) 
     uint cFonts = 0; 
     AddFontMemResourceEx(data, (uint)fontData.Length, IntPtr.Zero, ref cFonts); 

     //pass the font to the font collection 
     mFontCollection.AddMemoryFont(data, (int)fontStream.Length); 
     //close the resource stream 
     fontStream.Close(); 
     //free the unsafe memory 
     Marshal.FreeCoTaskMem(data); 

Et presto, vous serez en mesure d'utiliser la police Sans AddFontMemResourceEx il ne fonctionnera pas

+0

+1 utile de savoir que, grâce, Led – BillW

+0

Saint crabe Je me suis cogné la tête contre le mur pendant des heures, merci! – Mike

+0

D'où vient "fontStream" d'ici? –