0

TrueType フォントをプロジェクト リソース ("MyFontResource") に追加し、ビルド アクションを "Resource" に設定しました。私の意図は、Label オブジェクトのフォントをこのリソースに置き換えることです。

これが私のコードです:

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

フォントがローカルにインストールされている場合にのみ、フォントが期待どおりに表示されます。フォントをインストールしていない場合は、C# プロジェクトの myLabel に最初に割り当てられたフォントが表示されます。

それで?

4

1 に答える 1

3

気にしないで、これがうまくいかない理由をここで見つけまし

これが機能するソリューションです(元のコードはこちら):

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);
    }
}
于 2010-12-16T20:51:08.110 に答える