我想实现按住键盘的一个键不动,来达到连续响应的目的。。
比如按主LEFT,光标就一直往左移动知直到开LEFT。。
我在OnKeyDown响应键盘消息,发现即使我长按主LEFT,也只响应了一次啊。。
有什么办法可以响应多次啊。。
比如按主LEFT,光标就一直往左移动知直到开LEFT。。
我在OnKeyDown响应键盘消息,发现即使我长按主LEFT,也只响应了一次啊。。
有什么办法可以响应多次啊。。
解决方案 »
- 为什么在CTreeView的派生类中CMyTreeView中的自定义函数中不能使用GetTreeCtrl()?
- IE中控件socket通信的问题
- CGridCtrl类的单元格中怎么嵌另一个控件?
- 求助关于图像闪烁问题!
- XDJM们推荐一些有关CIM协议编程方面的源代码 多谢~~~
- 我一vc编的程序为什在window2000/winxp下发行版能通过,在win98下发行版通不过
- 看看着断代吗?怎么调试通不过呢?
- MFC 大恒相机 如何利用ConvertBayer2Rgb获取图像某一点的RGB值
- matlab与vc的问题,(使用mcc方法)
- 单文档静态切分窗口中新建视的问题
- 建立几个在程序后台循环采集AD板卡的线程,需要精确定时,是否建立普通线程即可,还是要调优先级?
- 请教
大概要记时处理keyup
图6-1 lParam变数的6个按键讯息栏位 重复计数
重复计数是该讯息所表示的按键次数,大多数情况下,重复计数设定为1。不过,如果按下一个键之後,您的视窗讯息处理程式不够快,以致不能处理自动重复速率(您可以在「控制台」的「键盘」中进行设定)下的按键讯息,Windows就把几个WM_KEYDOWN或者WM_SYSKEYDOWN讯息组合到单个讯息中,并相应地增加重复计数。WM_KEYUP或WM_SYSKEYUP讯息的重复计数总是为1。因为重复计数大於1指示按键速率大於您程式的处理能力,所以您也可能想在处理键盘讯息时忽略重复计数。几乎每个人都有文书处理或执行试算表时画面卷过头的经验,因为多余的按键堆满了键盘缓冲区,所以当程式用一些时间来处理每一次按键时,如果忽略您程式中的重复计数,就能够解决此问题。不过,有时可能也会用到重复计数,您应该尝试使用两种方法执行程式,并从中找出一种较好的方法。
我现在在做俄罗斯方块,想实现如下功能
一直按下方向键不动,方块连续移动。。这个要怎么做啊。。
OnKeyDown只能响应一次啊。。
HHOOK glhHook=NULL; //安装的鼠标勾子句柄
HINSTANCE glhInstance=NULL; //DLL实例句柄
BOOL CKeyboardHook::StartHook()
{ //启动钩子
BOOL bResult=FALSE;
glhHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,glhInstance,0);
if(glhHook!=NULL)
bResult=TRUE;
return bResult;
}LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
char ch=0;
if( (wParam==VK_SPACE))//空格按键(自行修改)
{//对按键进行处理
........
........
;
}
return CallNextHookEx( glhHook, nCode, wParam, lParam );
}
但可能因为按键重复时的等待时间过长,让你感觉只产生了一次..
要想获得精准的当前键盘状态
使用GetKeyState(VK_RETURN)&0x80就表示键盘按下了..
但是这函数不是个消息响应的形式估计你不好用..我用它的时候是 一个类似于cs的程序,然后控制人向前走,因为要不停的绘画,而且是全屏的,
所以使用的是while(1);因此是在循环里不停的判断GetKeyState(VK_RETURN)&0x80 然后坐标系响应变化....