C++ 启用Aero主题(阴影)的窗口定位-窗口为0,0时隐藏了一些边框

C++ 启用Aero主题(阴影)的窗口定位-窗口为0,0时隐藏了一些边框,c++,windows,winapi,mfc,C++,Windows,Winapi,Mfc,我正在0,0打开一扇窗户。当禁用Aero和window shadow时,这一切正常。如果启用了窗口阴影,则窗口边框和标题的一部分将隐藏在桌面左上角/左上角的上方 有没有办法检测阴影是否打开以及调整窗口位置需要多少像素 我已经尝试了GetSystemMetrics提供的几乎所有功能,但都没有意义。Aero对窗口位置撒谎。这是一个繁重的应用程序兼容功能,windows边框的宽度已经保持了很长时间。这是不可持续的,在Vista时代,重要的是不要将窗口边框设为一个像素宽。显示器技术继续发展,我的笔记本电

我正在0,0打开一扇窗户。当禁用Aero和window shadow时,这一切正常。如果启用了窗口阴影,则窗口边框和标题的一部分将隐藏在桌面左上角/左上角的上方

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


我已经尝试了GetSystemMetrics提供的几乎所有功能,但都没有意义。

Aero对窗口位置撒谎。这是一个繁重的应用程序兼容功能,windows边框的宽度已经保持了很长时间。这是不可持续的,在Vista时代,重要的是不要将窗口边框设为一个像素宽。显示器技术继续发展,我的笔记本电脑拥有1600 x 900分辨率的显示器并不特别。在我的键盘上移动鼠标光标,点击一个像素,使窗口更宽,这无疑是一件好事

所以Vista的一个大设计目标是创建具有漂亮的胖边框的窗口。很容易击中我的鼠标垫

这造成了一个严重的应用程序兼容性问题,但是,有很多软件使用CreateWindows/Ex创建一个指定窗口外部大小的窗口。客户区加边框。胖边框现在成了一个问题,它不会使窗口变大,而是使客户端区域变小。不太好,当您用内容和/或控件填充窗口时,客户端区域才是最重要的区域。有无数的程序期望从给定的外部窗口大小获得一定大小的客户端区域。如果幸运的话,剪辑控件和滚动条会很猖獗

Vista程序员所能做的唯一合理的事情就是保持客户端的大小,并将窗口扩展到请求的边界之外。没有应用程序要求它。当应用程序确实需要它时,必须伪造它,GetClientRect调用


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

Aero位于窗口位置附近。这是一个繁重的应用程序兼容功能,windows边框的宽度已经保持了很长时间。这是不可持续的,在Vista时代,重要的是不要将窗口边框设为一个像素宽。显示器技术继续发展,我的笔记本电脑拥有1600 x 900分辨率的显示器并不特别。在我的键盘上移动鼠标光标,点击一个像素,使窗口更宽,这无疑是一件好事

所以Vista的一个大设计目标是创建具有漂亮的胖边框的窗口。很容易击中我的鼠标垫

这造成了一个严重的应用程序兼容性问题,但是,有很多软件使用CreateWindows/Ex创建一个指定窗口外部大小的窗口。客户区加边框。胖边框现在成了一个问题,它不会使窗口变大,而是使客户端区域变小。不太好,当您用内容和/或控件填充窗口时,客户端区域才是最重要的区域。有无数的程序期望从给定的外部窗口大小获得一定大小的客户端区域。如果幸运的话,剪辑控件和滚动条会很猖獗

Vista程序员所能做的唯一合理的事情就是保持客户端的大小,并将窗口扩展到请求的边界之外。没有应用程序要求它。当应用程序确实需要它时,必须伪造它,GetClientRect调用


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

您在多个监视器上尝试过这个选项吗?很可能只是显示器有点失调。真有趣,伙计。下一步是什么-我应该试着关闭和打开我的电缆调制解调器吗;您是否在多个显示器上试用过此功能?很可能只是显示器有点失调。真有趣,伙计。下一步是什么-我应该试着关闭和打开我的电缆调制解调器吗;非常感谢。这让我快发疯了。谢谢你!这让我快发疯了。