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 
+0

重现问题的邮政编码和麻烦字体的链接。 – 2012-07-23 14:26:53

+0

为什么你需要支持Windows XP。在不到17个月的时间里,它甚至不会得到微软的支持。 – 2012-07-23 14:37:47

+0

@Hans:添加代码 – Sunrise 2012-07-23 15:06:58

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