Ordre des fenêtre et LayeredWindow

Programmation d'applications complexes
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Ordre des fenêtre et LayeredWindow

Message par Le Soldat Inconnu »

Lancer moi ce code et dite si il n'y a rien qui vous choque.

Sous XP, c'est un vrai bordel

La fenêtre TopMost Layered reste derrière la fenetre non TopMost Layered mais la fenetre la topmost layered est devant la fenêtre normale et la fenêtre non TopMost layered est derrière la fenêtre normale.

ça parait confu mais le code illustre bien le problème

Code : Tout sélectionner

; PureBasic 4.40

ProcedureDLL 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

ProcedureDLL AlphaImageWindow2(WindowID, ImageID) ; Mettre une image PNG comme fond d'une fenêtre
  Protected Image_HDC, Image_Bitmap.BITMAP, ContextOffset.POINT, Blend.BLENDFUNCTION, Image
	
	; Dimension de l'image
	GetObject_(ImageID, SizeOf(BITMAP), @Image_Bitmap)
	
	Image = CreateImage(#PB_Any, Image_Bitmap\bmWidth, Image_Bitmap\bmHeight, 32)
	StartDrawing(ImageOutput(Image))
		DrawingMode(#PB_2DDrawing_AlphaBlend)
		DrawAlphaImage(ImageID, 0, 0)
		DrawingMode(#PB_2DDrawing_AlphaChannel)
		DrawAlphaImage(ImageID, 0, 0)
	StopDrawing()
	
	; Chargement du HDC
	Image_HDC = CreateCompatibleDC_(#Null)
	Image_Ancienne = SelectObject_(Image_HDC, ImageID(Image))
	
	; 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_Bitmap + 4, Image_HDC, @ContextOffset, 0, @Blend, 2)
	
	; Fermeture du HDC
	SelectObject_(Image_HDC, Image_Ancienne)
	DeleteDC_(Image_HDC)
	
	; Supression de l'image
	FreeImage(Image)
	
EndProcedure


; Procedure Callback(WindowID, message, wParam, lParam)
	; Protected *WindowPos.WINDOWPOS
	; Result = #PB_ProcessPureBasicEvents
	; If WindowID(0) = WindowID
		; If message = #WM_WINDOWPOSCHANGING ; Window position is about to change !
			; *WindowPos = lParam
			; *WindowPos\hwndInsertAfter = #HWND_TOPMOST   ; <-- Forces the window to stay in the background
		; EndIf
	; EndIf
	; If WindowID(1) = WindowID
		; If message = #WM_WINDOWPOSCHANGING ; Window position is about to change !
			; *WindowPos = lParam
			; *WindowPos\hwndInsertAfter = #HWND_BOTTOM   ; <-- Forces the window to stay in the background
		; EndIf
	; EndIf
	; ProcedureReturn Result
; EndProcedure

CreateImage(0, 200, 200, 32)
StartDrawing(ImageOutput(0))
	DrawingMode(#PB_2DDrawing_AlphaChannel)
	Box(0, 0, 200, 200, $80000000)
	DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
	DrawText(10, 10, "Premier plan / Topmost", $FFFFFFFF)
StopDrawing()
CreateImage(1, 200, 200, 32)
StartDrawing(ImageOutput(1))
	Box(0, 0, 200, 200, $0000FF)
	DrawingMode(#PB_2DDrawing_AlphaChannel)
	Box(0, 0, 200, 200, $FF000000)
	DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
	DrawText(10, 10, "Normal / NonTopmost", $FFFFFFFF)
StopDrawing()

If OpenWindow(1, 150, 150, ImageWidth(0), ImageHeight(0), "Test", #PB_Window_BorderLess)
	
	SetLayeredWindow2(WindowID(1))
	AlphaImageWindow2(WindowID(1), ImageID(1))
	
	If OpenWindow(0, 100, 100, ImageWidth(0), ImageHeight(0), "Test", #PB_Window_BorderLess)
		
		SetLayeredWindow2(WindowID(0))
		AlphaImageWindow2(WindowID(0), ImageID(0))
		
		StickyWindow(0, 1)
		; SetWindowCallback(@Callback())
		
		If OpenWindow(2, 200, 200, 200, 200, "Test")
			
			Repeat
				Event = WaitWindowEvent()
				
				If Event = #WM_LBUTTONDOWN
					SendMessage_(WindowID(EventWindow()), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
				ElseIf Event = #WM_MOUSEMOVE
					; Debug "ok"
				EndIf
				
			Until Event = #PB_Event_CloseWindow
			
		EndIf
	EndIf
EndIf
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Ordre des fenêtre et LayeredWindow

Message par Backup »

chez moi (xp sp3) j'ai

le noir devant, la fenetre au milieu , la rouge derriere :)
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Ordre des fenêtre et LayeredWindow

Message par TazNormand »

Sous Vista SP2 j'ai dans l'ordre
1° Noir Premier plan / Topmost
2° Test fenêtre normale
3° Rouge Non Topmost

OK pour moi aussi
Image
Image
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: Ordre des fenêtre et LayeredWindow

Message par PAPIPP »

Bonjour LSI
Sous XP SP3
Ordre au lancement
1) Fenêtre noire transparente
2) Fenêtre grise
3) Fenêtre rouge
Après déplacement
1) la fenêtre noire transparente reste toujours au dessus
2) pour les autres fenêtres l'ordre des fenêtre suit la chronologie que l’on a donné aux fenêtres
la plus ancienne déplacée tout au fond la plus récente au dessus mais la noire toujours en premier
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Ordre des fenêtre et LayeredWindow

Message par Le Soldat Inconnu »

donc il y a un truc avec mon PC alors, je vais essayer sur un autre PC. Parce que ça me fatigue ce truc.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Ordre des fenêtre et LayeredWindow

Message par Ar-S »

Pareil que les copains sous Xp SP3

Image
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Ordre des fenêtre et LayeredWindow

Message par Le Soldat Inconnu »

Oui, merci pour le screen, c'est bien sous mon PC que j'ai un soucis. Faut que je cherche, c'est pas normal.

Il faut que je regarde du coté de "Samurize", ça doit être lui je pense.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Ordre des fenêtre et LayeredWindow

Message par Backup »

@ar-s : tu as utilisé quoi comme "capturateur" d'ecran ?
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Re: Ordre des fenêtre et LayeredWindow

Message par cederavic »

Je te rassure Régis, c'est pas net sur mon pc non plus... (ATI sushi?)
La noir est devant la normale et derriere la rouge
La rouge est devant la noire et derriere la normale
La normale et derriere la noire et devant la rouge

On dirait le phenomene du cylindre torsadé à 360° :lol:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Ordre des fenêtre et LayeredWindow

Message par Le Soldat Inconnu »

par contre, si tu cliques la ou la fenêtre noire est sous la rouge, tu déplaces la fenêtre noire. Bon je suis pas tout seul a avoir cette bizarerie.

Sur le PC du boulot, c'est bon, chez moi, c'est pas bon
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Ordre des fenêtre et LayeredWindow

Message par Le Soldat Inconnu »

Je ne sais plus, ATI, je pense pas, ARS à une ATI et ça marche pour lui.

9a fonctionne en machine virtuel sous vista et xp
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Ordre des fenêtre et LayeredWindow

Message par Ar-S »

Dobro a écrit :@ar-s : tu as utilisé quoi comme "capturateur" d'ecran ?
La touche printscreen puis paint.net

@Lsi => HD4850 c'est de l'ati je confirme ;)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Ordre des fenêtre et LayeredWindow

Message par Le Soldat Inconnu »

Bug trouvé !

C'est cette putain d'ATI de m.... c'est la dernière fois que j'achète chez eux, il me saoule.

Il suffit de couper le démarrage du catalyst avec Windows et tout rentre dans l'ordre. Franchement, c'est n'importe quoi !

Voila le bug pour les curieux :
Image
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Ordre des fenêtre et LayeredWindow

Message par Backup »

ma premiere carte graph etait une Ati

ben je suis vite passé chez Nvidia ;)

j'avais ds problemes de compatibilité avec des jeux sans arret , alors j'ai fuit :)
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Ordre des fenêtre et LayeredWindow

Message par venom »

j'ai aps tester le code,

mais j'ai moi aussi montée 2 ati et bien je vais vite les virer des que possible j'ai des erreurs aussi dans tous les sens sa me saoul. :cry:






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre