UI - Видимость контрола.

Тема в разделе "WASM.WIN32", создана пользователем ALLeX, 14 дек 2005.

  1. ALLeX

    ALLeX Member

    Публикаций:
    0
    Регистрация:
    21 окт 2004
    Сообщения:
    141
    Адрес:
    Ukraine
    Hello All,



    Реально ли отследить в своей программе перекрытие какого либо контрола другим окном? Подскажите идею, плиз..



    PS. Естественно речь идет не о WS_VISIBLE

    PPS. Сорри, если вопрос уже обсуждался, но поиск не дал результата...
     
  2. serious

    serious New Member

    Публикаций:
    0
    Регистрация:
    23 май 2005
    Сообщения:
    33
    Адрес:
    Russia
    А что хочешь сделать-то, напиши подробнее (а то я вот сразу подумал о Drag'n'Drop)
     
  3. ALLeX

    ALLeX Member

    Публикаций:
    0
    Регистрация:
    21 окт 2004
    Сообщения:
    141
    Адрес:
    Ukraine
    Прога мониторит клипбоард. Если ей есть что показать она забирает фокус (вернее пытается забрать), и выводит данные. При этом если окно проги не в фокусе и скрыто другими окнами - флэш в таскбаре понятен и приветствуется. Однако нафига забирать фокус и мигать в таскбаре если допустим окно программы и так видно?! (Этим кстати говоря страдает переводчик клипборда PromtX) Поэтому надо как то отслеживать ситуацию когда контрол (или всё окно) виден на экране.
     
  4. Sl4v4

    Sl4v4 New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2005
    Сообщения:
    69
    Может как-то организавать это через функцию WindowFromPoint?
     
  5. ALLeX

    ALLeX Member

    Публикаций:
    0
    Регистрация:
    21 окт 2004
    Сообщения:
    141
    Адрес:
    Ukraine
    Не думаю. Если окно другой программы будет совпадать по x, y но при этом находится наже моего окна по z (т.е. будет видимым)
     
  6. Sl4v4

    Sl4v4 New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2005
    Сообщения:
    69
    Не совсем понял. Получаем координаты нужного контрола относительно всего экрана. Вызывает WindowFromPoint, для нескольких точек, в которых по идее должет располагаться контрол. Сравниваем полученый дескриптор с дескриптором окна контрола. Если во всех точках дескрипторы совпадают, значит контрол не перекрыт (точность этого вывода прямо пропорцианальна количеству проверяемых точек), если нет - "вытаскиваем" окно с контролом на верх. Или я совсем не понял?

    Вот пример использования WindowFromPoint. Может пригодится...

    [​IMG] _940400091__wndinfo.zip
     
  7. ALLeX

    ALLeX Member

    Публикаций:
    0
    Регистрация:
    21 окт 2004
    Сообщения:
    141
    Адрес:
    Ukraine
    WindowFromPoint возвращает хэндл самого верхнего (т.е. видимого) окна? Тогда идея понятна и должна работать. Сейчас попробую... Правда здесь есть один нюанс: если вдруг расположение контрола совпадет с "hidden or disabled window" надо будет юзать ChildWindowFromPoint, но это уже детали.
     
  8. ALLeX

    ALLeX Member

    Публикаций:
    0
    Регистрация:
    21 окт 2004
    Сообщения:
    141
    Адрес:
    Ukraine
    Спасибо, Sl4v4! Всё теперь как надо. :o)