Прозрачность окна чужого приложения |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Прозрачность окна чужого приложения |
volvo |
17.01.2007 19:25
Сообщение
#1
|
Гость |
Привем всем...
Столкнулся с не совсем понятным поведением своей программы... Дело в следующем: я меняю прозрачность любого видимого окна на десктопе через получение его hWnd и SetLayeredWindowAttributes... Естественно, при закрытии своей программы, я хочу, чтобы все вернулось в первоначальный вид, для чего прохожу по списку окон, для которых прозрачность была изменена мной, и делаю их НЕпрозрачными... Проблема в том, что это (именно восстановление непрозрачности) не работает, если у "чужого" окна установлен стиль TOPMOST... Причем, если я перезапущу программу и уменьшу прозрачность вручную - все работает... Почему же не срабатывает установление SetLayeredWindowAttributes(hWnd, 0, 255, LWA_ALPHA);при закрытии моего приложения? И именно для TopMost окон, остальные же прекрасно обрабатываются... |
мисс_граффити |
17.01.2007 21:25
Сообщение
#2
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
Под разными ОСями одно и то же?
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
17.01.2007 22:05
Сообщение
#3
|
Гость |
Меня не интересуют разные ОСи... Программа использует функции, доступные ТОЛЬКО в XP (никак не раньше), поэтому оно должно корректно работать именно в XP и выше... Вистой еще не обзавелся (и в ближайшее время не намереваюсь)...
|
Malice |
17.01.2007 23:19
Сообщение
#4
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
Немного не понял: т.е. если сделать отдельную кнопку "Восстановить", которая пробежит по измененным окнам и вернет все на место, то работает, а при закрытии тот же код не работает ?
|
volvo |
17.01.2007 23:32
Сообщение
#5
|
Гость |
Нет... Кнопка тоже не отработала для TOPMOST-окон... Для них работает только изменение вручную (я пользуюсь TrackBar-ом)... Ничего не понимаю... Какая разница, КАК и ОТКУДА я вызываю? Это же одна и та же процедура...
|
Bokul |
18.01.2007 1:36
Сообщение
#6
|
Гуру Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: 11 |
Может ты repaint забываешь вызывать?
Цитата Почему же не срабатывает установление при закрытии моего приложения? В msdn советуют убирать прозрачность полностью (устранять стиль WS_EX_LAYERED), а не делать ее нулевой. -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
Malice |
18.01.2007 9:57
Сообщение
#7
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
В таком случае, как я понимаю, разница лишь в том, что при TrackBar эта функция вызывается подряд 50 раз пока тянешь, а с конопки только 1 раз.. Может до него не с первого раза доходит? Для чистоты эксперимента попробуй в кнопке сделать цикл от текущего значения до 255 через небольшой sleep..
Сообщение отредактировано: Malice - 18.01.2007 10:08 |
мисс_граффити |
18.01.2007 10:00
Сообщение
#8
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
Цитата Может ты repaint забываешь вызывать? Цитата Note that you don't need to call RedrawWindow or somesuch after this; SetLayeredWindowAttributes itself causes a redraw. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Гость |
18.01.2007 21:00
Сообщение
#9
|
Гость |
А если дважды вызывать
Код SetLayeredWindowAttributes(hWnd, 0, 255, LWA_ALPHA); |
volvo |
18.01.2007 21:20
Сообщение
#10
|
Гость |
Значится, так... Во-первых, Bokul, Юля совершенно права - никаких вызовов RePaint я не делал, ибо это лишнее...
Второе - проблема решилась довольно просто: я при старте своего приложения запоминаю стиль и Opacity каждого окна (GetLayeredWindowAttributes, если стиль включает WS_EX_LAYERED), а при выгрузке просто восстанавливаю стили (это работает и с TopMost окнами). Кстати, что характерно, если значение Alpha меньше 255, то все отрабатывает как положено... |
Malice |
18.01.2007 21:30
Сообщение
#11
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
|
volvo |
18.01.2007 21:33
Сообщение
#12
|
Гость |
Да, но я бы увидел только Alpha = 254... 255-я бы не отработала
|
Malice |
18.01.2007 21:39
Сообщение
#13
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
Да, но когда ты делал это TrackBar-ом, то результат был тот же и устраивал
|
Snake_B |
6.02.2007 16:59
Сообщение
#14
|
Пионер Группа: Пользователи Сообщений: 72 Пол: Мужской Репутация: 0 |
Цитата Меня не интересуют разные ОСи... Программа использует функции, доступные ТОЛЬКО в XP (никак не раньше), поэтому оно должно корректно работать именно в XP и выше... Вистой еще не обзавелся (и в ближайшее время не намереваюсь)... В 2000 тоже прозрачность работат... и энтот... transparent... |
volvo |
6.02.2007 17:02
Сообщение
#15
|
Гость |
Snake_B, это расценивается как флейм...
Я без тебя знаю, что прозрачность работает и в 2000, и делается в 95/98 без особых проблем... Читай то, что сам же цитируешь внимательно... Доп. информацию я не просил... P.S. Тем более, что вопрос уже решен |
Snake_B |
8.08.2008 21:39
Сообщение
#16
|
Пионер Группа: Пользователи Сообщений: 72 Пол: Мужской Репутация: 0 |
Значится, так... Во-первых, Bokul, Юля совершенно права - никаких вызовов RePaint я не делал, ибо это лишнее... Второе - проблема решилась довольно просто: я при старте своего приложения запоминаю стиль и Opacity каждого окна (GetLayeredWindowAttributes, если стиль включает WS_EX_LAYERED), а при выгрузке просто восстанавливаю стили (это работает и с TopMost окнами). Кстати, что характерно, если значение Alpha меньше 255, то все отрабатывает как положено... а можно примерчик как это делается? =) |
Текстовая версия | 7.05.2024 10:11 |