When the display mode is mm_Text (which is usually there), and when the lfHeight field lfHeight positive, it already gives the height in points. When it is negative, units are pixels. MSDN for LogFont provides a formula for converting between:
lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
There are 72 dpi. GetDeviceCaps indicates the number of pixels per inch on this device. Invert the formula to get pixels from points:
PointSize := MulDiv(-lfHeight, 72, GetDeviceCaps(hDC, LogPixelsY);
It is important to understand that you need a device context. Font size does not exist no matter what medium they appear on. The font pixel height on the screen will be different from the font pixel height on the printer. Use the Handle property of any canvas that you plan to draw.
source share