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()