hur.cn - 华软网

 热门搜索

求解决MFC键盘按键长按只响应一次的方法,代码!十分感谢!

  作者:未知    来源:网络    更新时间:2011/4/15
希望能用键盘操作,MFC界面响应键盘消息,能像玩雷电游戏一样,用W,A,S,D当做方向键。

按键按下和松开分别发送不同的值,最主要的是在长按按键的时候只响应一次即只发送一次按下的值;当松开按键的时候再发送一次松开的值。
我用到的setstate()和getstate()函数来判断是否按下。然则目前的问题是,长按按键时会发生两个值快速交替发送的问题,界面上那个按钮能看出来也不停地按下松开按下松开。纠结好几天了,请列位大师帮我解决一下吧,万分谢谢
---华软 网友回答---
你能够用这个API来在任意时刻查询键的状态:GetKeyState
---华软网友回复---
你增加个bool型的变量WM_KEYDOWN的时候设置成true,WM_KEYUP时设置成false,然后根据变量的值举行措置惩罚就可疑了吧…
---华软网友回复---
你键盘上的按键如果按下不释放会持续的发送DOWN,UP的消息??
---华软网友回复---
能够参照8086里键盘防抖动设计
---华软网友回复---
  class="deleted_message"> 该回复于2011-04-16 09:23:02被版主删除
---华软网友回复---
欠好意思昨天没有及时回复。谢谢列位的帮助。方法我都尝试过了。
huangcheng90的方法也没实现,由于程序没进到keydown和keyup函数中取,不响应这两个函数。还得用重载消息MSG那个才响应。
superarhao的建议也试了,可能是没用对,也没成功。
后来在百度知道上看到一个方法,晚上在我同学的大力帮助下终于解决了长按键只发送一次的问题。
百度知道的网址:http://zhidao.百度.com/question/152224905.html

void XXX::OnKeyDown(UINT c, UINT r, UINT f)
{
 if (f & 1 << 14)
 {
  // 重复
 }
 else
 {
  // 刚按下
 }
}



最后是按照上面的方法运用位操作,到达了我希望的目标。
谢谢列位的帮助,提供了很多好的建议。谢谢!
结贴了~      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。