初学c#,不清楚怎么调用这个API函数,给段代码参考下,谢谢了
画面上有个combox(Name = cmbFont),把EnumFontFamiliesEx函数返回的字体设成他的下拉选项,实现这一步就行了
可以的话麻烦加上简单的注释,再次感谢。

解决方案 »

  1.   

    不用API,已经封装在System.Drawing.FontFamily类里了.
    这个类有一个静态的GetFamilies函数.
    它返回一个包含所有可用的FontFamily的数组.
    接下来该咋做LZ应该知道了吧:)
      

  2.   

    这个只能返回系统自带的字体,我需要的字体System.Drawing.FontFamily里面没有,所有才想到用这个。
    我要写一个条码打印的,装完打印驱动以后,条码字体要用Intetmec 128,在word里可以找到,但是C#那个类里没有办法取到,所以要想办法取到系统所有安装过的字体,如果有更好的解决办法也欢迎给出,谢谢楼上那位
      

  3.   

    是这样啊...
    我这里只装了.net的SDK,查不到EnumFontFamiliesEx的原型所以写不了咯.
    LZ可以参考.net Framework SDK\高级开发技术\互操作性\与非托管代码交互操作\使用非托管 DLL 函数
    下的例子调用这个API.记得事先导入System.Runtime.InteropServices命名空间.不过我估计能达到你目的的效果不大,因为GDI+也是对GDI函数的封装和扩充;
    System.Drawing.FontFamily.GetFamilies很可能就是这条函数的封装:)
      

  4.   

    我在下载频道,有个源码,可搜索下,具体代码直接贴把
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    using System.Drawing.Text;namespace GetFontsAPI
    {
        public partial class Form1 : Form
        {
            #region API声明
            [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
            public class LogFont
            {
                public int lfHeight;
                public int lfWidth;
                public int lfEscapement;
                public int lfOrientation;
                public FontWeight lfWeight;
                [MarshalAs(UnmanagedType.U1)]
                public bool lfItalic;
                [MarshalAs(UnmanagedType.U1)]
                public bool lfUnderline;
                [MarshalAs(UnmanagedType.U1)]
                public bool lfStrikeOut;
                public FontCharSet lfCharSet;
                public FontPrecision lfOutPrecision;
                public FontClipPrecision lfClipPrecision;
                public FontQuality lfQuality;
                public FontPitchAndFamily lfPitchAndFamily;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
                public string lfFaceName;
            }
            public enum FontWeight : int
            {
                FW_DONTCARE = 0,
                FW_THIN = 100,
                FW_EXTRALIGHT = 200,
                FW_LIGHT = 300,
                FW_NORMAL = 400,
                FW_MEDIUM = 500,
                FW_SEMIBOLD = 600,
                FW_BOLD = 700,
                FW_EXTRABOLD = 800,
                FW_HEAVY = 900,
            }
            public enum FontCharSet : byte
            {
                ANSI_CHARSET = 0,
                DEFAULT_CHARSET = 1,
                SYMBOL_CHARSET = 2,
                SHIFTJIS_CHARSET = 128,
                HANGEUL_CHARSET = 129,
                HANGUL_CHARSET = 129,
                GB2312_CHARSET = 134,
                CHINESEBIG5_CHARSET = 136,
                OEM_CHARSET = 255,
                JOHAB_CHARSET = 130,
                HEBREW_CHARSET = 177,
                ARABIC_CHARSET = 178,
                GREEK_CHARSET = 161,
                TURKISH_CHARSET = 162,
                VIETNAMESE_CHARSET = 163,
                THAI_CHARSET = 222,
                EASTEUROPE_CHARSET = 238,
                RUSSIAN_CHARSET = 204,
                MAC_CHARSET = 77,
                BALTIC_CHARSET = 186,
            }
            public enum FontPrecision : byte
            {
                OUT_DEFAULT_PRECIS = 0,
                OUT_STRING_PRECIS = 1,
                OUT_CHARACTER_PRECIS = 2,
                OUT_STROKE_PRECIS = 3,
                OUT_TT_PRECIS = 4,
                OUT_DEVICE_PRECIS = 5,
                OUT_RASTER_PRECIS = 6,
                OUT_TT_ONLY_PRECIS = 7,
                OUT_OUTLINE_PRECIS = 8,
                OUT_SCREEN_OUTLINE_PRECIS = 9,
                OUT_PS_ONLY_PRECIS = 10,
            }
            public enum FontClipPrecision : byte
            {
                CLIP_DEFAULT_PRECIS = 0,
                CLIP_CHARACTER_PRECIS = 1,
                CLIP_STROKE_PRECIS = 2,
                CLIP_MASK = 0xf,
                CLIP_LH_ANGLES = (1 << 4),
                CLIP_TT_ALWAYS = (2 << 4),
                CLIP_DFA_DISABLE = (4 << 4),
                CLIP_EMBEDDED = (8 << 4),
            }
            public enum FontQuality : byte
            {
                DEFAULT_QUALITY = 0,
                DRAFT_QUALITY = 1,
                PROOF_QUALITY = 2,
                NONANTIALIASED_QUALITY = 3,
                ANTIALIASED_QUALITY = 4,
                CLEARTYPE_QUALITY = 5,
                CLEARTYPE_NATURAL_QUALITY = 6,
            }
            [Flags]
            public enum FontPitchAndFamily : byte
            {
                DEFAULT_PITCH = 0,
                FIXED_PITCH = 1,
                VARIABLE_PITCH = 2,
                FF_DONTCARE = (0 << 4),
                FF_ROMAN = (1 << 4),
                FF_SWISS = (2 << 4),
                FF_MODERN = (3 << 4),
                FF_SCRIPT = (4 << 4),
                FF_DECORATIVE = (5 << 4),
            }        public const int LF_FACESIZE = 32;        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
            public struct EnumLogFontEx
            {
                public LogFont elfLogFont;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = LF_FACESIZE)]
                public string elfFullName;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = LF_FACESIZE)]
                public string elfStyle;
                [MarshalAs(UnmanagedType.ByValTStr, SizeConst = LF_FACESIZE)]
                public string elfScript;
            }        delegate int EnumFontExDelegate(ref EnumLogFontEx lpelfe, IntPtr lpntme, int FontType, int lParam);        [DllImport("gdi32.dll", EntryPoint = "EnumFontFamiliesEx", CharSet = CharSet.Unicode)]
            static extern int EnumFontFamiliesEx(IntPtr hDC, [In, MarshalAs(UnmanagedType.LPStruct)] LogFont logFont, EnumFontExDelegate enumFontExCallback,
                IntPtr lParam, uint dwFlags);        #endregion        public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                #region 通过API得到字体列表
                Bitmap bmp = new Bitmap(10, 10);
                Graphics g = Graphics.FromImage(bmp);            IntPtr hDC = g.GetHdc();
                LogFont logFont = new LogFont();
                logFont.lfCharSet = FontCharSet.DEFAULT_CHARSET;            //EnumFontExDelegate callbackProc = new EnumFontExDelegate(enumFontEx);
                int intResult = EnumFontFamiliesEx(hDC, logFont, enumFontEx, IntPtr.Zero, 0);
                g.ReleaseHdc(hDC);
                g.Dispose();
                bmp.Dispose();
                #endregion
                #region VS2005内置的字体列表
                InstalledFontCollection fontCollection = new InstalledFontCollection();
                foreach (FontFamily fontFamily in fontCollection.Families)
                {
                    this.comboBox2.Items.Add(fontFamily.Name);
                }
                #endregion
            }
            #region 枚举字体回调函数
            int enumFontEx(ref EnumLogFontEx lpelfe, IntPtr lpntme, int FontType, int lParam)
            {
                if (this.comboBox1.Items.Contains(lpelfe.elfFullName) == false)
                    this.comboBox1.Items.Add(lpelfe.elfFullName);
                return 1;
            }
            #endregion    }
    }
      

  5.   

    非常感激zxkid及楼上各位朋友,结贴。