1

我希望在应用程序的某些按钮上显示特定字体,因此选择将其作为资源包含在项目中。

然后,我通过 Marshal 命名空间将 .addMemoryFont 添加到新的 PrivateFontCollection,然后将字体设置为我的新字体系列。

这适用于 Windows Vista、Windows7 和 Windows 8(预览版),但不适用于我的应用程序必须支持的 Windows XP。

XP上没有错误..字体只是不显示。

我还尝试将字体嵌入为文件并通过流对象加载它-Assembly.GetExecutingAssembly().GetManifestResourceStream(resource)

这再次适用于除 XP 之外的所有设备,有什么想法吗?谢谢

这是我加载资源的函数: 对于这个测试,我添加了 AVP.TTF(广泛可用,非商业)作为称为 AVP 的资源。

我在客户端使用 button.Font = LoadFontResource(9.75, FontStyle.Regular) 。

Public Function LoadFontResource(ByVal Size As Single, ByVal style As FontStyle) As Font
    _fontsResource = New PrivateFontCollection
    Dim fontMemPointer As IntPtr = Marshal.AllocCoTaskMem(My.Resources.AVP.Length)
    Marshal.Copy(My.Resources.AVP, 0, fontMemPointer, My.Resources.AVP.Length)
    _fontsResource.AddMemoryFont(fontMemPointer, My.Resources.AVP.Length)
    Marshal.FreeCoTaskMem(fontMemPointer)
    Return New Font(_fontsResource.Families(0), Size, style)
End Function
4

1 回答 1

0

将嵌入字体写入临时文件,然后使用 .AddFontFile 可以在 XP 中获得更稳定的性能。感谢 Hans 为我指出了旧的 GDI+ 路线。

于 2012-07-24T09:37:00.280 回答