![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать, что мое окно находится над другим? [D6, D7, Win2k, WinXP]
dmk © (2005-01-06 01:00:00)Возможно ли это сделать без перечисления окон? (GetNextWindow и т.д.)
dmk (2005-01-06 01:35:00) [21]Известны Handl'ы обоих окон. Мне нужно твердо быть уверенным, что мое окно находится над другим. У меня имеется функция
EnumWindowsProc которая перечисляет все окна и в случае
пересечения моего с другим происходит перерисовка части
содержимого окна в том месте, где окна пересекались.
Поскольку от системы невозможно получить регион пересечения
окон (при движении одного окна по другому), мне пришлось делать
это "ручками". В итоге у меня отбрасываются почти все окна:
невидимые, которые не пересекаются и т.д., но попадаются
некоторые которые не подходят под следующее условие -
Result(После этого окна перерисовываем содержимое)
:= ((ExWindowStyle and WS_EX_TOPMOST) <> 0) or
((ExWindowStyle and WS_EX_TOOLWINDOW) <> 0) or
((WindowStyle and WS_VISIBLE) <> 0);
Например окно Progman'а (оно тоже перечисляется). Оно всегда
видно, но за ним не надо ничего перерисовывать, т.к. я знаю, что
оно лежит всегда под моим окном, но программа этого знать не
может! Да и еще таких окон может быть много.
В общем нужно написать одну функцию, которая будет возвращать
относительную позицию в Z-Order'е относительно моего окна.
Хотя бы в виде True - False. Вот и бьюсь над этим.
Piter (2005-01-06 01:12:00) [22]А зачем это нужно?
Piter (2005-01-06 01:12:00) [23]dmk © (06.01.05 1:00)
GetNextWindow и т.д
а это вряд ли поможет