Relation fenêtre Parent/Enfant

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

Relation fenêtre Parent/Enfant

Message par Le Soldat Inconnu »

Salut,

j'ai le code suivant qui marche très bien

Code : Tout sélectionner

WindowE = GetForegroundWindow_()

OpenWindow(0, 200, 200, 500, 500, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #WS_CLIPCHILDREN, "Options")

SetParent_(WindowE, WindowID())
SetWindowLong_(WindowE, #GWL_EXSTYLE, GetWindowLong_(WindowE, #GWL_EXSTYLE) | #WS_EX_MDICHILD)
; SetWindowLong_(WindowE, #GWL_STYLE, GetWindowLong_(WindowE, #GWL_STYLE) | #WS_CHILD)


MoveWindow_(WindowE, 0, 0, 400, 400, 1)

Repeat
  Event = WaitWindowEvent()
  
Until Event = #WM_CLOSE

; SetWindowLong_(WindowE, #GWL_STYLE, GetWindowLong_(WindowE, #GWL_STYLE) ! #WS_CHILD)
SetWindowLong_(WindowE, #GWL_EXSTYLE, GetWindowLong_(WindowE, #GWL_EXSTYLE) ! #WS_EX_MDICHILD)
SetParent_(WindowE, 0)
mais j'ai un problème car ma fenêtre principale ne garde pas le focus.

j'ai ceci qui permet de garder le focus mais ça va pas génial (plus accés au menu, prob de rapidé de la fenêtre au niveau du rafraichissement, etc)

Code : Tout sélectionner

WindowE = GetForegroundWindow_()

OpenWindow(0, 200, 200, 500, 500, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #WS_CLIPCHILDREN, "Options")

SetParent_(WindowE, WindowID())
SetWindowLong_(WindowE, #GWL_EXSTYLE, GetWindowLong_(WindowE, #GWL_EXSTYLE) | #WS_EX_MDICHILD)
SetWindowLong_(WindowE, #GWL_STYLE, GetWindowLong_(WindowE, #GWL_STYLE) | #WS_CHILD)


MoveWindow_(WindowE, 0, 0, 400, 400, 1)

Repeat
  Event = WaitWindowEvent()
  
Until Event = #WM_CLOSE

SetWindowLong_(WindowE, #GWL_STYLE, GetWindowLong_(WindowE, #GWL_STYLE) ! #WS_CHILD)
SetWindowLong_(WindowE, #GWL_EXSTYLE, GetWindowLong_(WindowE, #GWL_EXSTYLE) ! #WS_EX_MDICHILD)
SetParent_(WindowE, 0)
Est-ce quelqu'un a une solution ?

Merci
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)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Que cherches tu à faire exactement ?
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Je veux que la barre de titre de la fenêtre principale reste activée quand je navigue sur les fenêtres des programmes enfants :wink:
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)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Je voulais dire le but final de la manoeuvre.

Je pense qu'une seule fenêtre peut avoir le focus à la fois (donc recevoir les évènements clavier et souris), on peut toujours dessiner soi-même la barre de titre , il y a des api pour ça mais ça ne changera pas cet état de fait, sinon je ne vois pas.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Il me semble qu'il y a eu une discussion sur ce sujet il n'y a pas longtemps. Bon, je me souviens pas avoir vu un exemple concret, il me semble que GPI a posté du code mais qui était juste pour illustrer et qui ne marchait pas.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Je croit aussi que je suis parti pour la dessiner moi même, c'est quoi les API qui permettent de faire une barre de titre ? j'ai jamais vu ça ?

Mon projet, c'est toujours mon bi-exploreur que je continue d'évoluer (plus rien à voir avec la version que j'ai filé sur le forum, c'est beaucoup mieux)
donc j'ouvre 2 explorateurs windows que je mais en enfant de mon programme, je retire les bordures et le titre et je les ajuste l'un au dessus de l'autre, et sur le coté droit, je prévoit de faire un panneau pour régler les options et permettre la navigation rapide.
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 :

Message par Le Soldat Inconnu »

quand on regarde les applications MDI, on a une zone grise qui permet de recevoir les fenêtre MDI, et la, on peut avoir plusieur fenêtre activée en même temps, j'ai vu ça en épluchant le code MyMDI fournit en exemple avec TailBite.
Le prob, c'est que je n'arrive pas à l'adapter à mon code.
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)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Tu sais, tu peux facilement créer un Bi-explorateur en employant 2 Webgadget, tu n'y as jamais pensé?
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

heu, ben non

mais je perd quand de la convivialité de l'explorateur window. moi j'aime bien cette daube, c'est pour ça que j'était parti pour l'améliorer
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)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Moi aussi, ça m' intéresserait un bi-explorateur, car souvent, je le lance 2 fois de suite.

Alors avec 2 webgadget, ça donnerait quelque chose comme ça:

Code : Tout sélectionner

Enumeration
  #Retour1  
  #Afficher1 
  #Retour2 
  #Afficher2
  #Go1
  #Go2  
  #String1
  #String2
  #TreeGadget1
  #TreeGadget2
  #Explorer1
  #Explorer2  
EndEnumeration

If OpenWindow(0,0,0,880,600,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Bi-Explorateur") And CreateGadgetList(WindowID(0))
    ButtonGadget(#Retour1, 640, 5, 100, 20, "Retour arrière")
    ButtonGadget(#Afficher1, 760, 5, 100, 20, "Afficher le chemin")
    ButtonGadget(#Retour2, 640, 305, 100, 20, "Retour arrière")
    ButtonGadget(#Afficher2, 760, 305, 100, 20, "Afficher le chemin")
    ButtonGadget(#Go1, 585, 5, 30, 20, "Go")
    ButtonGadget(#Go2, 585, 305, 30, 20, "Go")
    
    StringGadget(#String1,200, 5,380,20,"file:///c:/")
    StringGadget(#String2,200, 305,380,20,"file:///c:/")
    
    ExplorerTreeGadget(#TreeGadget1, 5, 10, 180, 280, "")
    ExplorerTreeGadget(#TreeGadget2, 5, 310, 180, 280, "")
    
    WebGadget(#Explorer1,200,30,670,260,"file:///c:/")
    WebGadget(#Explorer2,200,330,670,260,"file:///c:/")
    
    Repeat
      EventID=WaitWindowEvent()
      Select EventID
        Case #PB_EventGadget
          Select EventGadgetID()
            
            Case #TreeGadget1
              If EventType()=#PB_EventType_LeftClick
                If GetGadgetState(#TreeGadget1)= #PB_Explorer_Directory 
                  Texte1$=GetGadgetText(#TreeGadget1)
                  SetGadgetText(#Explorer1, Texte1$)
                  SetGadgetText(#String1, Texte1$)
                EndIf
              EndIf  
            
            Case #TreeGadget2
              If EventType()=#PB_EventType_LeftClick              
                If GetGadgetState(#TreeGadget2)= #PB_Explorer_Directory 
                  Texte2$=GetGadgetText(#TreeGadget2)
                  SetGadgetText(#Explorer2, Texte2$)
                  SetGadgetText(#String2, Texte2$)
                EndIf
              EndIf              
            
          Case #Retour1
              SetGadgetState(#Explorer1, #PB_Web_Back)  
            
          Case #Afficher1
              Url1$=GetGadgetText(#Explorer1)
              SetGadgetText(#String1, Url1$)
              Chaine1$ = RemoveString(Url1$, "file:///" ,1)
              Chaine1$ = ReplaceString(Chaine1$, "/", "\" , 1 ) 
              SetGadgetText(#TreeGadget1, Chaine1$) 
              
          Case #Retour2
            SetGadgetState(#Explorer2, #PB_Web_Back)  
            
          Case #Afficher2
            Url2$=GetGadgetText(#Explorer2)
            SetGadgetText(#String2, Url2$)
            Chaine2$ = RemoveString(Url2$, "file:///" ,1)
            Chaine2$ = ReplaceString(Chaine2$, "/", "\" , 1 )             
            SetGadgetText(#TreeGadget2, Chaine2$)
            
          Case #Go1
            Url1$=GetGadgetText(#String1)
            SetGadgetText(#Explorer1, Url1$)
            Chaine1$ = RemoveString(Url1$, "file:///" ,1)
            Chaine1$ = ReplaceString(Chaine1$, "/", "\" , 1 )               
            SetGadgetText(#TreeGadget1, Chaine1$)
            
          Case #Go2
            Url2$=GetGadgetText(#String2)
            SetGadgetText(#Explorer2, Url2$)            
            Chaine2$ = RemoveString(Url2$, "file:///" ,1)
            Chaine2$ = ReplaceString(Chaine2$, "/", "\" , 1 )               
            SetGadgetText(#TreeGadget2, Chaine2$)
            
        EndSelect
      Case #wm_close
        quit=1
      EndSelect
      
    Until quit=1 
  EndIf 
  
Dernière modification par nico le sam. 20/mars/2004 0:20, modifié 1 fois.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

regarde ce win98 me donne avec ton code. c'est énorme 8O vive window 98 et tous les produit microchiote :mrgreen:

Image

Alors explication, le fermer en info bulle au milieu, c'est une info bulle qui est resté suite à un bug.
je te laisse regarder la tronche de ton prog, tu me dis si c'estressemblant avec ce que tu as fait, hein.

et quand je clique sur un dossier, ça m'ouvre une nouvelle fenêtre.

bon de l'air, j'étouffe :roll:
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)]
Invité

Message par Invité »

:lol:

Avec Window XP, tout de suite , ça donne un look sympa et je n'ai pas de problème d'ouverture d'une seconde fenêtre (c'est un paramètre à régler dans Outils, Options des dossiers):

Image
Répondre