Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

Добавление одной строки кода до автоматического сгенерированного вызова на INATIVECOMPOMPOSONENT в форме1-конструктор решил для меня:

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();
    }
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top