Соображения по выбору специального шрифта


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

Приложение может перечислять доступные шрифты при помощи использования функции EnumFonts или EnumFontFamilies. Функция EnumFontFamilies рекомендуется, потому что она перечисляет все стили, связанные с именем семейства. Это может быть полезно для шрифтов с несколькими или необычными стилями и для шрифтов, которые противоречат международным канонам.

Как только приложение перечислит доступные шрифты и определит подходящее соответствие, оно должно использовать значения, возвращенные функцией перечисления шрифта, чтобы инициализировать члены структуры LOGFONT. Затем оно может вызвать функцию CreateFontIndirect, передавая в ней указатель на инициализированную структуру LOGFONT. Если функция CreateFontIndirect завершается успешно, приложение может далее выбрать логический шрифт путем вызова функция SelectObject. При инициализации членов структуры LOGFONT, убедитесь, что задали конкретный набор символов в члене lfCharSet этой структуры. Этот член важен в процессе подстановки шрифтов, и результат несовместимый, если этот член инициализирован не правильно. Если Вы задаете имя гарнитуры шрифта в члене lfFaceName структуры LOGFONT, проверьте, что значение lfCharSet соответствует набору символов гарнитуры шрифта, заданного в lfFaceName. Например, если Вы желаете выбирать шрифт типа MS Mincho, lfCharSet должен быть установлен в предопределенное значение SHIFTJIS_CHARSET.

Шрифты для многих Восточно-Азиатских языков имеют два названия гарнитуры шрифта: английское название и название, привязанное к конкретной стране. Функции CreateFont, CreateFontIndirect и CreateFontIndirectEx берут национальное имя гарнитуры шрифта для локальной системы, которая соответствует языку, но они берут английское название гарнитуры шрифта для всех других локальных систем. Самый лучший способ состоит в том, чтобы попробовать одно название и, при неудаче, попробовать другое. 

Обратите внимание! на то, что, EnumFonts, EnumFontFamilies и EnumFontFamiliesEx возвращают английское название гарнитуры шрифта, если локальная система не соответствует языку шрифта. Начиная с Windows 2000, этой проблемы больше нет, потому что механизм отображения логического шрифта в физический, для CreateFont, CreateFontIndirect, и CreateFontIndirectEx, признает любое имя гарнитуры шрифта, независимо от местности языка.

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz