在高分辨率显示器上使用什么缩放因子来映射字体大小?

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

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

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

1)在窗口上,默认96个像素对应于1个逻辑英寸。 这意味着当显示器分辨率增加时,以英寸为单位的屏幕尺寸也会增加。

2)1点字体是逻辑英寸的1/72。 所以结合每个逻辑英寸有96像素的事实,事实certificate,每点字体有96/72像素。

这意味着对于12点字体,它将占据的像素数量是12 * 96/72 = 16像素。

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

什么是build议的比例因子,可以确保在所有显示器分辨率上正确缩放的字体?

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

LOGFONT结构的MSDN页面上有一个例子。 你的理解是正确的,你需要通过vertres / 72缩放点的大小。

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

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

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

编辑:从Windows Vista开始,Windows将不会报告实际配置的DPI,除非您编写了DPI感知程序。 微软对此有一些指导 。 您可能会发现,Microsoft为不支持DPI的程序提供的默认缩放比例足以达到您的目的。