EasyX

#include <iostream>
using namespace std;
#include <easyx.h>

//定义消息结构体变量
ExMessage msg = { 0 };

void drawShape()//绘制图形
{
	//绘制一个点
	putpixel(50, 50, RED);

	//设置线条颜色
	setlinecolor(BLUE);

	//设置线条的样式
	setlinestyle(PS_SOLID, 3);

	//绘制一条线
	line(0, 0, getwidth(), getheight());

	//设置填充颜色 
	setfillcolor(YELLOW);

	//绘制一个正矩形
	rectangle(100, 0, 100 + 50, 0 + 50);//无填充矩形
	fillrectangle(100, 50, 100 + 50, 50 + 50);//填充矩形
	solidrectangle(100, 100, 100 + 50, 100 + 50); //无边框填充矩形

	//绘制一个圆角矩形
	roundrect(160, 0, 160 + 50, 0 + 50, 10, 10);
	fillroundrect(160, 50,  160 + 50, 50 + 50, 10, 10);
	solidroundrect(160, 100,  160 + 50, 100 + 50, 10, 10);

	//绘制一个圆形
	circle(50, 50, 50);
	fillcircle(50, 150, 50);
	solidcircle(50, 250, 50);

	//椭圆
	ellipse(200, 0, 200 + 50, 0 + 100);
	fillellipse(200, 200, 200 + 50, 200 + 100);
	solidellipse(200, 300, 200 + 50, 300 + 100);

	//绘制折线条
	POINT points[] = { {0,0}, {20,20},{50, 80},{10,60} };
	polyline(points, 4);
}

void drawText()//绘制文字
{
	printf("hello EasyX!");
	//设置文字大小
	settextstyle(48, 0, _T("微软雅黑"));

	//设置文字颜色
	settextcolor(BROWN);

	//设置背景模式
	setbkmode(TRANSPARENT);//TRANSPARENT透明

	//绘制文字
	outtextxy(10, 10, "hello EasyX!");
	//error C2665: "outtextxy”: 2个重载中没有一个可以转换所有参数类型
	//Easyx与字符串相关的函数,都有字符集问题UNICODE 多字节字符集
	/*三种解决方法:
	* 1,在字符串的前面使用L进行转换	强制转换
	* 2,用带参宏(_ _T(),_ _TEXT())把字符串包裹起来	自适应转换	推荐使用这种
	* 3,菜单栏->项目->属性- >高级- >字符集- >把UNICODE改为多字节字符集 大力推荐这一种
	*/


	settextstyle(30, 0, "微软雅黑");
	//现在有一个int类型的分数,需要输出到图形界面上面
	int score = 66;
	char str[50] = "";
	sprintf(str, "Score:%d", score);
	outtextxy(getwidth() - 100, 0, str);
}

void centerText()//文字居中
{
	//来一个矩形
	int rx = 30;
	int ry = 380;
	int rw = 200;
	int rh = 60;
	setfillcolor(RGB(230, 231, 232));
	fillrectangle(rx, ry, rx + rw, ry + rh);

	//绘制文字
	settextcolor(RED);
	char str[] = "Center Text";
	int hSpace = (rw - textwidth(str)) / 2;
	int vSpace = (rh - textheight(str)) / 2;
	outtextxy(rx + hSpace, ry + vSpace, str);
}

//mx,my是否在指定的矩形区域
bool inArea(int mx, int my, int x, int y, int w, int h)
{
	if (mx > x && mx<x + w && my>y && my < y + h)
	{
		return true;
	}
	return false;
}

bool button(int x, int y, int w, int h, const char* text)
{
	if (inArea(msg.x, msg.y, x, y, w, h))
	{
		setfillcolor(RGB(93, 107, 153));
	}
	else
	{
		setfillcolor(RGB(230, 231, 232));
	}

	//绘制按钮
	fillroundrect(x, y, x + w, y + h, 5, 5);

	//绘制按钮文本
	int hSpace = (w -textwidth(text)) / 2;
	int vSpace = (h - textheight(text)) / 2;
	outtextxy(x + hSpace, y + vSpace, text);

	//判断按钮是否被点击
	if (msg.message == WM_LBUTTONDOWN && inArea(msg.x, msg.y, x, y, w, h))
	{
		return true;
	}
	else
	{
		return false;
	}
}


