Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Размещено в окне с фокусом клавиатуры при переводе сообщения WM_KEYDOWN функцией TranslateMessage . Сообщение WM_CHAR содержит код символа нажатия клавиши.
#define WM_CHAR 0x0102
Parameters
-
wParam
-
Код символа ключа.
-
lParam
-
Количество повторов, код сканирования, флаг расширенного ключа, код контекста, предыдущий флаг состояния ключа и флаг состояния перехода, как показано в следующей таблице.
Биты Смысл 0-15 Число повторов для текущего сообщения. Это значение — это количество раз, когда нажатие клавиш автоматически возвращается в результате удержания ключа пользователем. Если нажатие клавиш достаточно долго, отправляется несколько сообщений. Однако число повторов не является накопительным. 16—23 Код сканирования. Значение зависит от изготовителя оборудования. 24 Указывает, является ли ключ расширенным ключом, например клавиши ALT справа и CTRL, которые отображаются на расширенной клавиатуре 101-или 102-клавиши. Значение равно 1, если это расширенный ключ; в противном случае значение равно 0. 25-27 Скрытный; не используйте. 28 Флаг режима меню. Значение равно 1, если меню активно; в противном случае значение равно 0. 29 Код контекста. Значение равно 1, если клавиша ALT удерживается во время нажатия клавиши; в противном случае значение равно 0. 30 Предыдущее состояние ключа. Значение равно 1, если ключ отключен до отправки сообщения, или значение 0, если ключ находится вверх. 31 Состояние перехода. Значение равно 1, если ключ освобождается, или значение 0, если нажатие клавиши выполняется. Дополнительные сведения см. в разделе "Флаги сообщений с нажатием клавиш".
Возвращаемое значение
Приложение должно возвращать ноль, если оно обрабатывает это сообщение.
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;
}
Пример из классических примеров 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 и может обрабатывать символы дополнительного плоскости Юникода.
Requirements
| Requirement | Ценность |
|---|---|
| Минимальный поддерживаемый клиент |
Windows 2000 профессиональный [только классические приложения] |
| Минимальный поддерживаемый сервер |
Windows 2000 Server [только классические приложения] |
| Header |
|