Winapi SystemParametersInfo在Vista和XP上的行为不同

Winapi SystemParametersInfo在Vista和XP上的行为不同,winapi,windows-vista,windows-xp,incompatibility,Winapi,Windows Vista,Windows Xp,Incompatibility,我正在尝试使用SystemParametersInfo()和SPI\u GETNONCLIENTMETRICS查找默认的系统字体大小 在Vista上,返回的NONCLIENTMETRICS中的LOGFONT结构实际上在lfHeight中具有正确的字体高度,当我在XP上运行完全相同的应用程序时,lfHeight(和lfWidth)始终为零 为什么会这样?在两种系统上检索字体大小的正确方法是什么?我不知道100%的正确答案,但根据MSDN,零的值对lfHeight和lfWidth都有特殊意义: 这是

我正在尝试使用
SystemParametersInfo()
SPI\u GETNONCLIENTMETRICS
查找默认的系统字体大小

在Vista上,返回的
NONCLIENTMETRICS
中的
LOGFONT
结构实际上在
lfHeight
中具有正确的字体高度,当我在XP上运行完全相同的应用程序时,
lfHeight
(和
lfWidth
)始终为零


为什么会这样?在两种系统上检索字体大小的正确方法是什么?

我不知道100%的正确答案,但根据MSDN,零的值对lfHeight和lfWidth都有特殊意义:

这是从MSDN、Windows GDI、“LOGFONT”中获取的

lfHeight-如果为0-字体映射器在搜索匹配项时使用默认高度值


lfWidth-如果lfWidth为零,则设备的纵横比与可用字体的数字化纵横比相匹配,以找到最接近的匹配,由差值的绝对值确定。

您是否将
NONCLIENTMETRICS
cbSize
成员设置为
sizeof(NONCLIENTMETRICS)
? 根据,您需要进行运行时系统版本检查,并在Windows XP下运行时减去
iPadedDBOrderWidth
的大小