Ответ 1
В Windows вызов CreateFontIndirect() может молча заменить совместимые шрифты, если запрошенный шрифт не запрашивается. Вызов GetObject() не отражает эту замену; он возвращает тот же самый LOGFONT, который прошел.
Это не CreateFontIndirect, что делает замену. Замена происходит, когда шрифт выбран в DC. CreateFontIndirect просто дает вам дескриптор внутренней копии LOGFONT. Вот почему GetObject возвращает вам тот же самый LOGFONT.
Как я могу найти, какой шрифт был создан?
Если вы выберете HFONT в целевом DC, вы можете запросить DC для получения информации о шрифте, который был фактически выбран как наилучший для LOGFONT.
- Название лица доступно с GetTextFace.
- Вы можете получить показатели GetTextMetrics.
- Если выбранный шрифт - TrueType или OpenType, вы можете получить дополнительные показатели с помощью GetOutlineTextMetrics.
Это, по сути, говорит вам, какой шрифт был создан.
Помимо
Когда вы делаете что-то вроде предварительного просмотра, вы можете начать с LOGFONT, выбрать его в DC (или IC) принтера, захватить детали фактического шрифта (принтеры часто заменяют шрифты), а затем создать новый LOGFONT, который больше представитель фактического шрифта. Выберите это на экране DC, и - с соответствующими преобразованиями размера - сделайте довольно хорошее совпадение с тем, что пользователь действительно получит.