我用VS2010创建了一个Win32应用程序,然后再WndProc中添加对WM_KEYDOWN消息的处理.
我的处理代码如下:
if(message == WM_KEYDOWN)
{
SYSTEMTIME time;
GetLocalTime(&time);
char buffer[1000] = {0};
sprintf_s(buffer,"%d-%d\r\n", time.wSecond, time.wMilliseconds);
OutputDebugString(buffer);
}
就是当键盘按下的时候把当前的“秒-毫秒”打印出来。当我一直按下一个键时打印如下:
11-70
11-569
11-600
11-631
11-663
11-694
11-725
11-772
..
..
后面就不贴了,只看前面就够了。第一个WM_KEYDOWN和第二个WM_KEYDOWN之间的时间差距太大。居然有大概700多毫秒。而从第二个开始后面的WM_KEYDOWN消息的时间间隔都是均匀的。为什么第一个和第二个差距这么大?如何缩小这个700毫秒的时间差距?Visual Studio 2010win32

解决方案 »

  1.   

    WORD也有你说的这个问题。
      

  2.   

    (1)打开注册表编辑器。(2)打开HKEY_CURRENT_USER\Control Panel\Keyboard子键,双击右侧窗口的“KeyboardSpeed”,将“数值数据”设为想要设置的值,这个数值的范围为“0~31”。代码的话就注册表操作
      

  3.   

    方法8楼已经说了,不过不详细,其实就是程序主动去检测按键状态,不要用wm_keydown消息触发
    可以在wm_keydown之后设置起一个30毫秒的timer,在timer中GetAsyncKeyState检测你的按键状态,如果是按下状态就执行图形的移动。
    wm_keyup之后就把这个timer kill掉
      

  4.   

    最好再加一个标志,用来表示timer是否已经被创建了,防止重复创建timer