Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование в Windows API. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
12.08.2026
Размер:
752 Кб
Скачать

 

Сплошная цветная кисть, по умолчанию

DC_BRUSH

белого цвета. Цвет может быть

 

установлен функцией SetDCBrushColor.

 

Серая кисть. Рекомендуется использовать

GRAY_BRUSH

только в окнах классов, имеющих стили

 

CS_HREDRAW и CS_VREDRAW.

HOLLOW_BRUSH

Прозрачная кисть. Аналогично

NULL_BRUSH.

 

 

Светло-серая кисть. Рекомендуется

LTGRAY_BRUSH

использовать только в окнах классов,

имеющих стили CS_HREDRAW и

 

 

CS_VREDRAW.

NULL_BRUSH

Пустая кисть. Аналогично

HOLLOW_BRUSH.

 

WHITE_BRUSH

Белая кисть.

BLACK_PEN

Чёрное перо.

 

Сплошное цветное перо, по умолчанию

DC_PEN

белого цвета. Цвет может быть

 

установлен функцией SetDCPenColor.

WHITE_PEN

Белое перо.

NULL_PEN

Прозрачное (пустое) перо.

ANSI_FIXED_FONT

Моноширинный системный шрифт

Windows.

 

ANSI_VAR_FONT

Пропорциональный системный шрифт

Windows.

 

DEVICE_DEFAULT_FO

Шрифт, зависящий от платформы.

NT

 

DEFAULT_GUI_FONT

Шрифт, используемый по умолчанию в

элементах ГПИ (меню, диалоговые окна).

 

OEM_FIXED_FONT

Моноширинный шрифт OEM.

 

Системный шрифт, используемый

SYSTEM_FONT

системой по умолчанию для меню,

 

элементов диалоговых окон и текста.

 

Моноширинный системный шрифт.

SYSTEM_FIXED_FONT

Данный объект поддерживается только

для совместимости с ранними версиями

 

 

Windows.

 

Стандартная палитра (по умолчанию),

DEFAULT_PALETTE

которая состоит из постоянных цветов

 

системной палитры.

 

51

Функция CreatePen создаёт логическое перо указанного типа, толщины и цвета:

HPEN CreatePen (int fnPenStyle, int nWidth,

COLORREF crColor);

fnPenStyle

Стиль пера (таблица 5.4). nWidth

Ширина пера в логических единицах. Если значение параметра равно нулю, перо всегда имеет ширину в 1 пиксель, независимо от текущих преобразований.

Функция возвращает перо указанной ширины со стилем PS_SOLID, если указана ширина более 1 для следующих стилей: PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT.

crColor

Упакованное (RGB) значение цвета.

Возвращаемое значение:

при успешном завершении: дескриптор логического пера;

при ошибке: NULL.

Перо, созданное с помощью данной функции, может последовательно выделяться в контексте устройства для использования при рисовании линий. Если значение параметра nWidth равно нулю, толщина рисуемой линии всегда составляет 1 пиксель, независимо от текущих преобразований. Если значение параметра nWidth более 1, параметр fnPenStyle должен иметь значение PS_NULL,

PS_SOLID или PS_INSIDEFRAME. Если значение параметра nWidth более 1 и значение параметра fnPenStyle равно PS_INSIDEFRAME, то с использованием данного пера линия помещается внутрь рамки всех примитивов, за исключением многоугольников и линий из нескольких

52

сегментов. Если значение параметра nWidth более 1,

значение параметра fnPenStyle равно PS_INSIDEFRAME и

значение цвета, определяемого параметром crColor не соответствует ни одному из цветов логической палитры, при рисовании линий система использует дополнительный цвет. Дополнительные цвета не могут быть использованы со сплошными перьями.

Таблица 5.4. Стили пера

Значение

Описание

PS_SOLID

Перо сплошное.

 

Перо штриховое. Данный стиль

PS_DASH

действителен, только если ширина пера в

физических единицах меньше или равна

 

 

единицы.

 

