Csharp/C Sharp/2D Graphics

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Calculate font unit metrics from the font family

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 using System.Collections;
 using System.ruponentModel;
 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 = "";
     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);
     FontFamily ff = new FontFamily("Times New Roman");
     float emSizeInGU = 24f;
     Font f = new Font(ff, emSizeInGU);
     // Get the design unit metrics from the font family
     int emSizeInDU = ff.GetEmHeight(FontStyle.Regular);
     int ascentInDU = ff.GetCellAscent(FontStyle.Regular);
     int descentInDU = ff.GetCellDescent(FontStyle.Regular);
     int lineSpacingInDU = ff.GetLineSpacing(FontStyle.Regular);
     // Calculate the GraphicsUnit metrics from the font
     float ascentInGU = ascentInDU * (emSizeInGU / emSizeInDU);
     float descentInGU = descentInDU * (emSizeInGU / emSizeInDU);
     float lineSpacingInGU = lineSpacingInDU * (emSizeInGU / emSizeInDU);
     // Output the metrics to the console
     Console.WriteLine("emSize = " + emSizeInDU + " DesignUnits");
     Console.WriteLine("emSize = " + emSizeInGU + " GraphicsUnits");
     string format = "{0,-16}{1,12}{2,16}";
     Console.WriteLine(format, "Font Metric", "DesignUnits", "GraphicsUnits");
     Console.WriteLine(format, "Ascent", ascentInDU, ascentInGU);
     Console.WriteLine(format, "Descent", descentInDU, descentInGU);
     Console.WriteLine(format, "Line Spacing", lineSpacingInDU, lineSpacingInGU);
     // Draw two lines of the text string
     PointF textOrigin = new PointF(20, 20);
     PointF nextLineOrigin = new PointF(textOrigin.X,
                        textOrigin.Y + f.Height);
     g.DrawString("WWW.nfex.ru", f, Brushes.Black, textOrigin);
     g.DrawString("www.nfex.ru", f, Brushes.Black, nextLineOrigin);
   }
   private void Form1_Resize(object sender, System.EventArgs e)
   {
     Invalidate();
   }
 }
          
      </source>


Calculate GraphicsUnit metrics from the font

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 using System.Collections;
 using System.ruponentModel;
 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 = "";
     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);
     FontFamily ff = new FontFamily("Times New Roman");
     float emSizeInGU = 24f;
     Font f = new Font(ff, emSizeInGU);
     // Get the design unit metrics from the font family
     int emSizeInDU = ff.GetEmHeight(FontStyle.Regular);
     int ascentInDU = ff.GetCellAscent(FontStyle.Regular);
     int descentInDU = ff.GetCellDescent(FontStyle.Regular);
     int lineSpacingInDU = ff.GetLineSpacing(FontStyle.Regular);
     // Calculate the GraphicsUnit metrics from the font
     float ascentInGU = ascentInDU * (emSizeInGU / emSizeInDU);
     float descentInGU = descentInDU * (emSizeInGU / emSizeInDU);
     float lineSpacingInGU = lineSpacingInDU * (emSizeInGU / emSizeInDU);
     // Output the metrics to the console
     Console.WriteLine("emSize = " + emSizeInDU + " DesignUnits");
     Console.WriteLine("emSize = " + emSizeInGU + " GraphicsUnits");
     string format = "{0,-16}{1,12}{2,16}";
     Console.WriteLine(format, "Font Metric", "DesignUnits", "GraphicsUnits");
     Console.WriteLine(format, "Ascent", ascentInDU, ascentInGU);
     Console.WriteLine(format, "Descent", descentInDU, descentInGU);
     Console.WriteLine(format, "Line Spacing", lineSpacingInDU, lineSpacingInGU);
     // Draw two lines of the text string
     PointF textOrigin = new PointF(20, 20);
     PointF nextLineOrigin = new PointF(textOrigin.X,
                        textOrigin.Y + f.Height);
     g.DrawString("WWW.nfex.ru", f, Brushes.Black, textOrigin);
     g.DrawString("www.nfex.ru", f, Brushes.Black, nextLineOrigin);
   }
   private void Form1_Resize(object sender, System.EventArgs e)
   {
     Invalidate();
   }
 }


      </source>


