Можно ли определить шрифты, которые Windows выбирает для привязки шрифтов?

StackOverflow https://stackoverflow.com/questions/2427438

Вопрос

Предположим, у вас есть строка с текстом в двух или более сценариях.Когда вы используете функцию GDI, например TextOut, (современные версии) Windows выполнит "привязку шрифтов".То есть GDI нарисует то, что сможет, выбранным вами шрифтом, а остальное нарисует соответствующим шрифтом, который выберет автоматически.Например, если часть вашего текста на английском языке (с использованием латинского алфавита), а часть - на китайском (с использованием символов CJK), и у вас выбран Arial, английская часть будет отрисована в Arial, а китайская часть будет отрисована другим шрифтом, имеющим глифы CJK.

Мой вопрос в том, есть ли способ определить, какие шрифты TextOut выберете (или уже выбрали) для связывания шрифт?

Мне нужно нарисовать некоторый текст с помощью низкоуровневого API Uniscribe, который не выполняет автоматическую привязку шрифтов.Я реализовал свою собственную привязку к шрифту, но иногда мой алгоритм выбирает шрифт, отличный от TextOut делает для того же текста.Я пытаюсь лучше понять алгоритм Windows, но у меня не очень хорошо получается распознавать шрифты с первого взгляда (особенно в незнакомых сценариях).

Это было полезно?

Решение

Шрифт выбирается с помощью записи в реестре.Это хорошо описано в эта статья. Цитируя соответствующую часть:

Если на вашем устройстве включена привязка шрифтов , вы можете просмотреть реестр , перечислив подразделы раздела реестра по адресу HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink чтобы определить сопоставления связанных шрифтов с базовыми шрифтами.Вы можете добавлять ссылки используя Regedit для создания дополнительных подразделов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top