}
}
Заключительной нашей задачей будет отображение строки installedFonts в области клиента, расположенной сразу же под той частью экрана, которая исполь-зуетcя для движущегося текста.
private void MainForm_Paint(object sender, PaintEventArgs e) {
Graphics g = e.Graphics;
Font theFont = new Font(strFontFace, 12 + swellValue);
string message = "Привет GDI+";
// Отображение сообщения в центре окна.
float windowCenter = this.DisplayRectangle.Width/2;
SizeF.stringSize = e.Graphics.MeasureString(message, theFont);
float startPos = windowCenter – (stringSize.Width/2);
g.DrawString(message, theFont, Brushes.Blue, startPos, 10);
// Показ списка установленных шрифтов в прямоугольнике
// под движущимся текстом.
Rectangle myRect = new Rectangle(0, 100, ClientRectangle.Width, ClientRectangle.Height);
// Закрашивание данной области формы черным цветом.
g.FillRectangle(new SolidBrush(Color.Black), myRect);
g.DrawString(installedFonts, new Font("Arial", 12), Brushes.White, myRect);
}
Напомним, что размеры "грязного прямоугольника" проецировались в верхние 100 пикселей области клиента. Поскольку обработчик Tick обновляет только часть формы, остальная ее часть при посылке события Tick не перерисовывается (чтобы оптимизировать задачу визуализации в области клиента).
В качестве завершающего штриха давайте обработаем событие Resize формы, чтобы гарантировать соответствующую перерисовку в нижней части прямоугольника клиента в том случае, когда пользователь изменяет размеры формы.
private void Main.Form_Resize(object sender, System.EventArgs e) {
Rectangle myRect = new Rectangle(0, 100, ClientRectangle.Width, ClientRectangle.Height);
Invalidate(myRect);
}
На рис. 20.10 показан результат (с текстом, представленным шрифтом WingDings!).
Рис. 20.10. Приложение SwellingFontApp в действии
Исходный код.Проект SwellingFontApp размещен в подкаталоге, соответствующем главе 20.
Как вы можете догадываться, существует и класс диалогового окна для настройки шрифтов (FontDialog). Вид этого окна показан на рис. 20.11.
Рис. 20.11. Диалоговое окно Шрифт Windows Forms
Подобно типу ColorDialog, рассмотренному в этой главе выше, для работы с FontDialog нужно просто вызвать метод ShowDialog(). Используя свойства Font, можно извлечь текущие характеристики шрифта для использования в приложении. Для примера рассмотрите следующую форму, имитирующую логику предыдущего проекта ColorDlg. При щелчке пользователя в любом месте окна формы отображается диалоговое окно Шрифт и выводится информация о текущем выборе.
public partial class MainForm: Form {
private FontDialog fontDlg = new FontDialog();
private Font currFont = new Font("Times New Roman", 12);
public MainForm() {
InitializeComponent(); CenterToScreen();
}
private void MainForm_MouseDown(object sender, MouseEventArgs e) {
if (fontDlg.ShowDialog() != DialogResult.Cancel) {
currFont = fontDlg.Font;
this.Text = string.Format("Selected Font: {0}", currFont); Invalidate();
}
}
private void MainForm_Paint(object sender, PaintEventArgs e) {
Graphics g = e.Graphics;
g.DrawString("Проверка…", currFont, Brushes.Black, 0, 0);
}
}
Исходный код.Проект FontDlgForm размещен в подкаталоге, соответствующем главе 20.
Обзор пространства имен System.Drawing.Drawing2D
Теперь, когда мы обсудили возможности использования типа Font, следующей нашей задачей будет рассмотрение объектов Pen и Brush, предназначенных для визуализации геометрических шаблонов. Вы, конечно, можете ограничиться использованием только вспомогательных типов Brushes и Pens для получения уже сконфигурированных типов со сплошным цветом, но вы должны знать о том, что в пространстве имен System.Drawing.Drawing2D есть очень много и более "экзотических" перьев и кистей,
Это дополнительное пространство имен GDI+ предлагает ряд классов, позволяющих изменить форму пера (треугольник, ромб и т.д.), указать текстуру кисти и работать с векторной графикой. Некоторые базовые типы, о которых вам следует знать (сгруппированные по функциональным возможностям), описаны в табл. 20.6.
Таблица 20.6.Классы System.Drawing.Drawing2D
Классы |
Описание |
AdjustableArrowCap CustomLineCap |
Используются для изменения формы концов линий для перьев, Данные типы задают, соответственно, регулируемую стрелку и пользовательскую форму конца линии |
Blend ColorBlend |
Позволяют определить шаблон смешивания (и цвет) для использования с LinearGradientBrush |
GraphicsPath GraphicsPathIterator PathData |
Объект GraphicsPath представляет серию линий и кривых. Этот класс позволяет добавлять в траектории геометрические шаблоны практически любого вида (дуги, прямоугольники, линии, строки, многоугольники и т.д.). PathData содержит графические данные, формирующие траекторию |
HatchBrush LinearGradientBrush PathGradientBrush |
Экзотические типы кистей |
Также следует знать о том. что пространство имен System.Drawing.Drawing2D определяет набор перечней (DashStyle, FillMode, HatchStyle, LineCap и т.д.), которые используются вместе с указанными в таблице базовыми типами.
Читать дальше