Как определить размер формы АКТУАЛЬНЫХ окон (со всеми неклиентскими элементами) при запуске Aero? - PullRequest
6 голосов
/ 12 января 2012

Я пытаюсь расположить форму точно над панелью задач. К сожалению, моим усилиям мешает тот факт, что this.Height в моей форме возвращает значение, которое на 10 пикселей меньше, чем фактическая форма (со всеми границами, строкой заголовка и т. Д.). Я использую Windows 7 с Aero. Когда Aero выключен (а границы тоньше), все работает как положено. Стиль границы формы - FixedSingle. Я не хочу реализовывать Aero-специфичные хаки. Что я могу сделать, чтобы получить правильную высоту?

1 Ответ

8 голосов
/ 12 января 2012

Да, Aero лжет о размере окна, возвращаемого GetWindowRect (). Это довольно важный способ взлома приложений, без которого слишком много программ имели бы слишком маленькую клиентскую область. К сожалению, нет ни вызова API, ни записи манифеста, которую можно использовать, чтобы отключить ложь. Единственный способ - установить версию Windows в заголовке EXE и отметить ее как совместимую с Vista.

Это можно сделать с помощью Editbin.exe в событии после сборки:

set pathsave=%path%
set path=$(devenvdir);$(devenvdir)..\..\vc\bin
editbin.exe /subsystem:windows,6.0 "$(targetfilename)"
set path=%pathsave%

Помните, что после этого ваша программа не будет работать в XP.


ОБНОВЛЕНИЕ: теперь это делается по умолчанию в VS2012 и выше, когда вы настроены на .NET 4.5

...