Я работаю над приложением, которое размещает окна на экране в стиле сетки. При запуске этого в Windows 10 между окнами существует огромный разрыв. Дальнейшие исследования показывают, что GetWindowRect
возвращает неожиданные значения, в том числе невидимую границу, но я не могу заставить его возвращать реальные значения с видимой границей.
1) Эта ветка предполагает, что это сделано специально, и вы можете "исправить" это, связавшись с winver = 6. Моя среда не позволяет этого, но я попытался изменить PE MajorOperatingSystemVersion
и MajorSubsystemVersion
на 6 без каких-либо последствий
2) Тот же поток также предлагает использовать DwmGetWindowAttribute
с DWMWA_EXTENDED_FRAME_BOUNDS
для получения реальных координат из DWM, что работает, но означает изменение везде, где получаются координаты окна. Это также не позволяет устанавливать значение, что позволяет нам изменить процесс, чтобы иметь возможность устанавливать размер окна.
3) Этот вопрос предполагает отсутствие осведомленности о DPI в процессе. Ни установка флага осведомленности DPI в манифесте, ни вызов SetProcessDpiAwareness
не дали никаких результатов.
4) Я также попытался добавить флаги совместимости Windows Vista, 7, 8, 8.1 и 10, и темы Windows проявляются без изменений.
Это окно перемещается в 0x0, 1280x1024, предположительно, чтобы заполнить весь экран, и при запросе координат назад мы получаем те же значения. Однако на самом деле это окно на 14 пикселей уже, чтобы учесть границы в старых версиях Windows.
Как я могу убедить Windows разрешить мне работать с реальными координатами окна?