如何在运行Aero时确定ACTUAL窗体的大小(包含所有非客户端元素)?

时间:2012-01-12 16:33:22

标签: .net winforms size aero

我正在尝试将我的表单精确定位在任务栏上方。不幸的是,我的工作受到以下事实的阻碍:我的表单上的this.Height返回的值比实际表单小10个像素(包含所有边框,标题栏等)。我正在使用Aero运行Windows 7。当Aero关闭(并且边框更薄)时,所有工作都按预期工作。表单边框样式为FixedSingle。我不想实现特定于Aero的黑客攻击。我该怎么做才能获得正确的身高?

1 个答案:

答案 0 :(得分:8)

是的,Aero关于GetWindowRect()返回的窗口大小。这是一个相当重要的appcompat hack,没有它太多的程序会有一个太小的客户区。不幸的是,既没有API调用也没有可以用来关闭谎言的清单条目。唯一的方法是在EXE标题中设置Windows版本并将其标记为与Vista兼容。

您可以在postbuild事件中使用Editbin.exe执行此操作:

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

请注意,此后您的程序将不再在XP中运行。


更新:现在默认情况下在VS2012中完成,在目标.NET 4.5

时启动