2017-01-30 2 views
3
if (SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE, 0, &uiType, 0) != 0) {  
    Debug(uiType); // shows 0 
} 

Это случилось со мной на удаленном рабочем столе с Windows Server 2012 R2. According to the docs есть 2 Возможные значения:SystemParametersInfo (SPI_GETFONTSMOOTHINGTYPE) return 0

Возможные значения FE_FONTSMOOTHINGSTANDARD (1) и FE_FONTSMOOTHINGCLEARTYPE (2).

Я также нашел подобный вопрос, но нет ответа: Meaning of, SystemInformation.FontSmoothingType's return value

Кто-нибудь знает, что uiType 0 означает?


EDIT: На этой удаленной машине SPI_GETFONTSMOOTHING возвращает 0.

Определяет, включен ли сглаживание шрифтов функция.

Документы, очевидно, ошибочны. Я бы предположить правильный путь должен быть сначала проверить SPI_GETFONTSMOOTHING и только тогда SPI_GETFONTSMOOTHINGTYPE

+0

C# или C++ или Delphi? Выберите один (желательно тот, который вы используете) –

+0

Каково значение 'SPI_SETFONTSMOOTHING' соответственно. 'SPI_GETFONTSMOOTHING'? –

+0

Вероятно, 0 соответствует несимметричному псевдониму, а документы ошибочны. –

ответ

4

сглаживающего «тип» шрифта (SPI_GETFONTSMOOTHINGTYPE) имеет смысл только, если сглаживания шрифтов включен (SPI_GETFONTSMOOTHING). То же самое верно для всех других атрибутов сглаживания шрифта, таких как SPI_GETFONTSMOOTHINGCONTRAST и SPI_GETFONTSMOOTHINGORIENTATION.

Прежде всего, необходимо проверить. Если он возвращает TRUE (отличное от нуля), , то вы можете запросить другие атрибуты сглаживания шрифтов. Если он вернет FALSE (ноль), значит, все готово. Если вы запросите другие атрибуты сглаживания шрифта, вы получите бессмысленный шум.

Таким образом, ваши изменения верны, и документация MSDN может позволить себе улучшить. Я не уверен, что это «неверно»; для меня это кажется довольно очевидным. Это C API; вызывая его с неправильными параметрами, можно предположить, что они приводят к неправильным результатам.

The documentation действительно говорит, что единственно возможные возвращаемые значения для SPI_GETFONTSMOOTHINGTYPE являются FE_FONTSMOOTHINGSTANDARD и FE_FONTSMOOTHINGCLEARTYPE, так что это не было бы возможным этот параметр, чтобы указать, что сглаживание шрифтов является отключен или не применяется. Текущая реализация SystemParametersInfo может вернуть 0 для случая, когда сглаживание шрифта отключено, но поскольку в документации явно не сказано, что вы можете положиться на это, вы не должны полагаться на это.

+0

Спасибо. Это имеет смысл для меня. – kobik