How to programmatically install a font

后端 未结 3 1819
無奈伤痛
無奈伤痛 2020-12-11 23:34

I would like to install a specific font on my program load and use that font in rendering text of the program. How can I programmatically install a font from .NET CF on WinC

相关标签:
3条回答
  • 2020-12-11 23:44

    This blog entry shows how to enumerate and add Fonts in Windows CE using native code. For managed code, this will work:

    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;
        }
    }
    
    0 讨论(0)
  • 2020-12-12 00:01

    Copy font *.ttf file to Windows\Fonts folder, it may requires restarting your device.

    0 讨论(0)
  • 2020-12-12 00:03

    Actually, this helps better.

    http://social.msdn.microsoft.com/Forums/en/netfxcompact/thread/ee9a6947-0799-4a76-a7cd-c0bec4b7a2ab

    0 讨论(0)
提交回复
热议问题