2010-12-16 6 views
0

Ich habe meinen Projektressourcen eine TrueType-Schriftart hinzugefügt ("MyFontResource"), und ich habe die Build-Aktion auf "Ressource" gesetzt. Meine Absicht ist, die Schriftart auf einem Label-Objekt durch diese Ressource zu ersetzen.Windows Forms: Font-Ressource kann nicht korrekt angezeigt werden

Hier ist mein Code:

PrivateFontCollection myFonts = new PrivateFontCollection(); 
unsafe { 
    fixed (byte* fontBytes = Properties.Resources.MyFontResource) 
     myFonts.AddMemoryFont((IntPtr)fontBytes, Properties.Resources.MyFontResource.Length); 
} 
myLabel.Font = new Font(myFonts.Families[0], 10f); 

Die Schrift zeigt, wie nur dann zu erwarten, wenn ich die Schrift lokal installiert haben. Wenn ich die Schriftart nicht installiert habe, sehe ich die Schriftart, die ursprünglich myLabel in meinem C# -Projekt zugewiesen wurde.

Was nun?

Antwort

3

Macht nichts, fand den Grund dafür, dass dies nicht funktioniert here.

Hier ist eine Lösung, die (ursprüngliche Code here) funktioniert:

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

    public MyClass() { 
     uint installCount = 1; 
     PrivateFontCollection myFonts = new PrivateFontCollection(); 
     unsafe { 
      fixed (byte* pFontData = Properties.Resources.MyFont) { 
       myFonts.AddMemoryFont((IntPtr)pFontData, Properties.Resources.MyFont.Length); 
       AddFontMemResourceEx((IntPtr)pFontData, (uint)Properties.Resources.MyFont.Length, IntPtr.Zero, ref installCount); 
      } 
     } 
     myLabel.Font = new Font(myFonts.Families[0], 20f); 
    } 
} 
+0

vertraut aussieht. –

+0

Danke, Ihr Code hat mich davor bewahrt, sich VB merken zu müssen. –

Verwandte Themen