Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI.docx
Скачиваний:
49
Добавлен:
16.12.2018
Размер:
3.43 Mб
Скачать

4.13.2 Атрибуты контекста устройства и текст

Некоторые атрибуты контекста устройства влияют на вид выводимого текста. В контексте устройства по умолчанию для текста задан черный цвет, но вы можете изменить его с помощью функции:

SetTextColor(hdc, rgbColor);

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

Пространство между строками текста закрашивается на основании установленных режимов фона и цвета фона. Вы можете изменить режим фона, используя функцию:

SetBkMode(hdc, iMode);

где параметр iMode имеет значение OPAQUE или TRANSPARENT. По умолчанию режим фона установлен равным OPAQUE. Это означает, что Windows закрашивает пространство между строками текста цветом фона. Вы можете изменить цвет фона с помощью функции:

SetBkColor(hdc, rgbColor);

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

Многие программы под Windows задают кисть WHITE_BRUSH, которую Windows использует для закрашивания фона окна. Кисть определяется в структуре класса окна. Кроме того, можно сделать цвет окна вашей программы совпадающим с системными цветами, которые пользователь может установить в программе Control Panel (панель управления). В этом случае вы задаете цвет фона в структуре WNDCLASS таким образом:

wndclass.hbrBackground =(HBRUSH)(COLOR_WINDOW + 1);

Когда вы хотите вывести текст в рабочей области, вы можете установить цвет текста и цвет фона, используя текущие системные цвета:

SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT));

SetBkColor(hdc, GetSysColor(COLOR_WINDOW));

Можно сделать так, чтобы ваша программа отслеживала изменение системных цветов:

case WM_SYSCOLORCHANGE :

InvalidateRect(hwnd, NULL, TRUE);

break;

Другим атрибутом контекста устройства, определяющим вид текста, является межсимвольный интервал. По умолчанию он установлен в 0, что означает отсутствие интервала между соседними символами. Вы можете задать межсимвольный интервал, используя функцию:

SetTextCharacterExtra(hdc, iExtra);

Значение параметра iExtra задается в логических единицах. Windows преобразует его до ближайшего значения в пикселях, которое может быть и 0. Если вы зададите значение параметра iExtra отрицательным (например, чтобы прижать символы ближе друг к другу), Windows использует абсолютное значение заданного числа: вы не можете сделать эту величину меньше 0. Вы можете получить текущее значение межсимвольного интервала, используя функцию GetTextCharacterExtra. Windows предварительно преобразует возвращаемое значение межсимвольного интервала из пикселей в логические единицы.

4.13.3 Использование стандартных шрифтов

Когда вы вызываете одну из функций вывода текста TextOut, TabbedTextOut, ExtTextOut или DrawText, Windows использует шрифт, выбранный в момент вызова функции в контексте устройства. Шрифт определяет особенности изображения символов и размер. Простейший путь выводить текст различными шрифтами состоит в использовании стандартных шрифтов, поддерживаемых Windows. Однако, их список достаточно ограничен.

Вы можете получить описатель стандартного шрифта, вызывая функцию:

hFont = GetStockObject(iFont);

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

SelectObject(hdc, hFont);

Вы можете осуществить это и за один шаг:

SelectObject(hdc, GetStockObject(iFont));

Функция GetStockObject — это та же самая функция, которую мы использовали ранее для получения стандартных перьев и кистей; функцию SelectObject мы использовали при выборе перьев, кистей, битовых образов и регионов в контекст устройства.

Шрифт, выбранный в контекст устройства по умолчанию, называется системным шрифтом и определяется параметром SYSTEM_FONT функции GetStockObject. Это пропорциональный шрифт, состоящий из ANSI символов, который Windows использует для вывода текста в меню, диалоговых окнах, окнах подсказок и в строках заголовков окон. Задание параметра SYSTEM_FIXED_FONT функции GetStockObject (которое было сделано в программе WHATSIZE ранее в этой главе) дает вам описатель шрифта фиксированной ширины (fixed-pitch), совместимого с системным шрифтом, который использовался в более ранних (до 3.0) версиях Windows. Это очень удобно, когда все символы шрифта имеют одинаковую ширину.

Когда вы выбираете новый шрифт в контекст устройства, вы должны вычислить высоту символа шрифта и среднюю ширину символа, используя функцию GetTextMetrics. Если вы выбираете пропорциональный шрифт, то вы должны помнить, что средняя ширина символа — это действительно среднее значение, т. е. некоторые символы более широкие, а некоторые более узкие. Далее в этой главе мы рассмотрим, как определить общую ширину строки, состоящую из символов различной ширины.

Несмотря на то, что функция GetStockObject несомненно предлагает простейший доступ к различным шрифтам, вы не имеете возможности управлять шрифтами, которые предлагает вам Windows. Вскоре вы увидите, каким образом вы можете точно задать желаемый вид и размер символов.

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