我建了个MFC应用程序,想在窗口实现矩形的移动,捕捉KEYDOWN事件,
if(nChar==VK_LEFT )
{
m_group[0]++;
}
if(nChar==VK_RIGHT )
{
m_group[1]++;
}
if(nChar==VK_UP )
{
m_group[2]++;
                }
if(nChar==VK_DOWN )
{
m_group[3]++;
} AfxBeginThread(ThreadProc1,this,NULL );
AfxBeginThread(ThreadProc2,this,NULL );
AfxBeginThread(ThreadProc3,this,NULL );
AfxBeginThread(ThreadProc4,this,NULL );
其中m_group数组为View类数据成员,四个进程分别判断这四个元素的值的变化以进行移动,结果是可以移动的,但在各个键转换或刚按下时,总有一点停顿,请问怎么解决,可以使移动连续点.高手帮帮忙.!

解决方案 »

  1.   

    因为第一个WM_KEYDOWN的消息和后面连续WM_KEYDOWN消息是有间隔的
    这个是由系统的控制面板里的按键重复延迟决定的你可以改成在线程中直接用GetAsyncKeyState(VK_UP)来查询方向键的状态来移动,就不会存在停顿的问题,而且可以两个键一起按
    注:在你的线程中,而不是在OnKeyDown中if(GetAsyncKeyState(VK_LEFT) < 0)
    {
        m_group[0]++;
    }
    ...
      

  2.   

    你可以改成在线程中直接用GetAsyncKeyState(VK_UP)来查询方向键的状态来移动,就不会存在停顿的问题,而且可以两个键一起按注:在你的线程中,而不是在OnKeyDown中C/C++ code
    if(GetAsyncKeyState(VK_LEFT)<0)
    {
        m_group[0]++;
    }
    是要查询VK_UP还是VK_LEFT,返回值用 <0 ?能说详细点吗?