确定窗口内是否可见rect

时间:2010-11-01 18:19:03

标签: winapi window visible rect

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

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

这有什么功能吗?

4 个答案:

答案 0 :(得分:2)

在矩形的每个角上使用PtVisible

  

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

答案 1 :(得分:2)

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

总而言之,你有可能以错误的方式接近你的问题。如果你已经告诉过你一直想要实现的目标,那么有人可能会提出一个更简单的方法。

答案 2 :(得分:1)

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

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

如果你同时使用逻辑坐标和物理坐标,那么唯一的皱纹就是,在这种情况下你需要进行转换。

答案 3 :(得分:0)

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