У меня есть структура LOGFONT. Теперь все, что я хотел бы сделать, получают связанный размер шрифта в точках от высоты LOGFONT.
Когда режим отображения - mm_Text
(как обычно), и когда поле lfHeight
положительно, оно уже дает высоту в точках. Когда он отрицательный, единицы измерения - пиксели. MSDN для LogFont дает вам формулу для преобразования между ними:
lfHeight = -MulDiv (PointSize, GetDeviceCaps (hDC, LOGPIXELSY), 72);
На дюйм 72 точки. GetDeviceCaps
сообщает вам количество пикселей на дюйм на данном устройстве. Инвертируйте формулу, чтобы получить пиксели из точек:
PointSize := MulDiv(-lfHeight, 72, GetDeviceCaps(hDC, LogPixelsY);
Здесь важно понимать, что вам нужен контекст устройства. Размеры шрифтов не существуют независимо от носителя, на котором они появляются. Высота шрифта на экране в пикселях будет отличаться от высоты шрифта на принтере в пикселях. Используйте свойство Handle
любого холста, на котором вы планируете рисовать.