Перо точечное. Данный стиль

PS_DOT

действителен, только если ширина пера в

физических единицах меньше или равна

 

 

единицы.

 

Перо состоит из штрихов и точек.

PS_DASHDOT

Данный стиль действителен, только если

ширина пера в физических единицах

 

 

меньше или равна единицы.

 

Перо состоит из штрихов и двойных

PS_DASHDOTDOT

точек. Данный стиль действителен,

только если ширина пера в физических

 

 

единицах меньше или равна единицы.

PS_NULL

Перо невидимое.

 

Перо сплошное. Когда данное перо

 

используется любыми функциями

 

рисования, использующими в качестве

 

параметра ограничивающий

PS_INSIDEFRAME

прямоугольник, логические размеры

фигуры сокращаются таким образом, что

 

 

фигура полностью размещается внутри

 

ограничивающего прямоугольника.

 

Данный стиль применяется только для

 

геометрических перьев.

 

53

Функция CreateSolidBrush создаёт логическую кисть сплошного заполнения указанного цвета:

HBRUSH CreateSolidBrush (COLORREF crColor);

crColor

Цвет кисти в формате RGB.

Возвращаемое значение:

при успешном завершении: дескриптор логической кисти;

при ошибке: NULL.

Сплошная кисть представляет собой битовую маску, которую система использует для заполнения замкнутых фигур.

Функция CreateHatchBrush создаёт логическую кисть штрихового заполнения указанного цвета:

HBRUSH CreateHatchBrush (int fnStyle,

COLORREF clrref);

fnStyle

Код стиля штриховки (таблица 5.5).

clrref

Цвет штрихов кисти в формате RGB.

Возвращаемое значение:

при успешном завершении: дескриптор логической кисти;

при ошибке: NULL.

Штриховая кисть представляет собой битовую маску, которую система использует для заполнения замкнутых фигур. Если приложение использует штриховую кисть для заполнения фона родительского и дочернего окна, может

54

потребоваться настройка начальной позиции кисти с помощью функций SetBrushOrgEx и GetBrushOrgEx.

Таблица 5.5. Стили штриховой кисти

Значение

Описание

HS_FDIAGONAL

Диагональные штрихи из левого верхнего

угла в правый нижний (\\\).

 

HS_CROSS

Перекрёстные горизонтальные и

вертикальные штрихи (+++).

 

HS_DIAGCROSS

Перекрёстные диагональные штрихи (ХХХ).

HS_BDIAGONAL

Диагональные штрихи из левого нижнего

