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