Derive surrounding Rectangle from String

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 using System.Collections;
 using System.ruponentModel;
 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 = "";
     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.PageUnit = GraphicsUnit.Inch;
     Pen p = new Pen(Color.Black, 1 / 96f);
     Font f = new Font("Times New Roman", 16);
     String s = "www.nfex.ru";
     SizeF sf = g.MeasureString(s, f);
     g.DrawRectangle(p, 1, 1, sf.Width, sf.Height);
     g.DrawString(s, f, Brushes.Black, 1, 1);
     f.Dispose();
     p.Dispose();
   }
   private void Form1_Resize(object sender, System.EventArgs e)
   {
     Invalidate();
   }
 }


      </source>


Draw a line for the ascent, descent, baseline, textOrigin

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 using System.Collections;
 using System.ruponentModel;
 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 = "";
     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);
     FontFamily ff = new FontFamily("Times New Roman");
     float emSizeInGU = 24f;
     Font f = new Font(ff, emSizeInGU);
     // Get the design unit metrics from the font family
     int emSizeInDU = ff.GetEmHeight(FontStyle.Regular);
     int ascentInDU = ff.GetCellAscent(FontStyle.Regular);
     int descentInDU = ff.GetCellDescent(FontStyle.Regular);
     int lineSpacingInDU = ff.GetLineSpacing(FontStyle.Regular);
     // Calculate the GraphicsUnit metrics from the font
     float ascentInGU = ascentInDU * (emSizeInGU / emSizeInDU);
     float descentInGU = descentInDU * (emSizeInGU / emSizeInDU);
     float lineSpacingInGU = lineSpacingInDU * (emSizeInGU / emSizeInDU);
     // Draw two lines of the text string
     PointF textOrigin = new PointF(20, 20);
     PointF nextLineOrigin = new PointF(textOrigin.X,
                        textOrigin.Y + f.Height);
     g.DrawString("WWW.nfex.ru", f, Brushes.Black, textOrigin);
     g.DrawString("www.nfex.ru", f, Brushes.Black, nextLineOrigin);
     // Draw a line at the textOrigin
     int lineLen = 300;
     g.DrawLine(Pens.Blue, textOrigin, new PointF(textOrigin.X + lineLen, textOrigin.Y));
     g.DrawLine(Pens.Red, nextLineOrigin, new PointF(nextLineOrigin.X + lineLen, nextLineOrigin.Y));
     // Draw a line at the baseline
     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));
     // Draw a line at the top of the ascent
     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));
     // Draw a line at the bottom of the descent
     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));
   }
   private void Form1_Resize(object sender, System.EventArgs e)
   {
     Invalidate();
   }
 }


      </source>


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

<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; 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());
   }

}

</source>


Font Attributes

<source lang="csharp"> /* 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.ruponentModel; using System.Windows.Forms; using System.Data; namespace FontAttr_c {

   /// <summary>
   /// Summary description for FontAttr.
   /// </summary>
   public class FontAttr : System.Windows.Forms.Form
   {
   private System.Windows.Forms.Button cmdGo;
   private System.Windows.Forms.Panel P1;
       /// <summary>
       /// Required designer variable.
       /// </summary>
       private System.ruponentModel.Container components = null;
       public FontAttr()
       {
           //
           // 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.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
       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [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();
   }
   }

}


      </source>

FontAttr-c.zip( 10 k)</a>


FontFamilies: IsStyleAvailable,

<source lang="csharp"> 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;
   }

}

</source>


Font Famylies

<source lang="csharp"> /* Professional Windows GUI Programming Using C# by Jay Glynn, Csaba Torok, Richard Conway, Wahid Choudhury,

  Zach Greenvoss, Shripad Kulkarni, Neil Whitlow

Publisher: Peer Information ISBN: 1861007663

  • /

using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; using System.Drawing.Text; // InstalledFontCollection namespace FontFamylies {

   /// <summary>
   /// Summary description for FontFamylies.
   /// </summary>
   public class FontFamylies : System.Windows.Forms.Form
   {
       private System.Windows.Forms.ruboBox comboBox1;
       /// <summary>
       /// Required designer variable.
       /// </summary>
       private System.ruponentModel.Container components = null;
       FontFamily[] iFCF;
       ArrayList iFCFN;
       public FontFamylies()
       {
           //
           // Required for Windows Form Designer support
           //
           InitializeComponent();
           
           this.Text = "Installed Font Families";
           iFCF = null;                // fontfamilies
           iFCFN = new ArrayList();    // strings
           
           iFCF = InstalledFontFamilies(iFCFN);
           this.ruboBox1.Sorted = true;
           this.ruboBox1.DataSource = iFCFN;  //set the combo"s data source
           //
           // 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.ruboBox1 = new System.Windows.Forms.ruboBox();
           this.SuspendLayout();
           // 
           // comboBox1
           // 
           this.ruboBox1.Name = "comboBox1";
           this.ruboBox1.Size = new System.Drawing.Size(121, 21);
           this.ruboBox1.TabIndex = 0;
           this.ruboBox1.Text = "comboBox1";
           // 
           // FontFamylies
           // 
           this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
           this.ClientSize = new System.Drawing.Size(292, 266);
           this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                         this.ruboBox1});
           this.Name = "FontFamylies";
           this.Text = "FontFamylies";
           this.ResumeLayout(false);
       }
       #endregion
       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [STAThread]
       static void Main() 
       {
           Application.Run(new FontFamylies());
       }
       private FontFamily[] InstalledFontFamilies(ArrayList iFCFN)
       {
           InstalledFontCollection iFC = new InstalledFontCollection();
           foreach(FontFamily ff in iFC.Families)
               iFCFN.Add(ff.Name);
           return iFC.Families;
       }
       protected override void OnPaint(PaintEventArgs pea)
       {
           Graphics g = pea.Graphics;
           int wi = 150, hi = 12, rectNb = 4;
           this.Width = (wi + 2)*rectNb + 9;
           int iFCFNb = iFCF.Length;
           DisplayInstalledFontFamilies(g, iFCFNb, wi, hi, rectNb);
           g.Dispose();
       }
       private void DisplayInstalledFontFamilies(Graphics g, int iFCFNb, int wi,
           int hi, int rectNb)
       {
           Rectangle rec;
           Pen p = new Pen(this.ForeColor);
           Brush b = null;
           Font f;
           StringFormat strfmt = new StringFormat();
           strfmt.LineAlignment = strfmt.Alignment = StringAlignment.Near;
           int x, y;
           for (int i = 0; i < iFCFNb; i++)
           {
               x = (int)(i % rectNb);
               y = (int)(i / rectNb);
               rec = new Rectangle(1 + x*(2 + wi), 25 + y*(2 + hi), wi, hi);
               g.DrawRectangle(p, rec);
               try
               {
                   f = new Font(iFCF[i], 8, FontStyle.Regular, GraphicsUnit.Point);
               }
               catch
               {
                   // some fonts do not support Regular style
                   f = new Font("Arial", 8, FontStyle.Strikeout, GraphicsUnit.Point);
               }
               b  = new SolidBrush(Color.Black);
               g.DrawString((string)iFCFN[i], f, b, rec, strfmt);
           }
           p.Dispose();    b.Dispose();
       }
   }

}

      </source>


Font Metrics

<source lang="csharp"> /* 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.ruponentModel; 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.ruponentModel.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);
   }
   }

}


      </source>


Fonts Class

<source lang="csharp"> /* GDI+ Programming in C# and VB .NET by Nick Symmonds Publisher: Apress ISBN: 159059035X

  • /

using System; using System.Drawing; using System.Drawing.Text; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; namespace FontsClass_c {

   /// <summary>
   /// Summary description for FontsClass.
   /// </summary>
   public class FontsClass : System.Windows.Forms.Form
   {
       /// <summary>
       /// Required designer variable.
       /// </summary>
       private System.ruponentModel.Container components = null;
       public FontsClass()
       {
           //
           // 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()
       {
     // 
     // FontsClass
     // 
     this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
     this.ClientSize = new System.Drawing.Size(292, 323);
     this.MaximizeBox = false;
     this.MinimizeBox = false;
     this.Name = "FontsClass";
     this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
     this.Text = "FontsClass";
     this.Load += new System.EventHandler(this.FontsClass_Load);
   }
       #endregion
       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [STAThread]
       static void Main() 
       {
           Application.Run(new FontsClass());
       }
   private void FontsClass_Load(object sender, System.EventArgs e)
   {
   }
   protected override void OnPaint(PaintEventArgs e)
   {
     Graphics G = e.Graphics;
     G.TextRenderingHint=TextRenderingHint.AntiAlias;
     int y = 0;
     G.DrawString("Regular", Fonts.Arial_20, Brushes.Black, 50, y+=40);
     G.DrawString("Italic", Fonts.ArialItalic_20, Brushes.Black, 50, y+=40);
     G.DrawString("Regular", Fonts.Chain_20, Brushes.Black, 50, y+=40);
     G.DrawString("Italic", Fonts.ChainItalic_20, Brushes.Black, 50, y+=40);
     G.DrawString("Regular", Fonts.ruic_20, Brushes.Black, 50, y+=40);
     G.DrawString("Italic", Fonts.ruicItalic_20, Brushes.Black, 50, y+=40);
   }
   }
   public sealed class Fonts
   {
   private static PrivateFontCollection PFC;
   private static FontFamily Arial_FF;
   private static FontFamily Comic_FF;
   private static FontFamily Chain_FF;
   static Fonts(){
     PFC = new PrivateFontCollection();
     PFC.AddFontFile("C:\\WINNT\\Fonts\\Arial.ttf");
     Arial_FF = PFC.Families[0];
     PFC.AddFontFile("chainletters.ttf");
     Chain_FF = PFC.Families[1];
     PFC.AddFontFile("C:\\WINNT\\Fonts\\comic.ttf");
     Comic_FF = PFC.Families[2];
   }
   public static FontFamily[] Families
   {
     get{ return PFC.Families; }
   }
   #region Arial Font
   public static Font Arial_20
   {
     get {return new Font(Arial_FF, 20, FontStyle.Regular, GraphicsUnit.Point);}
   }
   public static Font ArialItalic_20
   {
     get {return new Font(Arial_FF, 20, FontStyle.Italic, GraphicsUnit.Point);}
   }
   #endregion
   #region Chain font
   public static Font Chain_20
   {
     get {return new Font(Chain_FF, 20, FontStyle.Regular, GraphicsUnit.Point);}
   }
   public static Font ChainItalic_20
   {
     get {return new Font(Chain_FF, 20, FontStyle.Italic, GraphicsUnit.Point);}
   }
   #endregion
   #region Comic Font
   public static Font Comic_20
   {
     get {return new Font(Comic_FF, 20, FontStyle.Regular, GraphicsUnit.Point);}
   }
   public static Font ComicItalic_20
   {
     get {return new Font(Comic_FF, 20, FontStyle.Italic, GraphicsUnit.Point);}
   }
   #endregion
   }

}


      </source>

FontsClass-c.zip( 32 k)</a>


Font size, name and strike out

<source lang="csharp"> using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data;

  public class UsingFonts : System.Windows.Forms.Form
  {
     private System.ruponentModel.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 );
     } 
  } 


      </source>


Font Style: Bold

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 using System.Collections;
 using System.ruponentModel;
 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);
     g.DrawString("Bold", font, Brushes.Black, 0, 0);
     font.Dispose();
   }
   private void Form1_Resize(object sender, System.EventArgs e)
   {
     Invalidate();
   }
 }


      </source>


Font Style: Bold and Italic

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 using System.Collections;
 using System.ruponentModel;
 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.Italic);
     g.DrawString("Bold-Italic", font, Brushes.Black, 0, 0);
     font.Dispose();
   }
   private void Form1_Resize(object sender, System.EventArgs e)
   {
     Invalidate();
   }
 }
          
      </source>


Font Style: Bold and Strikeout

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 using System.Collections;
 using System.ruponentModel;
 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 & Strikeout", font, Brushes.Black, 0, 0);
     font.Dispose();
   }
   private void Form1_Resize(object sender, System.EventArgs e)
   {
     Invalidate();
   }
 }


      </source>


Font Style: Italic

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 using System.Collections;
 using System.ruponentModel;
 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.Italic);
     g.DrawString("Italic", font, Brushes.Black, 0, 0);
     font.Dispose();
   }
   private void Form1_Resize(object sender, System.EventArgs e)
   {
     Invalidate();
   }
 }


      </source>


Font Style: Regular

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 using System.Collections;
 using System.ruponentModel;
 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.Regular);
     int h = font.Height;
     g.DrawString("Regular", font, Brushes.Black, 0, 0);
     font.Dispose();
   }
   private void Form1_Resize(object sender, System.EventArgs e)
   {
     Invalidate();
   }
 }


      </source>


Font Style: Strike out

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 using System.Collections;
 using System.ruponentModel;
 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.Strikeout);
     
     g.DrawString("Strikeout", font, Brushes.Black, 0, 0);
     font.Dispose();
   }
   private void Form1_Resize(object sender, System.EventArgs e)
   {
     Invalidate();
   }
 }


      </source>


Font Style: Underline

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 using System.Collections;
 using System.ruponentModel;
 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.Underline);
     
     g.DrawString("Underline", font, Brushes.Black, 0, 0);
     font.Dispose();
   }
   private void Form1_Resize(object sender, System.EventArgs e)
   {
     Invalidate();
   }
 }
          
      </source>


Font Viewer

<source lang="csharp"> /* User Interfaces in C#: Windows Forms and Custom Controls by Matthew MacDonald Publisher: Apress ISBN: 1590590457

  • /

using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; using Microsoft.Win32; namespace FontViewer {

   /// <summary>
   /// Summary description for Form1.
   /// </summary>
   public class FontViewer : System.Windows.Forms.Form
   {
       private System.Windows.Forms.GroupBox groupBox1;
       private System.Windows.Forms.Label label1;
       private System.Windows.Forms.ruboBox lstFonts;
       private System.Windows.Forms.StatusBar statusBar;
       private System.Windows.Forms.StatusBarPanel panel;
       /// <summary>
       /// Required designer variable.
       /// </summary>
       private System.ruponentModel.Container components = null;
       public FontViewer()
       {
           //
           // 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()
       {

// System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(FontViewer));

           this.groupBox1 = new System.Windows.Forms.GroupBox();
           this.label1 = new System.Windows.Forms.Label();
           this.lstFonts = new System.Windows.Forms.ruboBox();
           this.statusBar = new System.Windows.Forms.StatusBar();
           this.panel = new System.Windows.Forms.StatusBarPanel();
           this.groupBox1.SuspendLayout();
           ((System.ruponentModel.ISupportInitialize)(this.panel)).BeginInit();
           this.SuspendLayout();
           // 
           // groupBox1
           // 
           this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
               | System.Windows.Forms.AnchorStyles.Right);
           this.groupBox1.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                                   this.lstFonts,
                                                                                   this.label1});
           this.groupBox1.Location = new System.Drawing.Point(0, -4);
           this.groupBox1.Name = "groupBox1";
           this.groupBox1.Size = new System.Drawing.Size(632, 40);
           this.groupBox1.TabIndex = 0;
           this.groupBox1.TabStop = false;
           // 
           // label1
           // 
           this.label1.Location = new System.Drawing.Point(12, 16);
           this.label1.Name = "label1";
           this.label1.Size = new System.Drawing.Size(80, 12);
           this.label1.TabIndex = 0;
           this.label1.Text = "Choose Font:";
           // 
           // lstFonts
           // 
           this.lstFonts.DropDownStyle = System.Windows.Forms.ruboBoxStyle.DropDownList;
           this.lstFonts.DropDownWidth = 340;
           this.lstFonts.Location = new System.Drawing.Point(100, 12);
           this.lstFonts.Name = "lstFonts";
           this.lstFonts.Size = new System.Drawing.Size(340, 21);
           this.lstFonts.TabIndex = 1;
           this.lstFonts.SelectedIndexChanged += new System.EventHandler(this.lstFonts_SelectedIndexChanged);
           // 
           // statusBar
           // 
           this.statusBar.Location = new System.Drawing.Point(0, 165);
           this.statusBar.Name = "statusBar";
           this.statusBar.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] {
                                                                                        this.panel});
           this.statusBar.ShowPanels = true;
           this.statusBar.Size = new System.Drawing.Size(632, 20);
           this.statusBar.TabIndex = 1;
           // 
           // panel
           // 
           this.panel.AutoSize = System.Windows.Forms.StatusBarPanelAutoSize.Spring;
           this.panel.Width = 616;
           // 
           // FontViewer
           // 
           this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
           this.ClientSize = new System.Drawing.Size(632, 185);
           this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                         this.statusBar,
                                                                         this.groupBox1});
           this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));

// this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));

           this.Name = "FontViewer";
           this.Text = "FontViewer";
           this.Load += new System.EventHandler(this.FontViewer_Load);
           this.Paint += new System.Windows.Forms.PaintEventHandler(this.FontViewer_Paint);
           this.groupBox1.ResumeLayout(false);
           ((System.ruponentModel.ISupportInitialize)(this.panel)).EndInit();
           this.ResumeLayout(false);
       }
       #endregion
       /// <summary>
       /// The FontViewer entry point for the application.
       /// </summary>
       [STAThread]
       static void Main() 
       {
           Application.Run(new FontViewer());
       }
       private void FontViewer_Load(object sender, System.EventArgs e)
       {
           System.Drawing.Text.InstalledFontCollection fonts = new System.Drawing.Text.InstalledFontCollection();
           foreach (FontFamily family in fonts.Families)
           {
               lstFonts.Items.Add(family.Name);
           }
           RegistryKey rk;
           rk = Registry.LocalMachine.OpenSubKey("Software\\ProseTech\\FontViewer");
           if (rk != null) this.Text += " - " + rk.GetValue("Customer");
       }
       private void FontViewer_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
       {
           if (lstFonts.Text != "") 
           {
               try
               {
                   e.Graphics.DrawString(lstFonts.Text, new Font(lstFonts.Text, 50), Brushes.Black, 10, 50);
                   statusBar.Panels[0].Text = "";                                                                                                         
               }
               catch (Exception err)
               {
                   statusBar.Panels[0].Text = err.Message;
               }
           }
       }
       private void lstFonts_SelectedIndexChanged(object sender, System.EventArgs e)
       {
           if (lstFonts.Text != "") this.Invalidate();
       }
   }

}


      </source>


Get font cell ascent, descent, LineSpacing and EmHeight

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Collections;
 using System.ruponentModel;
 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));
   }
 }
          
      </source>


Get font family info

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 using System.Collections;
 using System.ruponentModel;
 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));
   }
 }


      </source>


Get font from Font dialog and redraw string

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Collections;
 using System.ruponentModel;
 using System.Windows.Forms;
 using System.Data;
 public class Form1 : System.Windows.Forms.Form
 {
   private System.ruponentModel.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.nfex.ru...", 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();
     }
   }
 }
          
      </source>


List Fonts

<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Drawing.Text; using System.Text; using System.Windows.Forms; public class Form1 : Form {

   public Form1() {
       this.BackColor = Color.White;
   }
   protected override void OnPaint(PaintEventArgs e) {
       int verticalCoordinate = 10;
       Point topLeftCorner;
       InstalledFontCollection insFont = new InstalledFontCollection();
       FontFamily[] families = insFont.Families;
       e.Graphics.TranslateTransform(AutoScrollPosition.X,AutoScrollPosition.Y);
       foreach (FontFamily family in families) {
           if (family.IsStyleAvailable(FontStyle.Regular)) {
               Font f = new Font(family.Name, 10);
               topLeftCorner = new Point(10, verticalCoordinate);
               verticalCoordinate += f.Height;
               e.Graphics.DrawString(family.Name, f, Brushes.Black, topLeftCorner);
               f.Dispose();
           }
       }
   }
   public static void Main() {
       Application.Run(new Form1());
   }

}

</source>


Measure Font height and draw surrounding Rectangle

<source lang="csharp">

 using System;
 using System.Drawing;
 using System.Drawing.Drawing2D;
 using System.Collections;
 using System.ruponentModel;
 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);
     FontFamily ff = new FontFamily("Times New Roman");
     Font f = new Font(ff, 30);
     String s = "www.nfex.ru Height: " + f.Height;
     SizeF sf = g.MeasureString(s, f, Int32.MaxValue, StringFormat.GenericTypographic);
     RectangleF r = new RectangleF(0, 0, sf.Width, f.Height);
     g.DrawRectangle(Pens.Black, r.Left, r.Top, r.Width, r.Height);
     g.DrawString(s, f, Brushes.Black, r, StringFormat.GenericTypographic);
     f.Dispose();
   }
   private void Form1_Resize(object sender, System.EventArgs e)
   {
     Invalidate();
   }
 }
          
      </source>


Smoothing Fonts

<source lang="csharp"> /* User Interfaces in C#: Windows Forms and Custom Controls by Matthew MacDonald Publisher: Apress ISBN: 1590590457

  • /

using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Drawing.Text; namespace GDI_Basics {

   /// <summary>
   /// Summary description for SmoothingFonts.
   /// </summary>
   public class SmoothingFonts : System.Windows.Forms.Form
   {
       internal System.Windows.Forms.Label Label3;
       internal System.Windows.Forms.Label Label2;
       internal System.Windows.Forms.Label Label1;
       /// <summary>
       /// Required designer variable.
       /// </summary>
       private System.ruponentModel.Container components = null;
       public SmoothingFonts()
       {
           //
           // 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.Label3 = new System.Windows.Forms.Label();
           this.Label2 = new System.Windows.Forms.Label();
           this.Label1 = new System.Windows.Forms.Label();
           this.SuspendLayout();
           // 
           // Label3
           // 
           this.Label3.BackColor = System.Drawing.Color.White;
           this.Label3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
           this.Label3.Location = new System.Drawing.Point(272, 168);
           this.Label3.Name = "Label3";
           this.Label3.Size = new System.Drawing.Size(128, 16);
           this.Label3.TabIndex = 5;
           this.Label3.Text = " ClearTypeGridFit";
           // 
           // Label2
           // 
           this.Label2.BackColor = System.Drawing.Color.White;
           this.Label2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
           this.Label2.Location = new System.Drawing.Point(272, 100);
           this.Label2.Name = "Label2";
           this.Label2.Size = new System.Drawing.Size(128, 16);
           this.Label2.TabIndex = 4;
           this.Label2.Text = " AntiAliasGridFit";
           // 
           // Label1
           // 
           this.Label1.BackColor = System.Drawing.Color.White;
           this.Label1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
           this.Label1.Location = new System.Drawing.Point(272, 36);
           this.Label1.Name = "Label1";
           this.Label1.Size = new System.Drawing.Size(128, 16);
           this.Label1.TabIndex = 3;
           this.Label1.Text = " SingleBitPerPixelGridFit";
           // 
           // SmoothingFonts
           // 
           this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
           this.ClientSize = new System.Drawing.Size(440, 314);
           this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                         this.Label3,
                                                                         this.Label2,
                                                                         this.Label1});
           this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
           this.Name = "SmoothingFonts";
           this.Text = "SmoothingFonts";
           this.Paint += new System.Windows.Forms.PaintEventHandler(this.SmoothingFonts_Paint);
           this.ResumeLayout(false);
       }
       #endregion
       [STAThread]
       static void Main() 
       {
           Application.Run(new SmoothingFonts());
       }
       private void SmoothingFonts_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
       {
           Font TextFont = new Font("Times New Roman", 25, FontStyle.Italic);
           e.Graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;
           e.Graphics.DrawString("Sample Text", TextFont, Brushes.Black, 20, 20);
           e.Graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
           e.Graphics.DrawString("Sample Text", TextFont, Brushes.Black, 20, 85);
           e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
           e.Graphics.DrawString("Sample Text", TextFont, Brushes.Black, 20, 150);
       }
   }

}


      </source>


Write font metrics for Arial font family

<source lang="csharp">

using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class MainClass {

   public static void Main() {
   String formatString = "{0,-16}{1,8}{2,9}{3,10}{4,14}";
   Console.WriteLine(formatString, "Font Family Name", "Ascent", "Descent","EmHeight", "Line Spacing");
   FontFamily ff = new FontFamily("Arial");
   Console.WriteLine(formatString, ff.GetName(0),
     ff.GetCellAscent(FontStyle.Regular),
     ff.GetCellDescent(FontStyle.Regular),
     ff.GetEmHeight(FontStyle.Regular),
     ff.GetLineSpacing(FontStyle.Regular));
   }

}

</source>


Write font metrics for Courier New font family

<source lang="csharp">

using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class MainClass {

   public static void Main() {
   String formatString = "{0,-16}{1,8}{2,9}{3,10}{4,14}";
   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));
   }

}

</source>


Write font metrics for Times New Roman font family

<source lang="csharp">

using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class MainClass {

   public static void Main() {
   String formatString = "{0,-16}{1,8}{2,9}{3,10}{4,14}";
   Console.WriteLine(formatString, "Font Family Name", "Ascent", "Descent","EmHeight", "Line Spacing");
   FontFamily ff = new FontFamily("Times New Roman");
   Console.WriteLine(formatString, ff.GetName(0),
     ff.GetCellAscent(FontStyle.Regular),
     ff.GetCellDescent(FontStyle.Regular),
     ff.GetEmHeight(FontStyle.Regular),
     ff.GetLineSpacing(FontStyle.Regular));
   }

}

</source>