c# 如何调用EnumFontFamiliesEx 初学c#,不清楚怎么调用这个API函数,给段代码参考下,谢谢了画面上有个combox(Name = cmbFont),把EnumFontFamiliesEx函数返回的字体设成他的下拉选项,实现这一步就行了可以的话麻烦加上简单的注释,再次感谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不用API,已经封装在System.Drawing.FontFamily类里了.这个类有一个静态的GetFamilies函数.它返回一个包含所有可用的FontFamily的数组.接下来该咋做LZ应该知道了吧:) 这个只能返回系统自带的字体,我需要的字体System.Drawing.FontFamily里面没有,所有才想到用这个。我要写一个条码打印的,装完打印驱动以后,条码字体要用Intetmec 128,在word里可以找到,但是C#那个类里没有办法取到,所以要想办法取到系统所有安装过的字体,如果有更好的解决办法也欢迎给出,谢谢楼上那位 是这样啊...我这里只装了.net的SDK,查不到EnumFontFamiliesEx的原型所以写不了咯.LZ可以参考.net Framework SDK\高级开发技术\互操作性\与非托管代码交互操作\使用非托管 DLL 函数下的例子调用这个API.记得事先导入System.Runtime.InteropServices命名空间.不过我估计能达到你目的的效果不大,因为GDI+也是对GDI函数的封装和扩充;System.Drawing.FontFamily.GetFamilies很可能就是这条函数的封装:) 我在下载频道,有个源码,可搜索下,具体代码直接贴把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 }} 非常感激zxkid及楼上各位朋友,结贴。 精确定时 asp.net如何获取【网站用户登录的外网IP和IP所在区域】 一个小问题 多线程同时下载5个文件时,下载的那段代码里使用了全局变量 的问题!! 各位求助 为什么导出数据库成外界EXCEL会出错 谢谢了 C# comboBox中实现累加 请教高手.错误不会改!请教! 祝贺论坛补了我10天的登陆分100分!散10分祝贺!哈哈!开心啊! 想了解关于多线程下的异步处理方法,请各位指教! 这个语句应该怎么写?用C#写的在SQLserver中的插入语句(insert),插入“货币”和“时间/日期”型的,一定给分! 怎样用面向对象的观点设计人事管理及教育培训系统 C#基础问题 50分请教
这个类有一个静态的GetFamilies函数.
它返回一个包含所有可用的FontFamily的数组.
接下来该咋做LZ应该知道了吧:)
我要写一个条码打印的,装完打印驱动以后,条码字体要用Intetmec 128,在word里可以找到,但是C#那个类里没有办法取到,所以要想办法取到系统所有安装过的字体,如果有更好的解决办法也欢迎给出,谢谢楼上那位
我这里只装了.net的SDK,查不到EnumFontFamiliesEx的原型所以写不了咯.
LZ可以参考.net Framework SDK\高级开发技术\互操作性\与非托管代码交互操作\使用非托管 DLL 函数
下的例子调用这个API.记得事先导入System.Runtime.InteropServices命名空间.不过我估计能达到你目的的效果不大,因为GDI+也是对GDI函数的封装和扩充;
System.Drawing.FontFamily.GetFamilies很可能就是这条函数的封装:)
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 }
}