Каков принцип работы UpdateLayeredWindow?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Каков принцип работы UpdateLayeredWindow?

Сообщение karlex » 30.03.2009 (Пн) 21:20

Здравствуйте, уважаемые профессионалы!

Проблемка возникла, UpdateLayeredWindow применима только для не Child окон.
А ведь она предоставляет замечательную возможность сделать окно прозрачным, при чем прозрачность эта может быть заимствована из изображения с альфа-каналом...

Хотелось бы такую же фишку и для Child окон применять, поэтому я решил реализовать самодельную функцию.

Ну и собственно зачем мне принцип работы UpdateLayeredWindow, думаю уже догадались, чтобы соорудить инструмент работающий по такому же принципу, но применяемый для любого вида окон.

Будут интересны любые мысли по поводу реализации "не грубой" прозрачности.

Заранее спасибо!

------------------------------------------------------------------
На данный момент я использую следующий алгоритм:
>Устанавливаю для контрола стиль WS_EX_TRANSPARENT.
>В событии Paint контрола вызываю Refresh всех компонентов находящихся в родителе контрола, ну и для самого родителя.
>Далее функцией BitBlt копирую картинку через hDC родителя в hDC контрола.
>Ну и наконец сверху "кладу" еще какое-нибудь изображение с прозрачностью.
[Viper] :: Для начала просто переезжаем в соответствующий раздел.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Каков принцип работы UpdateLayeredWindow?

Сообщение alibek » 31.03.2009 (Вт) 7:28

Лучше все-таки самодельные велосипеды не делать.
В Висте, к примеру, под полупрозрачным окном отображается анимация и даже вывод через DirectX (фильмы).
Ты так сделать не сможешь.
Lasciate ogni speranza, voi ch'entrate.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Каков принцип работы UpdateLayeredWindow?

Сообщение karlex » 31.03.2009 (Вт) 9:32

alibek писал(а):Лучше все-таки самодельные велосипеды не делать.
В Висте, к примеру, под полупрозрачным окном отображается анимация и даже вывод через DirectX (фильмы).
Ты так сделать не сможешь.

У вас тут предсказатели судьбы, я вижу...
Отличный совет, спасибо!
Я так делать и не собирался, мне всего-то нужно сделать прозрачность компонента.

Может кто-то сможет сказать что-то более дельное?

На счет раздела, извините.
Но по правде не понял, что вам не понравилось?
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Каков принцип работы UpdateLayeredWindow?

Сообщение karlex » 31.03.2009 (Вт) 11:47

alibek писал(а):самодельные велосипеды

Сразу не сообразил...
Раз уж это велосипед, подскажите, пожалуйста, где я могу его лицезреть?
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Каков принцип работы UpdateLayeredWindow?

Сообщение karlex » 31.03.2009 (Вт) 12:38

А в замену Refresh'ам можете что-нибудь посоветовать?
Прбовал RedrawWindow, InvalidateRect, ни чего хорошего не вышло.
[Viper] :: Автор, ты читал Правила? Если да, то почему не пользуешься кнопкой Правка? Это удобно, хорошо и правильно.
Да, я в курсе, но так вышло, что мне уже дали ответ, а вносить значительные изменения в старое сообщение будет не очень хорошо тем, что их могут не заметить.
Ну раз уж требуете, буду знать.
Последний раз редактировалось karlex 31.03.2009 (Вт) 12:59, всего редактировалось 1 раз.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Каков принцип работы UpdateLayeredWindow?

Сообщение alibek » 31.03.2009 (Вт) 12:40

karlex писал(а):Раз уж это велосипед, подскажите, пожалуйста, где я могу его лицезреть?

На форуме были полупрозрачные компоненты, только не помню, где именно.
Но под велосипедом я имел ввиду то, что не надо добавлять самодельный функционал к системным объектам.
Есть ли необходимость в полупрозрачных окнах, кроме как изменение внешнего вида? Скорее всего нет.
Lasciate ogni speranza, voi ch'entrate.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Каков принцип работы UpdateLayeredWindow?

Сообщение karlex » 31.03.2009 (Вт) 12:55

alibek писал(а):Но под велосипедом я имел ввиду то, что не надо добавлять самодельный функционал к системным объектам.

Системным объектам... хм...
alibek писал(а):Есть ли необходимость в полупрозрачных окнах, кроме как изменение внешнего вида? Скорее всего нет.

Попробую объяснить проблему иначе.

В VB6 делаю обертку для GDI+, ну это собственно даже и не относится к проблеме, но на всякий случай.

Возникла идея (да и необходимость тоже) создать компонент на подобии стандартного Image, он поддерживает прозрачность, но сами понимаете я хочу прозрачность изображений с альфа-каналом.

Так что не внешний вид меня подталкивает.

Ну, а если быть еще более откровенным, то мне предложили заказ, в котором нужно было реализовать поворот изображения (этим заказ не исчерпывался).
Мне приглянулся GDI+, ведь он предоставляет замечательную возможность "красиво" поворачивать изображение с альфа-каналом, чем не может похвастать PlgBlt.
Ну вот, с этого момента и начался мозговой штурм, уже даже не ради выполнения заказа, а знаний ради, т.к. вопрос весьма интересен.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Каков принцип работы UpdateLayeredWindow?

Сообщение alibek » 31.03.2009 (Вт) 13:27

Ну тогда, в принципе, ты алгоритм описал.
Копируешь картинку "под" компонентом и микшируешь ее с нужной прозрачностью с картинкой самого компонента.
Lasciate ogni speranza, voi ch'entrate.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Каков принцип работы UpdateLayeredWindow?

Сообщение karlex » 31.03.2009 (Вт) 14:47

alibek писал(а):Ну тогда, в принципе, ты алгоритм описал.
Копируешь картинку "под" компонентом и микшируешь ее с нужной прозрачностью с картинкой самого компонента.

Это хорошо.
Только вот обновление "низлежащих" окон как то бы еще красиво сделать, мне кажется Refresh не панацея.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 4

    TopList  
cron