Атрибуты контекста устройства и текста Используемый при выводе текста шрифт определяется объектом с дескриптором HF0NT. Шрифт создается функциями CreateObjecK) и CreateObjectlndi rect(), заносится в контекст функцией SelectObject(), уничтожается вызовом DeleteObject().
Для определения параметров шрифта используется функция GetTextMetrics(). На вид выводимого текста влияют также некоторые атрибуты контекста устройства. Применение функций задания цвета текста SetTextCol or (hdc. rgbCol or) и прозрачности фона SetBkMode (hdc, iMode) уже рассматривались в предыдущих разделах главы.
Когда необходимо вывести текст в рабочей области, можно установить цвет текста и цвет фона, используя текущие системные цвета, как это показано в следующем фрагменте кода:
SetTextColor (hdc. GetSysColor (C0L0R_WIND0WTEXT)); SetBkColor (hdc. GetSysColor (C0L0R_WIND0W)):
Можно сделать так, чтобы программа отслеживала изменение системных цветов:
case WMJYSCOLORCHANGE: InvalidateRect (hwnd. NULL. TRUE): break;
Другим атрибутом контекста устройства, определяющим вид текста, является межсимвольный интервал. По умолчанию используется нулевое значение, что означает отсутствие интервала между соседними символами. Для явного задания межсимвольного интервала используется функция SetTextCharacterExtra(hdc. iExtra). Значение параметра iExtra задается в логических единицах. Система Windows преобразует его до ближайшего значения в пикселах, которое может быть и нулем. Можно также получить текущее значение межсимвольного интервала, используя функцию GetTextCharacterExtra(). При этом операционная система предварительно преобразует возвращаемое значение межсимвольного интервала из пикселов в логические единицы.
Для создания новых шрифтов удобнее пользоваться функцией косвенного создания CreateFontlndi rect(). Она получает указатель на структуру LOGFONT, синтаксис которой приведен ниже:
typedef struct tagLOGFONT
{
int IfHeight; //Высота символа в логических единицах
Атрибуты контекста устройства и текста
int IfWidth; //Средняя ширина символа