Seite 1 von 1

Das "Mutter" Fenster ermitteln... ?

Verfasst: 14.06.2013 12:47
von Bisonte
Hallo.

Auch wenn die Titelwahl etwas komisch klingt, hier mal die Frage :

Wie kann ich das Hauptfenster ermitteln, auf dem ich mein Gadget platziert habe ?

Mit GetParent_() oder UseWindowGadgetList(0) bekomme ich ja das Fenster herraus, NUR
wenn es ein z.B. ContainerGadget ist, hab ich das Handle vom Container und nicht das vom Fenster.

Wie prüfe ich das am besten, bzw. gibt es da überhaupt eine Prüfung ?

Re: Das "Mutter" Fenster ermitteln... ?

Verfasst: 14.06.2013 12:52
von ts-soft
Ungetested:

Code: Alles auswählen

GetWindow_(hWnd, #GW_HWNDFIRST)

Re: Das "Mutter" Fenster ermitteln... ?

Verfasst: 14.06.2013 13:40
von Bisonte
Leider nicht. Das gibt das Handle des Fensters das gerade in der Z-Order am höchsten ist.

Aber bei dieser ganzen Testerei hab ich festgestellt, dass UseGadgetList(0) doch das Hauptfenster meint, auf dem
das Gadget liegt...

Faszinierend... Ich war der Meinung, das schonmal gebraucht zu haben und dann wurde nur das nächsthöhere
"Window" angezeigt... also z.B. der Container...

Hat sich wohl erstmal erledigt. Mal sehen ob ich da noch Problemchen bei der Identifizierung finde ;)

Vielen Dank für die Mühe...

Re: Das "Mutter" Fenster ermitteln... ?

Verfasst: 14.06.2013 13:56
von mk-soft
Aus dem englischen Forum überarbeitet

Code: Alles auswählen

Procedure ParentGadget(gadget) ;for PanelGadget.
  Protected hwnd, ParentID
 
  hwnd = GetParent_(GadgetID(gadget))
  hwnd = GetParent_(hwnd)
  ParentID = GetProp_(hwnd, "PB_ID")
  
  ProcedureReturn ParentID
EndProcedure

Procedure ParentWindow(gadget)
  Protected hwnd, ParentID
 
  hwnd = GadgetID(gadget)
  Repeat
    hwnd = GetParent_(hwnd)
    ParentID = GetProp_(hwnd, "PB_WindowID") - 1
  Until ParentID >= 0
  
  ProcedureReturn ParentID
EndProcedure

If OpenWindow(1, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
 
  a = PanelGadget(#PB_Any, 8, 8, 306, 203)
    AddGadgetItem(a, -1, "Panel 1")
      PanelGadget(1, 5, 5, 290, 166)
        AddGadgetItem(1, -1, "Sub-Panel 1")
        AddGadgetItem(1, -1, "Sub-Panel 2")
        AddGadgetItem(1, -1, "Sub-Panel 3")
      CloseGadgetList()
    AddGadgetItem(a, -1,"Panel 2")
      ButtonGadget(2, 10, 15, 80, 24,"Button 1")
      ButtonGadget(3, 95, 15, 80, 24,"Button 2")
      CloseGadgetList()
  Debug ParentWindow(a)
  Debug ParentGadget(1)
  Debug ParentGadget(2)
  Debug ParentGadget(3)
  Debug a
 
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Windows Only...

Re: Das "Mutter" Fenster ermitteln... ?

Verfasst: 14.06.2013 14:04
von Bisonte
Windows only is klar ;)

Nein im ernst. Die ParentWindow(Gadget) Funktion ist interessant.
Simple und effizient, wobei man nur aufpassen muss, dass das Fenster mit PB erstellt
wurde (also nicht per API) oder man muss das Property "PB_WINDOWID" von Hand setzen.

Re: Das "Mutter" Fenster ermitteln... ?

Verfasst: 14.06.2013 14:20
von RSBasic
mk-soft hat geschrieben:[...] Windows Only...
Deshalb sind wir ja im Windows-Forum. <)

Re: Das "Mutter" Fenster ermitteln... ?

Verfasst: 14.06.2013 18:39
von mk-soft
RSBasic hat geschrieben:
mk-soft hat geschrieben:[...] Windows Only...
Deshalb sind wir ja im Windows-Forum. <)
Ups... Ist mir gar nicht aufgefallen 8)

Re: Das "Mutter" Fenster ermitteln... ?

Verfasst: 17.06.2013 18:53
von edel
GetAncestor kannst du auch nehmen :

Code: Alles auswählen

Procedure Main()
  
  win = OpenWindow(#PB_Any, 0, 0, 400, 400, "")
  
  If win
    
    Debug WindowID(win)
    
    PanelGadget     (0, 8, 8, 306, 203)
    AddGadgetItem (0, -1, "Panel 1")
    PanelGadget (1, 5, 5, 290, 166)
    AddGadgetItem(1, -1, "Sub-Panel 1")
    AddGadgetItem(1, -1, "Sub-Panel 2")
    AddGadgetItem(1, -1, "Sub-Panel 3")
    CloseGadgetList()
    AddGadgetItem (0, -1,"Panel 2")
    ButtonGadget(2, 10, 15, 80, 24,"Button 1")
    ButtonGadget(3, 95, 15, 80, 24,"Button 2")
    CloseGadgetList()    
        
    Debug GetAncestor_(GadgetID(3), #GA_ROOT)
    
    Repeat
      event = WaitWindowEvent()
      
    Until event = #PB_Event_CloseWindow    
    
  EndIf
  
EndProcedure:End Main()

Re: Das "Mutter" Fenster ermitteln... ?

Verfasst: 17.06.2013 23:18
von Bisonte
Der ist auch nicht schlecht. Les ich heut zum ersten mal, den Aufruf GetAncestor_().