Сейчас на форуме: hgdagon (+5 невидимых)

 eXeL@B —› Программирование —› Прозрачные окна на Masm 32 (спешу поделиться)
Посл.ответ Сообщение

Ранг: 62.5 (постоянный), 2thx
Активность: 0.050
Статус: Участник

Создано: 08 августа 2007 20:49
· Личное сообщение · #1

недавно наткнулся на программу использующую функцию SetLayeredWindowAttributes из User32.dll
вы можете использовать эту функцию в своих программах
привожу пример своей
если у кого-нибудь есть проги со спецэффектами выложите пожалуйста

52e8_08.08.2007_CRACKLAB.rU.tgz - 12345.rar




Ранг: 71.8 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 08 августа 2007 20:57
· Личное сообщение · #2

гг..открыл америку =)




Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 08 августа 2007 20:58
· Личное сообщение · #3

GodFather а зачем в исходнике вот это:

ClassName db "MASM Builder",0
BtnClName db "button",0
StatClName db "static",0
EditClName db "edit",0
LboxClName db "listbox",0
CboxClName db "combobox",0
ReditClName db "richedit",0


-----
invoke OpenFire




Ранг: 161.0 (ветеран)
Активность: 0.120
Статус: Участник

Создано: 08 августа 2007 21:10
· Личное сообщение · #4

Ice-T
Это наверное из оригинального исходника осталось, просто я как-то читал уроки по масму, так там тож такая фигня была, но не юзалась.. =)
А вообще я такую фигню уже давно видел..




Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 08 августа 2007 21:15 · Поправил: FrenFolio
· Личное сообщение · #5

GodFather пишет:
программу использующую функцию SetLayeredWindowAttributes из User32.dll

В принципе, с ее помощью можно организовать эффект плавного появления/исчезновения окна.
А можно сделать и проще, при помощи функции AnimateWindow тоже из user32.dll
В случае с диалоговым окном пишешь в начале обработки сообщения WM_INITDIALOG - появление окна
invoke AnimateWindow,hWnd,1000,AW_BLEND+AW_ACTIVATE
и исчезновения (при закрытии) в начале обработки сообщения WM_CLOSE
invoke AnimateWindow,hWnd,1000,AW_BLEND+AW_HIDE

-----
Программист SkyNet





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 08 августа 2007 21:31
· Личное сообщение · #6

Bat пишет:
открыл америку =)

Кому как... Мне интересно...

Вот когда-то в Dos'е ещё откуда-то вытащил...
Может чего ещё лишнее осталось
Красиво! Переделайте под Win.


504e_08.08.2007_CRACKLAB.rU.tgz - Giant.7z

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 107.3 (ветеран), 5thx
Активность: 0.20.04
Статус: Участник

Создано: 08 августа 2007 21:36
· Личное сообщение · #7

Ice-T пишет:
GodFather а зачем в исходнике вот это:

ClassName db "MASM Builder",0
BtnClName db "button",0
StatClName db "static",0
EditClName db "edit",0
LboxClName db "listbox",0
CboxClName db "combobox",0
ReditClName db "richedit",0


Это из программы "MASM Builder"
mbuilder.jino-net.ru



Ранг: 110.7 (ветеран)
Активность: 0.070
Статус: Участник
~ tPORt ~

Создано: 08 августа 2007 21:43
· Личное сообщение · #8

