ege图形库--交互(五)

//用户交互——键盘1
#include 

//这个例子需要这个头文件
#include 

int main()
{
	initgraph(640, 480);

	setfont(18, 0, "宋体");
	outtextxy(0, 0, "please press any key");

	int k = 0;
	for ( ; k != key_esc; ) // key_esc是ege定义的按键常数
	{
		char str[32];
		//等待用户按键,并把得到的按键给k
		//如果你不想等待,可以在调用getch之前,使用kbhit检测是否有按键按下
		//如 if ( kbhit() ) k = getch();
		k = getch();

		//格式化输出为字符串,用于后面输出
		sprintf(str, "%c %3d", k, k);

		cleardevice();
		outtextxy(0, 0, str);
	}

	closegraph();
	return 0;
}

这个程序实现了一个挺有用的功能,就是按键输入,把所输入的key值给显示出来。
按下回车键:因为回车本身不可显
ege图形库--交互(五)_第1张图片
按下F1
ege图形库--交互(五)_第2张图片
按下退格键:
ege图形库--交互(五)_第3张图片
up键:
在这里插入图片描述
down键:
在这里插入图片描述
left键:
在这里插入图片描述
right键:
在这里插入图片描述
空格键:
在这里插入图片描述
在头文件里有完整定义:
ege图形库--交互(五)_第4张图片
这里key_mouse_l和key_mouse_r没看懂。

鼠标交互
//用户交互——鼠标2
#include 

#include 

int main()
{
	initgraph(640, 480);

	setfont(18, 0, "宋体");

	mouse_msg msg = {0};
	for ( ; is_run(); delay_fps(60))
	{
		//获取鼠标消息,这个函数会等待,等待到有消息为止
		//类似地,有和kbhit功能相近的函数MouseHit,用于检测有没有鼠标消息
		while (mousemsg())
		{
			msg = getmouse();
		}

		//格式化输出为字符串,用于后面输出
		//msg和flag常数请参考文档或者mouse_msg_e, mouse_flag_e的声明

		cleardevice();
		xyprintf(0, 0, "x = %10d  y = %10d",
			msg.x, msg.y, msg.wheel);
		xyprintf(0, 20, "move  = %d down  = %d up    = %d",
			(int)msg.is_move(),
			(int)msg.is_down(),
			(int)msg.is_up());
		xyprintf(0, 40, "left  = %d mid   = %d right = %d",
			(int)msg.is_left(),
			(int)msg.is_mid(),
			(int)msg.is_right());
		xyprintf(0, 60, "wheel = %d  wheel rotate = %d",
			(int)msg.is_wheel(),
			msg.wheel);
	}

	closegraph();
	return 0;
}

ege图形库--交互(五)_第5张图片
mousemsg()函数 如果存在鼠标消息,返回 1;否则返回 0。
mouse_msg 是个结构体,官方定义了一些成员。
typedef struct mouse_msg {
UINT msg;
INT x;
INT y;
UINT flags;
INT wheel;
}mouse_msg;

不过不建议直接访问flags和msg,而是通过方法访问,这里使用了面向对象的技术。

is_move()
是否鼠标移动消息,类型为bool
is_down()
是否鼠标按键按下消息,类型为bool
is_up()
是否鼠标按键放开消息,类型为bool

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

is_wheel()
是否鼠标滚轮滚动消息,类型为bool
wheel
鼠标滚轮滚动值,一般情况下为 120 的倍数或者约数。

左右键和按下放开的区别在于前者只点击,后者是按住不放。

对于鼠标位置,除了直接访问结构体msg.x,msg.y之外,还可以调用函数mousepos(&x, &y)来访问。不过这方法也不方便,它不是通过返回值,而是通过传参int x, y来获取位置。

你可能感兴趣的:(图形库系统)