Как я могу сделать мое приложение WinForms DPI-Aware - PullRequest
4 голосов
/ 14 марта 2011

Я работаю в компании, которая использует приложение Winforms в качестве нашего флагманского продукта.мы недавно переработали брендинг и пользовательский интерфейс.Мы заметили, что формы теперь не отображают текст должным образом, а некоторые элементы управления не выровнены или исчезли с края.

Могу ли я сделать формы в этом приложении DPI-Aware с помощьюнаименьшее количество повторного факторинга, так как у нас нет времени.

Ответы [ 2 ]

13 голосов
/ 14 марта 2011

Важно, чтобы вы не указывали координаты и размеры в пикселях.Это исключает использование Control.Top и Control.Left, что и делает дизайнер, когда вы «просто размещаете» элементы управления на форме.

Чтобы получить пользовательский интерфейс, который работает с различными настройками DPI, в значительной степенивсе должно быть динамически измерено.Для элементов управления должно быть включено Control.AutoSize.Но просто включение AutoSize полностью испортит ваш макет, поскольку позиция управления все еще будет статичной.

Чтобы динамически позиционировать элементы управления, вы можете использовать элементы управления контейнером, такие как FlowLayoutPanel и TableLayoutPanel (с размерами, установленными на AutoSize).Обычные элементы управления внутри них будут просто перемещаться по форме в соответствии с автоматически определенными размерами.

Как видите, это не просто, требует немного опыта, чтобы разобраться в этом, и требует огромногообъем тестирования (виртуальные машины с различными настройками DPI отлично работают).Но я думаю, что это обязательно нужно сделать, так как я всегда раздражаюсь, если на моем ноутбуке что-то выглядит глупо и глючит.

0 голосов
/ 14 марта 2011

Самый быстрый способ - переопределить OnPaint и использовать свойства Graphics.DpiX и DpiY.См. http://msdn.microsoft.com/en-us/library/ms701681(VS.85).aspx. Единственная рекомендация - использовать файл манифеста вместо SetDpiAware

.
...