我希望在应用程序中的某些按钮上显示特定字体,因此选择将其作为资源包含在项目中。
然后我通过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
答案 0 :(得分:0)
将嵌入字体写入临时文件然后使用.AddFontFile可以在XP中实现更稳定的性能。谢谢汉斯指出我的旧GDI +路线。