DEV-C++ ege.h库 绘图教程(七)

本文详细介绍了DEV-C++中的ege.h库,包括键盘按键检测、鼠标事件处理、getch和kbhit函数以及鼠标坐标获取等,为初学者提供绘图编程的基础输入操作指南。
摘要由CSDN通过智能技术生成

一、前情回顾

DEV-C++ ege.h库 绘图教程(一)

DEV-C++ ege.h库 绘图教程(二)

DEV-C++ ege.h库 绘图教程(三)

DEV-C++ ege.h库 绘图教程(四)

DEV-C++ ege.h库 绘图教程(五)

DEV-C++ ege.h库 绘图教程(六)

二、键盘鼠标输入

I.按键

1.keystate

判断是否按下某个键。

int keystate(int key);
key
在 key_code_e 枚举中定义的虚拟键码,参考 key_code_e 按键码。
如果是字母键或者数字键,则其虚拟键码与 大写字母的 ASCII 值相等。
比如 A 键,可以使用键码 key_A ,也可以使用数字 65 或者字符 'A'。

 2.key_code_e

key_code_e 枚举

定义按键键码

定义:

enum key_code_e
{
    key_mouse_l     = 0x01,  // 鼠标左键
    key_mouse_r     = 0x02,  // 鼠标右键
    key_mouse_m     = 0x04,  // 鼠标中键

    key_back        = 0x08,  // 退格键
    key_tab         = 0x09,  // Tab 键
    key_enter       = 0x0d,  // 回车键

    key_shift       = 0x10,  // Shift 键
    key_control     = 0x11,  // Ctrl 键

    key_menu        = 0x12,  // Alt 键
    key_pause       = 0x13,  // Pause 键

    key_capslock    = 0x14,  // 大写锁定键
    key_esc         = 0x1b,  // Esc 键
    key_space       = 0x20,  // 空格键

    key_pageup      = 0x21,  // PgUp, 向上翻页
    key_pagedown    = 0x22,  // PgDn, 向下翻页
    key_home        = 0x23,  // Home
    key_end         = 0x24,  // End 

    key_left        = 0x25,  // ←, 左方向键
    key_up          = 0x26,  // ↑, 上方向键
    key_right       = 0x27,  // →, 右方向键
    key_down        = 0x28,  // ↓, 下方向键

    key_print       = 0x2a,  // Print, 打印键
    key_snapshot    = 0x2c,  // Prt Sc, PrintScreen 截屏键
    
    key_insert      = 0x2d,  // Ins, 插入键
    key_delete      = 0x2e,  // Del, 删除键

    // 大键盘数字键
    key_0           = 0x30,
    key_1           = 0x31,
    key_2           = 0x32,
    key_3           = 0x33,
    key_4           = 0x34,
    key_5           = 0x35,
    key_6           = 0x36,
    key_7           = 0x37,
    key_8           = 0x38,
    key_9           = 0x39,

    // 字母键
    key_A           = 0x41,
    key_B           = 0x42,
    key_C           = 0x43,
    key_D           = 0x44,
    key_E           = 0x45,
    key_F           = 0x46,
    key_G           = 0x47,
    key_H           = 0x48,
    key_I           = 0x49,
    key_J           = 0x4a,
    key_K           = 0x4b,
    key_L           = 0x4c,
    key_M           = 0x4d,
    key_N           = 0x4e,
    key_O           = 0x4f,
    key_P           = 0x50,
    key_Q           = 0x51,
    key_R           = 0x52,
    key_S           = 0x53,
    key_T           = 0x54,
    key_U           = 0x55,
    key_V           = 0x56,
    key_W           = 0x57,
    key_X           = 0x58,
    key_Y           = 0x59,
    key_Z           = 0x5a,

    key_win_l       = 0x5b,  // 左 Windows 徽标键
    key_win_r       = 0x5c,  // 右 Windows 徽标键

    key_sleep       = 0x5f,  // 休眠键

    // 小键盘的九宫格数字键
    key_num0        = 0x60,
    key_num1        = 0x61,
    key_num2        = 0x62,
    key_num3        = 0x63,
    key_num4        = 0x64,
    key_num5        = 0x65,
    key_num6        = 0x66,
    key_num7        = 0x67,
    key_num8        = 0x68,
    key_num9        = 0x69,
    
