C++ 来自WM_CHAR-WinAPI的奇怪输入
这是我上一个问题的继续: 我觉得我应该把它放在一个不同的问题中,因为这个问题的性质有点不同 所以我的程序现在正在接收输入,但是输入有点不正确。最好的解释方式就是向您展示代码和结果 下面是处理WM_CHAR的代码: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++)
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 0x00TCHAR的大小为2字节,因此它的大小为“1\046”
有人知道这里有什么交易吗?MapVirtualKey接受钥匙的扫描码。但是WM_CHAR中的wParam不是一个扫描代码,而是一个CHAR。你应该使用WM_键,wParam有一个扫描代码 为您提供的链接:
实际上,MapVirtualKey同时使用扫描代码和虚拟钥匙代码。结果是我误读了文档,WM_CHAR返回的是字符代码,而不是虚拟密钥代码。不过,谢谢你的澄清^_^