GetWindowPlaceace / SetWindowPlaceacace не работает в WinForms для высокого DPI
-
25-09-2019 - |
Вопрос
У меня есть устаревшее приложение WinForms, и я хочу сохранить положение окна и размеры через сеансы. Я использовал Getwindowplace а также Setwindowplace во время формирования и загрузки событий. Проблема, которую я получаю, это то, что при более высоких настройках DPI (например, среда, размер на 125%) размеры продолжают раздувать. Я позвоню SetWindowPlaceacace на нем определенным размером, но когда называется GetWindowPlace, эти цифры возвращаются на 25% больше, даже если окно было таким же размером. Такая же проблема существует при сохранении размера резкостируемого элемента в пределах формы.
Теперь это работает нормально, если я создаю новый проект WinForms: размер остается стабильным даже при запуске на более высоком DPI. Я предполагаю, что в кишечнике проекта есть некоторые устаревшие настройки в кишечнике или некоторую установку аркана.
Я позвонил IsprocessDpiaware. на обоих проектах, так и оба true
. Отказ Кто-нибудь знает, что может заставить это?
Решение 2
Я нашел эту нарушенную настройку в файле .resx формы:
<data name="$this.AutoScaleBaseSize" type="System.Drawing.Size, System.Drawing">
<value>5, 13</value>
</data>
Когда это было присутствует, VS автоматически изменит автоскалебазон для работы на твой DPI, но никто не. Для всех остальных форма будет постоянно расти или сокращаться.
Выбор автоскалемода = шрифт на панели «Дизайнер». Теперь это работает для всех DPI.
Другие советы
Похоже, вы как-то вызывают масштабирование, как выбрано свойством автоскалемода формы. Разница между вашими двумя проектами будет свойство AutoScaledimence, видимым в файле designer.cs.
Не уверен, почему это вызвало бы проблему, но класс формы уже использует GetWindowPaceaction () внутренне, рекреационные методы () () и ustateWindowState (). Чтобы получить реальную помощь, я предполагаю, что вам нужно будет опубликовать REPRO-проект где-то.