C# WinForms отключить масштабирование DPI

У меня есть приложение WinForm, в котором размещается много изображений. Когда я помещаю приложение на машины Win7 с DPI 120, оно полностью разрушает внешний вид формы. Есть ли способ отключить масштабирование для моей формы?

Я знаю, что это то, что не рекомендуется, и что DPI должен быть бесшовным и обрабатываться ОС. Но когда дело доходит до ободранного приложения, изображения не масштабируются хорошо. У меня нет роскоши создавать изображения для всех точек на дюйм вариации, поэтому, пожалуйста, не предлагайте это в качестве ответа.

3 ответов


У вас будут большие проблемы при изменении свойства AutoScaleMode. Увеличение DPI также изменяет размер шрифта системы. Обязательно так, размер шрифта, выраженный в пунктах, 1/72 дюйма. Шрифты должны быть больше, чтобы получить тот же размер точки при увеличении DPI и сохранить текст таким же читаемым при просмотре с того же расстояния.

поскольку элементы управления больше не изменяются, текст, скажем, кнопка больше не подходит. Один из способов борьбы-изменить мир. размер шрифта на элементах управления пропорционально. Легко, если все элементы управления наследуют шрифт формы, просто изменение свойства шрифта формы автоматически обновляет элементы управления. Явным недостатком является то, что пользователю будет сложнее читать текст. Это особенно плохо, когда DPI доходит до 150 точек на дюйм и выше, ваш пользовательский интерфейс просто превращается в непригодную почтовую марку.

да, фоновые изображения должны быть масштабированы, чтобы соответствовать большему элементу управления или форме. Пиксель в изображение больше не отображает один к одному пиксель монитора. Графика по умолчанию.Значение InterpolationMode делает довольно приличную работу по фильтрации изображения. Но это зависит от вида изображения, насколько хорошо это получается. Фотография почти всегда очень хорошо масштабируется. Детализированные графики и текста нет. Выбор правильного вида изображения проходит долгий путь, чтобы избежать необходимости создавать отдельные.

эта проблема не собирается уходить, пока мониторы не начнут иметь вид разрешение принтера имеет. Мы еще далеки от 600 dpi для настольных мониторов. Телефоны будут первыми.


Вы можете установить AutoScaleMode собственность формы на None.


добавление одной строки кода перед автоматически сгенерированным вызовом InitializeComponent в конструкторе Form1 решило его для меня:

public partial class Form1 : Form
{
    public Form1()
    {
        // Make the GUI ignore the DPI setting
        Font = new Font(Font.Name, 8.25f * 96f / CreateGraphics().DpiX, Font.Style, Font.Unit, Font.GdiCharSet, Font.GdiVerticalFont);
        InitializeComponent();
    }
}