| netlib.narod.ru | < Назад | Оглавление | Далее > |
В пространстве имен System.Drawing определены два важных класса для работы со шрифтами:
FontFamily определен как строка, например «Times New Roman»;
Font — это комбинация из названия шрифта (объект FontFamily или символьная строка, определяющая гарнитуру), атрибутов (таких как курсив или полужирный) и кегля;
Начнем с класса Font. Есть три категории конструкторов Font, основанные на:
существующем объекте Font;
символьной строке, определяющей гарнитуру;
объекте FontFamily.
Простейший конструктор Font создает новый шрифт на базе существующего. Новый шрифт отличается лишь начертанием:
Конструкторы Font (выборочно)
| Font(Font font, FontStyle fs) |
FontStyle — это перечисление, состоящее из серии однобитных флагов:
Перечисление FontStyle
| Член | Значение |
| Regular | 0 |
| Bold | 1 |
| Italic | 2 |
| Underline | 4 |
| Strikeout | 8 |
Предположим, что font — это существующий шрифт, например, полученный из свойства Font формы:
Font font = Font;
Вы можете создать его курсивное начертание, скажем, fontItalic, инструкцией:
Font fontItalic = new Font(font, FontStyle.Italic);
Вы можете использовать несколько членов перечисления с оператором поразрядного ИЛИ языка С#:
Font fontBoldStrikeout = new Font(font, FontStyle.Bold | FontStyle.Strikeout);
Вот программа, которая использует свойство Font формы и создает полужирное и курсивное начертания для вывода на экран обычного текста, полужирного и выделенного курсивом.
BoldAndItalic.cs
//-------------------------------------------
// BoldAndItalic (C) 2001 by Charles Petzold
//-------------------------------------------
using System;
using System.Drawing;
using System.Windows.Forms;
class BoldAndItalic: PrintableForm
{
public new static void Main()
{
Application.Run(new BoldAndItalic());
}
public BoldAndItalic()
{
Text = "Bold and Italic Text";
}
protected override void DoPage(Graphics grfx, Color clr, int cx, int cy)
{
const string str1 = "This is some ";
const string str2 = "bold";
const string str3 = " text and this is some ";
const string str4 = "italic";
const string str5 = " text.";
Brush brush = new SolidBrush(clr);
Font fontRegular = Font;
Font fontBold = new Font(fontRegular, FontStyle.Bold);
Font fontItalic = new Font(fontRegular, FontStyle.Italic);
float x = 0;
float y = 0;
grfx.DrawString(str1, fontRegular, brush, x, y);
x += grfx.MeasureString(str1, fontRegular).Width;
grfx.DrawString(str2, fontBold, brush, x, y);
x += grfx.MeasureString(str2, fontBold).Width;
grfx.DrawString(str3, fontRegular, brush, x, y);
x += grfx.MeasureString(str3, fontRegular).Width;
grfx.DrawString(str4, fontItalic, brush, x, y);
x += grfx.MeasureString(str4, fontItalic).Width;
grfx.DrawString(str5, fontRegular, brush, x, y);
}
}
Так как один из аргументов DrawString — Font, а шрифты определены только как нормальный, полужирный, курсивный и курсивный полужирный, требуется несколько вызовов DrawString, чтобы вывести на экран текст, сочетающий разные начертания. Программа использует MeasureString для того, чтобы определить размеры каждого фрагмента текста и расположить текст горизонтально:

Если приглядеться, можно заметить увеличенные пробелы между отдельными фрагментами текста на экране. Я покажу, как этого избежать, когда дойдем до детального описания класса StringFormat.
И еще одно предостережение, которое мы обсудим позднее: конструктор Font может не работать, если гарнитура, к которой принадлежит шрифт, не поддерживает требуемое начертание. Он сгенерирует исключение, которое правильно написанная программа должна обработать. Этой проблемы нет в программе BoldAndItalic, потому что в ней используется шрифт формы по умолчанию, а он имеет все виды начертаний. Однако BoldAndItalic не будет работать с любой произвольной гарнитурой.
| netlib.narod.ru | < Назад | Оглавление | Далее > |