【问题标题】:Window positioning with Aero Themes (shadows) on - Window at 0,0 has some of the border hidden带有 Aero 主题(阴影)的窗口定位 - 0,0 处的窗口隐藏了一些边框
【发布时间】:2011-08-09 22:54:47
【问题描述】:

我在 0,0 点打开一个窗口。当 Aero 和窗口阴影被禁用时,这工作得很好。如果启用了窗口阴影,则窗口的部分边框(和标题)会隐藏在桌面左边缘的上/左上方。

有没有办法检测阴影是否打开以及调整窗口位置需要多少像素?

我已经尝试了 GetSystemMetrics() 提供的几乎所有可用的方法,但都没有任何意义。

【问题讨论】:

  • 您是否在不止一台显示器上试过这个?似乎很可能只是显示器稍微失调。
  • 这很有趣,伙计。下一步是什么 - 我应该尝试关闭并打开我的电缆调制解调器吗? ;))

标签: c++ windows winapi mfc


【解决方案1】:

Aero 位于窗口位置。这是一个重型应用程序兼容功能,窗口边框很长一段时间以来一直具有相同的宽度。这是不可持续的,在 Vista 时代,不将窗口边框设置为一个像素宽变得越来越重要。显示器技术继续发展,拥有 1600 x 900 分辨率的显示器(我的笔记本电脑)并不特别。在我的垫子上移动鼠标光标以点击那个像素以使窗口变宽最肯定是。

因此,Vista 的一个重要设计目标是创建带有漂亮粗边框的窗口。很容易在我的鼠标垫上敲击。

这造成了一个令人讨厌的应用程序兼容性问题,有很多软件使用 CreateWindows/Ex() 创建一个窗口,指定窗口的 outside 大小。客户区加边界。粗边框现在是个问题,它不会使窗口变大,而是使客户区变小。不好,当您用内容和/或控件填充窗口时,客户区是重要的。有无数的程序希望从给定的外部窗口大小中获得一定大小的客户区。剪裁的控件和滚动条(如果幸运的话)会很猖獗。

Vista 程序员可以做的唯一合理的事情是保持客户端大小并将窗口扩展到超出其请求的边界。没有应用程序要求它。当应用程序确实要求它时,必须伪造它,GetClientRect() 调用。

修复此行为是可能的,您必须告诉 Vista 您知道它的行为。不幸的是,这在 C++ 项目设置中不可用。您必须运行 editbin.exe /subsystem 来告诉您在构建后事件中与 6,0 兼容。副作用是它不再在 XP 和更早版本上运行。它不是一个清单选项是非常非常草率的。

【讨论】:

  • 谢谢!这让我发疯了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多