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

C++ 来自WM_CHAR-WinAPI的奇怪输入,c++,winapi,unicode,C++,Winapi,Unicode,这是我上一个问题的继续: 我觉得我应该把它放在一个不同的问题中,因为这个问题的性质有点不同 所以我的程序现在正在接收输入,但是输入有点不正确。最好的解释方式就是向您展示代码和结果 下面是处理WM_CHAR的代码: case WM_CHAR: { TCHAR inc; inc = MapVirtualKey(wParam, 2); for(short i = 0; i < sizeof(TCHAR); i++)

这是我上一个问题的继续: 我觉得我应该把它放在一个不同的问题中,因为这个问题的性质有点不同

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

下面是处理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;
case WM_CHAR:
{
TCHAR公司;
inc=MapVirtualKey(wParam,2);
对于(短i=0;i
程序编译为unicode,因此所有函数调用默认为unicode变量

以下是键入“asdf”的结果:

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


有人知道这里有什么交易吗?

MapVirtualKey接受钥匙的扫描码。但是WM_CHAR中的wParam不是一个扫描代码,而是一个CHAR。你应该使用WM_键,wParam有一个扫描代码

为您提供的链接:


实际上,MapVirtualKey同时使用扫描代码和虚拟钥匙代码。结果是我误读了文档,WM_CHAR返回的是字符代码,而不是虚拟密钥代码。不过,谢谢你的澄清^_^