угла в правый верхний (///).

 

HS_HORIZONTAL

Горизонтальные штрихи (===).

HS_VERTICAL

Вертикальные штрихи (|||).

5.3 Функции для вывода текста

Т.к. доступные шрифты могут изменяться от системы к системе, не следует предполагать, что выбранный шрифт именно тот, который требуется. Логический шрифт может быть последовательно выбран для любого устройства.

Структура LOGFONT предназначена для хранения параметров логического шрифта, назначение полей аналогично параметрам функции CreateFont. Данная структура может быть использована для создания шрифта с помощью функции CreateFontIndirect:

HFONT CreateFontIndirect (const LOGFONT *lplf);

lplf

Адрес структуры LOGFONT.

55

Функция TextOut выводит текст:

BOOL TextOut (

 

HDC hdc,

// дескриптор контекста устройства

int nXStart,

// координата x начальной позиции

int nYStart,

// координата y начальной позиции

LPCTSTR lpString, // адрес строки

int cbString

// количество выводимых символов

);

 

Функция SetTextColor устанавливает текущий цвет текста:

BOOL SetTextColor (

HDC hdc, // дескриптор контекста устройства COLORREF rgbCol // значение цвета в формате RGB

);

Функция SetTextColor устанавливает текущий цвет текста:

BOOL SetTextColor (

HDC hdc, // дескриптор контекста устройства COLORREF crColor // значение цвета в формате RGB

);

56

5.4 Функции API рисования простых графических примитивов

Рисование линий

Функция MoveToEx перемещает текущую позицию пера в заданную точку:

BOOL MoveToEx (

 

HDC hdc,

// дескриптор контекста устройства

int X,

// координата x

int Y,

// координата y

LPPOINT lpPoint // адрес структуры для записи

);

// предыдущей позиции

Функция LineTo рисует линию от текущей позиции пера к заданной точке:

BOOL LineTo (

HDC hdc, // дескриптор контекста устройства int nXEnd, // координата x

int nYEnd // координата y );

Рисование замкнутого многоугольника

BOOL Polygon(

 

HDC hdc,

// дескриптор контекста устройства

POINT *lpPoints, // адрес массива координат вершин

int

nCount // число вершин

);

 

57

Рисование эллипса

Эллипс задаётся габаритным прямоугольником (ГП), в который он вписан.

BOOL Ellipse(

HDC hdc, // дескриптор контекста устройства int nLeftRect, // левая граница ГП

int nTopRect, // верхняя граница ГП int nRightRect, // правая граница ГП int nBottomRect // нижняя граница ГП

);

5.5 Задание цвета при работе с функциями графического вывода

При выполнении графического вывода одним из часто используемых параметров является цвет. Для представления цвета используется формат RGB, значение интенсивности каждой из красной, зелёной и синей компонент задаётся целым числом в диапазоне от 0 до 255. Все 3 компоненты хранятся в переменных типа COLORREF (32-разрядное целое без знака) в следующем формате: 0x00BBGGRR. Для задания цвета по компонентам используется макрос RGB:

COLORREF RGB (BYTE byRed, BYTE byGreen,

BYTE byBlue);

byRed

Интенсивность красного цвета. byGreen

Интенсивность зелёного цвета.

byBlue

Интенсивность синего цвета.

58

Функция SetBkMode устанавливает режим закраски фона для указанного контекста устройства:

int SetBkMode (HDC hdc, int iBkMode); hdc

Дескриптор контекста устройства. iBkMode

Код режима закраски фона (таблица 5.6).

Возвращаемое значение:

при успешном завершении: код предыдущего режима закраски;

при ошибке: ноль.

Данная функция устанавливает режим закраски фона между элементами изображения (штриховых перьев, штриховых кистей и текста); не влияет на линии, нарисованные с использованием пера, созданного функцией ExtCreatePen. Параметр iBkMode может также принимать специальные значения, определяемые конкретным драйвером графического устройства; подсистема GDI передаёт такие значения драйверу, если они не поддерживаются драйвером – игнорируются.

Текущее значение режима закраски фона может быть получено с помощью функции GetBkMode.

Таблица 5.6. Режимы закраски фона

Значение

Описание

 

Фрагменты фона элементов текста,

OPAQUE

штриховой кисти или штрихового пера

 

закрашиваются цветом фона.

TRANSPARENT

Фрагменты фона не изменяются.

Функция SetBkColor устанавливает текущий цвет фона для указанного контекста:

59

COLORREF SetBkColor (HDC hdc, COLORREF crColor);

hdc

Дескриптор контекста устройства. crColor

Новый цвет фона в формате RGB.

Возвращаемое значение:

при успешном завершении: предыдущее значение цвета фона в формате RGB;

при ошибке: CLR_INVALID.

Данная функция устанавливает цвет закраски фона между элементами изображения (штриховых перьев, штриховых кистей и текста); не влияет на линии, нарисованные с использованием пера, созданного функцией ExtCreatePen. Если режим закраски фона установлен в OPAQUE, цвет фона используется для заполнения зазоров между штрихами штриховых или точечных линий, штриховых кистей, а также элементами текста. Цвет фона также используется при преобразовании битовых изображений из цветного в монохромное и наоборот.

Текущее значение цвета фона может быть получено с помощью функции GetBkColor.

Ниже приведён пример программы вывода простых графических примитивов с использованием различных режимов закраски фона.

60

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]