2011-04-30 50 views
0

这是我之前的问题的延续: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”

任何人都知道这里的交易是什么?

回答

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

+0

其实,MapVirtualKey既需要扫描码和虚拟键码。事实证明我误解了文档,并且WM_CHAR返回一个字符代码,而不是虚拟键码。不过,谢谢澄清。^_ ^ – Gogeta70 2011-04-30 23:13:48