How to determine ACTUAL windows form size (with all nonclient elements) when running Aero?

Solution 1:

Yes, Aero lies about the window size returned by GetWindowRect(). It is a rather important appcompat hack, without it far too many programs would have a client area that's too small. Unfortunately there's neither an API call nor a manifest entry that can be used to turn off the lie. The only way is to set the Windows version in the EXE header and mark it Vista compatible.

You can do so with Editbin.exe in a postbuild event:

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

Beware that your program will not run in XP anymore after this.


UPDATE: this is now done by default in VS2012 and up when you target .NET 4.5