3

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

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

这是我对问题的理解。

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

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

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

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

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

另外,如果我的理解有误,请指正。

4

2 回答 2

4

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

lfHeight = -PointSize * GetDeviceCaps(hDC, LOGPIXELSY) / 72;
于 2009-07-13T07:09:12.197 回答
2

如果您在 Windows 中将分辨率设置为与物理显示器匹配,则无需调整。任何编写良好的程序都会进行适当缩放字体所需的乘法和除法,并且在最新版本的 Windows 中,操作系统将谎报分辨率并自动缩放字体。

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

编辑:从 Windows Vista 开始,除非您编写 DPI 感知程序,否则 Windows 不会报告您实际配置的 DPI。Microsoft 对此主题有一些指导。您可能会发现 Microsoft 为非 DPI 感知程序提供的默认缩放足以满足您的目的。

于 2009-07-13T07:09:47.827 回答