2012-01-12 10 views
6

Próbuję ustawić moją formę dokładnie nad paskiem zadań. Niestety moje wysiłki są utrudnione przez fakt, że this.Height na moim formularzu zwraca wartość, która jest o 10 pikseli mniejsza od rzeczywistej formy (z wszystkimi ramkami, paskiem tytułu itp.). Używam Windows 7 z Aero. Kiedy Aero jest wyłączone (a granice są cieńsze), wszystko działa zgodnie z oczekiwaniami. Styl obramowania formularza to FixedSingle. Nie chcę implementować hacków specyficznych dla Aero. Co mogę zrobić, aby uzyskać prawidłową wysokość?Jak ustalić RZECZYWISTY rozmiar okna (przy wszystkich elementach niewspółużytkowanych) przy uruchamianiu Aero?

Odpowiedz

8

Tak, Aero dotyczy rozmiaru okna zwróconego przez GetWindowRect(). Jest to dość ważny hack appcompat, bez którego zbyt wiele programów miałoby obszar klienta zbyt mały. Niestety nie ma ani wywołania API, ani manifestu, który może zostać użyty do wyłączenia kłamstwa. Jedynym sposobem jest ustawienie wersji Windows w nagłówku EXE i oznaczenie jej zgodnością z Vistą.

Można to zrobić z Editbin.exe w imprezie postbuild:

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

Pamiętaj, że program nie będzie działał w XP już po tym.


UPDATE: dzieje się to domyślnie w VS2012 i aż po kierowanie .NET 4.5

+1

Ała! Cóż, ponieważ jest to małe narzędzie do mojego użytku, myślę, że po prostu to zignoruję. Każdy inny sposób wydaje się zbyt wielkim kłopotem dla tak niewielkiej niedokładności (w przeciwieństwie do zwykłego hakowania +10 do moich obliczeń). –

Powiązane problemy