随想录(easyx中的键盘输入和鼠标消息)

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】 

    我曾经写过一篇关于easyx的blog,地址在。easyx是基于win32 api最简单的图形库。它按照graphic头文件给大家提供简洁的API接口,使用起来非常方便。基本上,只需要几行代码,就可以画出一个图形,比如这样,

int main()
{
	initgraph(600, 800);
	circle(100, 100, 100);
	_getch();
	closegraph();
}

    当然,今天我们文章的目的不是输出一个图形,而是怎么控制图形。比如,如果用键盘控制图形。目前在easyx上面有_kbhit()和_getch()两个函数,前者是非阻塞函数,通知是否有key按下,后者是阻塞函数,通知按下的是什么字符。比如,我们可以这么操作,

		while (!_kbhit());
		val  = _getch();

		i = 0;
		j = 0;

		if ('a' == val)
			i = -10;
		else if ('w' == val)
			j = -10;
		else if ('d' == val)
			i = 10;
		else if ('s' == val)
			j = 10;

    除了键盘输入,easyx还支持鼠标输入,比如我们可以从GetMouseMsg函数获取鼠标信息,这是一个阻塞函数,

		m = GetMouseMsg();
		i = 0;
		j = 0;

		switch (m.uMsg)
		{
		case WM_MOUSEMOVE:
			i = 10;
			break;

		case WM_LBUTTONDBLCLK:
		case WM_LBUTTONDOWN:
		case WM_LBUTTONUP:
			i = -10;
			break;

		case WM_RBUTTONDBLCLK:
		case WM_RBUTTONDOWN:
		case WM_RBUTTONUP:
			j = 10;
			break;

		case WM_MOUSEWHEEL:
			j = -10;
			break;

		default:
			break;
		}

    鼠标的详细信息也很多,大家可以参考这个数据结构,

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 的倍数)
};

    为了保证圆心不在窗口之外,还必须给x、y加上一些限制条件,即x和y都不能小于100、大于500,

		cleardevice();
		
		x = x + i;
		y = y + j;
		if (x < 100) x = 100;
		if (x > 500) x = 500;
		if (y < 100) y = 100;
		if (y > 500) y = 500;

		circle(x, y, 100);

    上面的例子只是一个简单的实例,想偷懒的朋友可以获取参考这个完整的代码,

int main()
{
	initgraph(600, 800);
	circle(100, 100, 100);
	int x = 100;
	int y = 100;
	int i = 0;
	int j = 0;
	char val;
	MOUSEMSG m;

	while (1)
	{
		
		#if 0
		while (!_kbhit());
		val  = _getch();

		i = 0;
		j = 0;

		if ('a' == val)
			i = -10;
		else if ('w' == val)
			j = -10;
		else if ('d' == val)
			i = 10;
		else if ('s' == val)
			j = 10;
		#else

		m = GetMouseMsg();
		i = 0;
		j = 0;

		switch (m.uMsg)
		{
		case WM_MOUSEMOVE:
			i = 10;
			break;

		case WM_LBUTTONDBLCLK:
		case WM_LBUTTONDOWN:
		case WM_LBUTTONUP:
			i = -10;
			break;

		case WM_RBUTTONDBLCLK:
		case WM_RBUTTONDOWN:
		case WM_RBUTTONUP:
			j = 10;
			break;

		case WM_MOUSEWHEEL:
			j = -10;
			break;

		default:
			break;
		}
		#endif

		cleardevice();
		
		x = x + i;
		y = y + j;
		if (x < 100) x = 100;
		if (x > 500) x = 500;
		if (y < 100) y = 100;
		if (y > 500) y = 500;

		circle(x, y, 100);

	}
	_getch();
	closegraph();
}

    今天的例子比较简单,其主要目的不在于这几行代码,而是希望可以帮助大家建立学习图形的兴趣,写出更多好玩、实用的应用。从学习中找到乐趣、取得进步。

扫描二维码关注公众号,回复: 8831578 查看本文章
发布了556 篇原创文章 · 获赞 3622 · 访问量 473万+

猜你喜欢

转载自blog.csdn.net/feixiaoxing/article/details/102965449