【问题标题】:SystemParametersInfo behaves differently on Vista and XPSystemParametersInfo 在 Vista 和 XP 上的行为不同
【发布时间】:2010-10-31 15:30:03
【问题描述】:
我正在尝试使用SystemParametersInfo() 和SPI_GETNONCLIENTMETRICS 查找默认系统字体大小。
虽然在 Vista 上,返回的 NONCLIENTMETRICS 中的 LOGFONT 结构实际上在 lfHeight 中具有正确的字体高度,但当我在 XP 上运行完全相同的应用程序时,lfHeight(和 lfWidth)始终为零.
为什么会这样,在两个系统上检索字体大小的正确方法是什么?
【问题讨论】:
标签:
winapi
windows-vista
windows-xp
incompatibility
【解决方案1】:
您是否将NONCLIENTMETRICS 的成员cbSize 设置为sizeof(NONCLIENTMETRICS)?
根据MSDN,您需要在运行时系统版本检查,并在Windows XP 下运行时减去iPaddedBorderWidth 的大小。
【解决方案2】:
我不知道 100% 正确的答案,但根据 MSDN,零值对于 lfHeight 和 lfWidth 都有特殊含义:
这取自 MSDN,article Windows GDI,“LOGFONT”
lfHeight - 如果为 0 - 字体映射器在搜索匹配项时使用默认高度值。
lfWidth - 如果 lfWidth 为零,则将设备的纵横比与可用字体的数字化纵横比进行匹配,以找到最接近的匹配,由差异的绝对值确定。