Я пытаюсь разместить свою форму точно над панелью задач. К сожалению, моим усилиям мешает тот факт, что this.Height
в моей форме возвращает значение, которое на 10 пикселей меньше фактической формы (со всеми границами, заголовком и т.д.). Я запускаю Windows 7 с Aero. Когда Aero выключается (и границы становятся тоньше), все работает так, как ожидалось. Стиль рамки формы FixedSingle
. Я не хочу использовать Aero-специфические хаки. Что я могу сделать, чтобы получить правильную высоту?
Как определить размер формы окна ACTUAL (со всеми неклиентными элементами) при запуске Aero?
Ответ 1
Да, Aero лежит о размере окна, возвращаемом GetWindowRect(). Это довольно важный аксессуар, без него слишком много программ будет иметь слишком маленькую клиентскую область. К сожалению, нет ни вызова API, ни манифестной записи, которую можно использовать, чтобы отключить ложь. Единственный способ - установить версию Windows в заголовок EXE и отметить ее совместимость с Vista.
Вы можете сделать это с помощью Editbin.exe в событии postbuild:
set pathsave=%path%
set path=$(devenvdir);$(devenvdir)..\..\vc\bin
editbin.exe /subsystem:windows,6.0 "$(targetfilename)"
set path=%pathsave%
Помните, что после этого ваша программа больше не будет запускаться в XP.
UPDATE: теперь это делается по умолчанию в VS2012 и выше, когда вы нацеливаете .NET 4.5