C/C++/EasyX——入门图形编程(4)

【说明】紧接上文(。・ω・。),好了,接下来,就让我们开始学习图像处理和获取鼠标消息的函数吧。(各位友友们不要着急,想在短时间内就想做小游戏或者写出各种好看的画面是不简单的,我们就把它当作一种兴趣一起来学习,慢慢掌握基础知识吧(^v^))

其实这篇文章讲的就是如何在窗口上显示图像以及如何获取鼠标消息,友友们要是想偷点懒,前一个知识点就直接看代码吧,这些文字说实话,有点用处但也不是说,不看就有什么很大影响一样。(^~^)ヽ(*≧ω≦)ノ

--------------------------------------------------------正文-------------------------------------------------------------------

目录

一:图像处理函数的介绍

一(1):图像处理函数

1. loadimage(1,2,3,4,5)—从文件中读取图像

2. ptimage(1,2,3,4)—在当前设备上绘制指定图像

一(2):图像处理函数应用实例

二:鼠标消息函数的介绍

二(1):鼠标消息函数应用实例

1.老版系统的鼠标操作

2.新版系统的鼠标操作     

三:说明


一:图像处理函数的介绍

图像处理函数用于在窗口上显示图片,在使用图像之前,需要定义一个变量(对象),然后把图片加载进变量才能使用。  平时定义变量,使用的都是基础的数据类型,比如 int、double……,在使用图像的时候,需要使用 EastX 提供给我们的数据类型:IMAGE,比如 IMAGE img。

一(1):图像处理函数

主要就是两个——loadimage(1,2,3,4,5),ptimage(1,2,3,4)。因为里面的参数不太容易看,这里就用数字来代替了。

1. loadimage(1,2,3,4,5)—从文件中读取图像

1保存图像的 IMAGE 对象指针
2图片的文件名
3图片的拉伸宽度(不写的话默认为0,即不拉伸)
4图片的拉伸高度(不写的话默认为0,即不拉伸)
5是否调整 IMAGE 的大小以适应图片

2. ptimage(1,2,3,4)—在当前设备上绘制指定图像

1绘制位置的 x 坐标
2绘制位置的 y 坐标
3要绘制的 IMAGE 对象指针
4三元光栅操作码(不用管)

一(2):图像处理函数应用实例

【代码如下】

#include <stdio.h>
#include <graphics.h>
int main()
{
	initgraph(400, 200);
	setbkcolor(WHITE);
	cleardevice();

	//输出图片
	IMAGE img;//定义一个(变量)对象
	//加载图片
	//相对路径: ./表示当前文件下, ../表示文件夹的上一级目录,一般用 ./
	loadimage(&img, "./yb.png",250,150);
	putimage(0, 0, &img);

	getchar();
	closegraph(); 
	return 0;
}

【说明】这个图片是要放在你所建立的这个工程文件中的,还有它的名称要确保正确。打开文件,将你的图片保存在这个文件夹中即可,如图,还可以看到这个文件的项目类型,注意,写代码时图片的文件名是要包含项目类型的。

二:鼠标消息函数的介绍

鼠标消息函数用于获取鼠标的信息,鼠标信息需要使用 MOUSEMSG 类型,比如,MOUSEMSG msg。然后就用 MouseHit()判断是否有鼠标信息(左键、右键、中间、移动)

如果有鼠标消息,就可以进行接收鼠标信息了 msg=GetMouseMsg();

鼠标消息的主要成员:

uMsg——当前鼠标消息;x——当前鼠标 x 坐标;y——当前鼠标 y 坐标.。

其中 uMsg 可以用来判断当前鼠标消息是什么消息

主要的两个消息:WM_LBUTTONDOWN——鼠标左键消息

                             WM_RBUTTONDOWN——鼠标右键消息

二(1):鼠标消息函数应用实例

1.老版系统的鼠标操作

【代码如下】

