2

我想确定窗口内的矩形是否完全可见。

我找到了 RectVisible,但该函数确定矩形的任何部分是否可见,我想知道整个矩形是否可见。

这有什么功能吗?

4

4 回答 4

2

在矩形的每个角上使用PtVisible

PtVisible 函数确定指定点是否在设备上下文的剪辑区域内。

于 2010-11-01T18:40:31.617 回答
2

首先通过使用将系统剪切区域(窗口的可见区域)放入一个区域中GetRandomRgn在此处阅读有关“系统区域”的更多信息。然后,偏移该区域,因为它位于屏幕坐标中(我链接的文章有一个示例)。之后,从您的矩形创建一个区域,CreateRectRgn并将您的“矩形区域”的部分与不属于“系统区域”的部分结合起来:即调用CombineRgn将矩形区域作为第一个区域,将系统区域作为第二个区域,并且RGN_DIFF作为fnCombineMode. 如果结果是,NULLREGION那么您的矩形是完全可见的 - 它没有被任何窗口(顶层或非顶层)完全或部分覆盖,或者它没有完全或部分不在屏幕上。

总而言之,您有可能以错误的方式解决问题。如果您已经告诉了您一直在努力实现的目标,那么某人可能会建议一种更简单的方法。

于 2010-11-02T02:57:20.470 回答
1

你能用窗口和矩形的坐标做一个简单的比较吗?

检查矩形的左纵坐标是否在窗口左边框的右侧;右纵坐标位于窗口右边框的左侧;顶部和底部类似?

唯一的问题可能是您同时使用逻辑坐标和物理坐标,在这种情况下您将需要执行转换。

于 2010-11-01T18:30:35.943 回答
1

所有处理剪切矩形和点可见性的功能都因 Windows Vista 的新桌面合成功能而中断。这些功能可以在 Windows XP 和更早版本以及关闭 Aero/Desktop Composition 的 Windows 7 上正常工作,但除此之外,它们将始终声称整个窗口都是可见的。

于 2019-10-01T07:16:36.807 回答