Win32 finestra Proprietario vs finestra padre?
Domanda
Nella programmazione Win32, qual è la differenza tra genitore di una finestra e proprietario di una finestra? Ho pensato che avevo capito, poi mi sono imbattuto in questo codice:
SetWindowLong(handle, GWL_HWNDPARENT, foo);
Questa imposta effettivamente il proprietario della finestra, non il genitore - nonostante il GWL_HWNDPARENT in uso. Sono i termini genitore / proprietario intercambiabile, o c'è in realtà una differenza?
Soluzione
Il proprietario è la finestra * responsabile di un controllo o una finestra (ad esempio, responsabile della creazione / distruzione della finestra).
Parent è il prossimo-anziano finestra * a un controllo o una finestra nella catena finestra, ma in realtà non è responsabile di essa (non necessariamente preoccupate per il suo ciclo di vita, ecc). genitore di una finestra può anche essere il suo proprietario.
* Finestra vs finestra: finestra è una finestra reale visualizzata sullo schermo; la finestra è un qualsiasi oggetto con un HWND (include bottoni, pannelli, ecc).
Altri suggerimenti
proprietà è una relazione tra due finestre di livello superiore mentre Parent è una relazione tra un livello superiore e una WS_CHILD, o un altro WS_CHILD e WS_CHILD.
Il genitore di un pulsante è la forma è acceso, mentre una finestra di messaggio è di proprietà della forma che lo mostrò.
Leggi questo articolo da Microsoft Win32 finestra gerarchia e stili per ottenere una comprensione più chiara di proprietà, Parenting, ZOrder, SetWindowLong, GetWindow e tutti gli altri bit brutto delle API Win32 per la creazione di relazioni di finestra.
EDIT: Sembra che Microsoft ha preso in giù che il contenuto, qui è un altro ragionevole riassunto di proprietà / Parenting .
post sul blog di Chen è quello di leggere. Il punto chiave per me è che lo stile WS_CHILD dovrà essere utilizzata sulla finestra secondaria. Si può tentare di creare una finestra figlio e passare gestire il genitore a CreateWindow (), ma se non si ha lo stile WS_CHILD impostare le due finestre avranno il rapporto proprietario, non il / rapporto genitore figlio.