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

时间:2009-03-14 04:12:18

标签: windows vb6 dpi

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

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

背景

我调整表单上的所有控件和字体以匹配当前的Windows屏幕分辨率。但是,如果有人将其字体DPI设置得更高,我们需要考虑到这一点并使字体更小(因此它最终会在屏幕上显示正确的大小)。我们的字体已经很大了(特别是因为我们调整了屏幕res的大小)。来自较高DPI的额外大小使文本太大。

到目前为止我的解决方案 据我所知,如果我们使用如下的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

结束功能

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

[1]:http://www.BungalowSoftware.com测试

1 个答案:

答案 0 :(得分:2)

这是编写DPI感知应用程序的good article from Microsoft。 (请注意,本文与发布到相关问题的文章不同。)

LOGPIXELSX是Windows系统调用的参数;它不是DPI值。

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