Позиционирование окна с включенными Aero Themes (тени) - в окне 0,0 скрыты некоторые границы - PullRequest
1 голос
/ 10 августа 2011

Я открываю окно в 0,0. Когда Aero и тень окна отключены, это работает просто отлично. Если тень окна включена, часть границы окна (и заголовок) скрыта над верхним / левым краем рабочего стола.

Есть ли способ определить, включена ли тень, и на сколько пикселей мне нужно отрегулировать положение окна?

Я испробовал почти все, что доступно в GetSystemMetrics (), и ничего из этого не имеет смысла.

1 Ответ

4 голосов
/ 10 августа 2011

Aero лежит около положения окна. Это сверхпрочная функция приложения-компата, границы окон имеют одинаковую ширину в течение очень долгого времени. Это не было устойчивым, во время Vista становилось важным не создавать границы окна шириной в один пиксель. Технологии мониторов развиваются: дисплей с разрешением 1600 x 900 (мой ноутбук) не является чем-то необычным. Перемещение курсора мыши на моей клавиатуре, чтобы поразить этот пиксель, чтобы сделать окно более широким, наверняка, это.

Таким образом, большой целью дизайна в Vista было создание окон с красивыми жирными границами. Легко ударить мой коврик для мыши.

Это создало неприятную проблему совместимости приложений, хотя много программного обеспечения создает окно с CreateWindows / Ex (), которое задает вне размера окна. Клиентская зона плюс границы. Наличие жирных рамок теперь является проблемой, оно не увеличивает окно, оно делает клиентскую область меньше . Не хорошо, клиентская область - это та, которая считается, когда вы заполняете окно контентом и / или элементами управления. Есть несколько программ gazillion, которые ожидают иметь клиентскую область определенного размера из заданного внешнего размера окна. Обрезанные элементы управления и полосы прокрутки (если вам повезет) будут безудержными.

Единственное разумное, что могут сделать программисты Vista, это сохранить размер клиента и расширить окно за запрошенные границы. Без приложения, просящего об этом. И если его подделать, когда приложение запросит , GetClientRect () вызовет.

Исправление такого поведения возможно, вы должны сообщить Vista, что вам известно о его поведении. К сожалению, это не доступно в настройках проекта C ++. Вы должны запустить editbin.exe / subsystem, чтобы сказать, что вы совместимы с 6,0 в событии после сборки. Побочным эффектом является то, что он не будет работать на XP и более ранних версиях. То, что это не очевидный вариант, очень и очень небрежно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...