Das gewünschte Ergebnis kann ich ebenfalls nicht mit AnimateWindow_ erreichen. Wenn ich die Farbe vorher maskiere und danach das Fenster einblenden lasse zeigen beide Effekte keine Wirkung.
Andersrum funktioniert es wie es soll, allerdings wird die zu maskierende Fläche erst nach dem Einblenden entfernt.
Codebeispiel:
Code: Alles auswählen
Procedure SetWinMask (_window.l)
SetWindowLong_(_window, #GWL_EXSTYLE, $00080000) ;$00080000=#WS_EX_Layered
SetLayeredWindowAttributes_(_window, RGB(255,0,255), 255, 1)
EndProcedure
Procedure SetBackground(_window.l,_img.l)
_hBrush.l = CreatePatternBrush_(_img)
SetClassLong_(WindowID(_window), #GCL_HBRBACKGROUND, _hBrush.l)
InvalidateRect_(WindowID(_window), #Null, #True)
EndProcedure
OpenWindow(#MainWindow, 0, 0, 600, 400, "", #PB_Window_ScreenCentered | #PB_Window_Invisible)
SetBackground(#MainWindow,MainWindow_BG)
SetWinMask(WindowID(#MainWindow)); <----- Hier liegt der Hund begraben. An dieser Position zeigen beide Effekte keine Wirkung
AnimateWindow_(WindowID(#MainWindow),300,#AW_BLEND)