WM_CHAR meddelande

Postat i fönstret med tangentbordsfokus när ett WM_KEYDOWN meddelande översätts av funktionen TranslateMessage . Meddelandet WM_CHAR innehåller teckenkoden för nyckeln som trycktes på.

#define WM_CHAR                         0x0102

Parameters

wParam

Teckenkoden för nyckeln.

lParam

Flaggan repeat count, scan code, extended-key, context code, previous key-state flag och transition-state, enligt följande tabell.

Bitar Meaning
0-15 Upprepningsantalet för det aktuella meddelandet. Värdet är antalet gånger tangenttryckningen återskapas automatiskt som ett resultat av att användaren håller ned nyckeln. Om tangenttryckningen hålls tillräckligt länge skickas flera meddelanden. Upprepningsantalet är dock inte kumulativt.
16-23 Genomsökningskoden. Värdet beror på OEM-tillverkaren.
24 Anger om nyckeln är en utökad nyckel, till exempel höger alt- och CTRL-tangenterna som visas på ett utökat tangentbord med 101- eller 102-tangenter. Värdet är 1 om det är en utökad nyckel. annars är det 0.
25-27 Reserverad; använd inte.
28 Menylägesflaggan. Värdet är 1 om en meny är aktiv. annars är värdet 0.
29 Kontextkoden. Värdet är 1 om ALT-tangenten hålls nere medan nyckeln trycks ned. annars är värdet 0.
30 Föregående nyckeltillstånd. Värdet är 1 om nyckeln är nere innan meddelandet skickas, eller om det är 0 om nyckeln är uppe.
31 Övergångstillståndet. Värdet är 1 om nyckeln släpps eller om den är 0 om nyckeln trycks in.

Mer information finns i Meddelandeflaggor för tangenttryckning.

Returvärde

Ett program bör returnera noll om det bearbetar det här meddelandet.

Example

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;
}

Exempel från klassiska Windows-exempel på GitHub.

Remarks

WM_CHAR-meddelandet använder kodenheterna UTF-16 (16-bitars Unicode Transformation Format) i sin wParam om Unicode-versionen av funktionen RegisterClass användes för att registrera fönsterklassen. I annat fall innehåller systemet tecken på den aktuella processkodsidan, som kan anges till UTF-8 i Windows version 1903 (maj 2019 Update) och senare. Mer information finns i Registrera fönsterklasser och använda UTF-8-kodsidor i Windows appar.

Från och med Windows Vista kan WM_CHAR meddelande skicka UTF-16 surrogatpar till Unicode-fönster. Använd makrona IS_HIGH_SURROGATE, IS_LOW_SURROGATE och IS_SURROGATE_PAIR för att identifiera sådana fall om det behövs.

Det finns inte nödvändigtvis en en-till-en-korrespondens mellan tangenter som trycks ned och teckenmeddelanden genereras, och därför är informationen i högordningsordet i lParam-parametern i allmänhet inte användbar för program. Informationen i högordningsordet gäller endast för det senaste WM_KEYDOWN meddelandet som föregår publiceringen av WM_CHAR-meddelandet .

För utökade tangentbord med 101- och 102-tangenter är utökade tangenter höger ALT och höger CTRL-tangenter i huvuddelen av tangentbordet. TANGENTERNA INS, DEL, HOME, END, PAGE UP, PAGE DOWN och arrow i klustren till vänster om det numeriska knappsatsen. och dividera (/) och RETUR-tangenterna i det numeriska knappsatsen. Vissa andra tangentbord kan ha stöd för den utökade nyckelbiten i parametern lParam .

Meddelandet WM_UNICHAR är detsamma som WM_CHAR, förutom att det använder UTF-32. Den är utformad för att skicka eller publicera Unicode-tecken till ANSI-fönster och kan hantera Unicode-tilläggsplanets tecken.

Kravspecifikation

Requirement Value
Lägsta klient som stöds
Windows 2000 Professional [endast skrivbordsappar]
Lägsta server som stöds
Windows 2000 Server [endast skrivbordsappar]
Rubrik
Winuser.h (inkludera Windows.h)

Se även