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 | < Назад | Оглавление | Далее > |