Winapi 确定矩形是否在窗口内可见

Winapi 确定矩形是否在窗口内可见,winapi,window,visible,rect,Winapi,Window,Visible,Rect,我想确定窗口内的矩形是否完全可见 我发现RectVisible,但该函数确定rect的任何部分是否可见,我想知道整个rect是否可见 有什么功能吗?你能用窗口和矩形的坐标做一个简单的比较吗 检查矩形的左坐标是否在窗口左边框的右侧;右纵坐标位于窗口右边框的左侧;顶部和底部是否相似 唯一的问题可能是,如果同时使用逻辑坐标和物理坐标,则需要执行转换。在矩形的每个角上使用 PtVisible函数确定 指定的点是否在 设备的剪裁区域 上下文 首先使用将系统剪裁区域(窗口的可见区域)转换为区域。阅读有关“系

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

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


有什么功能吗?

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

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

唯一的问题可能是,如果同时使用逻辑坐标和物理坐标,则需要执行转换。

在矩形的每个角上使用

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


首先使用将系统剪裁区域(窗口的可见区域)转换为区域。阅读有关“系统区域”的更多信息。然后,偏移该区域,因为它位于屏幕坐标中(我链接的文章有一个示例)。然后,用矩形创建一个区域,并将“矩形区域”的部分与不属于“系统区域”的部分结合起来:即调用将矩形区域作为第一个区域传递,将系统区域作为第二个区域传递,并将
RGN_DIFF
作为
fnCombineMode
。如果结果为
NULLREGION
,则矩形完全可见-它没有被任何窗口(顶层或非顶层)完全或部分覆盖,或者它没有完全或部分脱离屏幕


总而言之,你很有可能以错误的方式处理你的问题。如果你告诉别人你一直在努力实现的目标,可能有人会建议一种更简单的方法。

所有处理剪辑矩形和点可见性的功能都与Windows Vista新的桌面合成功能相冲突。这些功能在Windows XP和更早版本以及关闭Aero/Desktop Composition的Windows 7上都可以正常工作,但在其他情况下,它们总是声称整个窗口都是可见的。

这在大多数情况下都可以工作,但您不能确定有什么东西没有覆盖到rect的内部。一个比矩形小的窗口可以放在我需要检查的窗口的顶部。在Windows 7上,“系统区域”始终与矩形区域完全相同,即使窗口被其他窗口关闭或在屏幕外。