【发布时间】:2021-01-19 05:56:20
【问题描述】:
我有一个应用程序需要所有对屏幕可见的窗口。 如果一个窗口被其他窗口隐藏,那么我们忽略它。如果窗口的任何部分对屏幕可见,那么只有我们需要这些窗口。
那么有没有办法只找到那些在屏幕上实际可见的窗口?
非常感谢。
平台:Windows
【问题讨论】:
-
您是否考虑过枚举所有窗口并使用它们的矩形构建遮挡图(通过某种四叉树方法)?如果窗口完全被遮挡,则可以将其从考虑中移除。根据this answer,枚举遵循Z-order。
-
枚举窗口,检查每个窗口
DC的GetClipBox。见Determining whether your window is covered。 -
@dxiv GetClipBox 总是返回 NULLREGION,即使窗口被部分遮挡。
-
@jaykr
GetDC适用于客户区。如果您指的是包括非客户区在内的整个窗口,您可以使用GetDCEx和DCX_WINDOW来代替。如果它仍然不起作用,请确保检查枚举和剪贴箱代码中的每个步骤,或者更好的是,edit 将其放入问题中。 -
我怀疑我们正在查看meta.stackexchange.com/questions/66377/what-is-the-xy-problem 请解释一下为什么您需要做您所询问的事情。例如,我认为您可能会使用更新确实需要更新的窗口部分的概念,为此有方便的机制。那么,为什么对合适的事件做出反应不是您的选择?