这是我之前的问题的延续:WinAPI: How to process keyboard input in custom edit control 我觉得我应该把它放在另一个问题中,因为问题的本质有点不同。来自WM_CHAR的奇怪输入 - WinAPI
所以我的程序现在正在接收输入,但输入有点偏离。解释最好的办法是只显示你的代码,结果......
下面是处理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返回一个字符代码,而不是虚拟键码。不过,谢谢澄清。^_ ^ – Gogeta70 2011-04-30 23:13:48