Еще один простой в реализации, но красивый эффект для ваших программ - прозрачные диалоговые окна. Для этого надо, чтобы диалоговое окно было прописано в ресурсах или создавалось с расширенным стилем WS_EX_LAYERED, а при его инициализации вызывалась функция SetLayeredWindowAttributes. Значение коэффициента прозрачности может быть от 0 (полностью прозрачное окно) до 255 (непрозрачное окно). Рекомендуется значение 240-245, при этом эффект прозрачности уже заметен, а содержимое окна еще легко читается и не сливается с перекрываемыми окнами. Этой же функцией можно динамически менять прозрачность уже созданного окна, например чтобы создать эффект его плавного появления или исчезновения.
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
...
Не забывайте вызывать функцию SetLayeredWindowAttributes при инициализации диалогового окна со стилем WS_EX_LAYERED, иначе после открытия его вообще не будет видно. Также помните, что эффект прозрачности не поддерживается в Windows 9x. Пример программы с плавным появлением и исчезновением окна прилагается.
Пример программы с исходным текстом (FASM)
Transparent.Window.Demo.zip
Автор: ManHunter