Сообщение Re[2]: Как отследить что форма не перекрыта другими окнами - от 02.12.2015 5:54
Изменено 02.12.2015 5:57 Zoldan
Здравствуйте, Mr.Delphist, Вы писали:
MD>Здравствуйте, Zoldan, Вы писали:
Z>>Доброго времени суток!
Z>>Есть форма, нужно отследить момент когда эту форму не перекрывают другие окна, т.е когда пользователь ее видит целиком. Что, можно с этим сделать??
Z>>Приложение не WPF, обычный C#.
MD>Не особый спец по WinForms, но учитывая, что оно построено поверх Win32 API, схема примерно такая (псевдокодом на Win32 API):
MD>
MD>Соответственно, сравнение надо повторить для всех окон, у которых Z-order "ближе" нашего, через EnumWindows(). По реализации — надо лишь найти WinForms-обёртки этих API-функций для шарпа.
MD>P.S. А кейс, когда Ваше приложение открыто через Remote Desktop, и окно этого RD перекрыто каким-то другим местным окном, надеюсь, не рассматриваете?
MD>Здравствуйте, Zoldan, Вы писали:
Z>>Доброго времени суток!
Z>>Есть форма, нужно отследить момент когда эту форму не перекрывают другие окна, т.е когда пользователь ее видит целиком. Что, можно с этим сделать??
Z>>Приложение не WPF, обычный C#.
MD>Не особый спец по WinForms, но учитывая, что оно построено поверх Win32 API, схема примерно такая (псевдокодом на Win32 API):
MD>
MD>r1 = GetTopWindow()
MD>r2 = GetWindowRect()
MD>rect = IntersectRect(r1, r2) // если rect пуст, то пересечения окон нет
MD>MD>Соответственно, сравнение надо повторить для всех окон, у которых Z-order "ближе" нашего, через EnumWindows(). По реализации — надо лишь найти WinForms-обёртки этих API-функций для шарпа.
MD>P.S. А кейс, когда Ваше приложение открыто через Remote Desktop, и окно этого RD перекрыто каким-то другим местным окном, надеюсь, не рассматриваете?