Drawing Formatted Text in GDI+



This article has been excerpted from book "Graphics Programming with GDI+".

The DrawString method can also be used to draw formatted text. To format text, the .NET Framework library provides the StringFormat class, which can be passed as a parameter of the DrawString methods. The StringFormat class provides members to set alignment, line spacing, digit substitution, trimming, and tab stops. These classes are defined in the System.Drawing namespace.

Alignment and Trimming

The Alignment and Trimming properties of the StringFormat class are used to set and get alignment and trimming of text. The Alignment property takes a value of type StringAlignment enumeration, and the Trimming property takes a value of type StringTrimming enumeration.

The LineAlignment property represents the line alignment of text, which also takes a value of type StringAlignment enumeration.

The StringAlignment enumeration specifies how to trim characters from a string that does not completely fit into a layout shape. Table 5.10 describes the members of the StringTrimming enumeration.

Listing 5.9 uses Alignment and Trimming properties to align and trim text strings and draws the text to a form. We use two StringFormat objects: strFormat1 and strFormat2. For strFormat1, we set the alignment to Center, line alignment to Center, and trimming to EllipsisCharacter. For StrFormat2 we set the alignment to Far, string alignment to Near, and Trimming to Character. Then we use strFormat1 and strFormat2 as parameters of the DrawString method to apply a string format to the text.

TABLE 5.9: StringAlignment members

Member

Description

Center

Text is aligned in the center of a rectangle.

Far

Text is aligned as far as possible from the origin position of a rectangle.

Near

Text is aligned as close as possible to the origin position of a rectangle.

TABLE 5.10: StringTrimming members

Member

Description

Character

Text is trimmed to the nearest character.

EllipsisCharacter

Text is trimmed to the nearest character, and an ellipsis is inserted at the end of a trimmed line.

EllipsisPath

The center is removed from trimmed lines and replaced by an ellipsis.

EllipsisWord

Text is trimmed to the nearest word, and an ellipsis is inserted at the end of a trimmed line.

None

No trimming.

Word

Text is trimmed to the nearest word.


LISTING 5.9: Using the Trimming and Alignment properties of StringFormat

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

namespace WindowsFormsApplication1
{
     public partial class Form1 : Form
    {
        public Form1()
        {
             InitializeComponent();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {

             //Create a Graphics object
            Graphics g = this.CreateGraphics();
            g.Clear(this.BackColor);
            string text = "Testing GDI+ Text and Font" +
                    "functionality for alignment and trimming.";

             //Create font families
            FontFamily arialFamily = new FontFamily("Arial");

             //Construct font objects
            Font VerdanaFont = new Font("Verdana", 10, FontStyle.Bold);
            Font arialFont = new Font(arialFamily, 16);

             //Create rectangles
            Rectangle rect1 = new Rectangle(10, 10, 100, 150);
            Rectangle rect2 = new Rectangle(10, 165, 150, 100);

             //Construct string format and alignment
            StringFormat strFormat1 = new StringFormat();
            StringFormat strFormat2 = new StringFormat();

             //Set alignment, line alignment, and trimming properties of a string
             strFormat1.Alignment = StringAlignment.Center;
             strFormat1.LineAlignment = StringAlignment.Center;
             strFormat1.Trimming = StringTrimming.EllipsisCharacter;
             strFormat2.Alignment = StringAlignment.Far;
             strFormat2.LineAlignment = StringAlignment.Near;
             strFormat2.Trimming = StringTrimming.Character;

             //Draw GDI+ objects
            g.FillEllipse(new SolidBrush(Color.Blue), rect1);
            g.DrawRectangle(new Pen(Color.Black), rect2);
            g.DrawString(text, VerdanaFont,
            new SolidBrush(Color.White), rect1, strFormat1);
            g.DrawString(text, arialFont,
            new SolidBrush(Color.Red), rect2, strFormat2);

             //Disposes of objects
            arialFont.Dispose();
             VerdanaFont.Dispose();
             arialFamily.Dispose();
            g.Dispose();
        }
    }
}

Figure-5.14.gif

FIGURE 5.14: Alignment and trimming options

Figure 5.14 shows the output from Listing 5.9. Text inside the rectangle is trimmed to fit.

Conclusion

Hope the article would have helped you in understanding Drawing Formatted Text in GDI+. Read other articles on GDI+ on the website.

bookGDI.jpg
This book teaches .NET developers how to work with GDI+ as they develop applications that include graphics, or that interact with monitors or printers. It begins by explaining the difference between GDI and GDI+, and covering the basic concepts of graphics programming in Windows.


Mindcracker
Founded in 2003, Mindcracker is the authority in custom software development and innovation. We put best practices into action. We deliver solutions based on consumer and industry analysis.