Листинг 1.2 Создание карандаша




Лабораторная работа №1

Тема: Графическая поверхность. Карандаш и кисти. Графические примитивы: Линия. Ломаная линия. Прямоугольник.

Цель работы: Получения практических навыков при работе с графическими примитивами.

Теоретический материал.

Отображение графики для C++ в VS2010 обеспечивает компонент PictureBox (рис. 1.1). Подобно тому, как художник рисует на поверхности холста, программа "рисует" на графической поверхности компонента PictureBox.

Рис. 1. 1 Компонент PictureBox

Графическая поверхность компонента PictureBox представляет собой объект Graphics, методы которого и обеспечивают вывод графики. Таким образом, для того чтобы на поверхности компонента PictureBox появилась линия, прямоугольник, окружность или загруженная из файла иллюстрация, необходимо вызвать соответствующий метод объекта Graphics.

Доступ к графической поверхности объекта (свойству Graphics) есть только у функции обработки события Paint. Поэтому сформировать (отобразить) графику может только она. Здесь следует вспомнить, что событие Paint воз-никает в начале работы программы, когда ее окно, а следовательно, и все компоненты появляются на экране, а также во время работы программы вся-кий раз, когда окно или его часть вновь появляется на экране, например, после того, как пользователь сдвинет другое окно, частично или полностью перекрывающее окно программы, или развернет свернутое окно.

Создается процедура обработки события Paint обычным образом: сначала надо выбрать компонент PictureBox, затем в окне Properties открыть вкладку Events и в поле события Paint ввести имя функции обработки события (или сделать двойной щелчок левой кнопкой мыши).

В качестве примера в листинге 1.1 приведена функция обработки события Paint компонента PictureBox, которая в поле компонента рисует итальянский флаг. Обратите внимание: доступ к объекту Graphics обеспечивает параметр e функции обработки события.

Листинг 1.1

Графическая поверхность

Графическая поверхность состоит из отдельных точек – пикселов. Положение точки на графической поверхности характеризуется горизонтальной (X) и вертикальной (Y) координатами (рис. 1.2). Координаты точек отсчитываются от левого верхнего угла и возрастают слева направо (координата X) и сверху вниз (координата Y). Левая верхняя точка графической поверхности имеет координаты (0, 0). Размер графической поверхности формы соответствует размеру клиентской области (т. е. без учета высоты области заголовка и ширины границ) формы (свойство ClientSize), а размер графической поверхности компонента PictureBox – размеру компонента.

Рис. 1. 2 Координаты точек графической поверхности формы

Карандаши и кисти

Методы рисования графических примитивов (например, DrawLine – линия, DrawRectangle – прямоугольник, FillRectangle – область) используют карандаши и кисти. Карандаш (объект Pen) определяет вид линии, кисть (объект Brush) - вид закраски области. Например, метод

DrawLine(System::Drawing::Pens::Black, 10,20, 100, 20);

рисует из точки (10, 20) горизонтальную линию длиной 100 пикселов, ис-пользуя черный (Black) карандаш из стандартного набора карандашей (Pens), а метод

FillRectangle(System::Drawing::Brushes::Green, 5, 10, 20, 20);

при помощи стандартной кисти зеленого (Green) цвета рисует зеленый квадрат, левый верхний угол которого находится в точке (5, 10).

Карандаши и кисти определены в пространстве имен System::Drawing.

Карандаш

Карандаш определяет вид линии – цвет, толщину и стиль. В распоряжении программиста есть два набора карандашей: стандартный и системный. Также программист может создать собственный карандаш.

Стандартный набор карандашей – это цветные карандаши (всего их 141), которые рисуют непрерывную линию толщиной в один пиксел. Некоторые карандаши из стандартного набора приведены в табл. 1.1.

Табл.1.1 Некоторые карандаши из стандартного набора

Карандаш

 

Цвет
Pens::Red Красный
Pens::Orange Оранжевый
Pens::Yellow Желтый
Pens::Green Зеленый
Pens::LightBlue Голубой
Pens::Blue Синий
Pens::Purple Пурпурный
Pens::Black Черный
Pens::LightGray Серый
Pens::White Белый
Pens::Transparent Прозрачный

Системный набор карандашей – это карандаши, цвет которых определяется текущей цветовой схемой операционной системы и совпадает с цветом какого-либо элемента интерфейса пользователя. Например, цвет карандаша SystemPens::ControlText совпадает с цветом, который в текущей цветовой схеме используется для отображения текста на элементах управления (ко-мандных кнопках и др.), а цвет карандаша SystemPens::WindowText – с цветом текста в окнах сообщений.

Карандаш из стандартного (Pens) и системного (SystemPens) наборов рисует непрерывную линию толщиной в один пиксел. Если надо нарисовать пунктирную линию или линию толщиной больше единицы, то следует использовать карандаш программиста.

Карандаш программиста – это объект типа Pen, свойства которого (табл. 1.2) определяют вид линии, рисуемой карандашом.

Табл.1.2 Свойства объекта Pen

Свойство Описание
Color Цвет линии
Width Толщина линии (задается в пикселах)
DashStyle Стиль линии (DashStyle::Solid – сплошная; DashStyle::Dash – пунктирная, длинные штрихи; DashStyle::Dot – пунктирная, короткие штрихи; DashStyle::DashDot – пунктирная, чередование длинного и короткого штрихов; DashStyle::DashDotDot – пунктирная, чередование одного длинного и двух коротких штрихов; DashStyle::Custom – пунктирная линия, вид которой определяет свойство DashPattern)
DashPattern Длина штрихов и промежутков пунктирной линии DashStyle::Custom

Для того чтобы использовать карандаш программиста, его надо создать. Создает карандаш конструктор объекта Pen. Конструктор перегружаемый, т. е. для объекта Pen определено несколько конструкторов, которые различаются количеством параметров. Например, конструктор Pen(Цвет) создает карандаш указанного цвета толщиной в один пиксел, а Pen(Цвет, Толщина) – карандаш указанного цвета и толщины. В качестве параметра Цвет можно использовать константу типа Color (табл. 1.3). Другие константы типа Color (а их более 100) можно найти в справочной системе.

Табл.1.2 Константы типа Color

Константа

 

Цвет
Color::Red Красный
Color::Orange Оранжевый
Color::Yellow Желтый
Color::Green Зеленый
Color::LightBlue Голубой
Color::Blue Синий
Color::Purple Пурпурный
Color::Black Черный
Color::LightGray Серый
Color::White Белый
Color::Transparent Прозрачный

Цвет, ширину линии и стиль карандаша, созданного программистом, можно изменить. Чтобы это сделать, надо изменить значение соответствующего свойства.

В листинге 1.2 приведена процедура, которая демонстрирует создание и ис-пользование карандаша программиста.

Листинг 1.2 Создание карандаша

Результат:

Рис. 1. 3 Результат листинга 1.2

Программист может создать карандаш, который рисует пунктирную линию, отличную от стандартной. Чтобы это сделать, надо в свойство DashPattern поместить ссылку на массив описания отрезка линии, а свойству DashStyle присвоить значение DashStyle::Custom.

Массив описания отрезка линии — это состоящий из двух элементов одномерный массив (типа float), который содержит информацию об отрезке пунктирной линии (цепочке "штрих — пропуск"). Первый элемент массива задает длину штриха, второй — пропуска. Приведенная в листинге 1.3 функция демонстрирует процесс создания карандаша, который рисует пунктирную линию, определенную программистом.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2021-04-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: