IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Прозрачность окна чужого приложения
сообщение
Сообщение #1


Гость






Привем всем...

Столкнулся с не совсем понятным поведением своей программы... Дело в следующем: я меняю прозрачность любого видимого окна на десктопе через получение его hWnd и SetLayeredWindowAttributes... Естественно, при закрытии своей программы, я хочу, чтобы все вернулось в первоначальный вид, для чего прохожу по списку окон, для которых прозрачность была изменена мной, и делаю их НЕпрозрачными... Проблема в том, что это (именно восстановление непрозрачности) не работает, если у "чужого" окна установлен стиль TOPMOST... Причем, если я перезапущу программу и уменьшу прозрачность вручную - все работает...

Почему же не срабатывает установление
SetLayeredWindowAttributes(hWnd, 0, 255, LWA_ALPHA);
при закрытии моего приложения? И именно для TopMost окон, остальные же прекрасно обрабатываются... blink.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Под разными ОСями одно и то же?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Меня не интересуют разные ОСи... Программа использует функции, доступные ТОЛЬКО в XP (никак не раньше), поэтому оно должно корректно работать именно в XP и выше... Вистой еще не обзавелся (и в ближайшее время не намереваюсь)...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Немного не понял: т.е. если сделать отдельную кнопку "Восстановить", которая пробежит по измененным окнам и вернет все на место, то работает, а при закрытии тот же код не работает ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Нет... Кнопка тоже не отработала для TOPMOST-окон... Для них работает только изменение вручную (я пользуюсь TrackBar-ом)... Ничего не понимаю... Какая разница, КАК и ОТКУДА я вызываю? Это же одна и та же процедура... blink.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Может ты repaint забываешь вызывать?
Цитата
Почему же не срабатывает установление при закрытии моего приложения?

В msdn советуют убирать прозрачность полностью (устранять стиль WS_EX_LAYERED), а не делать ее нулевой.


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


В таком случае, как я понимаю, разница лишь в том, что при TrackBar эта функция вызывается подряд 50 раз пока тянешь, а с конопки только 1 раз.. Может до него не с первого раза доходит? smile.gif Для чистоты эксперимента попробуй в кнопке сделать цикл от текущего значения до 255 через небольшой sleep..

Сообщение отредактировано: Malice -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Цитата
Может ты repaint забываешь вызывать?

Цитата
Note that you don't need to call RedrawWindow or somesuch after this; SetLayeredWindowAttributes itself causes a redraw.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






А если дважды вызывать
Код

SetLayeredWindowAttributes(hWnd, 0, 255, LWA_ALPHA);
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Значится, так... Во-первых, Bokul, Юля совершенно права - никаких вызовов RePaint я не делал, ибо это лишнее...

Второе - проблема решилась довольно просто: я при старте своего приложения запоминаю стиль и Opacity каждого окна (GetLayeredWindowAttributes, если стиль включает WS_EX_LAYERED), а при выгрузке просто восстанавливаю стили (это работает и с TopMost окнами). Кстати, что характерно, если значение Alpha меньше 255, то все отрабатывает как положено...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(volvo @ 18.01.2007 21:20) *

Кстати, что характерно, если значение Alpha меньше 255, то все отрабатывает как положено...

Т.е. если б сделал цикл до 255 всеб получилось ? Я знал smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Да, но я бы увидел только Alpha = 254... 255-я бы не отработала smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Да, но когда ты делал это TrackBar-ом, то результат был тот же и устраивал smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской

Репутация: -  0  +


Цитата

Меня не интересуют разные ОСи... Программа использует функции, доступные ТОЛЬКО в XP (никак не раньше), поэтому оно должно корректно работать именно в XP и выше... Вистой еще не обзавелся (и в ближайшее время не намереваюсь)...


В 2000 тоже прозрачность работат... и энтот... transparent...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Snake_B, это расценивается как флейм...

Я без тебя знаю, что прозрачность работает и в 2000, и делается в 95/98 без особых проблем... Читай то, что сам же цитируешь внимательно... Доп. информацию я не просил...

P.S. Тем более, что вопрос уже решен dry.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Пионер
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 19.01.2007 6:20) *

Значится, так... Во-первых, Bokul, Юля совершенно права - никаких вызовов RePaint я не делал, ибо это лишнее...

Второе - проблема решилась довольно просто: я при старте своего приложения запоминаю стиль и Opacity каждого окна (GetLayeredWindowAttributes, если стиль включает WS_EX_LAYERED), а при выгрузке просто восстанавливаю стили (это работает и с TopMost окнами). Кстати, что характерно, если значение Alpha меньше 255, то все отрабатывает как положено...


а можно примерчик как это делается? =)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 18:27
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name