BitBlt/StretchBlt и полупрозрачные окна

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

BitBlt/StretchBlt и полупрозрачные окна

Сообщение X-BOND » 14.09.2005 (Ср) 18:47

Вообщем, как снимать полупрозрачные окошки, как, например, это делает обычный PrintScreen?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 14.09.2005 (Ср) 19:00

PrintScreen снимает весь экран c прозрачными окошками как надо, а Alt+PrintScreen снимает прозрачные окошки как непрозрачные (проверьте)!

Значит, надо делать так: снимаем картинку с GetDC(0), а затем вырезаем из нее RECT с координатами из GetWindowRect.

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 14.09.2005 (Ср) 19:11

Вообще-то Alt+PrintScreen снимает только активное окно.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 14.09.2005 (Ср) 19:16

Я про то же. Прозрачное активное окно снимается как непрозрачное.

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 14.09.2005 (Ср) 19:55

Но мне нужно не конкретное окно (прозрачное), а участок экрана, в котором может оказатся прозрачное окошко.
Или я чего не догоню?
Можно пример

P.S.
Это я все еще пытаюсь довести до ума данный сабж :)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 14.09.2005 (Ср) 21:05

Про сабж я помню.

Обнаружил интересный факт. Снимаем участок экрана BitBlt'ом с GetDC(0). Видны только непрозрачные окна, т.е. те, у которых не выставлен WS_EX_LAYERED.

Привлечь средства DirectX? :?

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 15.09.2005 (Чт) 9:08

Нет, проще перебрать все и снять флаг WS_EX_LAYERED :D
Моду создают модоки, а распространяют модозвоны.

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 15.09.2005 (Чт) 12:49

Amed писал(а):Про сабж я помню.

Обнаружил интересный факт. Снимаем участок экрана BitBlt'ом с GetDC(0). Видны только непрозрачные окна, т.е. те, у которых не выставлен WS_EX_LAYERED.

Привлечь средства DirectX? :?

Вот и я о том же. Сей факт я обнаружил сразу, после первой версии своей "линзы".

Если ничего не остается, давай будем привлекать DirectX :)


hCORe писал(а):Нет, проще перебрать все и снять флаг WS_EX_LAYERED :D

Но тогда окошки перестанут быть прозрачными, не так ли?
К тому же на скорости отразится не лучшим образом.

Стандартная лупа как то же делает снимок прозрачых окон, имено так какими мы их видим на экране.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 15.09.2005 (Чт) 12:51

Насчет снятия флага я пошутил :lol:
Может, стандартная "Лупа" использует какие-нибудь скрытые API?
Моду создают модоки, а распространяют модозвоны.

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 15.09.2005 (Чт) 14:40

А если так: Найти флаг WS_EX_LAYERED и сделать прозрачность в лупе самому.

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 15.09.2005 (Чт) 14:45

hCORe, X-BOND, Amed - нет никаких скрытых API и DirectX не нужен. Всё очень просто. В параметре dwRop указываем vbSrcCopy Or &H40000000 и будет вам счастье!
Программисты не глючат - глючат компиляторы...

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 15.09.2005 (Чт) 16:17

Эта... Счастье есть, но оно как бы наполовину :)
BitBlt работает, а с StretchBlt не хочет. :(
А что это за число &H40000000, где ты взял инфу?

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 15.09.2005 (Чт) 16:47

X-BOND

Насчёт StretchBlt - не проверял. Но можно сдлелать BitBlt, а результат уже при помощи StretchBlt растягивать...

CAPTUREBLT = &H40000000
http://www.dotnet247.com/247reference/m ... 91124.aspx
Программисты не глючат - глючат компиляторы...

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 15.09.2005 (Чт) 17:43

CodeName33, спасибо за полезную информацию :wink:
Я уже так и сделал, правда теперь ощущается потеря в скорости.
Скоро выложу обновленный релиз

P.S.
Если кто подскажет более быстрый способ без двойных преобразований, буду благодарен.


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

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

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

    TopList  
cron