【问题标题】: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 为零,则将设备的纵横比与可用字体的数字化纵横比进行匹配,以找到最接近的匹配,由差异的绝对值确定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-10
        • 2011-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-16
        • 2011-05-28
        • 2014-01-01
        相关资源
        最近更新 更多