如果部署PC具有不同的字体DPI,如何计算适当的字体大小?

我试图找出目标Windows机器上的字体DPI大小,并修改我们的应用程序的字体,使其看起来像目标机器具有与开发机器相同的dpi的相同的大小。 (所以更大的目标DPI将意味着我们会使字体小于开发时间)。

我想知道下面的解决scheme是否有问题,特别是LOGPIXELSX = 88是否正确。

背景

我调整窗体上的所有控件和字体的大小,以匹配当前的Windows屏幕分辨率。 但是,如果有人将Font DPI设置得更高,我们需要对其进行说明,并使字体变小 (因此屏幕上显示的尺寸最终会变大)。 我们的字体已经很大(尤其是因为我们调整它们的屏幕水平)。 来自较高DPI的额外尺寸使得文字太大。

我的解决scheme到目前为止从我可以告诉,如果我们使用GetDeviceCaps如下,然后得到CurrentFontDPI并执行此操作:(忽略由于新的屏幕分辨率的字体大小修改):

NewFontSize = CurrentFontSize *(DevelopmentDPI / CurrentFontDPI)

Function CurrentFontDPI Dim hwnd, hDC, logPix, r As Long Dim LOGPIXELSX=88 hwnd = GetDesktopWindow() hDC = GetDC(hwnd) logPix = GetDeviceCaps(hDC,LOGPIXELSX ) r = ReleaseDC(hwnd, hDC) CurrentFontDPI= logPix 

结束function

仅供参考,上面的代码是“一个相关的SO问题”[1]中的一个较大的例程的一部分,我遗漏了其余的代码b / c似乎至less有一个错误(它有NewFont = OldFont *(NewDPI- OldDPI),如果DPI没有改变,它会给你零高度字体大小)

[1]: http : //www.BungalowSoftware.comtesting

Solutions Collecting From Web of "如果部署PC具有不同的字体DPI,如何计算适当的字体大小?"

这是一篇关于编写支持DPI的应用程序的好文章 。 (请注意,这篇文章不同于发布到相关问题的文章。)

LOGPIXELSX是Windows系统调用的参数; 这不是一个DPI值。

在VB6(IIRC)中,可以使用开发时的TwipsPerPixel(X和Y)与运行时TwipsPerPixel(X和Y)的比率作为确定如何缩放的另一种方法。 与您的DPI比例相同,但它利用了内置的VB属性。