int main()
{
	//创建一个图形窗口宽度*高度
	initgraph(640, 480, EX_SHOWCONSOLE | EX_DBLCLKS);//EX_DBLCLKS双击消息

	// 设置窗口的背景颜色
	setbkcolor(BLUE);

	//用设置的背景颜色填充整个窗口
	cleardevice();

	//窗口的坐标体系:窗口左上角是坐标原点,x轴向右增大,y轴向下增大

	while (true)
	{
		//获取消息
		if (peekmessage(&msg, EX_MOUSE))
		{
			switch (msg.message)
			{
			case WM_LBUTTONDOWN:	//左键按下
				printf("左键按下 pos (%d ,%d) \n", msg.x, msg.y);
				break;
			case WM_RBUTTONDOWN:	//右键按下
				printf("右键按下");
				break;
			case WM_MBUTTONDOWN:	//中键按下
				printf("中键按下");
				break;
			case WM_MOUSEWHEEL:	//滚轮滚动
				printf("滚轮滚动 dir (%d) \n", msg.wheel);
				break;
			case WM_LBUTTONDBLCLK:	//左键双击
				printf("左键双击");
				break;
			}
		}
	}

	while (true)
	{
		//获取消息
		if (peekmessage(&msg, EX_MOUSE))
		{

		}
		//双缓冲绘图:所有的绘图代码必须放在begin和end之间
		BeginBatchDraw();
		cleardevice();//清屏
		if (button(20, 20, 150, 35, "Start Game"))
		{
			printf("Start Game!\n");
		}
		EndBatchDraw();

		//把消息清空
		msg.message = 0;
		
	}

	//防止程序退出
	getchar();
	int arr[10] = { 0 };

	return 0;
}
### 关于EasyX图形库的使用教程和下载 #### EasyX图形库简介 EasyX 是一款专为 C/C++ 开发者设计的轻量级图形库,旨在简化 Windows 平台上的图形编程过程[^2]。它通过对复杂的 Windows GDI(Graphics Device Interface)进行封装,提供了一套简单易用的接口供开发者调用。 --- #### EasyX图形库的基础使用教程 ##### 1. 创建图形窗口 要使用 EasyX 进行开发,首先需要引入头文件 `graphics.h`,并通过 `initgraph()` 函数初始化一个图形窗口。以下是创建图形窗口的基本代码示例: ```cpp #include <graphics.h> int main() { initgraph(640, 480); // 初始化一个宽640像素、高480像素的窗口 Sleep(2000); // 让窗口停留两秒 closegraph(); // 关闭图形窗口 return 0; } ``` 此部分涉及的内容可以参考相关文档中的章节说明[^1]。 ##### 2. 设置窗口属性 可以通过一系列函数调整窗口的颜色和其他视觉效果。例如: - 使用 `setbkcolor(color)` 设置背景颜色; - 使用 `cleardevice()` 清除当前设备上下文并刷新屏幕。 ```cpp setbkcolor(RGB(255, 255, 255)); // 将背景设为白色 cleardevice(); ``` 这部分内容同样可以在基础教程中找到更详尽的描述[^1]。 ##### 3. 基本绘图功能 EasyX 提供了丰富的绘图工具,支持绘制直线、圆形以及填充区域等功能。 - **画线**:`line(x1, y1, x2, y2)` - **画圆**:`circle(xc, yc, r)` - **画矩形**:`rectangle(x1, y1, x2, y2)` 下面是一个综合的例子展示如何利用这些函数绘制几何形状: ```cpp #include <graphics.h> void drawShapes() { setcolor(BLUE); line(50, 50, 150, 150); setcolor(GREEN); circle(200, 200, 50); setfillcolor(YELLOW); solidrectangle(300, 300, 400, 400); } int main() { initgraph(500, 500); drawShapes(); getchar(); // 防止窗口关闭 closegraph(); return 0; } ``` 更多细节可查阅具体绘图方法介绍^。 ##### 4. 实现贴图功能 对于图像处理需求,EasyX 支持加载外部图片到内存,并将其渲染至指定位置。如果原图尺寸过大,则需考虑缩放技术以适应目标窗口大小[^4]。 ```cpp IMAGE img; loadimage(&img, "example.png"); putimage(0, 0, &img); ``` 此外还提供了双缓冲机制减少闪烁现象的发生,这有助于提升用户体验质量. --- #### 如何获取或安装EasyX? 访问官方网站或者第三方镜像站点即可免费获得最新版本的 EasyX 库及其配套资料包[^3]。一般情况下,只需按照提示完成必要的配置步骤就能顺利集成进 Visual Studio 等主流 IDE 工具链当中去。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

甘-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值