2012-01-12 2 views
6

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

ответ

8

Да, 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

+1

Ой! Ну, так как это небольшая утилита для моего собственного использования, я думаю, я просто проигнорирую ее. Любой другой способ кажется слишком сложным для такой небольшой неточности (за исключением простого взлома +10 для моих расчетов). –

 Смежные вопросы

  • Нет связанных вопросов^_^