WM_CHAR消息

TranslateMessage 函数翻译WM_KEYDOWN消息时,发布到具有键盘焦点的窗口。 WM_CHAR消息包含按下的键的字符代码。

#define WM_CHAR                         0x0102

参数

wParam

键的字符代码。

lParam

重复计数、扫描代码、扩展键标志、上下文代码、以前的键状态标志和转换状态标志,如下表所示。

Bits 含义
0-15 当前消息的重复计数。 该值是由于用户按住键而自动重复击键的次数。 如果击键的保持时间足够长,则发送多个消息。 但是,重复计数不是累积计数。
16-23 扫描代码。 该值取决于 OEM。
24 指示键是扩展键,例如在增强型 101 或 102 键键盘上显示的右侧 Alt 和 Ctrl 键。 如果是扩展键,则值为 1;否则为 0。
25-28 保留;不使用。
29 上下文代码。 如果在按住 ALT 键的同时按该键,则值为 1;否则值为 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;
}

GitHub 上的 Windows 经典示例 的示例。

注解

如果 RegisterClass 函数的 Unicode 版本用于注册窗口类,则WM_CHAR消息使用 UTF-16 (16 位 Unicode 转换格式) 代码单元。 否则,系统会在当前进程代码页中提供字符,可在 Windows 版本 1903 (2019 年 5 月更新) 及更新版本中将其设置为 UTF-8。 有关详细信息,请参阅 在 Windows 应用中注册窗口类 和使用 UTF-8 代码页

从 Windows Vista 开始, WM_CHAR 消息可以将 UTF-16 代理项对 发送到 Unicode 窗口。 如有必要,请使用 IS_HIGH_SURROGATEIS_LOW_SURROGATEIS_SURROGATE_PAIR 宏检测此类情况。

按下的键和生成的字符消息之间不一定有一对一的对应关系,因此 lParam 参数的高阶单词中的信息通常对应用程序没有用处。 高序单词中的信息仅适用于发布WM_CHAR邮件之前的最新WM_KEYDOWN消息。

对于增强型 101 键和 102 键键盘,扩展键是键盘主部分的右 Alt 键和右 Ctrl 键;INS、DEL、HOME、END、PAGE UP、PAGE DOWN 和箭头键位于数字键盘左侧的群集中:和数字键盘中的除号 (/) 和 ENTER 键。 其他一些键盘可能支持 lParam 参数中的扩展键位。

WM_UNICHAR消息与WM_CHAR相同,只不过它使用 UTF-32。 它旨在向 ANSI 窗口发送或发布 Unicode 字符,并且可以处理 Unicode 补充平面字符。

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Winuser.h (包括 Windows.h)

请参阅