Я запускаю настольное приложение .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
над этот контроль, есть ли способ?