为什么Winforms中没有使用我的字体?

lnlaulya  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(153)

我一直试图开发一个小应用程序作为学习经验,但我一直无法找到这个问题的问题。我一直试图加载一个字体(Roboto Medium)写入内存,以便计算机正确显示文本。但由于某些原因,这段代码似乎没有做到这一点。我在资源管理器中的所有文本都选择了roboto-medium TrueType字体,我已经确保字体是嵌入的,并且在执行InitializeComponent()方法之前调用了LoadFont()方法。为什么会发生这种情况?

namespace exampleNamespace
{
    // Class used for main design system
    public partial class Design
    {

        // Private font collection variable for roboto medium font
        public PrivateFontCollection pfc = new PrivateFontCollection();

        // Loads font into memory from Form.cs
        public void LoadFont()
        {
            int fontLength = Properties.Resources.roboto_medium.Length;
            byte[] fontdata = Properties.Resources.roboto_medium;
            IntPtr data = Marshal.AllocCoTaskMem(fontLength);
            Marshal.Copy(fontdata, 0, data, fontLength);
            pfc.AddMemoryFont(data, fontLength);
        }
    }
zte4gxcn

zte4gxcn1#

也许您需要使用Application.SetCompatibleTextRenderingDefault设置true
文档中说对于内存字体,
若要使用内存字体,必须使用GDI+呈现控件上的文本。使用SetCompatibleTextRenderingDefault方法并传递true,可在应用程序上设置GDI+呈现
https://learn.microsoft.com/en-us/dotnet/api/system.drawing.text.privatefontcollection.addmemoryfont?view=windowsdesktop-5.0#System_Drawing_Text_PrivateFontCollection_AddMemoryFont_System_IntPtr_System_Int32_
下面的链接说明了如何在主函数中进行设置。默认为false,请将其更改为true
https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.application.setcompatibletextrenderingdefault?view=windowsdesktop-5.0

fnatzsnv

fnatzsnv2#

在Visual C# 2005或更新版本中,会在Program.cs档案中自动产生SetCompatibleTextRenderingDefault的呼叫。若要变更文字转译预设值,请将产生的程式码修改为true

Application.SetCompatibleTextRenderingDefault(true);

UseCompatibleTextRendering属性用于在使用TextRenderer类呈现文本的Windows窗体控件与使用Graphics类执行自定义文本呈现的.NET Framework 1.0和.NET Framework 1.1应用程序之间提供视觉兼容性。在大多数情况下,如果应用程序不是从.NET Framework 1.0或.NET Framework 1.1升级的,建议您将UseCompatibleTextRendering设置为默认值false。

相关问题