Преобразование высоты LogFont к Размеру шрифта в точках

У меня есть структура LOGFONT. Теперь все, что я хотел бы сделать, получают связанный размер шрифта в точках от высоты LOGFONT.

5
задан Benjamin 4 October 2014 в 14:39
поделиться

1 ответ

Когда режим отображения - mm_Text (как обычно), и когда поле lfHeight положительно, оно уже дает высоту в точках. Когда он отрицательный, единицы измерения - пиксели. MSDN для LogFont дает вам формулу для преобразования между ними:

 lfHeight = -MulDiv (PointSize, GetDeviceCaps (hDC, LOGPIXELSY), 72);

На дюйм 72 точки. GetDeviceCaps сообщает вам количество пикселей на дюйм на данном устройстве. Инвертируйте формулу, чтобы получить пиксели из точек:

PointSize := MulDiv(-lfHeight, 72, GetDeviceCaps(hDC, LogPixelsY);

Здесь важно понимать, что вам нужен контекст устройства. Размеры шрифтов не существуют независимо от носителя, на котором они появляются. Высота шрифта на экране в пикселях будет отличаться от высоты шрифта на принтере в пикселях. Используйте свойство Handle любого холста, на котором вы планируете рисовать.

12
ответ дан 18 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: