SystemParametersInfo ведет себя по-разному в Vista и XP - PullRequest
0 голосов
/ 05 июня 2009

Я пытаюсь найти размер системного шрифта по умолчанию, используя SystemParametersInfo() с SPI_GETNONCLIENTMETRICS.

В то время как в Vista структуры LOGFONT внутри возвращенного NONCLIENTMETRICS на самом деле имеют правильную высоту шрифта в lfHeight, когда я запускаю одно и то же приложение на XP, lfHeightlfWidth) всегда равны нулю .

Почему это так и как правильно получить размер шрифта в обеих системах?

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Вы устанавливаете cbSize член NONCLIENTMETRICS на sizeof(NONCLIENTMETRICS)? Согласно MSDN вам потребуется проверка версии системы во время выполнения и вычесть размер iPaddedBorderWidth при работе под Windows XP.

0 голосов
/ 05 июня 2009

Я не знаю 100% правильного ответа, но согласно MSDN значение ноль имеет особое значение как для lfHeight, так и для lfWidth:

взято из MSDN, статья Windows GDI, "LOGFONT"

lfHeight - если 0 - сопоставитель шрифтов использует значение высоты по умолчанию при поиске совпадения.

lfWidth - Если lfWidth равен нулю, соотношение сторон устройства сопоставляется с соотношением сторон оцифровки доступных шрифтов, чтобы найти наиболее близкое совпадение, определяемое абсолютным значением разности.

...