Учебное пособие: Семейства шрифтов в Windows

SHIFTJIS_CHARSET японская азбука

DEFAULT_CHARSET любая кодовая таблица.

lfOutPrecision указывает, насколько точно должен соответствовать подбираемый шрифт указанному размеру. (Реально Вы можете заказать растровый шрифт несуществующего размера). См. условные обозначения вида OUT_???_PRECIS в windows.h.

lpClipPrecision указывает, как должен отображаться частично невидимый символ. См. условные обозначения вида CLIP_???_PRECIS в windows.h.

lfQuality указывает качество получаемого шрифта. Обычно используется значение PROOF_QUALITY (или DEFAULT_QUALITY). Если размер растрового шрифта меньше, чем требуется, то Windows может масштабировать шрифт. Однако при этом резко ухудшается качество, поэтому масштабирование можно запретить, используя значение PROOF_QUALITY.

lfPitchAndFamily два младших бита задают тип шрифта - DEFAULT_PITCH (любой тип), VARIABLE_PITCH (пропорциональный) или FIXED_PITCH (моноширинный); старший байт указывает семейство, которое задается одним из следующих символов: FF_DECORATIVE, FF_DONTCARE, FF_MODERN, FF_ROMAN, FF_SCRIPT, FF_SWISS.

lfFaceName массив из LF_FACESIZE символов, содержащий заканчивающееся \0 имя шрифта. Пустое имя соответствует шрифту устройства.

1.3 Основы подбора шрифтов в Windows

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

При подборе шрифта используется система “пенальти”: для каждого из шрифтов он вычисляет “пенальти”, соответствующие отличию данного шрифта от желаемого. Шрифт с минимальным пенальти считается наиболее точно соответствующим желаемому.

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

параметр пенальти
fCharSet 4

fPitchAndFamily: pitch

family

3

3

lfFaceName 3
lfHeight 2
lfWidth 2
lfItalic 1
lfUnderline 1
lfStrikeOut 1

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

1.4 Функции для работы со шрифтами

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

SelectObject( hDC, hFont );

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

int GetTextFace( hDC, nMaxBuffer, lpsBuffer );

int GetObject( hFont, sizeof(LOGFONT), &stLogfont );

Функция GetTextFace() заполняет указанный буфер именем применяемого шрифта, а функция GetObject() позволяет заполнить структуру LOGFONT информацией о конкретном шрифте.

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

Это можно осуществить двумя разными способами - Вы можете перебирать все шрифты и выбрать из них нужный Вам (например создать меню, содержащее имена шрифтов), или Вы можете воспользоваться функцией ChooseFont() для вызова стандартного диалога выбора шрифта.

Сначала мы разберемся с основными правилами перебора шрифтов. В Windows для этих целей существует две функции:

int EnumFonts( hDC, lpszFace, lpfnEnumProc, lParam );

int EnumFontFamilies( hDC, lpszFace, lpfnEnumProc, lParam );

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

К-во Просмотров: 441
Бесплатно скачать Учебное пособие: Семейства шрифтов в Windows