桌面應用程式使用內嵌字型 Windows Forms 篇

  • 138
  • 0
  • 2020-05-18

我們有時會希望在應用程式中使用非作業系統預設的字型,而又不希望另外安裝,這時可以把字型檔嵌入到應用程式中使用,也不須煩惱這個字型的安裝問題。

SkillTree 決戰設計模式 第8梯決戰設計模式 第8梯 招生中 即將截止

準備工作

(1) 當然是要先下載字型,這邊使用思源黑體作為範例。(使用任何第三方字型前,請先確認其授權使用範圍)

(2) 將字體加入到專案的 Propertites 下的 Resources.resx

(3) 加入完成後的畫面

(4) 接著建立一個工具程式,主要功能為載入字型與作為這些字型被外界使用的公開介面。

  public sealed class FontsProxy
  {

      private FontsProxy() { }

      private PrivateFontCollection CreateFonts()
      {
          var result = new PrivateFontCollection();
          var bytes = Properties.Resources.SourceHanSansTW_Bold;
          System.IntPtr pointer = Marshal.AllocCoTaskMem(bytes.Length);
          Marshal.Copy(bytes, 0, pointer, bytes.Length);
          result.AddMemoryFont(pointer, bytes.Length);
          return result;
      }

      private static PrivateFontCollection _fontsCollection;

      public static FontFamily[] Fonts
      {
          get
          {
              if (_fontsCollection == null)
              {
                  _fontsCollection = new FontsProxy().CreateFonts();
              }
              return _fontsCollection.Families;
          }
      }
  }

(5) 控制項要使用自訂字型,必須將其 UseCompatibleTextRendering 屬性設定為 True。

(6) 接著要設定控制項的字型屬性,假設我們要應用在 Form1 上所有的控制項,就簡單設定給 Form1.Font 屬性即可,當然,你也可以個別控制項設定。

 public partial class Form1 : Form
 {
     public Form1()
     {
         InitializeComponent();
         this.Font = new Font(FontsProxy.Fonts[0], 15);
     }
 }

這樣就大功告成,範例圖片如下:

範例程式可點選此處