Как получить правильное значение DPI для System.Drawing.Graphics в приложении с поддержкой DPI для каждого монитора? - PullRequest
1 голос
/ 03 мая 2019

Я запускаю настольное приложение .NET в режиме Per-Monitor v2 DPI Aware. Для рисования частей пользовательского интерфейса WinForms необходимо, чтобы все художники знали текущее значение DPI. Художники высокого уровня могут получить его от HWND, это рабочее решение. Однако у художников более низкого уровня есть только объект GDI + System.Drawing.Graphics.

Я пытаюсь заставить System.Drawing.Graphics указать правильный DPI. Теперь я вижу DPI уровня SYSTEM на нем независимо от текущего значения DPI HWND. Его свойства DpiX / DpiY доступны только для чтения, поэтому на них нужно воздействовать косвенно.

Graphics имеет два основных способа, как его можно создать для элемента управления, либо с его HWND, либо HDC над ним (который может исходить из ::GetDC или ::BeginPaint или даже WM_PAINT args). В любом случае он имеет только значение SYSTEM DPI, а не значение для каждого монитора. Вероятно, он будет работать для создания Bitmap, соответствующей настройки и рисования в нем, а затем перетаскивания на элемент управления, но это не слишком аккуратно и не оптимально.

Итак: я вижу хороший DPI для каждого монитора для HWND элемента управления WinForms, я хочу увидеть такое же приятное значение в свойствах Graphics объекта DpiX / DpiY над этот контроль, есть ли способ?

1 Ответ

0 голосов
/ 03 мая 2019

Должен быть способ.Чтобы показать форму на двух мониторах, вам нужно создать 2 экземпляра.Чтобы загрузить графику / изображение в обе формы, вам нужен только один экземпляр этой графики.Графика не зависит от ваших мониторов, а внутренняя ей не нужна (только набор пикселей).

...