Перед вами
очередной выпуск рассылки "Программирование на WinApi" Переводы многих функций Win32API, которые часто используются
в данной рассылке, вы можете получать, подписавшись на дружественную
рассылку "WinAPI на
русском". Предлагаю
вашему вниманию рассылку "Тестирование и
качество". Рассылка для тестировщиков и инженеров качества. Справочник по функциям Win32API вы
можете посмотреть на сайте BcbDev.ru в разделе MSDN
по-русски.
Как определить, может ли
пользователь видеть моё окно?
Ответ на этот
вопрос зависит от того, желаете ли вы определить что пользователь видит
окно целиком, часть окна или определённую точку вашего
окна.
Определённая точка Для определения
возможности просмотра определённой точки вашего окна, вы можете найти
экранные координаты этой точки, вызвав функцию WindowFromPoint, и сделать
проверку, чтобы убедиться в том, что дескриптор, возвращённый
WindowFromPoint, тот же что и дескриптор вашего окна. Если так, вы можете
быть уверены, что пользователь видит эту точку. Хотя это может быть всего
один пиксель вашего окна, выглядывающий из-под множества окон, находящихся
выше. Эта простая функция проверяет, может ли пользователь видеть середину
вашего окна:
Плохой стороной этого метода является то, что WindowFromPoint
возвращает дескрипторы только неблокированных окон. Так что нам нужен
более продвинутый метод...
Окно целиком или только его часть Всё более
усложняется, когда заходит речь о целом окне или какой то его части.
Уловка заключается в том, что надо заставить систему поработать на вас и
используя систему отсечений. Взглянем на код ниже: