gpt4 book ai didi

c++ - Windows 10 屏幕坐标偏移 7

转载 作者:可可西里 更新时间:2023-11-01 09:44:29 30 4
gpt4 key购买 nike

我在 Windows 10 上使用 C++ 进行编码 - 直接使用 win32 API。

我想让一个窗口显示在屏幕的右上角。当我这样做时,我注意到最大化窗口的屏幕坐标为 left=-8,top=-8,right=1936,bottom=1088。

此外,当我将窗口定位为 right=1920 和 top=0 时,右侧大约有 8 像素的间隙。我尝试四处移动窗口以查看我得到的屏幕坐标。

非最大化窗口的 rect.left 可以从 -7 到 1912。

所以东西滑动了 7 个像素? WTF 微软 ??

我应该如何提出 rec.right=1913 值来将我的窗口定位到屏幕右侧,而没有那个该死的间隙?

但是 1920 年的 rect.right 留下了一个空白。所以 1912 年的 rect.right 会留下更多的空白......

而且我需要一个可以恢复到 Vista 的解决方案。在 win10 之前,rect.right 应该像你期望的那样是 1920。

这里发生了什么?我要开始乱扔刀子了!!

代码方面,这正是 GetWindowRect 报告的内容......(请原谅我奇怪的调试功能)

::GetWindowRect (_wndo, r);

DBG("ExtRc l=`d r=`d t=`d b=`d w=`d h=`d",
r->left, r->right, r->top, r->bottom, r->right-r->left, r->bottom-r->top);

最佳答案

感谢@ChristopherOicles这真的是他的回答。将其复制为您自己的(或对其进行任何调整),我会接受您的。

微软正在破坏 Windows 10 中的边框宽度。

GetWindowRect 返回外部窗口坐标作为屏幕坐标。GetClientRect 返回窗口内的坐标。直到 Windows 10(F U Win10 !!),

它们之间的宽度和高度的差异是边框的宽度和高度。

在 win10 上,边框宽度报告为 16 像素,因此边为 8 像素。但是,这些像素中只有 1 个是可见的。其中7个是透明的。因此,您的窗口在左侧、右侧和底部有 7 个透明像素。

因此,如果您要以编程方式在屏幕上排列窗口,则需要考虑那些透明的 7 像素。用户不希望屏幕边框旁边有 7 像素的间隙!

具有属性 DWMWA_EXTENDED_FRAME_BOUNDS 的 DwmGetWindowAttribute 将为您提供屏幕坐标中边框实际显示部分的宽度和高度。与 GetWindowRect 非常相似,但 rect 不包括 invisible-ness。

大多数时候您仍然需要 GetWindowRect 来设置窗口的宽度和高度,并且需要每边 7 个不可见像素来以编程方式正确调整窗口大小。

因此,使用 GetWindowRect 返回的矩形的 .left 与 DwmTerribleName 返回的 .left 之间的差异来获得 7 像素的偏移量。

在我看来,无论谁在微软做了这件事,都应该立即枪毙。这是一个我不需要跳过的圈套。这打破了与过去的兼容性。

关于c++ - Windows 10 屏幕坐标偏移 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42473554/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com