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