Программирование в Windows API. Учебное пособие
.pdf
|
Сплошная цветная кисть, по умолчанию |
|
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
