Das "Mutter" Fenster ermitteln... ?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Das "Mutter" Fenster ermitteln... ?

Beitrag 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 ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

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

Beitrag von ts-soft »

Ungetested:

Code: Alles auswählen

GetWindow_(hWnd, #GW_HWNDFIRST)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

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

Beitrag 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...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

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

Beitrag 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...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

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

Beitrag 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.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

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

Beitrag von RSBasic »

mk-soft hat geschrieben:[...] Windows Only...
Deshalb sind wir ja im Windows-Forum. <)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

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

Beitrag 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)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

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

Beitrag 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()
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

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

Beitrag von Bisonte »

Der ist auch nicht schlecht. Les ich heut zum ersten mal, den Aufruf GetAncestor_().
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten