Контекст устройств. GDI, драйверы и устройства вывода., страница 6

Приложения могут явно определить начало отсчета кисти с помощью функции SetBrushOrgEx. Начало отсчета кисти — это пара координат, определяющая смещение образца кисти относительно верхнего левого угла клиентской области окна.

При создании и использовании кистей используются несколько дополнительных функций. Сплошные кисти, кисти с образцами и штриховые кисти можно создать, вызвав соответствующие функции CreateSolidBrush, CreatePatternBrush и CreateHatchBrush. Кисти на основе независимых от устройства растровых изображений можно создать вызовом функции CreateDIBPattemBrushPt.

Соответствующий эффект на заполнение содержимого объектов оказывает также режим смешивания переднего плана, указанный в вызове функции SetROPZ.

Шрифты

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

Эта функция может "озадачить" пользователей, которые привыкли работать с приложениями, позволяющими явно выбирать шрифт, указав его имя, атрибут и размер. Хотя можно выбрать шрифт и по имени, но функция CreateFont позволяет указать дополнительные параметры

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

Тем не менее, в функции CreateFont можно указать имя и размер шрифта. При этом Windows попытается выбрать желаемый шрифт, если он доступен в системе.

Для получения логического шрифта приложения также могут использовать функцию CreateFontIndirect. Ее параметром является указатель на структуру LOGFONT. Эта функция особенно эффективна в сочетании с общим диалоговым окном Font (Шрифт), которое возвращает выбор пользователя в форме структуры LOGFONT.

Для перечисления всех семейств шрифтов (или шрифтов в определенном семействе) можно использовать функцию EnumFontFamilies.

При программировании приложений помогают и много других функций, связанных со шрифтами. Например, функция GetCharABCWidths помогает определить размер символов, a GetTabbedExtent или GetTextExtentPoint32 вычисляет высоту и ширину текстовой строки.

Для инсталляции и удаления шрифтов приложениями используются функции AddFontResource, CreateScalableFontResource и RemoveFontResource.

Палитры

В палитрах не было бы необходимости, если бы все устройства вывода могли отображать полный диапазон цветов, определенный 24-разрядным значением RGB. К сожалению, большинство недорогих дисплеев предоставляет компромисс между глубиной цвета и разрешением экрана. Множество современных ПК работают с разрешением экрана 800х600, 1024х768 или 1280х1024, используя 256 цветов.

Определить, поддерживает ли устройство палитру можно, вызвав функцию GetDeviceCaps и проверив флаг RC_PALETTE на значение RASTERCAPS. Для таких устройств цветовая палитра определяет цвета, которые в данный момент доступны для использования приложением.

Системная палитра указывает все цвета, которые в данный момент могут быть отображены на устройстве. Однако приложения не могут непосредственно изменить системную палитру, хотя они и могут просмотреть ее содержимое с помощью функции GetSystemPaIetteEntries. Системная палитра содержит некоторое количество (обычно 2—20) статических цветов, которые нельзя модифицировать, изменяя палитру. Однако приложения могут установить количество статических цветов, используя функцию SetSystemPaletteUse.