Messaggi pulsante

Un pulsante può inviare messaggi alla finestra padre e una finestra padre può inviare messaggi a un pulsante.

In questa sezione vengono illustrati gli argomenti seguenti.

Invio di messaggi ai pulsanti

Una finestra padre può inviare messaggi a un pulsante in una finestra sovrapposta o figlio usando la funzione SendMessage oppure può inviare messaggi a un pulsante in una finestra di dialogo utilizzando le funzioni SendDlgItemMessage, CheckDlgButton, CheckRadioButton e IsDlgButtonChecked.

Un'applicazione può usare il messaggio di BM_GETCHECK per recuperare lo stato di controllo di una casella di controllo o di un pulsante di opzione. Un'applicazione può anche usare il messaggio BM_GETSTATE per recuperare gli stati correnti del pulsante (stato di controllo, stato push e stato attivo). Per ottenere informazioni su uno stato specifico, usare una maschera di bit sul valore dello stato restituito.

Il messaggio BM_edizione Standard TCHECK imposta lo stato di spunta di una casella di controllo o di un pulsante di opzione. Il messaggio restituisce zero. Il messaggio BM_edizione Standard TSTATE imposta lo stato di push di un pulsante. Questo messaggio restituisce anche zero. Il messaggio BM_edizione Standard TSTYLE modifica lo stile di un pulsante. È progettato per modificare gli stili dei pulsanti all'interno di un tipo (ad esempio, la modifica di una casella di controllo in una casella di controllo automatica). Non è progettato per la modifica tra tipi( ad esempio, la modifica di una casella di controllo in un pulsante di opzione). Un'applicazione non deve modificare un pulsante da un tipo a un altro.

Un pulsante dello stile BS_BITMAP o BS_ICON visualizza una bitmap o un'icona anziché testo. Il messaggio BM_edizione Standard TIMAGE associa un handle a una bitmap o a un'icona a un pulsante. Il messaggio BM_GETIMAGE recupera un handle per la bitmap o l'icona associata a un pulsante.

Un'applicazione può anche usare il messaggio DM_GETDEFID per recuperare l'identificatore del controllo pulsante di pressione predefinito in una finestra di dialogo. Un'applicazione può usare il messaggio DM_edizione Standard TDEFID per impostare il pulsante di pressione predefinito per una finestra di dialogo.

La chiamata alla funzione CheckDlgButton o CheckRadioButton equivale all'invio di un messaggio BM_edizione Standard TCHECK. La chiamata alla funzione IsDlgButtonChecked equivale all'invio di un messaggio di BM_GETCHECK.

Gestione dei messaggi da un pulsante

Le notifiche da un pulsante vengono inviate come messaggi WM_COMMAND o WM_NOTIFY. Informazioni sul messaggio usato sono disponibili nella pagina di riferimento per ogni notifica.

Per altre informazioni su come gestire i messaggi, vedere Messaggi di controllo. Vedere anche Messaggi pulsante.

Messaggi di notifica dai pulsanti

Quando l'utente fa clic su un pulsante, lo stato cambia e il pulsante invia i codici di notifica, sotto forma di WM_COMMAND messaggi, alla relativa finestra padre. Ad esempio, un controllo pulsante di pressione invia il codice di notifica BN_CLICKED ogni volta che l'utente sceglie il pulsante. In tutti i casi (ad eccezione di BCN_HOTITEMCHANGE), la parola con ordine basso del parametro wParam contiene l'identificatore del controllo, la parola di ordine elevato di wParam contiene il codice di notifica e il parametro lParam contiene l'handle della finestra di controllo.

Sia il messaggio che la risposta della finestra padre dipendono dal tipo, dallo stile e dallo stato corrente del pulsante. Di seguito sono riportati i codici di notifica dei pulsanti che un'applicazione deve monitorare ed elaborare.

Codice di notifica Descrizione
BCN_HOTITEMCHANGE Il mouse è stato immesso o lasciato l'area client di un pulsante.
BN_CLICKED L'utente ha fatto clic su un pulsante.
BN_DBLCLK o BN_DOUBLECLICKED L'utente ha fatto doppio clic su un pulsante.
BN_DISABLE Un pulsante è disabilitato.
BN_PUSHED o BN_HILITE L'utente ha premuto un pulsante.
BN_KILLFOCUS Il pulsante ha perso lo stato attivo della tastiera.
BN_PAINT Il pulsante deve essere disegnato.
BN_edizione Standard TFOCUS Il pulsante ha ottenuto lo stato attivo della tastiera.
BN_UNPUSHED o BN_UNHILITE Il pulsante non viene più premuto.

 