#include <stdio.h>
#include <graphics.h>
int main()
{
	initgraph(400, 300);
	setbkcolor(WHITE);
	cleardevice();
    setfillcolor(YELLOW);
	setlinecolor(BLACK);
	fillrectangle(100, 50, 300, 150);
	settextcolor(RED);
    
	//鼠标消息
	while (1)
	{
		if (MouseHit())//存在鼠标消息
		{
			MOUSEMSG msg = GetMouseMsg();
			//消息分发
			switch (msg.uMsg)
			{
//鼠标按键时要在窗口内按键,才会显示是左键还是右键
			case WM_LBUTTONDOWN:
				outtextxy(250, 200, "鼠标左键按下");
						break;
			case WM_RBUTTONDOWN:
				outtextxy(250, 200, "鼠标右键按下");
						break;
			}
		}
	}

	getchar();
	closegraph(); 
	return 0;
}

                                 

当然,也可以在上面代码上稍微做一下改动,改动的代码在24,25,28,31,32,34行上

#include <stdio.h>
#include <graphics.h>
int main()
{
	initgraph(400, 300);
	setbkcolor(WHITE);
	cleardevice();
    setfillcolor(YELLOW);
	setlinecolor(BLACK);
	fillrectangle(100, 50, 300, 150);
	settextcolor(RED);
    
	//鼠标消息
	while (1)
	{
		if (MouseHit())//存在鼠标消息
		{
			MOUSEMSG msg = GetMouseMsg();
			//消息分发
			switch (msg.uMsg)
			{
			case WM_LBUTTONDOWN:
//当在矩形内部点击鼠标按键时,打印出 Hello World!
				if (msg.x > 100 && msg.x < 300 && msg.y>50 && msg.y < 150)
					printf("Hello World!\n");
				outtextxy(250, 200, "鼠标左键按下");
//每次在窗口内点击鼠标时,都输出点击位置的坐标
				printf("坐标(%d,%d)\n", msg.x, msg.y);
						break;
			case WM_RBUTTONDOWN:
				if (msg.x > 100 && msg.x < 300 && msg.y>50 && msg.y < 150)
					printf("Hello World!\n");
				outtextxy(250, 200, "鼠标右键按下");
				printf("坐标(%d,%d)\n", msg.x, msg.y);
						break;
			}
		}
	}

	getchar();
	closegraph(); 
	return 0;
}

             

2.新版系统的鼠标操作     

 和老版不同的是应用的函数不同,下面注释中有三处感叹号,是不同的地方。最后运行出的结果是一样的。

#include <stdio.h>
#include <easyx.h>
int main()
{
	initgraph(400, 300);
	setbkcolor(WHITE);
	cleardevice();
    setfillcolor(YELLOW);
	setlinecolor(BLACK);
	fillrectangle(100, 50, 300, 150);
	settextcolor(RED);
    
	//鼠标消息
	while (1)
	{
		ExMessage msg;//!!
		if (peekmessage(&msg, WH_MOUSE))//!!
//有鼠标消息,返回真,否则,返回假
		{
			switch (msg.message)//!!
			{
			case WM_LBUTTONDOWN:
				if (msg.x > 100 && msg.x < 300 && msg.y>50 && msg.y < 150)
					printf("Hello World!\n");
				outtextxy(250, 200, "鼠标左键按下");
				//每次在窗口内点击鼠标时,都输出点击位置的坐标
				printf("坐标(%d,%d)\n", msg.x, msg.y);
				break;
			case WM_RBUTTONDOWN:
				if (msg.x > 100 && msg.x < 300 && msg.y>50 && msg.y < 150)
					printf("Hello World!\n");
				outtextxy(250, 200, "鼠标右键按下");
				printf("坐标(%d,%d)\n", msg.x, msg.y);
				break;
			default:
				break;
			}
		}

	}

	getchar();
	closegraph(); 
	return 0;
}

三:说明

希望友友们这一篇学的顺利哦 (。・ω・。) ,大家平常在电脑上打游戏时需要鼠标操作的,那么下一篇就要讲一些鼠标操作函数了,希望我们一起学的开心,友友们动个小手点个赞,给我一点动力吧(^v^)。回见!(>y<)(⌒▽⌒)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.jc7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值