VB.Net嵌入式字体在Windows XP中不工作
问题描述:
我想要一个特定的字体显示在应用程序中的某些按钮上,所以选择将其作为资源包含在项目中。VB.Net嵌入式字体在Windows XP中不工作
然后,我通过Marshal命名空间的方式将.addMemoryFont添加到新的PrivateFontCollection,然后将字体设置为我的新字体系列。
这适用于Windows Vista,Windows7和Windows 8(预览),但不适用于我的应用必须支持的Windows XP。
在XP上没有错误..字体只是不显示。
我也曾尝试嵌入字体的文件,并加载它通过一个流对象 - Assembly.GetExecutingAssembly()GetManifestResourceStream(资源)
这一切再次工作,但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
答
将嵌入字体写入临时文件,然后使用.AddFontFile可以在XP中产生更稳定的性能。感谢汉斯将我指向旧的GDI +路线。
重现问题的邮政编码和麻烦字体的链接。 – 2012-07-23 14:26:53
为什么你需要支持Windows XP。在不到17个月的时间里,它甚至不会得到微软的支持。 – 2012-07-23 14:37:47
@Hans:添加代码 – Sunrise 2012-07-23 15:06:58