Das "Mutter" Fenster ermitteln... ?
Das "Mutter" Fenster ermitteln... ?
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 ?
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
- 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... ?
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Das "Mutter" Fenster ermitteln... ?
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...
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
Re: Das "Mutter" Fenster ermitteln... ?
Aus dem englischen Forum überarbeitet
Windows Only...
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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Das "Mutter" Fenster ermitteln... ?
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.

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
Re: Das "Mutter" Fenster ermitteln... ?
Deshalb sind wir ja im Windows-Forum.mk-soft hat geschrieben:[...] Windows Only...

Re: Das "Mutter" Fenster ermitteln... ?
Ups... Ist mir gar nicht aufgefallenRSBasic hat geschrieben:Deshalb sind wir ja im Windows-Forum.mk-soft hat geschrieben:[...] Windows Only...

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Das "Mutter" Fenster ermitteln... ?
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... ?
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