- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - Эндрю Троелсен
Шрифт:
Интервал:
Закладка:
// Закрашивание данной области формы черным цветом.
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
Как вы можете догадываться, существует и класс диалогового окна для настройки шрифтов (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 и т.д.), которые используются вместе с указанными в таблице базовыми типами.
Работа с типами Pen
Типы Pen GDI+ используются для построения линий, соединяющих конечные точки. Сам по себе тип Pen не слишком полезен. Для выполнения визуализации геометрической формы на поверхности производного от Control типа действительный тип Pen следует направить подходящему методу визуализации, определенному классом Graphics. Вообще говоря, с объектами Pen обычно используются методы DrawXXX(), позволяющие отобразить некоторый набор линий на соответствующей графической поверхности.
Тип Pen определяет небольшой набор инструкторов, позволяющих задать начальный цвет и ширину пера. По большей части функциональные возможности Pen задаются свойствами, поддерживаемыми данным типом. Описания некоторых из этих свойств предлагаются в табл. 20.7.
Таблица 20.7. Свойства Pen
Свойства Описание Brush Определяет тип Brush для использования с данным типом Pen Color Определяет тип Color для использования с данным типом Pen CustomStartCap CustomEndCap Читает или устанавливает параметры пользовательского стиля концов линий, создаваемых с помощью данного типа Pen. Стиль концов линий – это просто термин, используемый для обозначения того, как должен выглядеть начальный и заключительный 'штрих" данного пера. Эти свойства позволяют строить пользовательские стили начала и конца линий для типов Pen DashCap Читает или устанавливает параметры стиля концов линий, используемого для прерывистых линий, создаваемых с помощью данного типа Pen DashPattern Читает или устанавливает массив пользовательской маски для рисования прерывистых линий. Соответствующие "тире" складываются из сегментов линий DashStyle Читает или устанавливает параметры стиля, используемого для прерывистых линий, создаваемых с помощью данного типа Pen StartCap EndCap Читает или устанавливает встроенный стиль концов линий, создаваемых с помощью данного типа Pen. Стиль концов линий Pen устанавливается в соответствии с перечнем LineCap, определенным в пространстве имен System.Drawing.Drawing2D Width Читает или устанавливает ширину данного Pen DashOffset Читает или устанавливает расстояние от начала линии до начала шаблона прерывистой линииПомните о том, что вдобавок к типу Pen в GDI+ предлагается коллекция Pens. Используя ряд статических свойств, вы можете извлечь из этой коллекции объект Pen (или нужный цвет) "на лету", не создавая пользовательский тип Pen вручную. Однако следует знать, что возвращаемый: при этом тип Pen всегда имеет ширину, равную 1.
Если вам понадобятся какие-то экзотические перья, вы должны создать тип Pen вручную. Предоставив вам эту информацию, я теперь могу перейти к построению примеров геометрических изображений с помощью простых типов Pen. Предположим, что у нас есть главный объект Form, способный отвечать на запросы визуализации. Реализация ответа выглядит так.
private void MainForm_Paint(object sender, PaintEventArgs e) {
Graphics g= e.Graphics;
// Создание большого пера синего цвета.
Pen bluePen = new Pen(Color.Blue, 20);
// Получение готового пера из типа Pens.
Pen pen2 = Pens.Firebrick;
// Визуализация некоторых шаблонов.
g.DrawEllipse(bluePen, 10, 10, 100, 100);
g.DrawLine(pen2, 10, 130, 110, 130);
g.DrawPie(Pens.Black, 150, 10, 120, 150, 90, 80);
// Рисование пурпурного полигона с пунктирной границей.…
Pen pen3 = new Pen(Color.Purple, 5);
pen3.DashStyle = DashStyle.DashDotDot;
g.DrawPolygon(pen3, new Point[] { new Point(30, 140), new Point(265, 200), new Point(100, 225), new Point(190, 190), new Point(50, 330), new Point(20, 180) });