(: несовсем новость
лучше бы показали нам, темным, как заюзать на масме функу AlphaBlend для битмапа если уж интерисуетесть прозрачностью



Ранг: 117.1 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 08 августа 2007 21:51
· Личное сообщение · #9

FrenFolio пишет:
В принципе, с ее помощью можно организовать эффект плавного появления/исчезновения окна.


Кому такое надо? Изврат

-----
Security through obscurity is just an illusion




Ранг: 62.5 (постоянный), 2thx
Активность: 0.050
Статус: Участник

Создано: 08 августа 2007 22:07
· Личное сообщение · #10

LazzYтак я уже вам пример выложил на теме патч.сорс.мейкер паблик релиз




Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 08 августа 2007 22:09 · Поправил: FrenFolio
· Личное сообщение · #11

pushick пишет:
Кому такое надо? Изврат

Ну почему сразу же изврат? Можно цикл организовать и в нем прогнать значения прозрачности. Вот тебе и эффект.
Ice-T пишет:
зачем в исходнике вот это

Да незачем, конечно же. Просто взято из другого исходника, а часть оставлено. Привел к нормальному виду исходник, выкинув остатки предыдущего кода. Заодно добавил эффект плавного окрытия окна через AnimateWindow. Правда, при использовании функции AnimateWindow окно, постепенно появляясь на экране, проходит все значения от прозрачности, от полностью невидимого до полностью видимого, из-за чего при предустановленном значении прозрачности через SetLayeredWindowAttributes будет заметен неплавный обратный переход...
Поэтому в этом случае все же предпочтительнее использовать AlphaBlend.
Ниже привел пример использования функций SetLayeredWindowAttributes + AnimateWindow (эффект плавного появления окна на экране + прозрачное окно).

.386
.model flat,stdcall
option casemap:none

;##################################################################### ####################

include windows.inc

include user32.inc
include kernel32.inc

includelib user32.lib
includelib kernel32.lib

;##################################################################### ####################

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD

;##################################################################### ###################

.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
Value dd ?

;##################################################################### ###################

.data
ClassName db "MASM Builder",0
Caption db "Form",0

;##################################################################### #######################

.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
invoke ExitProcess,eax

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc :WNDCLASSEX
LOCAL msg :MSG
LOCAL hWnd :HWND
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style,CS_BYTEALIGNCLIENT
mov wc.lpfnWndProc,offset WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+1
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx,addr wc
invoke CreateWindowEx,0,ADDR ClassName,ADDR Caption,WS_OVERLAPPEDWINDOW,350,80,315,200,0,0,hInst,0
mov hWnd,eax
INVOKE ShowWindow,hWnd,SW_SHOWNORMAL
INVOKE UpdateWindow,hWnd
.WHILE TRUE
invoke GetMessage,ADDR msg,0,0,0
.BREAK .IF (!eax)
invoke TranslateMessage,ADDR msg
invoke DispatchMessage,ADDR msg
.ENDW
mov eax,msg.wParam
ret
WinMain endp



WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.IF uMsg == WM_DESTROY
invoke PostQuitMessage,NULL
.ELSEIF uMsg == WM_CREATE
invoke AnimateWindow,hWnd,1000,AW_BLEND+AW_ACTIVATE
invoke GetWindowLongA,hWnd,GWL_EXSTYLE
or eax,WS_EX_LAYERED
invoke SetWindowLongA,hWnd,GWL_EXSTYLE,eax
mov Value,150 ; это значение прозрачности окна: 0 - полностью прозрачно и 255 - непрозрачно
invoke SetLayeredWindowAttributes,hWnd,Value,Value,LMA_COLORKEY + LMA_ALPHA
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
WndProc endp

;##################################################################### ###################

end start


-----
Программист SkyNet





Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 08 августа 2007 22:18
· Личное сообщение · #12

pushick пишет:
Кому такое надо? Изврат

юзоется в моей проге и изврата не вижу.

FrenFolio не совсем то.. нужно чтобы окошко появлялось от 0 и до определенного значения прозрачности. но не от 0 до 255, а потом становилось прозрачным.. т.ч. AlphaBlend рулед..

-----
invoke OpenFire




Ранг: 62.5 (постоянный), 2thx
Активность: 0.050
Статус: Участник

Создано: 08 августа 2007 22:26
· Личное сообщение · #13

а можно и не через AnimateWindow


3b33_08.08.2007_CRACKLAB.rU.tgz - mymbuilder.rar




Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 08 августа 2007 22:32
· Личное сообщение · #14

GodFather вот это уже можно было выкладывать) хотя конечно фича давно не нова...

-----
invoke OpenFire




Ранг: 62.5 (постоянный), 2thx
Активность: 0.050
Статус: Участник

Создано: 08 августа 2007 22:37
· Личное сообщение · #15

кстати у кого через AnimateWindow для битмапа чтобы он появился сразу
после вызова AnimateWindow нужно
invoke InvalidateRect, hWnd,NULL,FALSE
или hWin у кого как

иначе битмап серый будет (окно не прорисует)

у меня так

.if uMsg==WM_INITDIALOG
invoke AnimateWindow,hWin,1000,AW_BLEND+AW_ACTIVATE
invoke InvalidateRect, hWin,NULL,FALSE

;--------------------------------------------------------------------- ------
; разрыв
;--------------------------------------------------------------------- ------
.elseif uMsg==WM_CLOSE

;invoke EndDialog,hWin,0
CloseProc:
invoke AnimateWindow,hWin,1000,AW_BLEND+AW_HIDE
;--------------------------------------------------------------------- ------


 eXeL@B —› Программирование —› Прозрачные окна на Masm 32 (спешу поделиться)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати