Область в окне, прозрачная для сообщений
От: Аноним  
Дата: 17.06.04 06:43
Оценка:
Здравствуйте.

Имеется окно, на нём заданётся прямоугольная область RECT.
Окно должно вести себя так как будто эта область из него "вырезана", но в то
же время является видимой. Все программы расположенные под местом дырки должны вести себя так как будто бы сверху них нет никаких других окон. Т.е. должен корректно отрабатываться ввод мышки, ввод с клавиатуры, установка фокуса, установка вида
курсора и т.д.

У меня есть кое-какие соображения, но они мне пока не очень нравятся. Буду благодарен за любую идею.

P.S: Чистый winapi,работать должно на 2000/XP/2003
Re: Область в окне, прозрачная для сообщений
От: kmn Украина  
Дата: 17.06.04 07:14
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте.


А>Имеется окно, на нём заданётся прямоугольная область RECT.

А>Окно должно вести себя так как будто эта область из него "вырезана", но в то
А>же время является видимой. Все программы расположенные под местом дырки должны вести себя так как будто бы сверху них нет никаких других окон. Т.е. должен корректно отрабатываться ввод мышки, ввод с клавиатуры, установка фокуса, установка вида
А>курсора и т.д.

А>У меня есть кое-какие соображения, но они мне пока не очень нравятся. Буду благодарен за любую идею.


А>P.S: Чистый winapi,работать должно на 2000/XP/2003


см. SetWindowRgn
Используя эту функцию можно создать окно лубой формы с нужным Вам поведением!
Re[2]: Область в окне, прозрачная для сообщений
От: Аноним  
Дата: 17.06.04 07:42
Оценка:
Здравствуйте, kmn, Вы писали:


kmn>см. SetWindowRgn

kmn>Используя эту функцию можно создать окно лубой формы с нужным Вам поведением!

Спасибо за быстрый ответ, но это не совсем то что нужно. Я не хочу сделать окно произвольной формы. Мне надо, чтобы внешне в окне не было вырезанной области. Этот RECT должен быть прозрачным только для сообщений, и их должны обрабатывать окна, которые под этим окном.
Re[3]: Область в окне, прозрачная для сообщений
От: kmn Украина  
Дата: 17.06.04 08:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Спасибо за быстрый ответ, но это не совсем то что нужно. Я не хочу сделать окно произвольной формы. Мне надо, чтобы внешне в окне не было вырезанной области. Этот RECT должен быть прозрачным только для сообщений, и их должны обрабатывать окна, которые под этим окном.


т.е. визуально дырки в окне не будет?
Re[4]: Область в окне, прозрачная для сообщений
От: Аноним  
Дата: 17.06.04 08:27
Оценка:
kmn>т.е. визуально дырки в окне не будет?


именно
Re[3]: Область в окне, прозрачная для сообщений
От: BlackSpy  
Дата: 17.06.04 09:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Спасибо за быстрый ответ, но это не совсем то что нужно. Я не хочу сделать окно произвольной формы. Мне надо, чтобы внешне в окне не было вырезанной области. Этот RECT должен быть прозрачным только для сообщений, и их должны обрабатывать окна, которые под этим окном.


Тогда обрабатывайте WM_NCHITTEST и возвращайте из обработчика HT_TRANSPARENT.
Это приведет к тому, что события от мыши будут уходить окну, лежащему в z-order непосредственно под данным окном.
Re: Область в окне, прозрачная для сообщений
От: Slava Antonov Россия http://deadbeef.narod.ru
Дата: 17.06.04 11:28
Оценка:
Hello , you wrote:

> У меня есть кое-какие соображения, но они мне пока не очень нравятся. >

> Буду благодарен за любую идею.

Сделать так, чтобы окно целиком не реагировала на мышь просто:
Layered Window + WS_TRANSPARENT_EX
Поэтому видится такое решение:
1) В главном окне все же вырезаем дырку
2) Создаем layered окно чтобы заткнуть дырку.
3) При перемещении/сворачивании/разворачивании главного окна
соответсвующим образом двигаем/сворачиваем второе окно.

--
Всего хорошего, Слава
http://slava.users.otts.ru
Posted via RSDN NNTP Server 1.9 beta
Re[4]: Область в окне, прозрачная для сообщений
От: Andrew S Россия http://alchemy-lab.com
Дата: 17.06.04 12:17
Оценка:
А>>Спасибо за быстрый ответ, но это не совсем то что нужно. Я не хочу сделать окно произвольной формы. Мне надо, чтобы внешне в окне не было вырезанной области. Этот RECT должен быть прозрачным только для сообщений, и их должны обрабатывать окна, которые под этим окном.

BS>Тогда обрабатывайте WM_NCHITTEST и возвращайте из обработчика HT_TRANSPARENT.

BS>Это приведет к тому, что события от мыши будут уходить окну, лежащему в z-order непосредственно под данным окном.

Не покатит:

HTTRANSPARENT
In a window currently covered by another window in the same thread (the message will be sent to underlying windows in the same thread until one of them returns a code that is not HTTRANSPARENT).

http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Область в окне, прозрачная для сообщений
От: Аноним  
Дата: 19.06.04 10:46
Оценка:
SA>Сделать так, чтобы окно целиком не реагировала на мышь просто:
SA>Layered Window + WS_TRANSPARENT_EX
SA>Поэтому видится такое решение:
SA>1) В главном окне все же вырезаем дырку
SA>2) Создаем layered окно чтобы заткнуть дырку.
SA>3) При перемещении/сворачивании/разворачивании главного окна
SA>соответсвующим образом двигаем/сворачиваем второе окно.

Спасибо, так наверное и поступлю
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.