    // 小键盘符号键
    key_multiply    = 0x6a,  // *,乘号键
    key_add         = 0x6b,  // +, 加号键
    key_separator   = 0x6c,  //    分割键
    key_subtract    = 0x6d,  // -, 减号键
    key_decimal     = 0x6e,  // ., 小数点
    key_divide      = 0x6f,  // /, 除号键

    // 键盘上方的12个 Fn 功能键
    key_f1          = 0x70,
    key_f2          = 0x71,
    key_f3          = 0x72,
    key_f4          = 0x73,
    key_f5          = 0x74,
    key_f6          = 0x75,
    key_f7          = 0x76,
    key_f8          = 0x77,
    key_f9          = 0x78,
    key_f10         = 0x79,
    key_f11         = 0x7a,
    key_f12         = 0x7b,

    key_numlock     = 0x90,  // NumLk, 小键盘数字锁定
    
    key_scrolllock  = 0x91,  // ScrLk, 滚动锁定键

    key_shift_l     = 0xa0,  // 左 Shift
    key_shift_r     = 0xa1,  // 右 Shift
    key_control_l   = 0xa2,  // 左 Ctrl
    key_control_r   = 0xa3,  // 右 Ctrl
    key_menu_l      = 0xa4,  // 左 Alt
    key_menu_r      = 0xa5,  // 右 Alt

    // 大键盘上的符号键
    key_semicolon   = 0xba,  // ; 分号键
    key_plus        = 0xbb,  // + 加号键
    key_comma       = 0xbc,  // , 逗号键
    key_minus       = 0xbd,  // - 减号键
    key_period      = 0xbe,  // . 句号键
    key_slash       = 0xbf,  // / 右斜杠键
    key_tilde       = 0xc0,  // ~ 波浪键
    key_lbrace      = 0xdb,  // [ 左方括号键
    key_backslash   = 0xdc,  // \ 反斜杠键
    key_rbrace      = 0xdd,  // ] 右方括号键
    key_quote       = 0xde,  // ' 引号键

    key_ime_process = 0xe5,

}key_code_e;

 II.键盘

1.key_msg(结构体)

功能:

用于保存键盘消息的结构体

声明:
typedef struct key_msg { UINT msg; UINT key; UINT flags; }key_msg; 
成员: msg 指定键盘消息类型,可为以下值:
含义
key_msg_down按键按下消息。
key_msg_up按键弹起消息。
key_msg_char(ege20.08 起)键盘字符输入消息。
key 如果是键盘消息类型是 key_msg_down 和 key_msg_up ,则表示按键虚拟键码。如果是 key_msg_char,则为 GBK 编码字符。 flags 按键标记,每个二进制位标记一种状态,可能为以下值的组合:
含义
key_flag_shift同时按下了 Shift 键
key_flag_ctrl同时按下了 Ctrl 键
key_flag_first_down(ege dev)按键按下后发送的第一个按下消息(按键长按时,利用此标志位可以将其与后面连续发送的按下消息区分开)

2.getch

 这个就很熟悉了吧,conio.h里都有。

他返回按下的键的ASCII码值。

while(1){
    if(getch()=='A') printf("You pressed A!!!\n");
}

3.kbhit

也是conio.h里的,返回是否按下键盘。

需要注意的是,graphics.h库和conio.h库不能同时#include,否则会报错(因为他们都有getch和kbhit,而ege库的getch是专门判窗口的键盘输入,所以不能混用)。

4.getkey

和getch没有任何区别,但返回值是key_msg。

5.kbmsg

和kbhit没有任何区别。

6.flushkey

功能:

清空键盘消息缓冲区。

声明:
void flushkey();

 III.鼠标

1.mouse_msg (结构体)

功能:

这个结构体用于保存鼠标消息

声明:
typedef struct mouse_msg { UINT msg; INT x; INT y; UINT flags; INT wheel; }mouse_msg; 

成员:

x 当前鼠标 x 坐标

y 当前鼠标 y 坐标

is_move() 是否鼠标移动消息,类型为bool

is_down() 是否鼠标按键按下消息,类型为

bool is_up() 是否鼠标按键放开消息,类型为bool

is_left() 是否鼠标左键消息,类型为

bool is_mid() 是否鼠标中键消息,类型为

bool is_right() 是否鼠标右键消息,类型为

