VB.Net嵌入式字体在Windows XP中不起作用

时间:2012-07-23 14:21:46

标签: .net vb.net fonts embedded-resource

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

然后我通过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

1 个答案:

答案 0 :(得分:0)

将嵌入字体写入临时文件然后使用.AddFontFile可以在XP中实现更稳定的性能。谢谢汉斯指出我的旧GDI +路线。

相关问题