protected override void OnLoad(EventArgs e)
        {
            //build list of OpenType fonts
            LOGFONT lf = new LOGFONT();

            IntPtr plogFont = Marshal.AllocHGlobal(Marshal.SizeOf(lf));

            Marshal.StructureToPtr(lf, plogFont, true);

            try
            {
                fontList.Clear();
                using (Graphics G = CreateGraphics())
                {
                    IntPtr P = G.GetHdc();
                    EnumFontFamiliesEx(P, plogFont, Callback, IntPtr.Zero, 0);
                    G.ReleaseHdc(P);
                }
            }
            finally
            {
                Marshal.DestroyStructure(plogFont, typeof(LOGFONT));
            }

            //sort fonts
            fontList.Sort((f1, f2) => f1.elfFullName.CompareTo(f2.elfFullName));
            //build combobox
            cbFont.Items.Clear();
            foreach (var item in fontList)
            {
                cbFont.Items.Add(item);
            }
        }
        public OpenTypeFontStyle(FastColoredTextBox fctb, LOGFONT font) : base(null, null, FontStyle.Regular)
        {
            this.font = font;
            //measure font
            using (var gr = fctb.CreateGraphics())
            {
                var HDC = gr.GetHdc();

                var fontHandle = CreateFontIndirect(font);
                var f          = SelectObject(HDC, fontHandle);

                var measureSize = new Size(0, 0);

                try
                {
                    GetTextExtentPoint(HDC, "M", 1, ref measureSize);
                }
                finally
                {
                    DeleteObject(SelectObject(HDC, f));
                    gr.ReleaseHdc(HDC);
                }

                fctb.CharWidth  = measureSize.Width;
                fctb.CharHeight = measureSize.Height + fctb.LineInterval;
                fctb.NeedRecalc(true, true);
            }
        }
 public static extern IntPtr CreateFontIndirect([In, MarshalAs(UnmanagedType.LPStruct)] LOGFONT lplf);