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

标签 .net winforms size aero

我试图将我的表单准确地定位在任务栏上方。不幸的是,我的努力受到了 this.Height 的阻碍。在我的表单上返回一个比实际表单小 10 个像素的值(包括所有边框、标题栏等)。我正在使用 Aero 运行 Windows 7。当 Aero 关闭(并且边框更薄)时,一切都按预期工作。表单边框样式为 FixedSingle .我不想实现 Aero-specific hacks。我该怎么做才能获得正确的高度?

最佳答案

是的,Aero 在于 GetWindowRect() 返回的窗口大小。这是一个相当重要的 appcompat hack,没有它,太多程序的客户区就会太小。不幸的是,既没有 API 调用也没有 list 条目可用于关闭谎言。唯一的方法是在 EXE header 中设置 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 中运行。

更新:当你以 .NET 4.5 为目标时,这现在在 VS2012 及更高版本中默认完成

关于.net - 运行 Aero 时如何确定 ACTUAL 窗口窗体大小(包含所有非客户端元素)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8838621/

相关文章:

c# - 通过DataGridView向集合添加元素

c# - 从数据库中选择数据,使用今天的日期作为标准

c# - 为winforms中输入路径到输出路径的每个子目录创建一个7zip文件

mysql - Cakephp电子商务数据库设计

c# - 计算算法时间

c# - XAML 绑定(bind)到 ViewModel 中的控件

c++ - 迭代速度和元素大小

MySql内存分配

c# - 仅当项目处于 Debug模式时抛出异常

javascript - 将 js 转换为 C# 时出现 System.OverflowException