Un pulsante invia i codici di notifica BN_DISABLE, BN_PUSHED, BN_KILLFOCUS, BN_PAINT, BN_edizione Standard TFOCUS e BN_UNPUSHED solo se ha lo stile di BS_NOTIFY. BN_DBLCLK i codici di notifica vengono inviati automaticamente per i pulsanti BS_Uedizione Standard RBUTTON, BS_RADIOBUTTON e BS_OWNERDRAW. Altri tipi di pulsante inviano BN_DBLCLK solo se hanno lo stile BS_NOTIFY . Tutti i pulsanti inviano il codice di notifica BN_CLICKED indipendentemente dagli stili dei pulsanti.

Per i pulsanti automatici, il sistema modifica lo stato di push e disegna il pulsante. In questo caso, l'applicazione elabora in genere solo i codici di notifica BN_CLICKED e BN_DBLCLK . Per i pulsanti che non sono automatici, l'applicazione risponde in genere al codice di notifica inviando un messaggio per modificare lo stato del pulsante. Per informazioni sull'invio di messaggi ai pulsanti, vedere Invio di messaggi ai pulsanti.

Quando l'utente seleziona un pulsante disegnato dal proprietario, il pulsante invia alla finestra padre un messaggio WM_DRAWITEM contenente l'identificatore del controllo da disegnare e le informazioni sulle relative dimensioni e stato.

Messaggi colore pulsante

Il sistema fornisce i valori di colore predefiniti per i pulsanti. Un'applicazione può recuperare i valori predefiniti per questi colori chiamando la funzione GetSysColor o impostando i valori chiamando la funzione SetSysColors. Nella tabella seguente vengono illustrati i valori predefiniti del colore del pulsante.

Valore Elemento colorato
COLOR_BTNFACE Facce pulsante.
COLOR_BTNHIGHLIGHT Area di evidenziazione (bordi superiore e sinistro) di un pulsante.
COLOR_BTNSHADOW Area ombreggiatura (i bordi inferiore e destro) di un pulsante.
COLOR_BTNTEXT Testo normale (nongrayed) nei pulsanti.
COLOR_GRAYTEXT Testo disabilitato (grigio) nei pulsanti. Questo colore è impostato su 0 se il driver di visualizzazione corrente non supporta un colore grigio a tinta unita.
COLOR_WINDOW Sfondi della finestra.
COLOR_WINDOWFRAME Fotogrammi finestra.
COLOR_WINDOWTEXT Testo nelle finestre.

 

Tuttavia, la chiamata a SetSysColors influisce su tutte le applicazioni, pertanto non è consigliabile chiamare questa funzione per personalizzare i pulsanti per l'applicazione.

Il sistema invia un messaggio di WM_CTLCOLORBTN alla finestra padre di un pulsante prima di disegnare un pulsante. Questo messaggio contiene un handle per il contesto di dispositivo del pulsante e un handle per la finestra figlio. La finestra padre può usare questi handle per modificare il testo e i colori di sfondo del pulsante. Tuttavia, solo i pulsanti disegnati dal proprietario rispondono alla finestra padre che elabora il messaggio.

Elaborazione predefinita dei messaggi pulsante

La routine della finestra per la classe predefinita della finestra di controllo pulsante esegue l'elaborazione predefinita per tutti i messaggi non elaborati dalla routine di controllo del pulsante. Quando la routine di controllo pulsante restituisce FAL edizione Standard per qualsiasi messaggio, la routine della finestra predefinita controlla i messaggi ed esegue le azioni predefinite elencate nella tabella seguente.

