这是我上一个问题的延续: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”
有人知道这笔交易是什么吗?
答案 0 :(得分:1)
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