Можно ли определить шрифты, которые Windows выбирает для связывания шрифтов?
Предположим, у вас есть строка с текстом в двух или более сценариях. Когда вы используете функцию GDI, как TextOut
(современные версии) Windows будет делать "связывание шрифтов". То есть GDI будет рисовать то, что он может с выбранным вами шрифтом, а остальное - соответствующим шрифтом, который он выбирает автоматически. Например, если часть вашего текста написана на английском языке (с использованием латинского алфавита), а часть написана на китайском языке (с использованием символов CJK), и вы выбрали Arial, английская часть будет отображаться в Arial, а китайская часть будет быть нарисован другим шрифтом, который имеет глифы CJK.
У меня вопрос, есть ли способ определить, какие шрифты TextOut
выберет (или выбрал) для связывания шрифтов?
Я должен нарисовать текст с помощью низкоуровневого API Uniscribe, который не выполняет автоматическую привязку шрифтов. Я реализовал свою собственную связку шрифтов, но иногда мой алгоритм выбирает другой шрифт, чем TextOut
делает для того же текста. Я пытаюсь лучше понять алгоритм Windows, но я не очень хорошо разбираюсь в шрифтах (особенно в незнакомых скриптах).
1 ответ
Шрифт выбирается записью в реестре. Это хорошо описано в этой статье. Цитирую соответствующую часть:
Если на вашем устройстве включено связывание шрифтов, вы можете проверить реестр, перечислив подразделы раздела реестра в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink, чтобы определить сопоставления связанных шрифтов с базовыми шрифтами. Вы можете добавить ссылки, используя Regedit для создания дополнительных подразделов.