iBar utilise un système de skin qui permet d'utiliser des fenêtres d'une forme "spéciale".

Jusque là, tout va bien, je me suis codé une petite fonction toute bête et très simple qui rempli son office (la voilà, si elle peut servir à quelqu'un, tant mieux ^^):
Code : Tout sélectionner
Procedure SkinWindow(Window,Skin,Transparent_Color = #Magenta)
Region = CreateRectRgn_(0, 0, WindowWidth(Window) + 1, WindowHeight(Window) + 1)
StartDrawing( ImageOutput (Skin))
For x1 = 0 To WindowWidth(Window)-1
For y1 = 0 To WindowHeight(Window)-1
If Point(x1, y1) = Transparent_Color
y2 = y1
While x2 < WindowWidth(Window) And Point(x1, y2 + 1) = Transparent_Color
y2 + 1
Wend
Region_Temp = CreateRectRgn_(x1, y1, x1 + 1, y2 + 1)
CombineRgn_ (Region, Region, Region_Temp, #RGN_DIFF )
y1 = y2
EndIf
Next
Next
StopDrawing()
SetWindowRgn_(WindowID(Window), Region, #True )
brush=CreatePatternBrush_(ImageID(Skin))
SetClassLong_(WindowID(Window),#GCL_HBRBACKGROUND,brush)
InvalidateRect_(WindowID(Window),0,1)
CreateGadgetList(WindowID(Window))
EndProcedure
; Exemple (lancer avec le débuger: on ne peut pas fermer la fenêtre, je suis un flemmard)
If LoadImage(0,OpenFileRequester("Selection du skin","","Bitmap|*.bmp",0))
OpenWindow(0,0,0,ImageWidth(0),ImageHeight(0),"Fenêtre skinée",#PB_Window_ScreenCentered|#PB_Window_BorderLess)
SkinWindow(0,0)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
FreeImage(0)
EndIf
Comment faire pour afficher une window skinnée prenant compte de l'alpha blending? Est-ce au moins possible?