Message Azione predefinita
BM_CLICK Invia il pulsante un WM_LBUTTONDOWN e un messaggio di WM_LBUTTONUP e invia alla finestra padre un codice di notifica BN_CLICKED.
BM_GETCHECK Restituisce lo stato di controllo del pulsante.
BM_GETIMAGE Restituisce un handle per la bitmap o l'icona associata al pulsante o NULL se il pulsante non ha bitmap o icona.
BM_GETSTATE Restituisce lo stato di controllo corrente, lo stato push e lo stato attivo del pulsante.
BM_edizione Standard TCHECK Imposta lo stato di controllo per tutti gli stili dei pulsanti di opzione e delle caselle di controllo. Se il parametro wParam è maggiore di zero per i pulsanti di opzione, al pulsante viene assegnato lo stile WS_TABSTOP .
BM_edizione Standard TIMAGE Associa l'handle bitmap o icona specificato al pulsante e restituisce un handle alla bitmap o all'icona precedente.
BM_edizione Standard TSTATE Imposta lo stato di push del pulsante. Per i pulsanti disegnati dal proprietario, un messaggio di WM_DRAWITEM viene inviato alla finestra padre se lo stato del pulsante è stato modificato.
BM_edizione Standard TSTYLE Imposta lo stile del pulsante. Se la parola in ordine basso del parametro lParam è TRUE, il pulsante viene ridisegnato.
WM_CHAR Controlla una casella di controllo o una casella di controllo automatica quando l'utente preme i tasti più (+) o uguali (=). Deseleziona una casella di controllo o una casella di controllo automatica quando l'utente preme il tasto meno (–).
WM_ENABLE Disegna il pulsante.
WM_ERAedizione Standard BKGND Cancella lo sfondo per i pulsanti disegnati dal proprietario. Gli sfondi di altri pulsanti vengono cancellati come parte dell'elaborazione di WM_PAINT e WM_ENABLE .
WM_GETDLGCODE Restituisce valori che indicano il tipo di input elaborato dalla routine del pulsante predefinita, come illustrato nella tabella seguente.
Stile pulsante Valori restituiti
BS_AUTOCHECKBOX DLGC_WANTCHARS | DLGC_BUTTON
BS_AUTORADIOBUTTON DLGC_RADIOBUTTON | DLGC_BUTTON
BS_CHECKBOX DLGC_WANTCHARS | DLGC_BUTTON
BS_DEFPUSHBUTTON DLGC_DEFPUSHBUTTON | DLGC_BUTTON
BS_GROUPBOX DLGC_STATIC
BS_PUSHBUTTON DLGC_UNDEFPUSHBUTTON | DLGC_BUTTON
BS_RADIOBUTTON DLGC_RADIOBUTTON | DLGC_BUTTON

 

WM_GETFONT Restituisce un handle al tipo di carattere corrente.
WM_KEYDOWN Preme il pulsante se l'utente preme la BARRA SPAZIATRICE.
WM_KEYUP Rilascia l'acquisizione del mouse per tutti i casi tranne il tasto TAB.
WM_KILLFOCUS Rimuove il rettangolo dello stato attivo da un pulsante. Per i pulsanti push e i pulsanti di pressione predefiniti, il rettangolo di attivazione viene invalidato. Se il pulsante ha l'acquisizione del mouse, l'acquisizione viene rilasciata, il pulsante non viene selezionato e viene rimosso qualsiasi stato di push.
WM_LBUTTONDBLCLK Invia un codice di notifica BN_DBLCLK alla finestra padre per pulsanti di opzione e pulsanti disegnati dal proprietario. Per altri pulsanti, un doppio clic viene elaborato come messaggio di WM_LBUTTONDOWN .
WM_LBUTTONDOWN Evidenzia il pulsante se la posizione del cursore del mouse si trova all'interno del rettangolo client del pulsante.
WM_LBUTTONUP Rilascia l'acquisizione del mouse se il pulsante aveva l'acquisizione del mouse.
WM_MOUedizione Standard MOVE Esegue la stessa azione di WM_LBUTTONDOWN, se il pulsante ha l'acquisizione del mouse. In caso contrario, non viene eseguita alcuna azione.
WM_NCCREATE Trasforma qualsiasi pulsante BS_OWNERDRAW in un pulsante BS_PUSHBUTTON.
WM_NCHITTEST Restituisce HTTRANSPARENT, se il controllo pulsante è una casella di gruppo.
WM_PAINT Disegna il pulsante in base allo stile e allo stato corrente.
WM_edizione Standard TFOCUS Disegna un rettangolo di stato attivo sul pulsante che ottiene lo stato attivo. Per i pulsanti di opzione e i pulsanti di opzione automatici, la finestra padre viene inviata una BN_CLICKED codice di notifica.
WM_edizione Standard TFONT Imposta un nuovo tipo di carattere e facoltativamente aggiorna la finestra.
WM_edizione Standard TTEXT Imposta il testo del pulsante. Nel caso di una casella di gruppo, il messaggio disegna sopra il testo preesistente prima di ridipingere la casella di gruppo con il nuovo testo.
WM_SYSKEYUP Rilascia l'acquisizione del mouse per tutti i casi tranne il tasto TAB.

 

La routine della finestra predefinita passa tutti gli altri messaggi alla funzione DefWindowProc per l'elaborazione predefinita.

Messaggi di controllo