Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Работа с семействами шрифтов

Работа с семействами шрифтов

Пространство имен System.Drawing определяет также тип FontFamily, предлагающий абстракцию для группы гарнитур, имеющих одинаковый базовый дизайн, но с определенными вариациями стиля. Семейство шрифтов, например, такое как Verdana, может включить в себя несколько шрифтов, отличающихся по стилю и размеру. Например, Verdana Bold (полужирный) 12 пунктов и Verdana Italic (курсив) 24 пункта являются разными шрифтами в рамках одного семейства шрифтов Verdana.

Конструктор типа FontFamily получает на вход строку с именем семейства шрифтов, которое вы пытаетесь представить. После создания "общего семейства" вы можете создать более специфичный объект Font.

private void MainForm_Paint(object sender, PaintEventArgs e) {
 Graphics g = e.Graphics;
 // Создание семейства шрифтов.
 FontFamily myFamily = new FontFamilу("Verdana");
 // Передача семейства конструктору Font.
 Font myFont = new Font(myFamily, 12);
 g.Drawstring("Привет!", myFont, "Brushes.Blue, 10, 10);
}

Больший интерес представляет собой возможность сбора статистики в отношении данного семейства шрифтов. Скажем, вы создаете приложение текстового редактора и хотите определить среднюю ширину символа в конкретном объекте FontFamily. Или, например, вам нужна информация о надстрочных и подстрочных значениях для данного символа. Для получения такой информации тип FontFamily предлагает использовать специальные члены, описания которых приведены в табл. 20.5.

Таблица 20.5. Члены типа FontFamily

Член Описание
GetCellAscent() Возвращает метрику надстрочного элемента для членов данного семейства
SetCellDescent() Возвращает метрику подстрочного элемента для членов данного семейства
GetLineSpacing() Возвращает расстояние между двумя последовательными строками текста для данного FontFamily с указанным FontStyle
GetName() Возвращает имя данного FontFamily на указанном языке
IsStyleAvailable() Индикатор доступности указанного FontStyle

Для примера рассмотрите следующий обработчик события Paint, выводящий на печать ряд характеристик семейства шрифтов Verdana.

private void MainForm_Paint(object sender, PaintEventArgs e) {
 Graphics g = e.Graphics;
 FontFamily myFamily = new FontFamily("Verdana");
 Font myFont = new Font(myFamily, 12);
 int у = 0;
 int fontHeight = myFont.Height;
 // Отображение единицы измерения для членов FontFamily.
 this.Text = "Единица измерения: GraphicsUnit." + myFont.Unit;
 g.DrawString("Семейство Verdana.", myFont, Brushes.Blue, 10, y);
 у += 20;
 // Характеристики связей нашего семейства.
 g.DrawString("Надстрочные для Verdana Bold: " + myFamily.GetCellAscent(FontStyle.Bold), myFont, Brushes.Black, 10, у + fontHeight);
 у += 20;
 g.DrawString("Подстрочные для Verdana Bold: " + myFamily.GetCellDescent(FontStyle.Bold), myFont, Brushes.Black, 10, у + fontHeight);
 у += 20;
 g.DrawString("Интерлиньяж для Verdana Bold: " + myFamily.GetLineSpacing(FontStyle.Bold), myFont, Brushes.Black, 10, у + fontHeight);
 у += 20;
 g.DrawString("Высота для Verdana Bold: " + myFamily.GetEmHeight(FontStyle.Bold), myFont, Brushes.Black, 10, у + fontHeight);
 у += 20;
}

На рис. 20.8 показан результат.


Рис. 20.8. Сбор статистики для семейства шрифтов Verdana

Заметьте, что указанные члены типа Font Family возвращают значения с использованием в качестве единицы измерения GraphicsUnit.Point (а не Pixel), что соответствует 1/72 дюйма. Вы можете преобразовать эти значения в те единицы, которые вам подходят лучше всего.

Исходный код. Проект FontFamilyApp размещен в подкаталоге, соответствующем главе 20.

Оглавление книги


Генерация: 1.218. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз