Семейства шрифтов в Windows
1. Семейства шрифтов в Windows По трем из рассмотренных признаков (ширина штриха, ширина символов и наличию засечек) в Windows принято выделять так называемые семейства шрифтов. Для того, что бы пояснить разницу между принятыми семействами, приведем небольшую табличку, содержащую сводку характеристик разных семейств шрифтов в Windows: |
Семейство | Ширина штриха | Ширина символов | Наличие засечек | примеры | | MODERN | постоянная | постоянная | -- | Courier New | | ROMAN | переменная | переменная | есть | Times New Roman, Antiqua, Garamond, Palatino, Bodoni | | SWISS | переменная | переменная | нет | Arial, Helvetica, Futura, Avantgarde, Optima, Swiss | | SCRIPT | -- | -- | -- | Script, Odessa Script FWF, Decor, Jikharev, Parsek | | DECORATIVE | -- | -- | -- | Windings, MusicalSymbols, Symbol | | DONTCARE | -- | | |
Обычно к семейству MODERN относят все шрифты фиксированной ширины. Название MODERN указывает на сравнительно недавнюю историю этих шрифтов - они получили распространение с развитием печатающей техники и компьютеров, тогда как другие виды шрифтов возникали с XV века, когда заканчивалась эпоха готического шрифта. В те времена начинал формироваться шрифт, похожий по своему начертанию на один из древнейших шрифтов - римский капитальный. Это был пропорциональный шрифт с засечками и нормальной контрастностью, позже он получил очень широкое распространение в типографском деле и дожил до наших дней. За свою долгую историю он многократно видоизменялся и стал родоначальником большого числа поколений шрифтов. В Windows такие шрифты относятся к семейству ROMAN. Реально этому семейству соответствует очень большое число разных шрифтов, выделяемых в других классификационных системах. В частности, можно выделить так называемые брусковые шрифты, обычно со слабо выраженным контрастом и засечками, перпендикулярными штрихам и имеющими примерно такую же ширину (пример - Courier); В XX веке возникли шрифты, получившие очень широкое распространение. Наиболее распространенное название для этих шрифтов - рубленые. Эти шрифты не имеют контраста и засечек (sans serif), в Windows им соответствует семейство SWISS. Семейство DONTCARE реально не соответствует никакой группе шрифтов. Оно используется только при указании, из какого семейства надо выбирать шрифт - при этом оно обозначает “любое семейство”. 1.1 Стандартные шрифты Windows В стандартной поставке Windows присутствует небольшой набор шрифтов, представляющий все (определенные в Windows) семейства шрифтов. Этот набор включает в себя растровые, векторные и TrueType шрифты, информация о которых сведена в небольшую таблицу: |
Имя шрифта | семейство | кодовая таблица | файл(ы) | | растровые шрифты | | System | SWISS | ANSI | xxxSYS.FON | | FixedSys | DONTCARE | ANSI | xxxFIX.FON | | Terminal | MODERN | OEM | xxxOEM.FON | | Courier | MODERN | ANSI | COURy.FON | | MS Sans Serif | SWISS | ANSI | SSERIFy.FON | | MS Serif | ROMAN | ANSI | SERIFy.FON | | Small Fonts | ROMAN | ANSI | SMALLy.FON | | Symbol | DECORATIVE | SYMBOL | SYMBOLy.FON | | векторные шрифты | | Modern | MODERN | OEM | MODERN.FON | | Roman | ROMAN | OEM | ROMAN.FON | | Script | SCRIPT | OEM | SCRIPT.FON | | TrueType | | Arial | SWISS | ANSI | ARIALzz.TTF(.FOT) | | Courier New | MODERN | ANSI | COURzz.TTF(.FOT) | | Times New Roman | ROMAN | ANSI | TMSRMN.TTF(.FOT) | | Windings | DONTCARE | ANSI | WINDINGS.TTF(.FOT) | | |
В этой таблице следует внимательно рассмотреть имена файлов. В этих именах маленькими буквами (xxx,y,zz) обозначены изменяющиеся части. Так xxx обозначает устройство, для которого был спроектирован шрифт. Вместо этой последовательности реально написано CGA, EGA, VGA или 8514. Символ y обозначает категорию устройств, к которой относится данный шрифт. Возможные значения можно найти в таблице: |
Буква | Соотношение сторон | Разрешающая способность X/Y (пиксел/дюйм) | Устройство | | A | 200 | 96/48 | CGA | | B | 133 | 96/72 | EGA | | C | 83 | 60/72 | Okidata printers | | D | 167 | 120/72 | IBM, Epson printers | | E | 100 | 96/96 | VGA | | F | 100 | 120/120 | IBM 8514 | | |
Последовательность zz указывает, какого типа шрифт описан в этом файле: нормальный (пустая последовательность), жирный BD, наклонный I или жирный наклонный BI. 1.2 Получение хендла шрифта Для того, что бы Вы могли применять шрифт в Вашей программе, Вы должны сначала получить хендл соответствующего шрифта. Шрифт является объектом GDI, поэтому работа с ним похожа на работу с другими объектами GDI. Как правило вы должны выполнить следующие действия: получить хендл либо стандартного шрифта, либо создав "новый" шрифт При создании "нового" шрифта создается соответствующий объект GDI, а не новый файл описания шрифта. выбрать шрифт в контекст устройства осуществить вывод, используя текущий шрифт если шрифт был создан, то его надо уничтожить. Создание шрифтов занимает некоторое время (особенно для отображения TrueType шрифтов - Windows автоматически генерирует промежуточный растровый шрифт, который и используется при выводе). Если надо создавать шрифты, то это удобно делать при создании окна или даже при запуске приложения, а уничтожать - при закрытии окна или при завершении приложения (как и все объекты GDI, созданный шрифт уничтожается с помощью функции DeleteObject). Если Вам надо получить хендл стандартного шрифта, то Вы можете воспользоваться функцией: HFONT GetStockObject( nIndex ); Параметр nIndex может быть: |
ANSI_FIXED_FONT | соответствует шрифту Courier | | ANSI_VAR_FONT | соответствует шрифту MS Sans Serif | | OEM_FIXED_FONT | соответствует шрифту Terminal | | SYSTEM_FONT | соответствует шрифту System; этот шрифт используется по умолчанию | | SYSTEM_FIXED_FONT | соответствует шрифту FixedSys; До версии Windows 3.0 системный шрифт был фиксированной ширины, он включен в Windows 3.1 для совместимости. | | DEVICE_DEFAULT_FONT | соответствует шрифту, загруженному в устройство; для дисплея не определен | | |
Если Вам надо создавать собственный шрифт, то Вы можете воспользоваться одной из двух функций: HFONT CreateFont( nHeight, nWidth, nEscapement, nOrientation, nWeight, bItalic, bUnderline, bStrikeOut, bCharSet, bOutputPrecision, bClipPrecision, bQuality, bPitchAndFamily, lpszFacename); или HFONT CreateFontIndirect( lpLogFont ); Чаще применяется функция CreateFontIndirect(), получающая в качестве параметра указатель на структуру LOGFONT. Поля этой структуры совпадают с аргументами функции CreateFont(). typedef struct tagLOGFONT { int lfHeight; int lfWidth; int lfEscapement; int lfOrientation; int lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; BYTE lfFaceName[LF_FACESIZE]; } LOGFONT; Рассмотрим назначение полей этой структуры: lfHeight задает требуемый размер шрифта в точках (пунктах). Если значение положительно, то в высоту включается межстрочный промежуток, а если отрицательно, то модуль указывает высоту символа шрифта. Значение 0 указывает, что используется значение высоты по умолчанию. lfWidth задает среднюю ширину символов в пунктах. Значение 0 соответствует ширине по умолчанию. lfEscapement задает наклон базовой линии строки в десятых долях градуса. Для растровых шрифтов игнорируется. lfOrientation задает ориентацию символа относительно базовой линии в десятых долях градуса. Игнорируется для растровых и TrueType шрифтов, для векторных используются значения: 0, 900, 1800 и 2700 lfWeight задает вес символа (жирность). Соответствует количеству закрашенных пиксел из 1000. Предусмотрены условные обозначения для определения веса, начинающиеся на FW_... Например, нормальный текст (400) соответствует FW_NORMAL (FW_REGULAR), жирный (700) FW_BOLD.
Страницы: 1, 2, 3, 4
|