gpt4 book ai didi

c++ - 检测窗口何时与来自相同或不同进程的另一个窗口重叠

转载 作者:搜寻专家 更新时间:2023-10-31 00:59:46 24 4
gpt4 key购买 nike

背景

我们正在 XenDesktop 模式下运行我们的应用程序,我们的窗口显示一些实时信息。但是,如果在该 XenDekstop 中还启动了其他一些应用程序,并且该应用程序与我们的窗口重叠,那么我们要停止渲染。一旦它移出我们的窗口,我们就想重新开始渲染。遗憾的是,目前 Citrix 不支持此类通知。

问题

我们如何检测应用程序窗口的一部分或全部何时被其他窗口重叠,以及何时不再重叠?

我找到了 WindowFromPoint然而,谷歌搜索时的函数系列对于我的目的来说并不实用,因为我需要不断轮询我的窗口覆盖的所有坐标。

奖励积分:首先,如果我能够检测到何时发生这种重叠就足够了。但是,如果我能够准确检测到我的窗口的哪些区域被覆盖,那就太好了。

最佳答案

没有这样的API函数。通常不需要它。 WM_PAINT 会照顾自己。

如果您收到 WM_PAINT 消息,您会收到一个区域和需要重绘的区域的更新矩形。但它只是一个矩形,没有复杂的区域。还有一个裁剪区域。

但是应该可以自己算出区域。如果我们谈论的是顶层窗口。

  • 创建一个由窗口矩形组成的矩形区域
  • 从后到前遍历所有顶级窗口
  • 忽略所有窗口,直到找到顶层窗口
  • 为每个可见的顶级窗口创建一个矩形区域,并将其与当前区域进行异或运算。
  • 应该很容易 GetWindow GW_HWNDNEXT

结果区域就是您要搜索的区域。

再一次:没有这样的函数或消息来确定、触发或可以执行以找到这种重叠。不需要这样的信息。系统通过适当的 WM_PAINT 消息自行处理。如果一个区域被覆盖。无需采取任何行动。如果一个区域未被覆盖,WM_PAINT 将被触发。

关于c++ - 检测窗口何时与来自相同或不同进程的另一个窗口重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32734339/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com