сообщение WM_CHAR

Размещено в окне с фокусом клавиатуры при переводе сообщения WM_KEYDOWN функцией TranslateMessage . Сообщение WM_CHAR содержит код символа нажатия клавиши.

#define WM_CHAR                         0x0102

Параметры

wParam

Код символа ключа.

lParam

Число повторов, сканирование кода, флаг расширенного ключа, код контекста, предыдущий флаг состояния ключа и флаг состояния перехода, как показано в следующей таблице.

Bits Значение
0—15 Число повторов для текущего сообщения. Значение — это количество попыток нажатия клавиши автоматически в результате того, что пользователь удерживает ключ. Если нажатие клавиши удерживается достаточно долго, отправляется несколько сообщений. Однако число повторов не является накопительным.
16—23 Код проверки. Значение зависит от изготовителя оборудования.
24 Указывает, является ли ключ расширенным, например клавиши ALT справа и CTRL, которые отображаются на расширенной клавиатуре 101 или 102 клавиш. Значение равно 1, если это расширенный ключ; в противном случае значение равно 0.
25-28 Зарезервировано; не используйте.
29 Код контекста. Значение равно 1, если клавиша ALT удерживается во время нажатия клавиши; в противном случае значение равно 0.
30 Предыдущее состояние ключа. Значение равно 1, если ключ не работает до отправки сообщения или равен 0, если ключ находится вверх.
31 Состояние перехода. Значение равно 1, если ключ освобождается или равен 0, если клавиша нажимается.

Дополнительные сведения см. в разделе "Нажатие флагов сообщений".

Возвращаемое значение

Приложение должно возвращать ноль, если оно обрабатывает это сообщение.

Пример

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

Пример из Windows классических примеров на GitHub.

Remarks

В сообщении WM_CHAR используются единицы кода UTF-16 (16-разрядный формат преобразования Юникода) в wParam , если для регистрации класса окна использовалась версия Юникода функции RegisterClass . В противном случае система предоставляет символы на текущей кодовой странице процесса, которая может иметь значение UTF-8 в Windows версии 1903 (обновление за май 2019 г.) и более поздних версий. Дополнительные сведения см. в разделе "Регистрация классов окон" и использование кодовых страниц UTF-8 в приложениях Windows.

Начиная с Windows Vista, WM_CHAR сообщение может отправлять суррогатные пары UTF-16 в окна Юникода. При необходимости используйте макросы IS_HIGH_SURROGATE, IS_LOW_SURROGATE и IS_SURROGATE_PAIR для обнаружения таких случаев.

Не обязательно существует корреспонденция "один к одному" между нажатием клавиш и созданными символьными сообщениями, поэтому информация в слове высокого порядка параметра lParam , как правило, не полезна для приложений. Информация в слове высокого порядка применяется только к последнему WM_KEYDOWN сообщению, которое предшествует публикации сообщения WM_CHAR .

Для расширенных клавиш 101 и 102 расширенные клавиши — это правая клавиша ALT и правая клавиша CTRL в главном разделе клавиатуры; клавиши INS, DEL, HOME, END, PAGE UP, PAGE DOWN и стрелки в кластерах слева от цифровой клавиатуры; и ключи деления (/) и ВВОД на цифровой клавиатуре. Некоторые другие клавиатуры могут поддерживать бит расширенного ключа в параметре lParam .

Сообщение WM_UNICHAR совпадает с WM_CHAR, за исключением использования UTF-32. Он предназначен для отправки или размещения символов Юникода в окна ANSI и может обрабатывать символы дополнительного плоскости Юникода.

Требования

Требование Значение
Минимальная версия клиента
Windows 2000 Professional [только классические приложения]
Минимальная версия сервера
Windows 2000 Server [только классические приложения]
Заголовок
Winuser.h (include Windows.h)

См. также раздел

Справочные материалы

TranslateMessage

WM_KEYDOWN

WM_UNICHAR

Основные понятия

Ввод с клавиатуры