我想精确地将我的表单定位在任务栏上方。不幸的是,我的表单this.Height
返回的值比实际表单(带有所有边框、标题栏等)小10像素。我正在运行带有Aero的Windows 7。当关闭Aero时(边框更薄),一切正常。表单边框样式为FixedSingle
。我不想实现Aero特定的黑客技巧。我该怎么做才能得到正确的高度?
是的,Aero在GetWindowRect()返回的窗口大小上撒了谎。这是一个非常重要的应用兼容性技巧,如果没有它,太多的程序将会有一个过小的客户区域。不幸的是,没有API调用或清单条目可以用来关闭这个谎言。唯一的方法是在EXE头中设置Windows版本并标记为Vista兼容。
你可以在后期构建事件中使用Editbin.exe来实现:
set pathsave=%path%
set path=$(devenvdir);$(devenvdir)..\..\vc\bin
editbin.exe /subsystem:windows,6.0 "$(targetfilename)"
set path=%pathsave%
请注意,完成此操作后,您的程序将无法在XP上运行。
更新:当您针对.NET 4.5进行目标设置时,默认情况下在VS2012及更高版本中已完成此操作。