Onderliggend venster

Een onderliggend venster heeft de WS_CHILD stijl en is beperkt tot het clientgebied van het bovenliggende venster bevindt. Een toepassing gebruikt meestal kind windows om te verdelen het clientgebied van een bovenliggend venster in functionele gebieden. U maakt een onderliggend venster door op te geven van de WS_CHILD stijl in de functie CreateWindowEx.

Een onderliggend venster moet een bovenliggend venster. Het bovenliggende venster kunnen een overlappende venster, een pop-upvenster, of zelfs een ander kind venster. U geeft het bovenliggende venster wanneer u CreateWindowEx bellen. Als u de stijl van WS_CHILD in CreateWindowEx niet opgeeft, maar een bovenliggend venster, maakt het systeem geen het venster.

Een onderliggend venster heeft een clientgebied maar geen andere functies, tenzij ze expliciet worden aangevraagd. Een toepassing kan verzoeken een titelbalk, een venstermenu, minimaliseren en maximaliseren, knoppen, een rand en schuifbalken voor een onderliggend venster, maar een onderliggend venster kan niet hebben een menu. Als de toepassing bestandsingang een menu, hetzij wanneer het venster klasse van het kind registreert of het onderliggende venster creëert, die wordt de greep menu genegeerd.

Positionering

Het systeem positioneert altijd een onderliggend venster relatief ten opzichte van de linkerbovenhoek van het clientgebied van het bovenliggende venster. Geen enkel deel van een onderliggend venster verschijnt ooit buiten de grenzen van het bovenliggende venster bevindt. Als een toepassing wordt gemaakt van een onderliggend venster dat groter is dan het bovenliggende venster of een onderliggend venster zo dat sommige of alle van het onderliggende venster buiten de randen van de bovenliggende doorloopt posities, clips het systeem het onderliggende venster; dat wil zeggen het gedeelte buiten het clientgebied van het bovenliggende venster niet wordt weergegeven. Acties die gevolgen hebben voor het bovenliggende venster kunnen ook van invloed op het onderliggende venster, als volgt.

Bovenliggende venster Onderliggend venster
Vernietigd Vernietigd voor het bovenliggende venster wordt vernietigd.
Verborgen Verborgen voordat het bovenliggende venster is verborgen. Een onderliggend venster is alleen zichtbaar wanneer het bovenliggende venster zichtbaar is.
Verplaatst Verplaatst met het clientgebied van het bovenliggende venster. Het onderliggende venster is verantwoordelijk voor het schilderen van het clientgebied na de verhuizing.
Weergegeven Weergegeven nadat het bovenliggende venster wordt getoond.

Clipping

Het systeem doet een onderliggend venster van het clientgebied van het bovenliggende venster niet automatisch clip. Dit betekent dat het bovenliggende venster trekt over het kind venster als het elke willekeurige tekening op dezelfde locatie als het onderliggende venster uitvoert. Het systeem echter het onderliggende venster van het clientgebied van het bovenliggende venster clip, als het bovenliggende venster de WS_CLIPCHILDREN stijl heeft. Als het onderliggende venster is afgekapt, niet kan het bovenliggende venster trekken over het.

Een onderliggend venster kan andere onderliggende vensters in het zelfde clientgebied overlappen. Een onderliggend venster dat hetzelfde bovenliggende venster als een of meer andere onderliggende vensters deelt heet een broer of zus venster. Sibling windows kunnen tekenen in elkaars clientgebied, tenzij een van de onderliggende vensters de WS_CLIPSIBLINGS stijl heeft. Als een onderliggend venster heeft deze stijl, wordt een gedeelte van haar broer of zus venster dat binnen het onderliggende venster ligt afgekapt.

Als een venster de WS_CLIPCHILDREN of de WS_CLIPSIBLINGS stijl heeft, een lichte verlies in prestaties optreedt. Elk venster neemt systeembronnen, zodat een toepassing moet niet lukraak kind windows gebruiken. Voor de beste prestaties, moet een toepassing die moet logisch zijn belangrijkste venster splitsen doen in het venster procedure van het belangrijkste venster in plaats van met behulp van kind windows.

Relatie naar bovenliggende venster

Een toepassing kan het bovenliggende venster van een bestaand kind venster wijzigen door de SetParent functie. In dit geval het systeem verwijdert het onderliggende venster van het clientgebied van het oude bovenliggende venster en verplaatst naar het clientgebied van het nieuwe bovenliggende venster. Als SetParent bestandsingang een NULL, die wordt het bureaubladvenster het nieuwe bovenliggende venster. In dit geval, wordt het onderliggende venster op het bureaublad, buiten de grenzen van een ander venster getekend. De GetParent functie haalt een ingang voor een onderliggend venster van bovenliggende venster.

Het bovenliggende venster ziet derhalve af van een deel van zijn gebied aan een onderliggend venster, en het onderliggende venster alle invoer ontvangt van dit gebied. De klasse venster hoeft niet hetzelfde voor elk van de onderliggende vensters van het bovenliggende venster te worden. Dit betekent dat een toepassing een bovenliggend venster met onderliggende vensters die het uiterlijk en het uitvoeren van verschillende taken kan vullen. Bijvoorbeeld, kan een dialoogvenster bevatten veel typen besturingselementen, elk een een onderliggend venster dat verschillende soorten gegevens van de gebruiker accepteert.

Een onderliggend venster heeft slechts één bovenliggend venster, maar een ouder kan een willekeurig aantal onderliggende vensters hebben. Beurtelings, kan elk kind venster, hebben kind windows. In deze keten van windows, wordt elk kind venster een venster afstammeling van de oorspronkelijke bovenliggende venster genoemd. Een toepassing gebruikt de IsChild functie om te ontdekken of een bepaald venster een venster kind of een afstammeling van een gegeven bovenliggende venster is.

De functie EnumChildWindows inventariseert the child windows of een bovenliggend venster. Vervolgens, geeft EnumChildWindows de greep aan elk kind venster aan een toepassing gedefinieerde callback functie. Afstammeling windows van het gegeven bovenliggende venster worden ook geïnventariseerd.

Berichten

Het systeem geeft een kind van venster Invoerberichten rechtstreeks aan het onderliggende venster; de berichten worden niet doorgegeven via het bovenliggende venster. De enige uitzondering hierop is als het onderliggende venster heeft uitgeschakeld door de EnableWindow functie. In dit geval, gaat het systeem elke Invoerberichten die zou zijn gegaan naar het onderliggende venster naar het bovenliggende venster in plaats daarvan. Hierdoor kan het bovenliggende venster te onderzoeken de invoerberichten en inschakelen van het onderliggende venster, indien nodig.

Een onderliggend venster kan een uniek geheel getal als id hebben. Kind venster-id's zijn belangrijk bij het werken met windows controle. Een toepassing van een besturingselement activiteit regisseert door deze te verzenden berichten. De toepassing gebruikt van het besturingselement kind venster id om direct de berichten naar het besturingselement. Daarnaast stuurt een besturingselement meldingen naar het bovenliggende venster. Een melding bevat van het besturingselement kind venster identificatie die de bovenliggende gebruikt om te identificeren welk besturingselement het bericht heeft verzonden. Een toepassing geeft de kind-venster identificatie voor andere soorten kind windows door de hMenu -parameter van de functie CreateWindowEx instelt op een waarde in plaats van een menu handvat.

Index