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
的大小