我希望在应用程序的某些按钮上显示特定字体,因此选择将其作为资源包含在项目中。
然后,我通过 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