20191223同时检测多个按键和按键平滑处理

本文介绍了在C++中如何使用GetAsyncKeyState()函数实现平滑的按键输入和检测多个按键状态。该函数可以处理连续按键的延时问题,支持同时检测方向键、字母键和特殊键的状态。通过示例展示了如何结合其他API控制图形对象的移动和缩放,还提醒了在非活动状态下可能出现的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

getch() 函数,用于返回用户输入的字符。当连续按键时,该函数返回第一个字符和第二个字符之间,默认有 0.5 秒的延时,并且之后的连续字符,默认是每秒钟 15 次输入。这两个数值可以在控制面板中设置。

如果需要平滑的按键输入,或者同时按下多个按键,就不能用 getch() 了,需要使用另一个 Windows API 函数:GetAsyncKeyState()。该函数原型如下:

SHORT GetAsyncKeyState(
	int vKey		// virtual-key code
);

vKey 是要检测的按键的虚拟键码,常用的如 VK_UP、VK_DOWN 等,分别表示方向键的上、下等。需要注意:对于 26 个字母的键码,可以直接写 ‘A’、‘B’……,而不要写 VK_A、VK_B。数字键也是,请直接写 ‘0’、‘1’……。全部的 256 种虚拟键码,请参考 MSDN 中的 Virtual-Key Codes。

返回的 SHORT 值,如果最高位为 1,表示该键被按下;否则表示该键弹起。该函数的最低位还可以用来检测开关键(比如大小写锁定键)的状态。作为按键处理,还可以使用 GetKeyState、GetKeyboardState 等函数,详细请参考 MSDN 手册中的 Keyboard Input Functions 部分。

下面给一个简单的例子,该范例是用键盘的上下左右键移动一个圆,并且可以通过左 Shift 放大、左 Ctrl 缩小,几个按键可以同时灵活地控制圆。代码如下:

// 程序名称:同时检测多个按键及平滑按键输入的范例
// 编译环境:Visual C++ 6.0 / 2010,EasyX 惊蛰版
//
#include <graphics.h>

/
// 定义常量、枚举量、结构体、全局变量
/

#define	CMD_UP			1
#define	CMD_DOWN		2
#define	CMD_LEFT		4
#define	CMD_RIGHT		8
#define	CMD_ZOOMIN		16
#define	CMD_ZOOMOUT		32
#define	CMD_QUIT		64

// 声明圆的坐标和半径
int g_x, g_y, g_r;



/
// 函数声明
/

void Init();						// 初始化
void Quit();						// 退出
int  GetCommand();					// 获取控制命令
void DispatchCommand(int _cmd);		// 分发控制命令
void OnUp();						// 上移
void OnDown();						// 下移
void OnLeft();						// 左移
void OnRight();						// 右移
void OnZoomIn();					// 放大
void OnZoomOut();					// 缩小



/
// 函数定义
/

// 主函数
void main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值