Ik zoek een manier om de owner van een Top Level window aan te passen.
Het betreft het volgende:
Als een Top Level window wordt aangemaakt met CreateWindow is het mogelijk een parentwindow op te geven in de parameters. Dit zorgt ervoor dat het window "owned" wordt. Er zal geen icon in de taskbar verschijnen en zodra de parent (owner window) gesloten wordt zal automatisch het owned window ook afgesloten worden.
Verder zal het owned window altijd weergegeven worden boven de owner in de Z order. Andere windows met dezelfde owner zullen met elkaar een eigen Z order hebben.
Stel ik heb deze situatie (allemaal Top Level Windows) :
Window1 : CreateWindow( ...., NULL, ....)
Window2 : CreateWindow( ...., NULL, ....)
Window3 : CreateWindow( ...., Window1, ....)
Window1 is de owner van Window3. Er zijn slechts twee taskbar icons zichtbaar (Window1 en Window2).
Wat ik probeer uit te vogelen is het aanpassen van de owner van Window2 zodat deze net als Window3 aan Window1 hangt.
De enige WinApi functie die iets met een parent van een window doet is SetParent( Window, Parent )
SetParent( Window2, Window1 )
Echter zorgt deze functie ervoor dat er geen owner/owned relatie wordt aangelegd tussen de windows, maar een Parent/Child relatie.
Dit houdt in dat Window2 een child wordt van Window1. Het window kan alleen weergegeven worden binnen de boundaries van de client area van Window1 en zal altijd "on top" boven het parent window staan. Er kunnen geen andere windows tussen komen.
Dus eigenlijk net als childwindows (buttons, datafields etc) "geplakt" zitten op hun parent window.
Window3 zal hiermee dus altijd boven Window2 weergegeven worden.
SetParent lijkt mij dus niet de manier.
Vreemde is dat Windows geen enkele manier heeft om de owner aan te passen (ik zou naast een SetParent een SetOwner functie verwachten).
Wellicht wil ik iets dat echt niet mogelijk is, maar voordat ik het opgeef zou ik graag hier wat WinApi freaks willen vragen of het wel dan niet mogelijk is.
Wellicht is het aanpassen van het systeem die de Z order beheerd een optie ? Misschien de onderliggende attributen (SetWindowLong) aanpassen ?
Hoe dan ook, een oplossing zou ervoor moeten zorgen dat van een window nadat het aangemaakt is de owner aangepast kan worden. Er zou dan (visueel) geen verschil moeten zijn tussen :
Window2 = CreateWindow( ..., Window1, .... )
en
Window2 = CreateWindow( ..., NULL, .... )
SetOwner( Window2, Window1 )
Tips of suggesties zijn erg welkom.
Het betreft het volgende:
Als een Top Level window wordt aangemaakt met CreateWindow is het mogelijk een parentwindow op te geven in de parameters. Dit zorgt ervoor dat het window "owned" wordt. Er zal geen icon in de taskbar verschijnen en zodra de parent (owner window) gesloten wordt zal automatisch het owned window ook afgesloten worden.
Verder zal het owned window altijd weergegeven worden boven de owner in de Z order. Andere windows met dezelfde owner zullen met elkaar een eigen Z order hebben.
Stel ik heb deze situatie (allemaal Top Level Windows) :
Window1 : CreateWindow( ...., NULL, ....)
Window2 : CreateWindow( ...., NULL, ....)
Window3 : CreateWindow( ...., Window1, ....)
Window1 is de owner van Window3. Er zijn slechts twee taskbar icons zichtbaar (Window1 en Window2).
Wat ik probeer uit te vogelen is het aanpassen van de owner van Window2 zodat deze net als Window3 aan Window1 hangt.
De enige WinApi functie die iets met een parent van een window doet is SetParent( Window, Parent )
SetParent( Window2, Window1 )
Echter zorgt deze functie ervoor dat er geen owner/owned relatie wordt aangelegd tussen de windows, maar een Parent/Child relatie.
Dit houdt in dat Window2 een child wordt van Window1. Het window kan alleen weergegeven worden binnen de boundaries van de client area van Window1 en zal altijd "on top" boven het parent window staan. Er kunnen geen andere windows tussen komen.
Dus eigenlijk net als childwindows (buttons, datafields etc) "geplakt" zitten op hun parent window.
Window3 zal hiermee dus altijd boven Window2 weergegeven worden.
SetParent lijkt mij dus niet de manier.
Vreemde is dat Windows geen enkele manier heeft om de owner aan te passen (ik zou naast een SetParent een SetOwner functie verwachten).
Wellicht wil ik iets dat echt niet mogelijk is, maar voordat ik het opgeef zou ik graag hier wat WinApi freaks willen vragen of het wel dan niet mogelijk is.
Wellicht is het aanpassen van het systeem die de Z order beheerd een optie ? Misschien de onderliggende attributen (SetWindowLong) aanpassen ?
Hoe dan ook, een oplossing zou ervoor moeten zorgen dat van een window nadat het aangemaakt is de owner aangepast kan worden. Er zou dan (visueel) geen verschil moeten zijn tussen :
Window2 = CreateWindow( ..., Window1, .... )
en
Window2 = CreateWindow( ..., NULL, .... )
SetOwner( Window2, Window1 )
Tips of suggesties zijn erg welkom.
Intel i9-9900K | MSI MPG Z390 Gaming Pro Carbon | MSI RTX 2080Ti Gaming X Trio | Ballistix Sport LT (32GB) | MSI Optix MAG274QRF-QD 1440p | Samsung 970 EVO Plus (2TB) | NZXT Kraken X52 | Valve Index | Fractal Design R6 | Synology DS420j