2012-01-12 47 views
6

我试图将我的表单正好放在任务栏上方。不幸的是,我的努力受到这样一个事实的阻碍,我的窗体上的this.Height返回的值比实际窗体(包含所有边框,标题栏等)要小10个像素。我使用Aero运行Windows 7。当Aero关闭(并且边界更薄时),所有按预期工作。表单边框样式是FixedSingle。我不想实施特定于Aero的黑客行为。我能做些什么来获得正确的身高?如何在运行Aero时确定ACTUAL窗体的窗体大小(包含所有非客户端元素)?

回答

8

是的,Aero谎言关于由GetWindowRect()返回的窗口大小。这是一个相当重要的appcompat黑客,没有太多的程序会有一个客户区太小。不幸的是,既没有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后,这个运行了。


UPDATE:这是现在是默认VS2012做和,当你面向.NET 4.5

+1

哎哟!那么,因为这是我自己使用的一个小工具,我想我会忽略它。任何其他方式似乎太小麻烦了这么小的不精确度(简单地把我的计算值加10)。 – 2012-01-13 00:29:43

相关问题