- •1. Сообщение wm_paint
- •2. Рисование графических примитивов
- •2.1. Создание кистей и перьев
- •2.2. Выбор объектов
- •2.3. Рисование прямоугольника
- •2.4. Рисование эллипса
- •2.5. Рисование линий
- •3. Обработка нажатий клавиш мыши
- •4. Обработка сообщений от клавиатуры
- •5.Порядок выполнения лабораторной работы
- •6. Контрольные вопросы
- •Приложение
2. Рисование графических примитивов
2.1. Создание кистей и перьев
Для того, чтобы нарисовать графическую фигуру (прямоугольник, эллипс, линию, и т.д.) c определенной заливкой и контуром, необходимо задать перо (тип HPEN) и кисть (тип HBRUSH), которыми будет рисоваться фигура. При чем перо определяет толщину и стиль линий фигуры, а кисть заливку фигуры.
Функция CreateSolidBrush создает кисть заданного цвета:
HBRUSH CreateSolidBrush(
COLORREF crColor // значение цвета кисти
);
Значение COLORREF - это 32 - битовое значение, определяющее цвет в RGB формате, которое имеет следующую шестнадцатеричную форму 0x00bbggrr. (старшие два байта = 0, следующие задают синюю компоненту, следующие зеленую, следующие красную). Максимальное значение для каждого байта 0xFF. Для облегчения задания цвета очень часто используется макрос
COLORREF RGB(
BYTE bRed, // красная компонента цвета
BYTE bGreen, // зеленая компонента цвета
BYTE bBlue // синяя компонента цвета
);
Функция CreatePen создает перо заданной толщины, стиля и цвета.
HPEN CreatePen(
int fnPenStyle, // стиль пера
int nWidth, // толщина пера
COLORREF crColor // цвет пера
);
Стиль пера fnPenStyle определяет вид линий фигуры: сплошной, штрих, пунктир. Некоторые стили пера приведены в таблице 3.1.:
Таблица 3.1. Стили пера
-
Стиль
Описание
PS_DASH
штрих
PS_DOT
Пунктир
PS_SOLID
Сплошной
PS_DASHDOT
штрих - пунктир
PS_NULL
Нет пера
Толщина пера nWidth в логических единицах, если равно нулю, толщина пера равна единице. Если толщина линии больше единицы, то стили PS_DASH, PS_DOT, PS_DASHDOT неприменимы.
2.2. Выбор объектов
После того, как необходимые перо и кисть созданы, необходимо их выбрать функцией SelectObject:
HGDIOBJ SelectObject(
HDC hdc, // дескриптор контекста устройства
HGDIOBJ hgdiobj // дескриптор объекта
);
Дескриптор контекста устройства hdc - контекст устройства клиентского окна. Дескриптор объекта - в данном случае созданное перо или кисть.
2.3. Рисование прямоугольника
Далее требуется вызвать функцию для рисования определенной графической фигуры: прямоугольник - Rectangle, эллипса - Ellipse, линий - MoveTo, LineTo.
Функция рисования прямоугольника - Rectangle:
BOOL Rectangle(
HDC hdc, // дескриптор контекста устройства
int nLeftRect, // х - координата левого верхнего угла прямоугольника
int nTopRect, // y - координата левого верхнего угла прямоугольника
int nRightRect, // х - координата правого нижнего угла прямоугольника
int nBottomRect // y - координата правого нижнего угла прямоугольника
);
Функция рисует прямоугольник выбранными кистью и пером, возвращает ненулевой результат в случае успешного завершения и ноль в противном случае. Сумма координат прямоугольника не может превышать 32767.
