using System;
using System.Drawing;
using System.Drawing.Text;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
class FamiliesList : Form {
const int iPointSize = 12;
public static void Main() {
Application.Run(new FamiliesList());
}
public FamiliesList() {
Text = "Font Families List";
ResizeRedraw = true;
}
protected override void OnPaint(PaintEventArgs pea) {
DoPage(pea.Graphics, ForeColor, ClientSize.Width, ClientSize.Height);
}
protected void DoPage(Graphics grfx, Color clr, int cx, int cy) {
Brush brush = new SolidBrush(clr);
float x = 0, y = 0, fMaxWidth = 0;
FontCollection fc = new InstalledFontCollection();
FontFamily[] aff = fc.Families;
foreach (FontFamily ff in aff) {
Font font = CreateSampleFont(ff, iPointSize);
SizeF sizef = grfx.MeasureString(ff.Name, font);
fMaxWidth = Math.Max(fMaxWidth, sizef.Width);
}
foreach (FontFamily ff in aff) {
Font font = CreateSampleFont(ff, iPointSize);
float fHeight = font.GetHeight(grfx);
if (y > 0 && y + fHeight > cy) {
x += fMaxWidth;
y = 0;
}
grfx.DrawString(ff.Name, font, brush, x, y);
y += fHeight;
}
}
Font CreateSampleFont(FontFamily ff, float fPointSize) {
if (ff.IsStyleAvailable(FontStyle.Regular))
return new Font(ff, fPointSize);
else if (ff.IsStyleAvailable(FontStyle.Bold))
return new Font(ff, fPointSize, FontStyle.Bold);
else if (ff.IsStyleAvailable(FontStyle.Italic))
return new Font(ff, fPointSize, FontStyle.Italic);
else
return Font;
}
}