Как отследить что форма не перекрыта другими окнами - C#
От: Zoldan  
Дата: 29.11.15 23:53
Оценка: 2 (1)
Доброго времени суток!
Есть форма, нужно отследить момент когда эту форму не перекрывают другие окна, т.е когда пользователь ее видит целиком. Что, можно с этим сделать??
Приложение не WPF, обычный C#.
Re: Как отследить что форма не перекрыта другими окнами - C#
От: Mr.Delphist  
Дата: 30.11.15 15:29
Оценка:
Здравствуйте, Zoldan, Вы писали:

Z>Доброго времени суток!

Z>Есть форма, нужно отследить момент когда эту форму не перекрывают другие окна, т.е когда пользователь ее видит целиком. Что, можно с этим сделать??
Z>Приложение не WPF, обычный C#.

Не особый спец по WinForms, но учитывая, что оно построено поверх Win32 API, схема примерно такая (псевдокодом на Win32 API):
r1 = GetTopWindow()
r2 = GetWindowRect()
rect = IntersectRect(r1, r2) // если rect пуст, то пересечения окон нет


Соответственно, сравнение надо повторить для всех окон, у которых Z-order "ближе" нашего, через EnumWindows(). По реализации — надо лишь найти WinForms-обёртки этих API-функций для шарпа.

P.S. А кейс, когда Ваше приложение открыто через Remote Desktop, и окно этого RD перекрыто каким-то другим местным окном, надеюсь, не рассматриваете?
Re[2]: Как отследить что форма не перекрыта другими окнами -
От: Zoldan  
Дата: 02.12.15 05:54
Оценка:
Спасибо за ответ. Попробую. RDP не имеет значения.
Отредактировано 02.12.2015 5:59 Zoldan . Предыдущая версия . Еще …
Отредактировано 02.12.2015 5:57 Zoldan . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.