我正在尝试使用SystemParametersInfo()
with查找默认系统字体大小SPI_GETNONCLIENTMETRICS
。
虽然在 Vista 上LOGFONT
,返回的结构NONCLIENTMETRICS
实际上具有正确的字体高度lfHeight
,但当我在 XP 上运行完全相同的应用程序时,lfHeight
(和lfWidth
)始终为零。
为什么会这样,在两个系统上检索字体大小的正确方法是什么?
我正在尝试使用SystemParametersInfo()
with查找默认系统字体大小SPI_GETNONCLIENTMETRICS
。
虽然在 Vista 上LOGFONT
,返回的结构NONCLIENTMETRICS
实际上具有正确的字体高度lfHeight
,但当我在 XP 上运行完全相同的应用程序时,lfHeight
(和lfWidth
)始终为零。
为什么会这样,在两个系统上检索字体大小的正确方法是什么?
您是否正在设置tocbSize
的成员?根据MSDN,您需要运行时系统版本检查,并减去在 Windows XP 下运行时的大小。NONCLIENTMETRICS
sizeof(NONCLIENTMETRICS)
iPaddedBorderWidth
我不知道 100% 正确答案,但根据 MSDN,零值对 lfHeight 和 lfWidth 都有特殊含义:
这取自 MSDN,文章Windows GDI,“LOGFONT”
lfHeight - 如果为 0 - 字体映射器在搜索匹配项时使用默认高度值。
lfWidth - 如果 lfWidth 为零,则将设备的纵横比与可用字体的数字化纵横比进行匹配,以找到最接近的匹配,由差异的绝对值确定。