EasyX

#include 
using namespace std;
#include 

//定义消息结构体变量
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)