codeblock图形界面编程(八)基于ege库的交互设计
上文我们利用EGE库实现了交互中的鼠标接口,本文实现键盘的接口控制,这样我们就可以通过键盘和鼠标,一块控制程序的执行,实现流程控制、图形动态绘制,就可以设计一些功能更为复杂的程序了。
键盘的交互
获取按键信息方法1
前面我们已经使用过了getch()函数 ,利用此函数,可以获取用户所按按键的键值,实现代码如下:
int c = getch(); //获取按键的值,放到c中
xyprintf(0, 100, "key = %5d ",c);//
例如数字按键1到0,对应的键码为其ASCII的值0x31到0x3A,其他按键类似,下图给出了按键的键码定义:
获取按键信息方法2
利用getkey();函数,该函数获取的信息更多,其定义为:
key_msg getkey();
函数返回 key_msg 类型的结构体,此结构体定义如下:
struct key_msg {
UINT msg;
UINT key;
UINT flags;
};
结构员定义如下:
msg :键盘消息,有key_msg_down,key_msg_up和key_msg_char三种值,
// 消息定义如下:
typedef enum key_msg_e {
key_msg_down = 1, // 按键按下
key_msg_up = 2, // 按键抬起
key_msg_char = 4, // 字符输入
} key_msg_e;
key: 按键码,和getch()的键码一致
flags: 参数key_flag_shift,key_flag_ctrl,用来指示辅助键Shift和Ctrl是否被按下的。如果对应位上为1,那就辅助键被按下。定义如下:
typedef enum key_flag_e {
key_flag_shift = 0x100,
key_flag_ctrl = 0x200,
}key_flag_e;
实现代码:
key_msg k = {0};
char s[50];
k = getkey(); // 获取按键信息,若没有按键会一直等待。
//打印键盘按下和抬起过程中 key_msg结构体重的值
printf("key = %5d msg=%d flag=%d\n",k.key,k.msg,k.flags);
运行结果:
例如按下并抬起数字1键时,显示:
分别对应key_msg_down,key_msg_char和key_msg_up。
按下ctrl+a并抬起时,显示如下:
其他按键消息类似,朋友们可以实际试试。