我想确定窗口内的矩形是否完全可见。
我发现了RectVisible,但是该函数确定rect的任何部分是否可见,我想知道整个rect是否可见。
有任何功能吗?
首先使用GetRandomRgn
将系统剪辑区域(窗口的可见区域)划分为一个区域。阅读有关“系统区域” GetRandomRgn
的更多信息。然后,由于该区域在屏幕坐标中而偏移该区域(我链接的文章有一个示例)。之后,使用here在矩形中创建一个区域,并将“矩形区域”的部分与不属于“系统区域”的部分合并:调用CreateRectRgn
,将矩形区域作为第一个区域,系统区域为第二区域,CreateRectRgn
为CombineRgn
。如果结果为CombineRgn
,则您的矩形是完全可见的-它未被任何窗口完全或部分覆盖(无论是否处于顶层),或者它不完全或部分在屏幕外。
总而言之,您很有可能以错误的方式来解决问题。如果您已告诉自己想要实现的目标,则可能会建议一种更简单的方法。
在矩形的每个角上使用RGN_DIFF
。
PtVisible函数确定指定点是否在设备的裁剪区域上下文。
您能否使用窗口和矩形的坐标进行简单比较。
检查矩形的左坐标在窗口左边界的右边;右纵坐标位于窗口右边界的左侧;和顶部和底部相似?
唯一的麻烦可能是同时使用逻辑和物理坐标,在这种情况下,您将需要执行转换。
处理剪辑矩形和点可见性的所有功能都被Windows Vista的新桌面合成功能所破坏。该功能在Windows XP和更早版本以及在关闭了Aero / Desktop Composition的Windows 7上可以正常使用,但是,否则它们将始终声称整个窗口都是可见的。