Создание прозрачных окон в Windows
Еще один простой в реализации, но красивый эффект для ваших программ - прозрачные диалоговые окна. Для этого надо, чтобы диалоговое окно было прописано в ресурсах или создавалось с расширенным стилем WS_EX_LAYERED, а при его инициализации вызывалась функция SetLayeredWindowAttributes. Значение коэффициента прозрачности может быть от 0 (полностью прозрачное окно) до 255 (непрозрачное окно). Рекомендуется значение 240-245, при этом эффект прозрачности уже заметен, а содержимое окна еще легко читается и не сливается с перекрываемыми окнами. Этой же функцией можно динамически менять прозрачность уже созданного окна, например чтобы создать эффект его плавного появления или исчезновения.Code (Assembler) : Убрать нумерацию
- ; Сегмент кода
- section '.code' code readable executable
- ...
- ; Процедура обработчика окна
- proc DialogProc hwnddlg,msg,wparam,lparam
- ...
- ; Инициализация окна?
- cmp [msg], WM_INITDIALOG
- je wminitdialog
- ; Закрытие окна?
- cmp [msg], WM_CLOSE
- je wmclose
- ...
- wminitdialog:
- ; Установить первоначальную прозрачность окна 245
- invoke SetLayeredWindowAttributes, [hwnddlg], 0, 245, LWA_ALPHA
- ...
- wmclose:
- ; Плавное исчезновение окна при его закрытии
- mov ecx,245
- fade_dialog:
- push ecx
- ; Установка нового атрибта прозрачности
- invoke SetLayeredWindowAttributes, [hwnddlg], 0, ecx, LWA_ALPHA
- ; Небольшая пауза
- invoke Sleep,2
- pop ecx
- loop fade_dialog
- ...
- ; Секция ресурсов
- section '.rsrc' resource data readable
- ; Описание диалогового окна в ресурсах.
- ; В расширенных стилях должен быть прописан атрибут "WS_EX_LAYERED"
- dialog demo, 'Demo', 70, 70, 190, 175,\
- WS_CAPTION + WS_POPUP + WS_SYSMENU + DS_MODALFRAME,\
- WS_EX_LAYERED
- ...
Просмотров: 11347 | Комментариев: 4
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(04.03.2014 в 14:03):
Вопрос был задан про LWA_ALPHA. Ответ - никак. Я ж не сказал, что это вообще в принципе нельзя сделать. Патчер dUP2, например, делает патчи с различной прозрачностью областей окон на основе PNG или 32-битных BMP и регионов.
mikado3333
(04.03.2014 в 13:54):
А как же тогда окна в windows7 в aero - Не рабочая область окна прозрачная (размытая), а рабочая область четко прорисована?
ManHunter
(04.03.2014 в 13:23):
Никак не сделать, LWA_ALPHA распространяется на все окно. По окнам нестандартной формы есть отдельные статьи.
mikado3333
(04.03.2014 в 13:12):
ManHunter, у меня к вам предложение и вопрос по данной статье.
Предложение: Дополнить статью о api SetLayeredWindowAttributes [hwnddlg],rgb,0,LWA_COLORKEY и получении прозрачной рабочей области окна.
Вопрос: При SetLayeredWindowAttributes, [hwnddlg], 0, ecx, LWA_ALPHA кнопки на окне тоже принимают прозрачность окна.Как сделать что бы навешанные элементы (кнопки)на это окно, не принимали прозрачность окна?
Предложение: Дополнить статью о api SetLayeredWindowAttributes [hwnddlg],rgb,0,LWA_COLORKEY и получении прозрачной рабочей области окна.
Вопрос: При SetLayeredWindowAttributes, [hwnddlg], 0, ecx, LWA_ALPHA кнопки на окне тоже принимают прозрачность окна.Как сделать что бы навешанные элементы (кнопки)на это окно, не принимали прозрачность окна?
Добавить комментарий
Заполните форму для добавления комментария