bool is_wheel() 是否鼠标滚轮滚动消息,类型为

bool wheel 鼠标滚轮滚动值,一般情况下为 120 的倍数或者约数。

msg 不建议直接访问

flags 不建议直接访问

2.getmouse

功能:

获取一个鼠标消息。如果当前鼠标消息队列为空,就一直等待,直到有新消息产生。

声明:
mouse_msg getmouse();

3.mousemsg


功能:

检测当前是否有鼠标消息。

声明:
int mousemsg();

4.MOUSEMSG(结构体)

功能:

这个结构体用于保存鼠标消息

声明:
struct MOUSEMSG { UINT uMsg; // 当前鼠标消息 int mkCtrl; // Ctrl 键是否按下 int mkShift; // Shift 键是否按下 int mkLButton; // 鼠标左键是否按下 int mkMButton; // 鼠标中键是否按下 int mkRButton; // 鼠标右键是否按下 int x; // 当前鼠标 x 坐标 int y; // 当前鼠标 y 坐标 int wheel; // 鼠标滚轮滚动值 }; 
成员: uMsg: 指定鼠标消息类型,可为以下值:
含义
WM_MOUSEMOVE鼠标移动消息。
WM_MOUSEWHEEL鼠标滚轮拨动消息。
WM_LBUTTONDOWN左键按下消息。
WM_LBUTTONUP左键弹起消息。
WM_LBUTTONDBLCLK左键双击消息。
WM_MBUTTONDOWN中键按下消息。
WM_MBUTTONUP中键弹起消息。
WM_MBUTTONDBLCLK中键双击消息。
WM_RBUTTONDOWN右键按下消息。
WM_RBUTTONUP右键弹起消息。
WM_RBUTTONDBLCLK右键双击消息。

mkCtrl Ctrl 键是否按下

mkShift Shift 键是否按下

mkLButton 鼠标左键是否按下

mkMButton 鼠标中键是否按下

mkRButton 鼠标右键是否按下

x 当前鼠标 x 坐标

y 当前鼠标 y 坐标

wheel 鼠标滚轮滚动值,一般情况下为 120 的倍数或者约数。

5.mousepos

功能:

获取当前鼠标坐标。

声明:
int mousepos(int *x, int *y);
参数: x 用来接收横坐标 y 用来接收纵坐标 返回值: 0 示例:
if (keystate(key_mouse_l)) { // 鼠标左键按下了
    //获取鼠标当前位置坐标,放在变量mouse_x和mouse_y中 
    int mouse_x,mouse_y;
    mousepos(&mouse_x,&mouse_y);
    //在鼠标当前位置画一个半径为100的圆
    circle(&mouse_x,&mouse_y,100);
}

