请问我在
WM_CHAR:里
int key_state = LOWORD(lParam);
hdc = GetDC(hWnd);
SetTextColor(hdc,RGB(123,123,123));
SetBkColor(hdc,GetPixel(hdc,1,1));
SetBkMode(hdc,OPAQUE);
sprintf(buffer,"%d",key_state);//buffer我申请的全局.
TextOut(hdc,0,16,buffer,strlen(buffer));
ReleaseDC(hWnd,hdc);
为什么不能按书上说的输出 按键重复次数.
还有 同理我检测 key_state 第29位.
书上说能检测出是否按了 alt.
我同样没试出能. 希望能帮我解答一下.
谢谢.

解决方案 »

  1.   

    你把消息循环里的 TranslateMessage() 去掉再试一下。当 Alt 按下时,WM_CHAR 
    消息会被该函数转换为 WM_SYSCHAR 消息。至于重复次数就不太清楚了。
      

  2.   

    感谢dandycheung(珠穆朗玛)按了alt的确产生的是WM_SYSCHAR消息.
    同样感谢 oyljerry(☆勇敢的心☆-Paper Writing).虽然我不知道怎么调用PreTranslateMessage.
    谁能解答一下lParam低16位为什么不能获得按键重复次数?
      

  3.   

    楼上所说的 PreXXX 函数是 MFC 里面的,你用 SDK 编程不能用。
    你仔细看一下 WM_KEYDOWN 消息的 MSDN 文档就会发现,微软说的很清楚,
    按键持续足够长的时间,将产生多条 WM_KEYDOWN 消息,但是“the repeat
     count is not cumulative”,也就是说此计数是不累加的。WM_CHAR 消息
    中的计数值是从 WM_KEYDOWN 消息中带过去的,所以...