Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 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.
- Практическая работа 53. Запуск Access. Работа с объектами базы данных
- Лекция 15. Работа с базами данных
- Работа с ресурсами локальной сети
- Эффективная работа с временными файлами сортировки
- Ускоренная работа с индексами
- HR-брендинг: Работа с поколением Y, новые инструменты для коммуникации, развитие корпоративной культуры и еще 9 эффектив...
- Безопасная работа с внешними таблицами
- Работа со строками
- 9.2. Работа прокси-сервера
- 3. Заработок для фотографов: заработать на фото – сайты фотобанков
- Работа с активным документом
- Работа с переменными