Font Control
This section introduces methods and constants that are related to font control. The properties of Font objects cannot be modified. If you need a different Font, you must create a new Font object. There are many overloaded versions of the Font constructor for initializing Font objects. Some properties of class Font are summarized in Fig. 17.8.
Property |
Description |
---|---|
Bold |
Returns true if the font is bold. |
FontFamily |
Returns the Font's FontFamilya grouping structure to organize fonts and define their similar properties. |
Height |
Returns the height of the font. |
Italic |
Returns TRue if the font is italic. |
Name |
Returns the font's name as a string. |
Size |
Returns a float value indicating the current font size measured in design units (design units are any specified unit of measurement for the font). |
SizeInPoints |
Returns a float value indicating the current font size measured in points. |
Strikeout |
Returns true if the font is in strikeout format. |
Underline |
Returns true if the font is underlined. |
Note that the Size property returns the font size as measured in design units, whereas SizeInPoints returns the font size as measured in points (the more common measurement). Design units allow the font size to be specified in one of several units of measurement, such as inches or millimeters. Some versions of the Font constructor accept a GraphicsUnit argument. GraphicsUnit is an enumeration that allows you to specify the unit of measurement that describes the font size. Members of the GraphicsUnit enumeration include Point (1/72 inch), Display (1/75 inch), Document (1/300 inch), Millimeter, Inch and Pixel. If this argument is provided, the Size property contains the size of the font as measured in the specified design unit, and the SizeInPoints property contains the corresponding size of the font in points. For example, if we create a Font having size 1 and specify the unit of measurement as GraphicsUnit.Inch, the Size property will be 1 and the SizeInPoints property will be 72, because there are 72 points in an inch.The default measurement for the font size is GraphicsUnit.Point (thus, the Size and SizeInPoints properties will be equal).
Class Font has several constructors. Most require a font name, which is a string representing a font currently supported by the system. Common fonts include Microsoft SansSerif and Serif. Most Font constructors also require as arguments the font size and font style. The font style is specified with a constant from the FontStyle enumeration (Bold, Italic, Regular, Strikeout and Underline, or a combination of these). You can combine font styles with the | operator, as in FontStyle.Italic | FontStyle.Bold, which makes a font both italic and bold. Graphics method DrawString sets the current drawing fontthe font in which the text displaysto its Font argument.
|
Drawing Strings in Different Fonts
The program in Fig. 17.9 displays text in different fonts and sizes. The program uses the Font constructor to initialize the Font objects (lines 24, 28, 32 and 36). Each call to the Font constructor passes a font name (e.g., Arial, Times New Roman, Courier New or Tahoma) as a string, a font size (a float) and a FontStyle object (style). Graphics method DrawString sets the font and draws the text at the specified location. Note that line 20 creates a DarkBlue SolidBrush object (brush). All strings drawn with that brush appear in DarkBlue.
Figure 17.9. Fonts and FontStyles.
1 // Fig. 17.9 UsingFonts.cs
2 // Fonts and FontStyles.
3 using System;
4 using System.Drawing;
5 using System.Windows.Forms;
6
7 // demonstrate font constructors and properties
8 public partial class UsingFonts : Form
9 {
10 // default constructor
11 public UsingFonts()
12 {
13 InitializeComponent();
14 } // end constructor
15
16 // demonstrate various font and style settings 17 protected override void OnPaint( PaintEventArgs paintEvent ) 18 { 19 Graphics graphicsObject = paintEvent.Graphics; 20 SolidBrush brush = new SolidBrush( Color.DarkBlue ); 21 22 // arial, 12 pt bold 23 FontStyle style = FontStyle.Bold; 24 Font arial = new Font( "Arial" , 12, style ); 25 26 // times new roman, 12 pt regular 27 style = FontStyle.Regular; 28 Font timesNewRoman = new Font( "Times New Roman", 12, style ); 29 30 // courier new, 16 pt bold and italic 31 style = FontStyle.Bold | FontStyle.Italic; 32 Font courierNew = new Font( "Courier New", 16, style ); 33 34 // tahoma, 18 pt strikeout 35 style = FontStyle.Strikeout; 36 Font tahoma = new Font( "Tahoma", 18, style ); 37 38 graphicsObject.DrawString( arial.Name + 39 " 12 point bold.", arial, brush, 10, 10 ); 40 41 graphicsObject.DrawString( timesNewRoman.Name + 42 " 12 point plain.", timesNewRoman, brush, 10, 30 ); 43 44 graphicsObject.DrawString( courierNew.Name + 45 " 16 point bold and italic.", courierNew, 46 brush, 10, 54 ); 47 48 graphicsObject.DrawString( tahoma.Name + 49 " 18 point strikeout.", tahoma, brush, 10, 75 ); 50 } // end method OnPaint 51 } // end class UsingFonts
|
Font Metrics
You can determine precise information about a font's metrics (or properties), such as height, descent (the amount that characters dip below the baseline), ascent (the amount that characters rise above the baseline) and leading (the difference between the ascent of one line and the decent of the previous line). Figure 17.10 illustrates these font metrics.
Figure 17.10. Font metrics illustration.
Class FontFamily defines characteristics common to a group of related fonts. Class FontFamily provides several methods used to determine the font metrics that are shared by members of a particular family. These methods are summarized in Fig. 17.11.
Method |
Description |
---|---|
GetCellAscent |
Returns an int representing the ascent of a font as measured in design units. |
GetCellDescent |
Returns an int representing the descent of a font as measured in design units. |
GetEmHeight |
Returns an int representing the height of a font as measured in design units. |
GetLineSpacing |
Returns an int representing the distance between two consecutive lines of text as measured in design units. |
The program in Fig. 17.12 displays the metrics of two fonts. Line 23 creates Font object arial and sets it to 12-point Arial font. Line 24 uses Font property FontFamily to obtain object arial's FontFamily object. Lines 2728 output the string representation of the font. Lines 3044 then use methods of class FontFamily to obtain the ascent, descent, height and leading of the font and draw strings containing that information. Lines 4768 repeat this process for font sansSerif, a Font object derived from the MS Sans Serif FontFamily.
Figure 17.12. FontFamily class used to obtain font-metric information.
1 // Fig 17.12: UsingFontMetrics.cs
2 // Displaying font metric information
3 using System;
4 using System.Drawing;
5 using System.Windows.Forms;
6
7 // display font information
8 public partial class UsingFontMetrics : Form
9 {
10 // default constructor 11 public UsingFontMetrics() 12 { 13 InitializeComponent(); 14 } // end constructor 15 16 // displays font information 17 protected override void OnPaint( PaintEventArgs paintEvent ) 18 { 19 Graphics graphicsObject = paintEvent.Graphics; 20 SolidBrush brush = new SolidBrush( Color.DarkBlue ); 21 22 // Arial font metrics 23 Font arial = new Font( "Arial", 12 ); 24 FontFamily family = arial.FontFamily; 25 26 // display Arial font metrics 27 graphicsObject.DrawString( "Current Font: " + 28 arial, arial, brush, 10, 10 ); 29 30 graphicsObject.DrawString( "Ascent: " + 31 family.GetCellAscent( FontStyle.Regular ), arial, 32 brush, 10, 30 ); 33 34 graphicsObject.DrawString( "Descent: " + 35 family.GetCellDescent( FontStyle.Regular ), arial, 36 brush, 10, 50 ); 37 38 graphicsObject.DrawString( "Height: " + 39 family.GetEmHeight( FontStyle.Regular ), arial, 40 brush, 10, 70 ); 41 42 graphicsObject.DrawString( "Leading: " + 43 family.GetLineSpacing( FontStyle.Regular ), arial, 44 brush, 10, 90 ); 45 46 // display Sans Serif font metrics 47 Font sanSerif = new Font( "Microsoft Sans Serif", 48 14, FontStyle.Italic ); 49 family = sanSerif.FontFamily; 50 51 graphicsObject.DrawString( "Current Font: " + 52 sanSerif, sanSerif, brush, 10, 130 ); 53 54 graphicsObject.DrawString( "Ascent: " + 55 family.GetCellAscent( FontStyle.Regular ), sanSerif, 56 brush, 10, 150 ); 57 58 graphicsObject.DrawString( "Descent: " + 59 family.GetCellDescent( FontStyle.Regular ), sanSerif, 60 brush, 10, 170 ); 61
62 graphicsObject.DrawString( "Height: " + 63 family.GetEmHeight( FontStyle.Regular ), sanSerif, 64 brush, 10, 190 ); 65 66 graphicsObject.DrawString( "Leading: " + 67 family.GetLineSpacing( FontStyle.Regular ), sanSerif, 68 brush, 10, 210 ); 69 } // end method OnPaint 70 } // end class UsingFontMetrics
|