0

已将 TrueType 字体添加到我的项目资源(“MyFontResource”)中,并将构建操作设置为“资源”。我的意图是用这个资源替换 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 回答