ちょっと強引ですがこんな方法もどうでしょうか?
SetLayeredでフェードイン、フェードアウトを再現しています。
;使うものを色々と登録
#uselib "user32.dll"
#func GetWindowLongA "GetWindowLongA" int , int
#func SetWindowLongA "SetWindowLongA" int , int , int
#func SetLayered "SetLayeredWindowAttributes" int , int , int , int
;ウィンドウは非表示で作成
screen 1,260,80,2:hwnd_1=hwnd;ウィンドウハンドルを記録
;スタイルの追加
GetWindowLongA hwnd_1 , -20
SetWindowLongA hwnd_1 , -20 , stat | 0x00080000
screen 0,500,200
title "ボタン押して"
pos ginfo_winx/2-50,ginfo_winy/2-13
objsize 100,25
button gosub"開く",*open
onexit gosub*exit
stop
*open
;初回だけWindowsのアニメーションがあるのでそれを使う
if Flag=0:gsel 1,1:SetLayered hwnd_1 , 0 ,255, 2:Flag=1:return
;2回目以降は自作アニメーション
gsel 1,2
AnimeFrame=15;フレーム数、60fps単位
setease 0,255,ease_quartic_inout;イージングでいい感じに!
repeat AnimeFrame
Alpha=getease(cnt,AnimeFrame)
SetLayered hwnd_1, 0 ,Alpha, 2
await 16+(cnt\3!0);60fpsで維持する
loop
return
*exit
if wparam==0:end
if wparam=1:{
AnimeFrame=15;フレーム数、60fps単位
setease 0,255,ease_quartic_inout;イージングでいい感じに!
repeat AnimeFrame
Alpha=getease(AnimeFrame-cnt,AnimeFrame)
SetLayered hwnd_1, 0 ,Alpha, 2
await 16+(cnt\3!0);60fpsで維持する
loop
gsel 1,-1
}
return