用于在高分辨率显示器上映射字体大小的缩放系数是多少?

时间:2009-07-13 07:03:19

标签: windows winapi gdi font-size

我们要求我们的应用程序需要支持高分辨率显示器。目前,当应用程序出现在高分辨率监视器中时,它显示的文本太小。我们默认使用Arial 12点字体。

现在要使文本可见,我需要按比例更改字体大小。我发现很难想出一个公式,它可以根据显示器分辨率给出目标字体大小。

以下是我对这个问题的理解。

1)在Windows上,默认情况下96像素相当于1逻辑英寸。这意味着当显示器分辨率增加时,逻辑英寸的屏幕尺寸也会增加。

2)1 Point字体是Logical Inch的1/72。因此,结合每逻辑英寸有96个像素的事实,事实证明,每个字体点数有96/72像素。

这意味着对于12磅字体,它将占用的像素数为12 * 96/72 = 16像素。

现在我需要知道我需要增加这些像素数的缩放因子,以便生成的Font正确可见。如果我知道缩放的像素数,我可以通过除以(96/72)

得到字体大小

建议的缩放系数是什么,可以确保在所有显示器分辨率上正确缩放字体?

另外,如果我的理解是错误的,请更正。

2 个答案:

答案 0 :(得分:3)

LOGFONT structure的MSDN页面上有一个示例。您的理解是正确的,您需要将点大小缩放vertres / 72

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

答案 1 :(得分:2)

如果在Windows中将分辨率设置为与物理监视器的分辨率匹配,则不需要进行任何调整。任何编写良好的程序都会进行正确缩放字体所需的乘法和除法,而在最新版本的Windows中,操作系统会自动调整分辨率并自动缩放字体。

如果您希望在Windows设置之外处理此问题,只需将字体大小乘以实际DPI并除以96即可。

编辑:从Windows Vista开始,除非您编写支持DPI的程序,否则Windows不会报告您实际配置的DPI。 Microsoft has some guidance on the subject。您可能会发现Microsoft为非DPI感知程序提供的默认扩展足以满足您的需要。