【问题标题】:How to programmatically install a font如何以编程方式安装字体
【发布时间】:2010-06-23 19:41:36
【问题描述】:

我想在我的程序加载时安装一个特定的字体,并使用该字体来渲染程序的文本。如何在 WinCE 6 上以编程方式从 .NET CF 安装字体。

【问题讨论】:

    标签: c# winapi compact-framework fonts windows-ce


    【解决方案1】:

    This blog entry 展示了如何使用本机代码在 Windows CE 中枚举和添加字体。对于托管代码,这将起作用:

    internal class FontHelper
    {
        private delegate int EnumFontFamProc(IntPtr lpelf, IntPtr lpntm, uint FontType, IntPtr lParam);
        private List<string> m_fonts = new List<string>();
    
        public FontHelper()
        {
            RefreshFontList();
        }
    
        public void RefreshFontList()
        {
            m_fonts.Clear();
    
            var dc = GetDC(IntPtr.Zero);
            var d = new EnumFontFamProc(EnumFontCallback);
            var ptr = Marshal.GetFunctionPointerForDelegate(d);
            EnumFontFamilies(dc, null, ptr, IntPtr.Zero);
        }
    
        public string[] SupportedFonts
        {
            get { return m_fonts.ToArray(); }
        }
    
        private const int SIZEOF_LOGFONT = 92;
        private const int LOGFONT = 28;
        private const int LF_FACESIZE = 32;
        private const int LF_FULLFACESIZE = 64;
    
        [DllImport("coredll", SetLastError = true)]
        private static extern IntPtr GetDC(IntPtr hwnd);
    
        [DllImport("coredll", SetLastError = true)]
        private static extern int EnumFontFamilies(IntPtr hdc, string lpszFamily, IntPtr lpEnumFontFamProc, IntPtr lParam);
    
        private int EnumFontCallback(IntPtr lpelf, IntPtr lpntm, uint FontType, IntPtr lParam)
        {
            var data = new byte[SIZEOF_LOGFONT + LF_FACESIZE + LF_FULLFACESIZE];
    
            Marshal.Copy(lpelf, data, 0, data.Length);
            var fontName = Encoding.Unicode.GetString(data, SIZEOF_LOGFONT, LF_FULLFACESIZE).TrimEnd('\0');
            Debug.WriteLine(fontName);
            m_fonts.Add(fontName);
    
            return 1;
        }
    }
    

    【讨论】:

      【解决方案2】:

      将字体 *.ttf 文件复制到 Windows\Fonts 文件夹,这可能需要重新启动您的设备。

      【讨论】:

      • 我无法重启设备,重启后恢复到原始状态。所以,每次我的程序启动时,我都必须安装字体。另外,没有 Windows\Font 文件夹。还有什么办法吗?
      【解决方案3】:
      猜你喜欢
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多