Messaggi di controllo
Questa sezione contiene informazioni sull'uso dei messaggi di Windows per comunicare con i controlli.
Vengono illustrati gli argomenti seguenti.
Messaggi ai controlli comuni
Poiché i controlli comuni sono finestre, un'applicazione può comunicare con loro usando messaggi Comuni di Microsoft Win32, ad esempio WM_GETFONT o WM_edizione Standard TTEXT. Inoltre, la classe window di ogni controllo comune supporta un set di messaggi specifici del controllo. In genere, un'applicazione usa SendMessage o SendDlgItemMessage per passare messaggi al controllo ,spesso ricevendo informazioni nel valore restituito.
Alcuni controlli comuni includono anche un set di macro che un'applicazione può usare invece di SendMessage. Le macro sono in genere più facili da usare rispetto alle funzioni. Il codice di esempio seguente recupera il testo dell'elemento di visualizzazione albero selezionato, innanzitutto utilizzando i messaggi non elaborati e il secondo utilizzando le macro equivalenti. Si supponga che hwnd sia l'handle della finestra di controllo.
BOOL fSuccess;
WCHAR itemText[99];
TVITEM tvItem = { 0 };
tvItem.mask = TVIF_TEXT;
tvItem.cchTextMax = ARRAYSIZE(itemText);
tvItem.pszText = itemText;
// This...
tvItem.hItem = (HTREEITEM)SendMessage(hwnd, TVM_GETNEXTITEM, TVGN_CARET, NULL);
fSuccess = SendMessage(hwnd, TVM_GETITEM, 0, (LPARAM)&tvItem);
// ... is equivalent to this.
tvItem.hItem = TreeView_GetSelection(hwnd);
fSuccess = TreeView_GetItem(hwnd, &tvItem);
Quando viene apportata una modifica alle impostazioni dei colori di sistema, Windows invia un messaggio di WM_SYSCOLORCHANGE a tutte le finestre di primo livello. La finestra di primo livello deve inoltrare il messaggio di WM_SYSCOLORCHANGE ai controlli comuni. In caso contrario, i controlli non riceveranno una notifica della modifica del colore. L'inoltro del messaggio garantisce che i colori usati dai controlli comuni siano coerenti con quelli usati da altri oggetti dell'interfaccia utente. Ad esempio, un controllo barra degli strumenti usa il colore "Oggetti 3D" per disegnare i pulsanti. Se l'utente modifica il colore dell'oggetto 3D, ma il messaggio WM_SYSCOLORCHANGE non viene inoltrato alla barra degli strumenti, i pulsanti della barra degli strumenti rimarranno nel colore originale (o anche cambiare in una combinazione di colori vecchi e nuovi) mentre il colore degli altri pulsanti nel sistema cambia.
Notifiche dai controlli
I controlli sono finestre figlio che inviano messaggi di notifica alla finestra padre quando gli eventi, in genere attivati dall'input dell'utente, si verificano nel controllo . L'applicazione si basa su questi messaggi di notifica per determinare l'azione che l'utente vuole eseguire. Ad eccezione delle barre di rilevamento, che usano i messaggi WM_HSCROLL e WM_VSCROLL per notificare all'elemento padre le modifiche, i controlli comuni inviano notifiche come WM_COMMAND o WM_NOTIFY messaggi, come specificato nell'argomento di riferimento per la notifica. In genere, le notifiche meno recenti (quelle che sono state nell'API per molto tempo) usano WM_COMMAND.
Il parametro lParam di WM_NOTIFY è l'indirizzo di una struttura NMHDR o l'indirizzo di una struttura più grande che include NMHDR come primo membro. La struttura contiene il codice di notifica e identifica il controllo comune che ha inviato il messaggio di notifica. Il significato dei membri della struttura rimanenti, se presenti, varia a seconda del codice di notifica.
Ogni tipo di controllo comune ha un set corrispondente di codici di notifica. La libreria di controlli comune fornisce anche codici di notifica che possono essere inviati da più di un tipo di controllo comune. Vedere la documentazione relativa al controllo dell'interesse per determinare quali codici di notifica invieranno e quale formato accettano.
Per un esempio di codice che illustra come gestire WM_NOTIFY messaggi, vedere l'argomento di riferimento per tale messaggio.
Argomenti correlati