我想确定窗口内的矩形是否完全可见。
我找到了RectVisible,但是该函数确定了rect的任何部分是否可见,我想知道整个rect是否可见。
这有什么功能吗?
答案 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上可以正常使用,但否则,它们将始终声称整个窗口都是可见的。