我试图找出目标 Windows 机器上的字体 DPI 大小并修改我们应用程序的字体,使其看起来与目标机器与开发机器具有相同 dpi 时的大小相同。(因此,较大的目标 DPI 意味着我们会使字体比开发时更小)。
我想知道下面的解决方案是否有任何问题,特别是 LOGPIXELSX=88 是否正确。
背景
我调整表单上所有控件和字体的大小以匹配当前的 Windows 屏幕分辨率。但是,如果有人将他们的字体 DPI 设置得更高,我们需要考虑这一点并使字体更小(因此它最终在屏幕上是正确的尺寸)。我们的字体已经很大了(尤其是我们用屏幕分辨率调整了它们的大小)。来自较高 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 测试