当前位置:  开发笔记 > 编程语言 > 正文

在C#windows.Form中使用的自定义.ttf字体

如何解决《在C#windows.Form中使用的自定义.ttf字体》经验,为你挑选了1个好方法。

如何使用我当前的windows.forms应用程序中的自定义.tff字体文件?我读了一些我用它作为嵌入式资源的地方,但是如何设置System.Drawing.Font类型呢?



1> Ash..:

本文:如何嵌入真正的字体显示如何在.NET中执行您的要求.

如何嵌入True Type字体

由于美观或所需视觉样式的原因,某些应用程序将嵌入某些不常见的字体,以便在需要时始终存在,无论字体是否实际安装在目标系统上.

这个秘诀是双重的.首先,需要将字体添加到解决方案中并将其标记为嵌入资源,从而将字体放入资源中.其次,在运行时,字体通过流加载并存储在PrivateFontCollection对象中供以后使用.

此示例使用的字体不太可能安装在您的系统上.Alpha Dance是一款免费的True Type字体,可从Free Fonts Collection中获得.通过将此字体添加到解决方案并在属性中选择"嵌入资源"构建操作,将此字体嵌入到应用程序中.

图1.解决方案中嵌入的Alpha Dance字体文件.

一旦文件成功包含在资源中,您需要提供一个PrivateFontCollection对象来存储它,以及将它加载到集合中的方法.执行此操作的最佳位置可能是表单加载覆盖或事件处理程序.以下清单显示了该过程.请注意如何使用AddMemoryFont方法.它需要一个指向内存的指针,其中字体保存为字节数组.在C#中,我们可以使用unsafe关键字来获得方便性,但VB必须使用Marshal类非托管内存处理的功能.后一种选择当然对那些不喜欢unsafe关键字的C#程序员开放.PrivateFontCollection pfc = new PrivateFontCollection();

private void Form1_Load(object sender, System.EventArgs e)
{
  Stream fontStream = this.GetType().Assembly.GetManifestResourceStream("embedfont.Alphd___.ttf");

  byte[] fontdata = new byte[fontStream.Length];
  fontStream.Read(fontdata,0,(int)fontStream.Length);
  fontStream.Close();
  unsafe
  {
    fixed(byte * pFontData = fontdata)
    {
      pfc.AddMemoryFont((System.IntPtr)pFontData,fontdata.Length);
    }
  }
}

字体可能只有某些可用的样式,不幸的是,选择不存在的字体样式会引发异常.为了克服这个问题,可以询问字体以查看哪些样式可用,并且只能使用字体提供的样式.下面的清单演示了如何使用Alpha Dance字体来检查可用的字体样式并显示所有存在的字体样式.请注意,下划线和删除线样式是由字体呈现引擎构造的伪样式,实际上并不以字形形式提供.

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
  bool bold=false;
  bool regular=false;
  bool italic=false;

  e.Graphics.PageUnit=GraphicsUnit.Point;
  SolidBrush b = new SolidBrush(Color.Black);

  float y=5;

  System.Drawing.Font fn;

  foreach(FontFamily ff in pfc.Families)
  {
    if(ff.IsStyleAvailable(FontStyle.Regular))
    {
      regular=true;
      fn=new Font(ff,18,FontStyle.Regular);
      e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
      fn.Dispose();
      y+=20;
    }
    if(ff.IsStyleAvailable(FontStyle.Bold))
    {
      bold=true;
      fn=new Font(ff,18,FontStyle.Bold);
      e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
      fn.Dispose();
      y+=20;
    }
    if(ff.IsStyleAvailable(FontStyle.Italic))
    {
      italic=true;
      fn=new Font(ff,18,FontStyle.Italic);
      e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
      fn.Dispose();
      y+=20;
    }
    if(bold  && italic)
    {
      fn=new Font(ff,18,FontStyle.Bold | FontStyle.Italic);
      e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
      fn.Dispose();
      y+=20;
    }
    fn=new Font(ff,18,FontStyle.Underline);
    e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
    fn.Dispose();
    y+=20;
    fn=new Font(ff,18,FontStyle.Strikeout);
    e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
    fn.Dispose();
  }

  b.Dispose();
}

图2显示了应用程序的运行情况.

图2.嵌入的Alpha Dance字体.

请参阅Form1_Paint事件处理程序,它具体显示如何设置System.Drawing.Font类型.它基于使用System.Drawing.Text.PrivateFontCollection类.

希望这可以帮助.


请编辑你的答案.链接已经死了.
推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有