c++ - 来自 WM_CHAR 的奇怪输入 - WinAPI

标签 c++ winapi unicode

这是我之前问题的延续:WinAPI: How to process keyboard input in custom edit control 我觉得我应该把它放在一个不同的问题中,因为问题的性质有点不同。

所以我的程序现在正在接收输入,但输入有点不正常。最好的解释方式是只向您展示代码和结果...

这是处理 WM_CHAR 的代码:

    case WM_CHAR:
    {
        TCHAR inc;
        inc = MapVirtualKey(wParam, 2);

        for(short i = 0; i < sizeof(TCHAR); i++)
        {
            unsigned char* x = reinterpret_cast<unsigned char*>(&inc);
            printf("0x%.2X ", x[i]);
        }

        //InvalidateRect(t_hwnd, NULL, 0); // Repaint the window...

    }
    break;

该程序被编译为 unicode,因此所有函数调用默认为其 unicode 变体。

这是输入“asdf”的结果:

0x31 0x00 0x00 0x00 0x34 0x00 0x36 0x00
TCHAR 的大小为 2 个字节,因此结果为“1\046”

有人知道这是怎么回事吗?

最佳答案

MapVirtualKey 接受键的扫描码。但是 WM_CHAR 中的 wParam 不是扫描码——它是一个字符。你应该用WM_KEYDOWN,wParam里面有个扫码。

给你的链接:

http://msdn.microsoft.com/en-us/library/ms646280(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/ms646276(v=vs.85).aspx

关于c++ - 来自 WM_CHAR 的奇怪输入 - WinAPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5845204/

相关文章:

c++ - 如何将 "safely"文件夹删除到回收站

c++ - 当我在 windows7 中安装程序时,我指定的字体大小不适用

Python 将 unicode 减号转换为 float

c - 从 C 文件中读取 unicode 字符

c++ - 我可以强制冲洗 CAN 总线 socket 吗

c++ - 模板类 "does not name a type"中定义的类型

c# - 是否有可用于查询脱机文件结果的 API?

c++ - GetModuleFileNameEx - 是否可以在 char* 而不是 TCHAR[] 中获取路径?

python - 为什么 PyCharm 的控制台上不显示 unicode 字符串?

C++11 move 语义