MFC编程中,如何避免按键冲突

不悬赏会不会有人回答...

在学雾央的MFC游戏开发的时候遇到的一些问题《MFC游戏开发》笔记四 键盘响应和鼠标响应
在评论区也有人提到,就是“一旦按住某个按键 图片(角色)并不是匀速运动的,而是先停一下,然后再匀速运动的 ”
另外,在想改变方向的时候,也会有卡顿。而且不能按组合键。比如上下左右是wsad的时候,想右后再右上运动,一般操作来说是d按住,然后按W,可是现在在向右运动途中按W的话,会直接往上移动一格,停一会儿然后继续往上运动。

查了些资料“_长按是在短按的基础上,以一个很短的时间(10ms)再次判断按键是否片于按下状态,当达到一定的时间(1s)后,按键还处于按下状态,说明是长按状态_”

我目的就是让他跳过这个1s的判定时间直接进入长按状态,并且可以组合键左上左下灵活运动.

发个OnKeyDown 的函数吧

void CChildView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    //nChar表示按下的键值  
    switch (nChar)
    {
    case 'd':   
    case 'D':
        MyHero.direct = UP;
        MyHero.x += move;

        break;
    case 'a':
    case 'A':
        MyHero.direct = UP;
        MyHero.x -= move;
        break;
    case 'w':
    case 'W':
        MyHero.direct = UP;
        MyHero.y -= move;
        break;
    case 's':
    case 'S':
        MyHero.direct = UP;
        MyHero.y += move;
        break;
    }
}

短按到找按,是必须有一个时间延时判断的。这个时间定义的太短,短按是会产生误动作;但定义时间如果太长,用户也不他方便操作。
这个时间一般在 1 秒以内,300ms 以上,具体要看功能与用户操作习惯。

SetTimer指定一个time值,WM_KEYDOWN/WM_KEYUP里设置一个标记,OnTimer中判断,是长按还是短按。