- •Лабораторная работа № 5
- •1. Цель работы
- •2. Краткие теоретические сведения
- •2.1. Описание класса cClientDc
- •2.2. Создание инструментов рисования
- •2.3. Типы данных для хранения информации о графических объектах
- •2.4. Методы рисования линейчатых объектов класса cClientDc
- •2.5. Методы рисования закрашенных объектов с помощью кисти
- •2.6. Методы рисования графических примитивов с помощью кисти и пера
- •2.7. Методы работы с текстом
- •3. Задание на лабораторную работу
- •4. Варианты заданий
- •5. Пример решения типового задания
- •5.1. Задание
- •5.2. Этапы выполнения работы
- •6. Контрольные вопросы
2.3. Типы данных для хранения информации о графических объектах
1. Хранение координат точки осуществляется с помощью класса CPoint. Объект этого класса содержит координаты точки x, y (тип данных LONG), а также методы для работы с координатами экрана. Основные методы этого класса перечислены ниже.
Метод для определения координат точки, в которой установлено перо:
CPoint GetCurrentPosition();
Метод перемещения пера в другую точку экрана, заданную координатами x, y или объектом point:
CPoint MoveTo( int x, int y );
CPoint MoveTo( CPoint point );
Метод возвращает координаты предыдущей точки пера.
Для передачи адреса объекта класса CPoint применяют тип данных LPPOINT.
2. Для хранения данных о прямоугольниках используют класс CRect. Он содержит следующие свойства:
LONG left – левая координата прямоугольника;
LONG right – правая координата прямоугольника;
LONG top – верхняя координата прямоугольника;
LONG bottom – нижняя координата прямоугольника.
Этот класс также содержит методы для работы с прямоугольниками, например, методы, возвращающие значения высоты и ширины прямоугольника соответственно:
int Height();
int Width();
Для передачи адреса объекта класса CRect применяют тип данных LPCRECT.
2.4. Методы рисования линейчатых объектов класса cClientDc
1. Метод рисования линии активным пером из текущей точки экрана в точку, заданную координатами x, y или объектом point:
BOOL LineTo( int x, int y );
BOOL LineTo( CPoint point );
2. Метод рисования дуги:
BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
BOOL Arc( LPCRECT Rect, CPoint Start, CPoint End );
Он рисует активным пером эллиптическую кривую внутри прямоугольника, заданного с помощью объекта Rect или координатами его вершин (x1, y1); (x2, y2), расположенных на диагонали, от начальной точки Start или (x3, y3) до конечной точки End или (x4, y4) в направлении против часовой стрелки.
3. Методы определения и установки направления рисования дуги класса CClientDC:
int GetArcDirection(); // определение направления рисования дуги
int SetArcDirection(int ArcDirection);
//установка направления рисования дуги
Параметр ArcDirection может принимать следующие значения:
AD_COUNTERCLOCKWISE – при рисовании дуги против часовой стрелки;
АD_CLOCKWISE – при рисовании дуги по часовой стрелке.
4. Метод рисования полилинии, который последовательно рисует текущим пером отрезки по точкам, заданным в массиве Points, количество использованных точек равно Count:
BOOL Polyline (LPPOINT Points, int Count );
2.5. Методы рисования закрашенных объектов с помощью кисти
1. Метод закрашивания кистью Brush прямоугольника, заданного объектом Rect:
void FillRect( LPCRECT Rect, CBrush* Brush );
2. Метод закрашивания единичной рамки кистью Brush вокруг прямоугольника Rect:
void FrameRect( LPCRECT Rect, CBrush* Brush );
3. Метод закрашивания активной кистью прямоугольника заданного объектом Rect или координатами его вершин (x1, y1); (x2, y2), расположенных на диагонали:
BOOL Rectangle( int x1, int y1, int x2, int y2 );
BOOL Rectangle( LPCRECT Rect );
4. Метод закрашивания активной кистью прямоугольника со скругленными углами заданного координатами его вершин (x1, y1); (x2, y2), расположенных на диагонали. Скругления углов задаются эллипсом шириной x3 и высотой y3:
BOOL RoundRect( int x1, int y1, int x2, int y2, int x3, int y3 );
5. Метод рисования закрашенного цветом cоlоr прямоугольника, который задан объектом Rect:
void FillSolidRect( LPCRECT Rect, COLORREF cоlоr );