Работа с графикой посредством возможностей MFC (Лабораторная работа № 9 по VisualC++ 2005), страница 3

Стили штриховки

Описание

HS_HORIZONTAL

Горизонтальная  штриховка

HS_VERTICAL

Вертикальная штриховка

HS_BDIAGONAL

Диагональная штриховка слева направо сверху вниз под 45 град.

HS_FDIAGONAL

Диагональная штриховка слева направо снизу вверх под 45 град.

HS_CROSS

Пересекающаяся штриховка из горизонт. и вертикальных линий

HS_DIACROSS

 Пересекающаяся штриховка из диагональных линий

Пример.

CBrushbrush2(HS_CROSS, RGB(255,0,0));

          Стандартные кисти сплошной заливки  также можно создавать с помощью метода SelectStockObject( стандарт). Естественно, что устанавливаемая кисть не  имеет идентификатора. Такая кисть называется текущей.

Стандарт  сплошной заливки

Описание кисти

GRAY_BRUSH

Серая

BLACK_BRUSH

Чёрная

HOLLOW_BRUSH

Пустая

LTGRAY_BRUSH

Слегка серая

WHITE_BRUSH

Белая

NULL_BRUSH

Нулевая

DKGRAY_BRUSH

Тёмносерая

Пример.

    pDC->SelectStockObject(GRAY_BRUSH);// Установлена кисть, которая будет заливать фигуры серым цветом.

Здесь pDC, как и раньше,указатель на объект CDC.

2.4.2.1 Использование кисти

          Подобно использованию пера, при выборе новой кисти рекомендуется использовать одну из функций с префиксом Select, которые возвращают адрес старой кисти. Это позволит, при необходимости, восстановить её.

Пример.

CBrush*pOldBrush=(CBrush*)pDC->SelectStockObject(WHITE_BRUSH);//

//Выбрали белую кисть и в указатель pOldBrush занесли адрес старой кисти.

// далее  что-то рисуется………………………………….

pDC->SelectObject(pOldBrush);//Восстановление старой кисти по её адресу  // в указателе  pOldBrush.

2.4.2.2 Закрашивание произвольных замкнутых областей

          Прямоугольники и эллипсы закрашиваются кистью автоматически. Однако, замкнутые участки могут также образоваться и в результате рисования серии линий. При необходимости их закрасить используется метод  FloodFill().  Её прототип имеет вид

BOOL FloodFill(

   int x,

   int y,

   COLORREF crColor

);

Здесь x  и  y  - координаты точки внутри закрашиваемой области;

COLORREF crColor – цвет границы, которым нарисована эта область.

Пример.

    pDC->FloodFill(70,70,RGB(0,0,255));// Закрасить ранее установленной кистью замкнутую область.

2.4.3 Объект «Растровое изображение»

Растровое изображение – объект, заключающий в себе прямоугольную область из пикселей. В этой области можно задавать любое изображение, а также считывать и записывать её в файл и производить с ней другие действия.

2.4.4 Объект «Палитра»

          В Windows различают физические и логические палитры. Логическая палитра предназначена для работы самого приложения.  Для  создания палитры используются методы CreatePalette()   и CreateHalftonePalette().

Сформированная палитра может быть изменена с помощью метода SetPaletteEntries().

          Есть ещё один способ управления цветом с помощью макроса RGB(красный, зелёный, голубой). О нём уже сказано выше в 2.4.1.

3 Отображение графики

          Выбрав перо и кисть, можно приступить к рисованию линий и различных фигур. Для  этого используются функции класса CDC, на которые указывает указатель pDC, передаваемый в качестве параметра при вызове OnDraw( ) .

Выше уже были  приведены примеры, когда вызывались функции MoveTo() и  LineTo() . Рассмотрим некоторые функции.

          1) MoveTo()  Перемещение курсора   .

Класс CDC переопределяет эту функцию:

CPoint  MoveTo ( int x, int  y );//Перейти в позицию x, y

CPoint  MoveTo ( POINT aPoint);//Перейти в позицию, определённую aPoint

          Первая версия принимает координаты  x, y как отдельные аргументы. Вторая принимает один аргумент типа POINT, который представляет собой структуру

typedef struct tagPOINT

{

LONG x;

LONG y;

} POINT;

2) LineTo()   Рисование линии.