1

アプリケーションの特定のボタンに特定のフォントを表示したいので、それをリソースとしてプロジェクトに含めることにしました。

次に、Marshal 名前空間を使用して .addMemoryFont を新しい PrivateFontCollection に追加し、フォントを新しいフォント ファミリに設定します。

これは、Windows Vista、Windows7、および Windows 8 (プレビュー) では機能しますが、アプリがサポートする必要がある Windows XP では機能しません。

XPにはエラーはありません..フォントが表示されないだけです。

また、フォントをファイルとして埋め込み、ストリームオブジェクトを介してロードしようとしました - Assembly.GetExecutingAssembly().GetManifestResourceStream(resource)

これもXP以外のすべてで機能しますが、何か考えはありますか? ありがとう

リソースをロードする関数は次のとおりです。 このテストでは、AVP と呼ばれるリソースとして AVP.TTF (広く利用可能、非商用) を追加しました。

クライアントで 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
4

1 に答える 1

0

埋め込みフォントを一時ファイルに書き込んでから .AddFontFile を使用すると、XP でのパフォーマンスがより安定します。古い GDI+ ルートを教えてくれた Hans に感謝します。

于 2012-07-24T09:37:00.280 に答える