Forcer une fenêtre toujours au dessus d'une autre
Publié : dim. 24/avr./2011 16:45
Salut,
Je cale sur un petit problème (enfin petit, tordu plutôt)
Voici l'idée :
J'ai 2 fenêtres ouvertes, fenêtre non PB, il s'agit de fenêtre d'un programme externe.
Et je souhaite gardé une fenêtre toujours au dessus d'une autre.
Pour cela, j'utilise
SetWindowLongPtr_(Fenetre1, #GWL_HWNDPARENT, Fenetre2)
et j'ai toujours la fenêtre 2 au dessus de la 1
en fait, je rend la fenêtre 1 enfant de la fenêtre 2
ça marche très bien sauf que, lorsque je veux inverser l'ordre des fenêtres, je me retrouve avec aucune fenêtre dans la barre des tâches jusqu'à ce que je reclique sur une fenêtre.
Et c'est ça le souci, ma fenêtre ne doit pas disparaître de la barre des tâches. (la fenêtre enfant de l'autre sera forcément non visible dans la barre des tâches mais la fenêtre parent est elle aussi non visible dans la barre des taches)
Voici mon programme d'essai :
Exécuter
Attendre 3 secondes
2 explorateurs s'ouvrent
une fenêtre au premier plan avec un bouton "inverser" apparaît
quand on clique sur "inverser", on inverse l'ordre des fenêtres (vous pouvez cliquer sur les fenêtres, l'ordre est conservée) mais je ne vois plus mes explorateurs dans la barre des tâches.
Merci de votre aide
Je cale sur un petit problème (enfin petit, tordu plutôt)
Voici l'idée :
J'ai 2 fenêtres ouvertes, fenêtre non PB, il s'agit de fenêtre d'un programme externe.
Et je souhaite gardé une fenêtre toujours au dessus d'une autre.
Pour cela, j'utilise
SetWindowLongPtr_(Fenetre1, #GWL_HWNDPARENT, Fenetre2)
et j'ai toujours la fenêtre 2 au dessus de la 1
en fait, je rend la fenêtre 1 enfant de la fenêtre 2
ça marche très bien sauf que, lorsque je veux inverser l'ordre des fenêtres, je me retrouve avec aucune fenêtre dans la barre des tâches jusqu'à ce que je reclique sur une fenêtre.
Et c'est ça le souci, ma fenêtre ne doit pas disparaître de la barre des tâches. (la fenêtre enfant de l'autre sera forcément non visible dans la barre des tâches mais la fenêtre parent est elle aussi non visible dans la barre des taches)
Voici mon programme d'essai :
Exécuter
Attendre 3 secondes
2 explorateurs s'ouvrent
une fenêtre au premier plan avec un bouton "inverser" apparaît
quand on clique sur "inverser", on inverse l'ordre des fenêtres (vous pouvez cliquer sur les fenêtres, l'ordre est conservée) mais je ne vois plus mes explorateurs dans la barre des tâches.
Merci de votre aide
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4.50
Global id, id2
Procedure Inverser()
; On inverse l'ordre des fenêtres
SetWindowLongPtr_(id, #GWL_HWNDPARENT, 0)
Temporaire = id2
id2 = id
id = Temporaire
SetWindowLongPtr_(id, #GWL_HWNDPARENT, id2)
SetWindowPos_(id2, id, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE | #SWP_NOACTIVATE)
EndProcedure
RunProgram("explorer.exe", "c:\", "")
Delay(1000)
id2 = GetForegroundWindow_()
ShowWindow_(id2, #SW_SHOWNORMAL)
RunProgram("explorer.exe", "c:\users", "")
Delay(1000)
id = GetForegroundWindow_()
ShowWindow_(id, #SW_SHOWNORMAL)
If OpenWindow(0, 0, 0, 300, 150, "Groupe Exploreur", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget) = 0
End
EndIf
ButtonGadget(0, 20, 20, 100, 24, "Inverser")
SetWindowLongPtr_(id, #GWL_HWNDPARENT, id2)
StickyWindow(0, 1)
Repeat
Event = WaitWindowEvent(50)
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 0
Inverser()
EndSelect
Case #WM_MOUSEMOVE
If GetForegroundWindow_() <> WindowID(0)
If WindowFromPoint_(DesktopMouseX() | DesktopMouseY() << 32) = GadgetID(0)
If Depart = 0
Inverser()
EndIf
Depart = 1
Else
Depart = 0
EndIf
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow