Font Metrics
/*
GDI+ Programming in C# and VB .NET
by Nick Symmonds
Publisher: Apress
ISBN: 159059035X
*/
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace FontMetrics_c
{
/// <summary>
/// Summary description for FontMetrics.
/// </summary>
public class FontMetrics : System.Windows.Forms.Form
{
private System.Windows.Forms.Button cmdRoman;
private System.Windows.Forms.Button cmdArial;
private System.Windows.Forms.Button cmdComic;
private System.Windows.Forms.Button cmdCourier;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public FontMetrics()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.cmdRoman = new System.Windows.Forms.Button();
this.cmdArial = new System.Windows.Forms.Button();
this.cmdComic = new System.Windows.Forms.Button();
this.cmdCourier = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// cmdRoman
//
this.cmdRoman.Location = new System.Drawing.Point(8, 240);
this.cmdRoman.Name = "cmdRoman";
this.cmdRoman.Size = new System.Drawing.Size(104, 24);
this.cmdRoman.TabIndex = 0;
this.cmdRoman.Text = "Times Roman";
this.cmdRoman.Click += new System.EventHandler(this.cmdRoman_Click);
//
// cmdArial
//
this.cmdArial.Location = new System.Drawing.Point(128, 240);
this.cmdArial.Name = "cmdArial";
this.cmdArial.Size = new System.Drawing.Size(104, 24);
this.cmdArial.TabIndex = 1;
this.cmdArial.Text = "Arial Black";
this.cmdArial.Click += new System.EventHandler(this.cmdArial_Click);
//
// cmdComic
//
this.cmdComic.Location = new System.Drawing.Point(248, 240);
this.cmdComic.Name = "cmdComic";
this.cmdComic.Size = new System.Drawing.Size(104, 24);
this.cmdComic.TabIndex = 2;
this.cmdComic.Text = "Comic Sans MS";
this.cmdComic.Click += new System.EventHandler(this.cmdComic_Click);
//
// cmdCourier
//
this.cmdCourier.Location = new System.Drawing.Point(368, 240);
this.cmdCourier.Name = "cmdCourier";
this.cmdCourier.Size = new System.Drawing.Size(104, 24);
this.cmdCourier.TabIndex = 3;
this.cmdCourier.Text = "Courier New";
this.cmdCourier.Click += new System.EventHandler(this.cmdCourier_Click);
//
// FontMetrics
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(492, 273);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.cmdCourier,
this.cmdComic,
this.cmdArial,
this.cmdRoman});
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "FontMetrics";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "FontMetrics";
this.Load += new System.EventHandler(this.FontMetrics_Load);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new FontMetrics());
}
private void FontMetrics_Load(object sender, System.EventArgs e)
{
}
private void DisplayFontMetrics(FontFamily ff, Font fnt)
{
//Create graphics object and make it pretty
Graphics G = this.CreateGraphics();
G.SmoothingMode=SmoothingMode.AntiAlias;
G.TextRenderingHint=TextRenderingHint.AntiAlias;
//Get some metrics
int LineSpace = (int)(ff.GetLineSpacing(fnt.Style)*
fnt.Size/ff.GetEmHeight(fnt.Style));
int Descent = (int)(ff.GetCellDescent(fnt.Style)*
fnt.Size/ff.GetEmHeight(fnt.Style));
int Ascent = (int)(ff.GetCellAscent(fnt.Style)*
fnt.Size/ff.GetEmHeight(fnt.Style));
//Create the base line to sit the text on
Point BaseLineStart = new Point ( 15, this.Height*3/5);
Point BaseLineEnd = new Point ( this.Width-15, this.Height*3/5);
//Top left corner of text is the ascent
Point StringPoint = new Point(75, (int)(BaseLineStart.Y-Ascent));
//Clear the screen and draw the string on a base line
G.Clear(Color.AliceBlue);
G.DrawString("A j Q", fnt, Brushes.Blue, StringPoint);
G.DrawLine(Pens.Black, BaseLineStart, BaseLineEnd);
//Draw the annotation lines
Size LineSize = new Size(0, LineSpace);
Size AscentSize = new Size(0, Ascent);
Size DescentSize = new Size(0, Descent);
G.DrawLine(Pens.Black, BaseLineStart-LineSize, BaseLineEnd-LineSize);
G.DrawLine(Pens.Red, BaseLineStart-AscentSize, BaseLineEnd-AscentSize);
G.DrawLine(Pens.DarkGreen, BaseLineStart+DescentSize,
BaseLineEnd+DescentSize);
//Annotate
Font AnnoFont = new Font("Arial", 10);
G.DrawString("Line Space = " + LineSpace.ToString(), AnnoFont,
Brushes.Black,
20,
(int)(BaseLineStart.Y-LineSpace-12));
G.DrawString("Ascent = " + Ascent.ToString(), AnnoFont,
Brushes.Red,
250,
(int)(BaseLineStart.Y-Ascent-12));
G.DrawString("Descent = " + Descent.ToString(), AnnoFont,
Brushes.DarkGreen,
350,
(int)(BaseLineStart.Y+Descent/8));
}
private void cmdRoman_Click(object sender, System.EventArgs e)
{
FontFamily ff = new FontFamily("Times New Roman");
Font f = new Font(ff, 75, FontStyle.Regular, GraphicsUnit.Pixel);
DisplayFontMetrics(ff, f);
}
private void cmdArial_Click(object sender, System.EventArgs e)
{
FontFamily ff = new FontFamily("Arial Black");
Font f = new Font(ff, 75, FontStyle.Regular, GraphicsUnit.Pixel);
DisplayFontMetrics(ff, f);
}
private void cmdComic_Click(object sender, System.EventArgs e)
{
FontFamily ff = new FontFamily("Comic Sans MS");
Font f = new Font(ff, 75, FontStyle.Regular, GraphicsUnit.Pixel);
DisplayFontMetrics(ff, f);
}
private void cmdCourier_Click(object sender, System.EventArgs e)
{
FontFamily ff = new FontFamily("Courier New");
Font f = new Font(ff, 75, FontStyle.Regular, GraphicsUnit.Pixel);
DisplayFontMetrics(ff, f);
}
}
}
Related examples in the same category