Главная » Win32 API » Логические шрифты. Функции вывода текста и измене­ния цветовых характеристик

0

Приложения работают не с физическими, а с логическими шрифта­ми. Логический шрифт это объект GDI, содержащий требования к шрифту со стороны приложения. Эти требования анализируются под­системой GDI, и с помощью драйверов шрифтов подбираются подхо­дящие зарегистрированные в системе физические шрифты. Логиче­ский шрифт имеет дескриптор. По умолчанию в контекст устройства загружен растровый шрифт с символами переменной ширины SYSTEMFONT с кодировкой ANSI. Существует набор встроенных шрифтов, которые дескрипторы которых запрашиваются для загрузки в контекст функцией GetStockObject.

Если требуется создать собственный логический шрифт, то исполь­зуется функция CreateFont или CreateFontlndirect. Функция Create-Font имеет 14 параметров, описывающих логический шрифт, a Cre­ateFontlndirect один параметр, представляющий собой указатель на структуру LOGFONT, содержащую те же 14 параметров логического шрифта.

Структура LOGFONT имеет поля:

IfHeight желательная высота шрифта (по умолчанию 12 пунк­тов);

IJWidth желательная средняя ширина символа;

IfEscapement угол между базовой линией текста и осью ОХ уст­ройства (отсчет против часовой стрелки);

IfOrientation ориентация символа, т.е. угол между базовой лини­ей символа и осью ОХ устройства (отсчет против часовой стрелки). Это поле используется независимо от IfEscapement только в расширен­ном графическом режиме, в остальных случаях значения ориентации символа совпадает с IfEscapement;

IJWeight желательная жирность логического шрифта (от 0 до 1000);

Ifltalic, IfUnderline, IfStrikeOut признаки курсива, подчеркнутого, перечеркнутого шрифта;

IfCharSet набор символов логического шрифта;

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

IfClipPrecision метод изменения изображения символа, попавше­го за пределы региона отсечения;

IfQuality качество вывода глифов (0 внешний вид неважен, 1 -позволяет изменять растровые шрифты с потерей качества, 2 запре­щает изменение растровых шрифтов, 3 и 4 запрещает/ разрешает сглаживание);

IfPitchAndFamily шаг и семейство логического шрифта;

IfFaceName строка, содержащая имя гарнитуры шрифта, закан­чивающаяся нулем. Длина строки не должна превышать 32 байта. Имена имеющихся гарнитур можно получить с помощью функции EnumFontFamiliesEx.

После создания логического шрифта функциями CreateFont или CreateFontlndirect ими возвращается дескриптор шрифта, который необходимо перед выводом текста загрузить в контекст устройства функцией SelectObject. При этом происходит подстановка физическо­го шрифта. GDI сравнивает параметры логического шрифта с парамет­рами различных шрифтов, доступных для графического устройства, выбирая наиболее подходящий шрифт. Для сравнения используются штрафные очки, которые имеют разные весовые коэффициенты. Вы­бирается тот шрифт, для которого штрафная сумма будет наименьшей. Наиболее важным фактором при подборе физического шрифта являет­ся набор символов, который задается в поле IfCharSet. При несовпадении этого атрибута очень велика вероятность, что символы будут вы­водиться совершенно неверными глифами. Следующее по важности поле — это LfOutPrecision. Этот показатель ограничивает рассматри­ваемые наборы символов определенными типами шрифтов. Затем оце­нивается поле IfFaceName, а после него — поле IfPitchAndFamily. По­сле сравнения указанных полей GDI сравнивает высоту символов, за­данную в поле Iffleight, а затем поля IfWidth, Ifltalic, IfUnderLine, LfStrikeOut.

Для вывода текстовой строки в простейшем случае можно исполь­зовать TextOut, имеющую следующие параметры:

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

-  х-координата начальной точки вывода;

-  у-координата начальной точки вывода;

-  адрес выводимой строки;

-  число символов в строке.

Позиционирование строки зависит от текущего режима выравнива­ния, заданного в контексте устройства и определяющего, что считать опорной точкой при выводе заданную начальную точку или текущую позицию пера в контексте устройства. Также режим выравнивания оп­ределяет, как позиционировать строку текста (обрамляющий прямо­угольник) относительно опорной точки и как выводить текст: слева направо или справа налево. Значение этого атрибута можно изменить при помощи функции SetTextAlign.

При выводе текста можно изменить цвет символов (SetTextColor), цвет фона под символами (SetBkColor), режим фона знакомест (про­зрачный или нет) (SetBkMode), выравнивание текста относительно за­данных в TextOut координат. Для вывода текста также можно исполь­зовать функцию DrawText, позволяющую выводить длинный текст в заданный прямоугольник.

Источник: Сучкова, Л.И. Win32 API: основы программирования: учебное пособие/ Л.И. Сучкова; АлтГТУ им. ИИ. Ползунова. -Барнаул, АлтГТУ, 2010. 138 с, ил.

По теме:

  • Комментарии