none
判断窗口是否被其他窗口遮盖 RRS feed

  • 问题

  •     C#如何判断一个窗口被其他窗口遮盖,或者获取到当前窗口可见区域的大小

    我的意思是要在运行时判断我的窗口有没有被其他完全窗口遮盖,或都获得可见区域有多大,如果窗口被其他窗口覆盖或可见区域太小,就暂停自己程序的运行,以便把更多的系统资源留给前台窗口。
    2011年6月4日 4:02

答案

全部回复

  • 你好,

    你觉得你可以通过GetNextWindow函数获取所有在你的窗口之上的窗口。

    然后可以通过GetWindowPos函数获取这些窗口的区域,再通过对这些矩形区域的比较,得出你想要的结果。


    Min Zhu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月7日 7:48
    版主
  • 假设,Form1(F1)是你的窗口;Form2(F2)是其它窗口。

    可不可以用以下的解决方式:

    1. 在F1的Active/Deactive事件里面处理你的逻辑?

    2. 通过API处理,详细步骤 Min Zhu 已经描述过了。但是该处理过程如何触发?F1中设置Timer定时处理?不管怎样,抓窗口来算区域求交集这样的运算,可能也不能达到节约系统资源的需求吧?

    另,如果F2是由你编码提供的窗口,还能组合F2的LocationChange/Resize事件处理;如果不是,那就按照版主建议试试。

    PS:事件名称不一定准确,请参照事件列表,主要是说明思路,请勿对号入座。


    QQ: 79965521 Email: WolfLai@126.com
    • 已编辑 Wolf Lai 2011年6月8日 9:12 添加PS
    2011年6月8日 9:10
  • 处理方法不是很理想(主要是该函数要列出太多的窗口,还需要对这些窗口的可见性,是不是最小华进行判断,觉得太浪费资源),不过只怕也只能这么着了。总之,非常感谢版主
    2011年6月8日 12:38
  • 同样谢谢你,其实我的窗口只是作美化用,以桌面窗口作为我的窗口的父窗口,基本代替了桌面窗口,所以永远处于最底层,一般不用管Active/Deactive事件,因为美化桌面,还是要费很多的系统资源,所以,当桌面不可见时,该窗口暂停运行。总之,非常感谢热心的你们
    2011年6月8日 12:42