 6.showmouse

功能:

设置鼠标指针是否显示。

声明:
int showmouse(int bShow);
参数: bShow 是否显示鼠标指针,取以下值:
含义
FALSE (0)不显示鼠标指针
TRUE (1)显示鼠标指针

(初始化后,鼠标指针默认设置为显示) 返回值: 上一次调用时设置的值,第一次调用的话返回 1。

7.flushmouse


功能:

清空鼠标消息缓冲区。

声明:
void flushmouse(); 

8.FlushMouseMsgBuffer


功能:

清空鼠标消息缓冲区。

声明:
void FlushMouseMsgBuffer();

9.GetMouseMsg

功能:
这个函数用于获取一个鼠标消息。如果当前鼠标消息队列中没有,就一直等待。

声明:
MOUSEMSG GetMouseMsg();

三、附录

键盘鼠标输入函数:

typedef struct key_msg {
	int             key;
	key_msg_e       msg;
	unsigned int    flags;
}key_msg;

typedef struct mouse_msg {
	int             x;
	int             y;
	mouse_msg_e     msg;
	unsigned int    flags;
	int             wheel;
	bool is_left() { return (flags & mouse_flag_left) != 0; }
	bool is_right() { return (flags & mouse_flag_right) != 0; }
	bool is_mid() { return (flags & mouse_flag_mid) != 0; }
	bool is_down() { return msg == mouse_msg_down; }
	bool is_up() { return msg == mouse_msg_up; }
	bool is_move() { return msg == mouse_msg_move; }
	bool is_wheel() { return msg == mouse_msg_wheel; }
}mouse_msg;


// 鼠标消息
struct MOUSEMSG {
	UINT uMsg;              // 当前鼠标消息
	bool mkCtrl;            // Ctrl 键是否按下
	bool mkShift;           // Shift 键是否按下
	bool mkLButton;         // 鼠标左键是否按下
	bool mkMButton;         // 鼠标中键是否按下
	bool mkRButton;         // 鼠标右键是否按下
	short x;                // 当前鼠标 x 坐标
	short y;                // 当前鼠标 y 坐标
	short wheel;            // 鼠标滚轮滚动值(120为基数)
};



//鼠标处理函数
int         EGEAPI mousemsg();                  // 检查是否存在鼠标消息
mouse_msg   EGEAPI getmouse();                  // 获取一个鼠标消息。如果没有,就等待
EGE_DEPRECATE(GetMouseMsg)
MOUSEMSG    EGEAPI GetMouseMsg();               // (不推荐使用的函数)获取一个鼠标消息。如果没有,就等待

void        EGEAPI flushmouse();                // 清空鼠标消息缓冲区
int         EGEAPI showmouse(int bShow);        // 设置是否显示鼠标
int         EGEAPI mousepos(int *x, int *y); // 获取当前鼠标位置


//键盘处理函数
int     EGEAPI kbmsg();
key_msg EGEAPI getkey();
EGE_DEPRECATE(getchEx)
int     EGEAPI getchEx(int flag);
EGE_DEPRECATE(kbhitEx)
int     EGEAPI kbhitEx(int flag);
int     EGEAPI keystate(int key);       // 获得键码为key的键(见key_code_e)是否按下,如果key使用鼠标按键的键码,则获得的是鼠标键状态
void    EGEAPI flushkey();              // 清空键盘消息缓冲区

#if !defined(_INC_CONIO) && !defined(_CONIO_H_)
#define _INC_CONIO
#define _CONIO_H_
int EGEAPI getch();
int EGEAPI kbhit();
#else
#define getch getchEx
#define kbhit kbhitEx
#endif

typedef enum key_code_e {
	key_mouse_l     = 0x01,
	key_mouse_r     = 0x02,
	key_mouse_m     = 0x04,
	key_back        = 0x08,
	key_tab         = 0x09,
	key_enter       = 0x0d,
	key_shift       = 0x10,
	key_control     = 0x11,
	key_menu        = 0x12,
	key_pause       = 0x13,
	key_capslock    = 0x14,
	key_esc         = 0x1b,
	key_space       = 0x20,

	key_pageup      = 0x21,
	key_pagedown    = 0x22,
	key_home        = 0x23,
	key_end         = 0x24,

	key_left        = 0x25,
	key_up          = 0x26,
	key_right       = 0x27,
	key_down        = 0x28,

	key_print       = 0x2a,
	key_snapshot    = 0x2c,
	key_insert      = 0x2d,
	key_delete      = 0x2e,

	key_0           = 0x30,
	key_1           = 0x31,
	key_2           = 0x32,
	key_3           = 0x33,
	key_4           = 0x34,
	key_5           = 0x35,
	key_6           = 0x36,
	key_7           = 0x37,
	key_8           = 0x38,
	key_9           = 0x39,

	key_A           = 0x41,
	key_B           = 0x42,
	key_C           = 0x43,
	key_D           = 0x44,
	key_E           = 0x45,
	key_F           = 0x46,
	key_G           = 0x47,
	key_H           = 0x48,
	key_I           = 0x49,
	key_J           = 0x4a,
	key_K           = 0x4b,
	key_L           = 0x4c,
	key_M           = 0x4d,
	key_N           = 0x4e,
	key_O           = 0x4f,
	key_P           = 0x50,
	key_Q           = 0x51,
	key_R           = 0x52,
	key_S           = 0x53,
	key_T           = 0x54,
	key_U           = 0x55,
	key_V           = 0x56,
	key_W           = 0x57,
	key_X           = 0x58,
	key_Y           = 0x59,
	key_Z           = 0x5a,
	key_win_l       = 0x5b,
	key_win_r       = 0x5c,

	key_sleep       = 0x5f,

	key_num0        = 0x60,
	key_num1        = 0x61,
	key_num2        = 0x62,
	key_num3        = 0x63,
	key_num4        = 0x64,
	key_num5        = 0x65,
	key_num6        = 0x66,
	key_num7        = 0x67,
	key_num8        = 0x68,
	key_num9        = 0x69,

	key_multiply    = 0x6a,
	key_add         = 0x6b,
	key_separator   = 0x6c,
	key_subtract    = 0x6d,
	key_decimal     = 0x6e,
	key_divide      = 0x6f,

	key_f1          = 0x70,
	key_f2          = 0x71,
	key_f3          = 0x72,
	key_f4          = 0x73,
	key_f5          = 0x74,
	key_f6          = 0x75,
	key_f7          = 0x76,
	key_f8          = 0x77,
	key_f9          = 0x78,
	key_f10         = 0x79,
	key_f11         = 0x7a,
	key_f12         = 0x7b,

	key_numlock     = 0x90,
	key_scrolllock  = 0x91,

	key_shift_l     = 0xa0,
	key_shift_r     = 0xa1,
	key_control_l   = 0xa2,
	key_control_r   = 0xa3,
	key_menu_l      = 0xa4,
	key_menu_r      = 0xa5,

	key_semicolon   = 0xba,
	key_plus        = 0xbb,
	key_comma       = 0xbc,
	key_minus       = 0xbd,
	key_period      = 0xbe,
	key_slash       = 0xbf,
	key_tilde       = 0xc0,
	key_lbrace      = 0xdb,
	key_backslash   = 0xdc,
	key_rbrace      = 0xdd,
	key_quote       = 0xde,

	key_ime_process = 0xe5,
}key_code_e;

typedef enum key_msg_e {
	key_msg_down    = 1,
	key_msg_up      = 2,
	key_msg_char    = 4,
}key_msg_e;
typedef enum key_flag_e {
	key_flag_shift  = 0x100,
	key_flag_ctrl   = 0x200,
}key_flag_e;

typedef enum mouse_msg_e {
	mouse_msg_down      = 0x10,
	mouse_msg_up        = 0x20,
	mouse_msg_move      = 0x40,
	mouse_msg_wheel     = 0x80,
}mouse_msg_e;

typedef enum mouse_flag_e {
	mouse_flag_left     = 1,
	mouse_flag_right    = 2,
	mouse_flag_mid      = 4,
	mouse_flag_shift    = 0x100,
	mouse_flag_ctrl     = 0x200,
}mouse_flag_e;

 四、Finish Gracefully

那么今天我们讲了鼠标键盘输入函数,整体是比较简单的。

下次,我们将会讲解设置绘图环境的函数,敬请期待!

(懒得放链接了,看最上面吧)

函数手册:FunLib.docx 创建三维动画工程教程:lesson1.docx ASCII码格式的STL模型:STLASCII.rar 主要特点和功能: 1.标准NOI竞赛环境,编译器为GCC4.8.4 2.基于opengl三维动画引擎,实现三维图形、动画的绘制 3.支持语音交互功能,实现可以语音对话的弱人工智能 4.封装了常用的游戏功能,轻松地开发桌面小游戏 5.完善的数据管理,编写好的代码可以分门别类保存 6.支持多线程操作,轻松地开发多线程软件 7.支持Pascal语言转换C++语言 8.支持C++11规范 9.支持一百多种皮肤设置,可DIY皮肤 10.支持导入STL格式的3D打印文件 11.支持实时绘图模式【命令:Cmd.Input();】 12.代码提示及代码自动完成功能【快捷键:Alt+Backspace】 13.代码自动格式化【保存及编译运行时】 14.支持导入STL格式的3D打印文件 15.支持用户自定义源代码模板 16.支持高精度运算和进制转换 17.自带C++函数参考手册 18.支持数据代码查询 19.集成在线题和论坛 20.链接C++语言入门视频 21.简单的单机评测功能 可能出现的问题: 1.在打开文件或其它子窗体时,可能因为某些输入法的冲突导致子窗体卡在下层,解决办法是按Ctrl+Alt+Del键打开任务管理器,即可见到子窗体。 2.支持Win7,Win8,Win10,强烈建议win10,更低的版本不支持。 3.如果因之前版本的卸载不干净,使用中可能会弹出找不到某文件的对话框,此时打开软件菜单的工具栏,点击环境选项,在文件和路径栏里点击删除设置并退出按钮,然后再重新默认设置即可。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值