;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Fasm AlphaWin.asm
; 简单的窗体透明示例 by G-Spider
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 使用下列命令进行编译:
; fasm AlphaWin.asm AlphaWin.exe
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
UNICODE equ TRUE ;ASCII或UNICODE (FALSE or TRUE)
match =FALSE, UNICODE {
include 'win32a.inc'
}
match =TRUE, UNICODE {
include 'win32w.inc'
}
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
format PE GUI 4.0
entry start
section '.text' code readable writeable executable
start:
invoke GetModuleHandle,0
mov [wc.hInstance],eax
;客户区使用黒色画刷
invoke GetStockObject,BLACK_BRUSH
mov [wc.hbrBackground],eax
invoke RegisterClass,wc
test eax,eax
jz end_loop
;图层样式窗体WS_EX_LAYERED
invoke CreateWindowEx,WS_EX_LAYERED,szClass,szTitle,\
WS_VISIBLE+WS_SYSMENU,\
100,100,600,400,NULL,NULL,[wc.hInstance],NULL
test eax,eax
jz end_loop
;黒色设为全透明色,其他颜色的透明度设为200 (范围:0~255).
invoke SetLayeredWindowAttributes,eax,0,200,LWA_ALPHA + LWA_COLORKEY
msg_loop:
invoke GetMessage,msg,NULL,0,0
or eax,eax
jz end_loop
invoke TranslateMessage,msg
invoke DispatchMessage,msg
jmp msg_loop
end_loop:
invoke ExitProcess,[msg.wParam]
proc WindowProc uses ebx esi edi, hwnd,umsg,wparam,lparam
cmp [umsg],WM_DESTROY
je .wmdestroy
.defwndproc:
invoke DefWindowProc,[hwnd],[umsg],[wparam],[lparam]
jmp .finish
.wmdestroy:
invoke PostQuitMessage,0
xor eax,eax
.finish:
ret
endp
;---------------------------------------------------------------------
msg MSG
szClass TCHAR 'FASMWIN32',0
szTitle TCHAR 'Alpha windows',0
wc WNDCLASS 0,WindowProc,0,0,NULL,NULL,NULL,\
COLOR_WINDOW + 1,NULL,szClass
szfmt TCHAR 'MsgTableLen',0Dh,0Ah,'= %X',0
lpBuf rb 16
;---------------------------------------------------------------------
section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL',\
gdi32,'GDI32.DLL'
include 'api\kernel32.inc'
include 'api\user32.inc'
include 'api\gdi32.inc'
效果: