Создание прозрачных окон в Windows

Еще один простой в реализации, но красивый эффект для ваших программ - прозрачные диалоговые окна. Для этого надо, чтобы диалоговое окно было прописано в ресурсах или создавалось с расширенным стилем 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. Пример программы с плавным появлением и исчезновением окна прилагается.
Теги:
окно, Windows
Добавлено: 10 Апреля 2018 20:47:13 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...