Приложение с поддержкой DPI в Windows XP

Я хочу, чтобы мое приложение C # знало DPI. В Windows API доступна команда SetProcessDPIAware (), но проблема в том, что она работает только в Windows Vista и более поздних версиях Windows, а не в XP. Как сделать так, чтобы элементы управления, кнопки и шрифты распознавали DPI, чтобы они отображались правильно независимо от того, какая версия Windows используется?


person zeeshan malik    schedule 07.02.2011    source источник
comment
Что за приложение C #? Это Windows Forms?   -  person Cody Gray    schedule 07.02.2011


Ответы (2)


Вызов SetProcessDPIAware не просто волшебным образом делает все, что связано с DPI; его цель - объявить Windows, что ваше приложение было правильно написано для поддержки DPI. Кроме того, его использование не рекомендуется; вместо этого вы должны объявить осведомленность о DPI в своем манифесте. Об этом есть целая статья об этом в MSDN. .

person Aaron Klotz    schedule 07.02.2011
comment
Хорошо, если я объявлю поддержку DPI в манифесте, будет ли это работать и для Windows XP? - person zeeshan malik; 08.02.2011
comment
@zeemalik: Может быть, есть более простое решение. Я не уверен, что вы не заметили мой комментарий выше, но можете ли вы рассказать нам, какой вид приложения C # вы разрабатываете? Вы используете Windows Forms (WinForms) или WPF? - person Cody Gray; 08.02.2011
comment
У нас есть приложение для окон, а не WPF. Как сделать так, чтобы все элементы управления и шрифты отображались правильно, имея в виду, что он может работать в Windows XP и более поздних версиях? - person zeeshan malik; 08.02.2011
comment
Может ли кто-нибудь помочь в этом отношении? - person zeeshan malik; 09.02.2011

См. Мой умеренно подробный ответ о том, как заставить приложение реагировать на настройки DPI на этот вопрос StackOverflow.

Вкратце, вы можете изменить AutoScaleMode всей формы на ScaleMode.Dpi.

Но лучше оставить на ScaleMode.Font; шрифты становятся больше по мере увеличения DPI.

person Ian Boyd    schedule 03.04.2011