确定在窗口内是否可以看到rect

问题描述 投票:2回答:4

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

我发现了RectVisible,但是该函数确定rect的任何部分是否可见,我想知道整个rect是否可见。

有任何功能吗?

winapi window visible rect
4个回答
2
投票

首先使用GetRandomRgn将系统剪辑区域(窗口的可见区域)划分为一个区域。阅读有关“系统区域” GetRandomRgn的更多信息。然后,由于该区域在屏幕坐标中而偏移该区域(我链接的文章有一个示例)。之后,使用here在矩形中创建一个区域,并将“矩形区域”的部分与不属于“系统区域”的部分合并:调用CreateRectRgn,将矩形区域作为第一个区域,系统区域为第二区域,CreateRectRgnCombineRgn。如果结果为CombineRgn,则您的矩形是完全可见的-它未被任何窗口完全或部分覆盖(无论是否处于顶层),或者它不完全或部分在屏幕外。

总而言之,您很有可能以错误的方式来解决问题。如果您已告诉自己想要实现的目标,则可能会建议一种更简单的方法。


2
投票

在矩形的每个角上使用RGN_DIFF

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


1
投票

您能否使用窗口和矩形的坐标进行简单比较。

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

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


0
投票

处理剪辑矩形和点可见性的所有功能都被Windows Vista的新桌面合成功能所破坏。该功能在Windows XP和更早版本以及在关闭了Aero / Desktop Composition的Windows 7上可以正常使用,但是,否则它们将始终声称整个窗口都是可见的。

© www.soinside.com 2019 - 2024. All rights reserved.