Font Attributes


/*
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 FontAttr_c
{
///

/// Summary description for FontAttr.
///

public class FontAttr : System.Windows.Forms.Form
{
private System.Windows.Forms.Button cmdGo;
private System.Windows.Forms.Panel P1;
///

/// Required designer variable.
///

private System.ComponentModel.Container components = null;

public FontAttr()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();

//
// TODO: Add any constructor code after InitializeComponent call
//
}

///

/// Clean up any resources being used.
///

protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
///

/// Required method for Designer support – do not modify
/// the contents of this method with the code editor.
///

private void InitializeComponent()
{
this.cmdGo = new System.Windows.Forms.Button();
this.P1 = new System.Windows.Forms.Panel();
this.SuspendLayout();
//
// cmdGo
//
this.cmdGo.Location = new System.Drawing.Point(264, 288);
this.cmdGo.Name = “cmdGo”;
this.cmdGo.Size = new System.Drawing.Size(56, 24);
this.cmdGo.TabIndex = 0;
this.cmdGo.Text = “GO”;
this.cmdGo.Click += new System.EventHandler(this.cmdGo_Click);
//
// P1
//
this.P1.AutoScroll = true;
this.P1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.P1.Location = new System.Drawing.Point(16, 32);
this.P1.Name = “P1”;
this.P1.Size = new System.Drawing.Size(304, 240);
this.P1.TabIndex = 1;
//
// FontAttr
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(342, 323);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.P1,
this.cmdGo});
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = “FontAttr”;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = “FontAttr”;
this.Load += new System.EventHandler(this.FontAttr_Load);
this.ResumeLayout(false);

}
#endregion

///

/// The main entry point for the application.
///

[STAThread]
static void Main()
{
Application.Run(new FontAttr());
}

private void FontAttr_Load(object sender, System.EventArgs e)
{
}

private void EnumInstalledFonts()
{
FontStyle Style;
int y = 0;

foreach (FontFamily ff in FontFamily.Families)
{
if ( ff.IsStyleAvailable(Style = FontStyle.Regular) )
AddString(ff, ref y, Style);
if ( ff.IsStyleAvailable(Style = FontStyle.Bold) )
AddString(ff, ref y, Style);
if ( ff.IsStyleAvailable(Style = FontStyle.Italic) )
AddString(ff, ref y, Style);
if ( ff.IsStyleAvailable(Style = FontStyle.Strikeout) )
AddString(ff, ref y, Style);
if ( ff.IsStyleAvailable(Style = FontStyle.Underline) )
AddString(ff, ref y, Style);
}
}

private void AddString(FontFamily ff, ref int y, FontStyle Style)
{
using ( Font fnt = new Font(ff, 12, Style, GraphicsUnit.Pixel) )
{
int LineSpace = (int)(ff.GetLineSpacing(Style) *
fnt.Size / ff.GetEmHeight(Style));
y += LineSpace + 2;

PictureBox P = new PictureBox();
P.Height = LineSpace;
P.Width = P1.Width;
Bitmap B = new Bitmap(P.Width, P.Height);
using (Graphics G = Graphics.FromImage(B))
{
G.DrawString(ff.Name + ” : Style = ” + Style.ToString(),
fnt, Brushes.Black, 0, 0);
}
P.Image=B;
P1.Controls.Add(P);
P1.Controls[P1.Controls.Count-1].Location = new Point(2, y);
if ( y < P1.Height ) P1.Refresh(); } } private void cmdGo_Click(object sender, System.EventArgs e) { P1.Controls.Clear(); EnumInstalledFonts(); } } } FontAttr-c.zip( 10 k)[/csharp]

Font size, name and strike out


   

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

   public class UsingFonts : System.Windows.Forms.Form
   {
      private System.ComponentModel.Container components = null;

      public UsingFonts()
      {
         InitializeComponent();
      }
      private void InitializeComponent()
      {
         this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
         this.ClientSize = new System.Drawing.Size(504, 109);
         this.Name = "UsingFonts";
         this.Text = "UsingFonts";

      }
      static void Main() 
      {
         Application.Run( new UsingFonts() );
      }

      protected override void OnPaint(PaintEventArgs paintEvent )
      {
         Graphics graphicsObject = paintEvent.Graphics;
         SolidBrush brush = new SolidBrush( Color.DarkBlue );

         // arial, 12 pt bold
         FontStyle style = FontStyle.Bold;
         Font arial = new Font( new FontFamily( "Arial" ), 12, style );

         // times new roman, 12 pt regular
         style = FontStyle.Regular;
         Font timesNewRoman = new Font( "Times New Roman", 12, style );

         // courier new, 16 pt bold and italic
         style = FontStyle.Bold | FontStyle.Italic;
         Font courierNew = new Font( "Courier New", 16, style );

         // tahoma, 18 pt strikeout
         style = FontStyle.Strikeout;
         Font tahoma = new Font( "Tahoma", 18, style );

         graphicsObject.DrawString( arial.Name + 
            " 12 point bold.", arial, brush, 10, 10 );

         graphicsObject.DrawString( timesNewRoman.Name + 
            " 12 point plain.", timesNewRoman, brush, 10, 30 );

         graphicsObject.DrawString( courierNew.Name + 
            " 16 point bold and italic.", courierNew, 
            brush, 10, 54 );

         graphicsObject.DrawString( tahoma.Name +
            " 18 point strikeout.", tahoma, brush, 10, 75 );

      } 
   } 





           
          


Get font from Font dialog and redraw string


   


  using System;
  using System.Drawing;
  using System.Collections;
  using System.ComponentModel;
  using System.Windows.Forms;
  using System.Data;

  public class Form1 : System.Windows.Forms.Form
  {
    private System.ComponentModel.Container components;
    private System.Windows.Forms.FontDialog fontDlg;
    private Font currFont;

    public Form1()
    {
      InitializeComponent();
      CenterToScreen();
      fontDlg = new System.Windows.Forms.FontDialog();    
      fontDlg.ShowHelp = true;    
      Text = "Click on me to change the font";
      currFont = new Font("Times New Roman", 12);
    }
    private void InitializeComponent()
    {
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.ClientSize = new System.Drawing.Size(292, 273);
      this.Text = "Form1";
      this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseUp);
      this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);

    }

    static void Main() 
    {
      Application.Run(new Form1());
    }

    private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
      Graphics g = e.Graphics;
      g.DrawString("www.kutayzorlu.com/java2s/com...", currFont, 
        new SolidBrush(Color.Black), 0, 0);  
    }

    private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
    {
      if (fontDlg.ShowDialog() != DialogResult.Cancel)
      {
        currFont = fontDlg.Font;
        Invalidate();
      }
    }
  }

           
          


Get font family info


   


  using System;
  using System.Drawing;
  using System.Drawing.Drawing2D;
  using System.Collections;
  using System.ComponentModel;
  using System.Windows.Forms;
  using System.Data;
  using System.Drawing.Imaging;

  public class Test
  {
    static void Main() 
    {
      // Create the format string
      String formatString = "{0,-16}{1,8}{2,9}{3,10}{4,14}";

      // Write the first line of the table
      Console.WriteLine(formatString, "Font Family Name", "Ascent", "Descent",
                      "EmHeight", "Line Spacing");

      // Write font metrics for Courier New font family
      FontFamily ff = new FontFamily("Courier New");
      Console.WriteLine(formatString, ff.GetName(0),
        ff.GetCellAscent(FontStyle.Regular),
        ff.GetCellDescent(FontStyle.Regular),
        ff.GetEmHeight(FontStyle.Regular),
        ff.GetLineSpacing(FontStyle.Regular));
    }
  }


           
          


Draw font cell ascent, cell descent, line space, em height

   
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

public class Form1 : Form {

    protected override void OnPaint(PaintEventArgs e) {
    Graphics g = e.Graphics;
    g.FillRectangle(Brushes.White, this.ClientRectangle);
    FontFamily ff = new FontFamily("Times New Roman");
    float emSizeInGU = 24f;
      Font f = new Font(ff, emSizeInGU);

    int emSizeInDU = ff.GetEmHeight(FontStyle.Regular);
    int ascentInDU = ff.GetCellAscent(FontStyle.Regular);
    int descentInDU = ff.GetCellDescent(FontStyle.Regular);
    int lineSpacingInDU = ff.GetLineSpacing(FontStyle.Regular);

    float ascentInGU = ascentInDU * (emSizeInGU / emSizeInDU);
    float descentInGU = descentInDU * (emSizeInGU / emSizeInDU);
    float lineSpacingInGU = lineSpacingInDU * (emSizeInGU / emSizeInDU);

    PointF textOrigin = new PointF(20, 20);
    PointF nextLineOrigin = new PointF(textOrigin.X,textOrigin.Y + f.Height);
    g.DrawString("AxgQ", f, Brushes.Black, textOrigin);
    g.DrawString("AxgQ", f, Brushes.Black, nextLineOrigin);

    int lineLen = 100;
    g.DrawLine(Pens.Blue,textOrigin,new PointF(textOrigin.X + lineLen, textOrigin.Y));
    g.DrawLine(Pens.Red,nextLineOrigin,new PointF(nextLineOrigin.X + lineLen, nextLineOrigin.Y));

    PointF p = new PointF(textOrigin.X,textOrigin.Y + lineSpacingInGU);
    g.DrawLine(Pens.Blue, p,new PointF(p.X + lineLen, p.Y));

    p = new PointF(nextLineOrigin.X,nextLineOrigin.Y + lineSpacingInGU);
    g.DrawLine(Pens.Red, p,new PointF(p.X + lineLen, p.Y));

    p = new PointF(textOrigin.X,textOrigin.Y + lineSpacingInGU - ascentInGU);
    g.DrawLine(Pens.Blue, p,new PointF(p.X + lineLen, p.Y));

    p = new PointF(nextLineOrigin.X, nextLineOrigin.Y +lineSpacingInGU - ascentInGU);
    g.DrawLine(Pens.Red, p, new PointF(p.X + lineLen, p.Y));

    p = new PointF(textOrigin.X,textOrigin.Y + lineSpacingInGU + descentInGU);
    g.DrawLine(Pens.Blue, p,new PointF(p.X + lineLen, p.Y));

    p = new PointF(nextLineOrigin.X,nextLineOrigin.Y + lineSpacingInGU + descentInGU);
    g.DrawLine(Pens.Red, p,new PointF(p.X + lineLen, p.Y));
    }
    public static void Main() {
        Application.Run(new Form1());
    }
}

    


Get font cell ascent, descent, LineSpacing and EmHeight


   

  using System;
  using System.Drawing;
  using System.Collections;
  using System.ComponentModel;
  using System.Windows.Forms;
  using System.Data;

  public class Test{
    static void Main() {
      FontFamily myFamily = new FontFamily("Verdana");
      Font myFont = new Font(myFamily, 12);
      int fontHeight = myFont.Height;

      Console.WriteLine("Measurements are in GraphicsUnit." + myFont.Unit.ToString());

      Console.WriteLine("The Verdana family.");

      // Print our Family ties...
      Console.WriteLine("Ascent for bold Verdana: " + myFamily.GetCellAscent(FontStyle.Bold));

      Console.WriteLine("Descent for bold Verdana: " + myFamily.GetCellDescent(FontStyle.Bold));

      Console.WriteLine("Line spacing for bold Verdana: " + myFamily.GetLineSpacing(FontStyle.Bold));

      Console.WriteLine("Height for bold Verdana: " + myFamily.GetEmHeight(FontStyle.Bold));
    }
  }

           
          


Font Style: Bold and Strikeout


   


  using System;
  using System.Drawing;
  using System.Drawing.Drawing2D;
  using System.Collections;
  using System.ComponentModel;
  using System.Windows.Forms;
  using System.Data;
  using System.Drawing.Imaging;

  public class Form1 : System.Windows.Forms.Form
  {
    public Form1()
    {
      InitializeComponent();
    }
    private void InitializeComponent()
    {
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.ClientSize = new System.Drawing.Size(292, 273);
      this.Text = "Pen Cap App";
      this.Resize += new System.EventHandler(this.Form1_Resize);
      this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);

    }
    static void Main() 
    {
      Application.Run(new Form1());
    }

    private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {      
      Graphics g = e.Graphics;
      g.FillRectangle(Brushes.White, this.ClientRectangle);

      Font font= new Font("Times New Roman", 12, FontStyle.Bold | FontStyle.Strikeout);
      
      g.DrawString("Bold &amp; Strikeout", font, Brushes.Black, 0, 0);

      font.Dispose();
    }

    private void Form1_Resize(object sender, System.EventArgs e)
    {
      Invalidate();
    }
  }