messaggio WM_CHAR

Inviato alla finestra con lo stato attivo della tastiera quando un messaggio di WM_KEYDOWN viene convertito dalla funzione TranslateMessage . Il messaggio WM_CHAR contiene il codice carattere del tasto premuto.

#define WM_CHAR                         0x0102

Parametri

wParam

Codice carattere della chiave.

lParam

Numero di ripetizioni, codice di analisi, flag di chiave estesa, codice di contesto, flag di stato chiave precedente e flag di stato di transizione, come illustrato nella tabella seguente.

BITS Significato
0-15 Numero di ripetizioni per il messaggio corrente. Il valore è il numero di volte in cui la sequenza di tasti viene creata automaticamente in seguito all'utente che tiene premuto il tasto. Se la sequenza di tasti viene mantenuta abbastanza lunga, vengono inviati più messaggi. Tuttavia, il conteggio delle ripetizioni non è cumulativo.
16-23 Codice di analisi. Il valore dipende dall'OEM.
24 Indica se il tasto è un tasto esteso, ad esempio i tasti ALT e CTRL di destra visualizzati su una tastiera avanzata da 101 o 102 tasti. Il valore è 1 se si tratta di una chiave estesa; in caso contrario, è 0.
25-28 Riservato; non usare.
29 Codice di contesto. Il valore è 1 se il tasto ALT viene premuto mentre il tasto viene premuto; in caso contrario, il valore è 0.
30 Stato della chiave precedente. Il valore è 1 se la chiave è inattiva prima dell'invio del messaggio oppure è 0 se la chiave è in alto.
31 Stato di transizione. Il valore è 1 se il tasto viene rilasciato o è 0 se viene premuto il tasto.

Per altri dettagli, vedere Flag di messaggio di sequenza di tasti.

Valore restituito

Un'applicazione deve restituire zero se elabora questo messaggio.

Esempio

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
   
    // ...

    case WM_CHAR:
        OnKeyPress(wParam);
        break;

    default:
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}

Esempio di esempi classici di Windows in GitHub.

Commenti

Il messaggio WM_CHAR usa unità di codice UTF-16 (Formato trasformazione Unicode a 16 bit) nel relativo wParam se la versione Unicode della funzione RegisterClass è stata usata per registrare la classe window. In caso contrario, il sistema fornisce caratteri nella tabella codici del processo corrente, che può essere impostata su UTF-8 in Windows versione 1903 (aggiornamento di maggio 2019) e versioni successive. Per altre informazioni, vedere Registrazione delle classi di finestre e Usare le tabelle codici UTF-8 nelle app di Windows.

A partire da Windows Vista, WM_CHAR messaggio può inviare coppie di surrogati UTF-16 a finestre Unicode. Utilizzare le macro IS_HIGH_SURROGATE, IS_LOW_SURROGATE e IS_SURROGATE_PAIR per rilevare tali casi, se necessario.

Non esiste necessariamente una corrispondenza uno-a-uno tra i tasti premuti e i messaggi di carattere generati e pertanto le informazioni nella parola di ordine elevato del parametro lParam non sono in genere utili per le applicazioni. Le informazioni nella parola dell'ordine elevato si applicano solo al messaggio di WM_KEYDOWN più recente che precede la pubblicazione del messaggio WM_CHAR .

Per le tastiere avanzate da 101 e 102 tasti, i tasti estesi sono il tasto ALT destro e i tasti CTRL destro nella sezione principale della tastiera; i tasti INS, DEL, HOME, END, PAGE UP, PAGE DOWN e freccia nei cluster a sinistra del tastierino numerico; e i tasti di divisione (/) e INVIO nel tastierino numerico. Alcune altre tastiere possono supportare il bit con tasto esteso nel parametro lParam .

Il messaggio WM_UNICHAR è uguale a WM_CHAR, ad eccezione del fatto che usa UTF-32. È progettato per inviare o inserire caratteri Unicode alle finestre ANSI e può gestire i caratteri del piano supplementare Unicode.

Requisiti

Requisito Valore
Client minimo supportato
Windows 2000 Professional [solo app desktop]
Server minimo supportato
Windows 2000 Server [solo app desktop]
Intestazione
Winuser.h (include Windows.h)

Vedi anche