Una finestra figlio ha lo stile WS_CHILD e si limita all'area client della finestra padre. In genere, un'applicazione utilizza finestre figlio di dividere l'area client di una finestra padre in aree funzionali. Creare una finestra figlio specificando lo stile WS_CHILD nella funzione CreateWindowEx.
Una finestra figlio deve avere una finestra padre. La finestra padre può essere anche un'altra finestra di bambino, una finestra a comparsa o una finestra sovrapposta. Specificare la finestra padre quando si chiama CreateWindowEx. Se si specifica lo stile WS_CHILD in CreateWindowEx ma non si specifica una finestra padre, il sistema non crea la finestra.
Una finestra figlio ha un'area client ma non altre caratteristiche, a meno che essi sono esplicitamente richiesta. Un'applicazione può richiedere un titolo bar, un menu finestra, minimizzare e massimizzare i pulsanti, barre di scorrimento per la finestra figlio e un bordo, ma una finestra figlio non può avere un menu. Se l'applicazione specifica un handle di menù, o quando registra la classe finestra del bambino o crea la finestra del bambino, la maniglia di menù viene ignorata.
Il sistema posiziona sempre una finestra secondaria rispetto all'angolo superiore sinistro dell'area client della finestra padre. Nessuna parte di una finestra figlio appare sempre fuori dei confini della finestra padre. Se un'applicazione crea una finestra figlio che è più grande finestra padre o posiziona una finestra figlio in modo che tutto o in parte la finestra figlio si estende oltre i confini del genitore, il sistema Ritaglia la finestra del bambino; cioè, la parte di fuori area client della finestra padre non viene visualizzata. Azioni che influiscono sulla finestra padre possono interessare anche la finestra figlio come segue.
Finestra padre | Finestra figlio |
---|---|
Distrutto | Distrutto prima finestra padre venga distrutta. |
Nascosto | Nascosto prima finestra padre è nascosto. Una finestra figlio è visibile solo se la finestra padre sia visibile. |
Spostato | Si trasferì con area client della finestra padre. Finestra secondaria è responsabile della pittura dell'area client dopo lo spostamento. |
Mostrato | Mostrato dopo la finestra padre viene mostrata. |
Il sistema non ritagliare automaticamente una finestra figlio dall'area client della finestra padre. Questo significa che la finestra padre preleva sopra la finestra del bambino se effettua qualsiasi disegno nella stessa posizione come finestra figlio. Tuttavia, il sistema clip finestra figlio dall'area client della finestra padre se la finestra padre ha lo stile WS_CLIPCHILDREN. Se la finestra figlio viene ritagliata, finestra padre non può disegnare su di esso.
Una finestra figlio può sovrapporsi altre finestre figlio nell'area client stesso. Una finestra figlio che condivide la stessa finestra padre come uno o più altri finestre figlio viene chiamata una finestra di pari livello. Windows di pari livello può disegnare del vicenda area client, a meno che una delle finestre figlio ha lo stile WS_CLIPSIBLINGS. Se una finestra figlio dispone di questo stile, qualsiasi porzione della relativa finestra di pari livello che si trova all'interno della finestra figlio viene ritagliata.
Se una finestra ha stile WS_CLIPCHILDREN o WS_CLIPSIBLINGS, si verifica una leggera perdita in termini di prestazioni. Ogni finestra prende le risorse di sistema, in modo che un'applicazione non dovrebbe usare finestre figlio indiscriminatamente. Per prestazioni ottimali, un'applicazione che ha bisogno di dividere logicamente la sua finestra principale dovrebbe farlo nella routine di finestra della finestra principale anziché tramite finestre figlio.
Un'applicazione può cambiare la finestra padre di una finestra figlia esistente chiamando la funzione SetParent . In questo caso, il sistema rimuove la finestra figlio da all'area client della finestra padre vecchio e si muove all'area client della finestra padre nuovo. Se SetParent specifica un handle NULL, finestra del desktop diventa la nuova finestra padre. In questo caso, la finestra figlio viene disegnata sul desktop, di fuori dei confini di qualsiasi finestra. La funzione GetParent recupera un handle alla finestra padre di una finestra di bambino.
La finestra padre cede una parte dell'area client di una finestra figlio e finestra figlio riceve tutti gli input da questa zona. La classe finestra non deve essere lo stesso per ogni finestre figlio della finestra padre. Questo significa che un'applicazione può riempire una finestra padre con finestre figlio che un aspetto diverso e svolgere diversi compiti. Ad esempio, una finestra di dialogo può contenere diversi tipi di controlli, ciascuno di essi una finestra figlio che accetta diversi tipi di dati da parte dell'utente.
Una finestra figlio ha solo una finestra padre, ma un genitore può avere un numero qualsiasi di finestre figlio. Ogni finestra figlio, a sua volta, può avere finestre figlio. In questa catena di windows, ogni finestra figlio viene chiamata una finestra discendente della finestra padre originale. Un'applicazione utilizza la funzione IsChild per scoprire se una data finestra è una finestra secondaria o una finestra discendente di una finestra principale.
La funzione EnumChildWindows enumera le finestre figlio di una finestra padre. EnumChildWindows passa, quindi, la maniglia per ogni finestra figlio a una funzione di callback definito dall'applicazione. Finestre della finestra principale anche vengono enumerate.
Il sistema passa un bambino dei messaggi di input della finestra direttamente alla finestra figlio; i messaggi non sono passati attraverso la finestra padre. L'unica eccezione è se la finestra figlio è stato disattivato dalla funzione EnableWindow . In questo caso, il sistema passa qualsiasi dei messaggi di input che invece sarebbero andato alla finestra figlio alla finestra padre. Ciò consente la finestra padre per esaminare i messaggi di input e attivare la finestra del bambino, se necessario.
Una finestra figlio può avere un identificatore unico valore integer. Bambino finestra gli identificatori sono importanti quando si lavora con le finestre di controllo. Un'applicazione dirige le attività di un controllo inviandogli messaggi. L'applicazione utilizza l'identificatore di finestra del controllo figlio per dirigere i messaggi per il controllo. Inoltre, un controllo Invia i messaggi di notifica relativa finestra padre. Un messaggio di notifica comprende figlio finestra identificatore del controllo, che il genitore utilizza per identificare quale controllo ha inviato il messaggio. Un'applicazione specifica l'identificatore della finestra figlio per altri tipi di finestre figlio impostando il parametro hMenu della funzione CreateWindowEx un valore piuttosto che un handle di menù.
Rimedio: Inserire il CD-ROM CD di MSDN Library.