Voici un code qui mets en évidence le problème que j'ai rencontré sur la gestion de la couche Alpha avec UpdateLayeredWindow_(
Fenêtre à gauche sans la correction, et celle de droite avec la correction.
Code : Tout sélectionner
; PureBasic 4.40
UsePNGImageDecoder()
Procedure SetLayeredWindow2(WindowID) ; Mettre l'attribut WS_EX_LAYERED à la fenêtre
	SetWindowLong_(WindowID, #GWL_EXSTYLE, GetWindowLong_(WindowID, #GWL_EXSTYLE) | #WS_EX_LAYERED) ; Mettre l'attribut WS_EX_LAYERED à la fenêtre
EndProcedure
Procedure AlphaImageWindow2(WindowID, ImageID, Calcul.l) ; Mettre une image PNG comme fond d'une fenêtre
  Protected Image_HDC, Image_Bitmap.BITMAP, Image_BitmapInfo.BITMAPINFO, ContextOffset.POINT, Blend.BLENDFUNCTION
	Protected xx, yy, x, y, Rouge, Vert, Bleu, AlphaChannel
	
	; Précalcul
	Protected Dim Echelle.f($FF)
	For x = 0 To $FF
		Echelle(x) = x / $FF
	Next
	
	; Chargement du HDC
	Image_HDC = CreateCompatibleDC_(#NULL)
  Image_Ancienne = SelectObject_(Image_HDC, ImageID)
	
	
	; Dimension de l'image
	GetObject_(ImageID, SizeOf(BITMAP), @Image_Bitmap)
	Image_BitmapInfo\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
	Image_BitmapInfo\bmiHeader\biWidth = Image_Bitmap\bmWidth
	Image_BitmapInfo\bmiHeader\biHeight = Image_Bitmap\bmHeight
	Image_BitmapInfo\bmiHeader\biPlanes = 1
	Image_BitmapInfo\bmiHeader\biBitCount = 32
	
	If Calcul
		; Zone mémoire pour copier l'image
		xx = Image_Bitmap\bmWidth - 1
		yy = Image_Bitmap\bmHeight - 1
		Protected Dim Image.l(xx, yy)
		
		; Copie de l'image en mémoire
		GetDIBits_(Image_HDC, ImageID, 0, Image_Bitmap\bmHeight, @Image(), @Image_BitmapInfo, #DIB_RGB_COLORS)
		
		; Modification de l'image en mémoire
		For x = 0 To xx
			For y = 0 To yy
				Couleur = Image(x, y)
				AlphaChannel = Couleur >> 24 & $FF
				If AlphaChannel < $FF
					Rouge = (Couleur & $FF) * Echelle(AlphaChannel)
					Vert = (Couleur >> 8 & $FF) * Echelle(AlphaChannel)
					Bleu = (Couleur >> 16 & $FF) * Echelle(AlphaChannel)
					Image(x, y) = Rouge | Vert << 8 | Bleu << 16 | AlphaChannel << 24
				EndIf
			Next
		Next
		
		; Transfert de la mémoire dans la l'image de base
		SetDIBits_(Image_HDC, ImageID, 0, Image_Bitmap\bmHeight, @Image(), @Image_BitmapInfo, #DIB_RGB_COLORS)
	EndIf
	
	; L'image est mise en skin de la fenêtre
	Blend\SourceConstantAlpha = 255 ; niveau de transparence
	Blend\AlphaFormat = 1 ; Support de la couche alpha
	Blend\BlendOp = 0
	Blend\BlendFlags = 0
	UpdateLayeredWindow_(WindowID, 0, 0, @Image_BitmapInfo + 4, Image_HDC, @ContextOffset, 0, @Blend, 2)
	
	; Fermeture du HDC
	SelectObject_(Image_HDC, Image_Ancienne)
	DeleteDC_(Image_HDC)
  
EndProcedure
If CatchImage(0, ?Image)
	
	If OpenWindow(0, 100, 100, ImageWidth(0), ImageHeight(0), "Test 1", #PB_Window_BorderLess)
		
		SetLayeredWindow2(WindowID(0))
		AlphaImageWindow2(WindowID(0), ImageID(0), 0)
		
		StickyWindow(0, 1)
		
	EndIf
	If OpenWindow(1, 300, 100, ImageWidth(0), ImageHeight(0), "Test 2", #PB_Window_BorderLess)
		
		SetLayeredWindow2(WindowID(1))
		AlphaImageWindow2(WindowID(1), ImageID(0), 1)
		
		StickyWindow(1, 1)
		
	EndIf
	
	Repeat
		Event = WaitWindowEvent()
		
		If Event = #WM_LBUTTONDOWN
			SendMessage_(WindowID(EventWindow()), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
		EndIf
		
	Until Event = #PB_Event_CloseWindow
	
EndIf
	
DataSection
	image:
	Data.l $474E5089,$0A1A0A0D,$0D000000,$52444849,$80000000,$80000000,$00000608,$613EC300,$000000CB,$4D416704,$AF000041,$8A0537C8
	Data.l $000000E9,$58457419,$666F5374,$72617774,$64410065,$2065626F,$67616D49,$61655265,$C9717964,$00003C65,$4449EA02,$DA785441
	Data.l $72599BEC,$451440DA,$98035A9F,$F34BD198,$EC8AB22E,$180A3B2C,$4D6EAC1B,$313B02B9,$2A299258,$A9CE543F,$5BBB75BA,$80E24943
	Data.l $611A88BE,$7BA9E766,$F75D43E6,$3549AFCC,$0F1AEF30,$D7D57DAD,$35E9731C,$D72F757C,$0F99EFA6,$EB67E775,$106BFE0C,$01000100
	Data.l $01000100,$01000100,$01000100,$01000100,$01000100,$01000100,$01000100,$01000100,$01000100,$01000100,$01000100,$01000100
	Data.l $01000100,$56E00100,$77E7EC48,$459C7455,$DB71DFD1,$E3EFE71F,$E7D16B3F,$45B64BB5,$C9FAF3EE,$C63B3B9A,$B9D3EFF5,$D79C75DD
	Data.l $E3BB9D9D,$7BEED79C,$FB57CC72,$C763DD75,$0CF4F8F3,$35DEE82E,$276EDB3B,$E005F8DB,$00080015,$00080008,$00080008,$00080008
	Data.l $00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$47FB4137
	Data.l $14511FF1,$E738C7D9,$FD43E73A,$35F9F39E,$77B8E389,$5A1E35DE,$D5FFB4BB,$AEE34331,$7BE935F9,$FBDD43E6,$E01DF2D9,$00080015
	Data.l $00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008
	Data.l $00080008,$00080008,$3CD440B7,$6B95363E,$FBD7197C,$EA766E32,$9FA922E7,$21D6A98E,$10EA95AD,$E87676DF,$ADCACF8D,$2F36AACF
	Data.l $B5EE5679,$0AACF3E6,$A6D4AF5A,$699D44F5,$A89EAC7D,$67AD3EA7,$E97AB9EA,$62426393,$5621566D,$CE08B6C7,$59B385E6,$197DD911
	Data.l $1B34A4D9,$B9A33A29,$D58D71A6,$AB04A971,$D2AB5792,$B3E9959D,$DB22B5B2,$A30B6B28,$997F8CB7,$F2DAF43F,$DDFCC6F1,$AB78FCD6
	Data.l $BBF2CEF1,$4BABDABD,$29D8D6A5,$F563C6A9,$3E5A9944,$3A17AB9A,$6CF2D2C7,$4DD07EA5,$3548583D,$B4BA4256,$885B9922,$DFC45667
	Data.l $2B1374AC,$74494CA3,$535B1695,$8914D625,$4FB2B9D5,$56A5DAAD,$CCDB2B3E,$6CB7A78A,$656B0B32,$CC8F5233,$B293FDAB,$96465E55
	Data.l $725579B7,$5750585D,$AB1C698A,$4CAC6553,$AA657B94,$6DF333CC,$D97E3A96,$B0E87A76,$522C2D4A,$1589162B,$589A6533,$F84CAF79
	Data.l $0015E005,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008,$00080008
	Data.l $00080008,$00080008,$00080008,$C1370008,$0006016F,$7D698A9A,$EDA484F5,$00000000,$444E4549,$826042AE
EndDataSection ;}