EasyX图形库

EasyX图形库:

此图形库是针对C++的图形库,可以帮助初学者制作简单的图形以及游戏编程。本人也是一名语言的初学者,目的想记录学习的历程以及基本使用方法。
下载和安装在此不作说明,本文是以使用手册为基准,对函数的一些使用和注意事项进行说明。

一.第一个程序

基本上都是以画一个⚪为例。

#include 		// 引用图形库头文件
#include 
int main()
{
	initgraph(640, 480);	// 创建绘图窗口,大小为 640x480 像素(单位是像素)
	circle(200, 200, 100);	// 画圆,圆心(200, 200),半径 100
	_getch();				// 按任意键继续目的是让窗体停下来
	closegraph();			// 关闭绘图窗口
	return 0;
}

好了这就是我们第一个代码。

二.基本函数的使用和说明.

1.创建一个窗口initgraph()

#include
int main()
{
	initgraph(640, 480);创建窗口大小
	system("pause");//另一种使窗口停住的方法
	closegraph();//关闭窗口
	return 0;
}

然后我们右击函数名转到定义
HWND initgraph(int width, int height, int flag = NULL); // 初始化图形环境
void closegraph(); // 关闭图形环境
可以看见这个,initgraph()函数还有一个参数也可以不写。
打开手册可以发现:
EasyX图形库_第1张图片
创建窗口时还可以同时设置并且用 | 间隔可以同时设置,具体看代码

#include
#include
#include<
int main()
{
	//initgraph(640, 480,EW_SHOWCONSOLE);//在创建窗口时显示控制台
	initgraph(640, 480, EW_SHOWCONSOLE | EW_NOCLOSE | EW_NOMINIMIZE);//在显示控制台同时禁止关闭和最小化
	_getch();		
	closegraph();//关闭窗口
	return 0;
}

2.设置背景颜色setbkcolor()

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(RED);//设置背景为红色
	cleardevice();//用背景色清空屏幕
	_getch();		
	closegraph();//关闭窗口
	return 0;
}

设置背景时还需要使用cleardevise()函数当前背景色清空绘图设备,这样才能设置。注意先后顺序,一般设置颜色要放在操作之前。
颜色的表示:一般有颜色常量,16进制数字,RGB宏

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(RED);//设置背景为红色
	cleardevice();//用背景色清空屏幕
	//setfillcolor(WHITE);//设置当前设备填充颜色白色
	//setfillcolor(RGB(200, 200, 200));//RGB宏大小0~255
	setfillcolor(0xAAAAAA);
	solidcircle(40, 40, 30);//白色无边框有填充的圆
	_getch();		
	closegraph();//关闭窗口
	return 0;
}

3.绘图相关函数

1)画圆的三种函数:

无边框无填充circle();
有边框有填充fillcircle();
无边框有填充solidcircle();
前两个参数是坐标 后一个是半径大小*

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(WHITE);//设置背景为白色
	cleardevice();//用背景色清空屏幕
	setlinecolor(BLACK);
	circle(40, 50, 30);//无边框无填充的圆
	setfillcolor(RED);//填充颜色红色
	setlinestyle(PS_SOLID , 4);//边框是线宽度4个像素  线的样式为实线
	setlinecolor(BLUE);//边框的颜色是蓝色
	fillcircle(100, 100, 30);//有边框的填充圆
	solidcircle(100, 200, 30);//无边框的填充圆
	_getch();
	closegraph();//关闭窗口
	return 0;
}
2.清空圆形区域clearcircle()
#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(WHITE);//设置背景为白色
	cleardevice();//用背景色清空屏幕
	
	setfillcolor(RED);//填充颜色红色
	setlinestyle(PS_SOLID , 40);//边框是线  线的样式为实线
	setlinecolor(BLUE);//边框的颜色是蓝色
	fillcircle(100, 100, 30);//有边框的填充圆
	
	clearcircle(100, 100, 20);//清空圆形区域(100,100)圆心半径20
	_getch();
	closegraph();//关闭窗口
	return 0;
}

注意:该函数使用背景色清空圆形区域。

3)画矩形的三种函数:

画图就是画线可以通过设置线的函数来设置图形边框
无填充矩形rectangle();
无边框的填充矩形solidrectangle();
有边框的填充矩形fillrectangle();

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(WHITE);//设置背景为白色
	cleardevice();//用背景色清空屏幕
	
	setfillcolor(RED);//填充颜色红色
	setlinestyle(PS_SOLID , 4);//边框是线  线的样式为实线
	setlinecolor(BLUE);//边框的颜色是蓝色
	
	rectangle(20, 20, 40, 70);//起点(20,20)终点(40,70)的矩形无填充
	setfillcolor(RED);
	fillrectangle(60, 20, 80, 70);//有边框的填充矩形
	solidrectangle(100, 20, 120, 70);//无边框的填充矩形
	_getch();
	closegraph();//关闭窗口
	return 0;
}
4)清空矩形区域clearrectangle()

用法同上简单示例:

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(WHITE);//设置背景为白色
	cleardevice();//用背景色清空屏幕
	
	setlinecolor(GREEN);//边框的颜色是绿色
	setfillcolor(RED);
	fillrectangle(60, 20, 80, 70);//有边框的填充矩形
	
	clearrectangle(65, 30, 80, 50);//清空矩形区域 坐标用法一样
	_getch();
	closegraph();//关闭窗口
	return 0;
}
5)画椭圆的三种函数:

无填充的椭圆ellipse()
有边框有填充椭圆fillellipse()
无边框有填充椭圆solidellipse()

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(WHITE);//设置背景为白色
	cleardevice();//用背景色清空屏幕
	
	setlinecolor(GREEN);//边框的颜色是绿色
	setfillcolor(RED);
	ellipse(50, 50, 80,150);//椭圆外切圆矩形坐标  无填充

	fillellipse(110, 50, 140, 150);//有边框有填充椭圆

	solidellipse(170, 50, 200, 150);//无边框有填充
	_getch();
	closegraph();//关闭窗口
	return 0;
}
6)清空椭圆区域:clearellipse()

用法一样:

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(WHITE);//设置背景为白色
	cleardevice();//用背景色清空屏幕
	setlinecolor(GREEN);//边框的颜色是绿色
	setfillcolor(RED);
	fillellipse(110, 50, 140, 150);//有边框有填充椭圆
	clearellipse(110, 75, 140, 125);//清空椭圆区域
	_getch();
	closegraph();//关闭窗口
	return 0;
}
7)画扇形的三种函数

无填充扇形pie()
有边框有填充扇形fillpie()
无边框填充扇形solidpie()

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(WHITE);//设置背景为白色
	cleardevice();//用背景色清空屏幕
	
	setlinecolor(GREEN);//边框的颜色是绿色
	setfillcolor(RED);
	
	pie(40, 40, 80, 100, 1, 1.5);//无填充扇形
	fillpie(100, 40, 140, 100, 1, 1.5);//有边框有填充扇形
	solidpie(160, 40, 200, 100, 1, 1.5);//无边框有填充扇形

	_getch();
	closegraph();//关闭窗口
	return 0;
}

扇形有六个参数,前面四个是以椭圆外切矩形的顶点,后面是起终角的弧度(double),以矩形中心点做水平垂直线,水平右侧->0弧度,垂直向上即水平右侧逆时针方向->1.57弧度(90度),画的扇形也是以矩形中点为心

8)清除扇形区域clearpie()

同上:

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(WHITE);//设置背景为白色
	cleardevice();//用背景色清空屏幕
	
	setlinecolor(GREEN);//边框的颜色是绿色
	
	setlinestyle(PS_SOLID,6);
	setfillcolor(RED);
	
	fillpie(40, 40, 140, 140, 0, 3.14);//有边框有填充扇形
	
	clearpie(40, 40, 140, 140, 0.78, 2.35);//清空扇形区域
	_getch();
	closegraph();//关闭窗口
	return 0;
}
9)椭圆弧arc()

椭圆弧参数和扇形相似,使用方法同上

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(WHITE);//设置背景为白色
	cleardevice();//用背景色清空屏幕
	
	setlinecolor(GREEN);//边框的颜色是绿色
	
	arc(40, 40, 80, 100, 4.01, 5.41);//画一个椭圆弧
	_getch();
	closegraph();//关闭窗口
	return 0;
}
10)画多边形

无填充多边形polygon()
有边框有填充的fillpolygon()
无边框有填充的solidpolygon()

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(WHITE);//设置背景为白色
	cleardevice();//用背景色清空屏幕
	
	setlinecolor(GREEN);//边框的颜色是绿色
	int san[] = { 20,20,10,40,30,40 };
	int san1[] = { 50,20,40,40,60,40 };
	int san2[] = { 80,20,70,40,90,40 };
	setfillcolor(RED);//设置颜色
	fillpolygon((POINT*)san1, 3);//有边框有填充的三角形
	solidpolygon((POINT*)san2, 3);//无边框有填充的三角形
	polygon((POINT *) san, 3);//无填充的三角形
	_getch();
	closegraph();//关闭窗口
	return 0;
}

参数两个,坐标和顶点个数
另一种坐标表示:
POINT pts[] = { {50, 200}, {200, 200}, {200, 50} };
polygon(pts, 3);

11)清空多边形区域clearpolygon()

见代码:

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(WHITE);//设置背景为白色
	cleardevice();//用背景色清空屏幕
	int san[] = { 80,5,10,100,100,100 };
	int san1[] = { 80,30,70,40,60,80,40,90 };
	setfillcolor(RED);//设置颜色
	setlinecolor(GREEN);//边框的颜色是绿色
	fillpolygon((POINT*)san, 3);//有边框有填充的三角形
	clearpolygon((POINT*)san1, 4);//清空不规则四边形
	_getch();
	closegraph();//关闭窗口
	return 0;
}
12)画圆角矩形

无填充圆角矩形roundrect()
有边框有填充圆角矩形fillroundrect()
无边框有填充圆角矩形solidroundrect()

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(WHITE);//设置背景为白色
	cleardevice();//用背景色清空屏幕
	setlinecolor(GREEN);//边框的颜色是绿色
	setfillcolor(RED);
	roundrect(40, 40, 140, 100, 60, 60);//无边框无填充矩形
	fillroundrect(40, 120, 140, 180, 60, 60);//有边框有填充矩形
	solidroundrect(40, 200, 140, 260, 60, 60);//无边框有填充
	_getch();
	closegraph();//关闭窗口
	return 0;
}

六个参数,前四个坐标----后两个为构成圆角矩形的圆角的椭圆的宽度和高度

13)清除圆角矩形区域clearroundrect()

上代码:

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(WHITE);//设置背景为白色
	cleardevice();//用背景色清空屏幕
	setlinecolor(GREEN);//边框的颜色是绿色
	setfillcolor(RED);
	fillroundrect(40, 40, 100, 120, 60, 60);//有边框有填充矩形
	clearroundrect(60, 50, 80, 80, 20, 20);//清除圆角矩形区域
	_getch();
	closegraph();//关闭窗口
	return 0;
}
14)画线,点

线line() 点putpixel() 多线ployline()

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(WHITE);//设置背景为白色
	cleardevice();//用背景色清空屏幕
	int xian[] = { 50,50,70,60,150,60,40,90 };
	setlinecolor(BLACK);
	line(20, 20, 100, 200);//画直线起终点坐标
	putpixel(130, 40, RED);//画点
	polyline((POINT*)xian, 4);//画多条线 
	_getch();
	closegraph();//关闭窗口
	return 0;
}

画多条线的方法和画多边形的差不多。。。嗯

4.文字输出相关函数

1)字符串输出指定位置outtextxy()

设置字体颜色settextcolor()使用方法同上

#include
#include
int main()
{
	initgraph(640, 480);
	char str[] = "你好";
	outtextxy(30, 50, str);
	outtextxy(50, 10, "你好");
	outtextxy(80, 80, "4");
	_getch();
	closegraph();//关闭窗口
	return 0;
}

改成多字节字符集就行了(右击项目名>属性>字符集)
文字的居中输出:
要获取字符串的实际占用像素高度和宽度

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(WHITE);
	cleardevice();
	setlinecolor(BLACK);
	rectangle(50, 50, 200, 150);//画一个矩形文字居中输出

	char txt[] = "你好";
	int tw = textwidth(txt);//获取字符串宽度
	int th = textheight(txt);//获取字符串高度
	settextcolor(BLACK);
	outtextxy(50 + (150 - tw) / 2, 50 + (100 - th) / 2, txt);//计算出居中位置
	_getch();
	closegraph();//关闭窗口
	return 0;
}
2)设置字体样式settextstyle()

最简单的就是三个参数的使用:高度,字符的平均宽度(为0的话则比例自适应),字体名称

#include
#include
int main()
{
	initgraph(640, 480);
	settextstyle(106,0 ,"楷体");
	outtextxy(20, 20,"你好");
	_getch();
	closegraph();//关闭窗口
	return 0;
}

此函数的其他用法详见使用手册

5.图像的相关函数

1)从当前绘图设备中获取图像getimage()

有五个参数(保存图像的IMAGE指针,获取图像区域的左上角坐标,获取图像区域的宽度和高度)
当前设备上绘制指定图像putimage()
绘制位置坐标,和IMAGE指针及相关参数

#include
#include
int main()
{
	initgraph(640, 480);
	setbkcolor(WHITE);
	cleardevice();
	setlinecolor(BLACK);
	circle(30, 30, 20);

	IMAGE img;
	getimage(&img, 0, 0, 60, 60);
	putimage(100, 100, &img);
	_getch();
	closegraph();//关闭窗口
	return 0;
}
2)输出一张图片

用于从文件中读取图像loadimage()
位置可以是相对路径也可以是绝对路径

#include
#include
int main()
{
	initgraph(640, 480);
	IMAGE img;//保存图像的 IMAGE 对象指针
	//loadimage(NULL, "C:\\Users\\Desktop\\图片\\图\\1.jpg",640,480);//NULL在窗口输出 和窗口一样大
	loadimage(&img, "C:\\Users\\Desktop\\图片\\图\\1.jpg");//&img
	putimage(10, 10, &img);//在指定位置输出
	_getch();
	closegraph();//关闭窗口
	return 0;
}

在输出图片时,还可以位运算操作
EasyX图形库_第2张图片
putimage(10, 10, &img);比如把彩色箭头留下,需要他图片的掩码图,利用位运算 | SRCPAINT,& SRCAND
putimage(10, 10, &img,SRCPAINT)
putimage(10, 10, &img,SRCAND)
图片大小保持一致
使窗口适应图片大小:
IMAGE是一个图形对象
img.getwidth();
返回 IMAGE 对象的宽度
img.getheight();
返回 IMAGE 对象的高度

#include
#include
int main()
{
	IMAGE img;
	loadimage(&img, "C:\\Users\\Desktop\\图片\\图\\1.jpg");//&img
	int pt = img.getwidth();//求图片的宽度
	int ph = img.getheight();//求图片高度
	initgraph(pt, ph);//设置窗口大小
	putimage(0,0, &img);//在指定位置输出
	_getch();
	closegraph();//关闭窗口
	return 0;
}
3)保存绘图内容saveimage()

注意路径

#include
#include
int main()
{
	initgraph(640, 480);
	circle(40, 40, 20);

	saveimage("C:\\Users\\Desktop\\图片\\图\\2.jpg");//保存绘图内容
	_getch();
	closegraph();//关闭窗口
	return 0;
}

6.消息处理相关函数

ExMessage这个结构体用于保存消息
定义一个变量m
m.x,m.y鼠标当前坐标
m.message m的消息
m.vkcode m的按键的虚拟键码
getmssage()用于获取一个消息

#include 
#include
int main()
{
	initgraph(300, 300);
	ExMessage m;//定义消息变量
	setfillcolor(RED);
	while (true)
	{
		m = getmessage(EM_MOUSE | EM_KEY);//获取一个鼠标或者按键消息
			switch (m.message)
			{
			case WM_MOUSEMOVE://鼠标移动时画一个绿色的点
				putpixel(m.x, m.y, GREEN);
				break;
			case WM_LBUTTONDOWN://鼠标左键点击画一个小矩形
				fillrectangle(m.x - 10, m.y - 10, m.x + 10, m.y + 10);
			    break;
			case WM_RBUTTONDOWN://鼠标右键点击一个大矩形
				fillrectangle(m.x - 20, m.y - 20, m.x + 20, m.y + 20);
				break;
			case WM_KEYDOWN://按下esc键退出
				if (m.vkcode == VK_ESCAPE); 
				return 0;
			}
	}
	_getch();
	closegraph();
	return 0;
}

EasyX图形库_第3张图片

7.其他示例

输出随机颜色背景

#include 
#include
#include
int main()
{

	initgraph(640, 480);
	srand((unsigned)time(NULL)); //设置随机种子
	while (true)
	{
		setbkcolor(RGB(rand() % 256, rand() % 256, rand() % 256));//设置背景随机颜色
		cleardevice();
		Sleep(500);//休眠500毫秒
	}
	_getch();
	closegraph();
	return 0;
}

设置文字随机颜色

#include 
#include
#include
int main()
{

	initgraph(640, 480);
	srand((unsigned)time(NULL)); //设置随机种子
	while (!_kbhit())//当没有按键按下时
	{
		settextcolor(RGB(rand() % 256, rand() % 256, rand() % 256));//设置文字随机颜色
		outtextxy(30, 100, "你好");
		Sleep(500);//休眠500毫秒
	}
	_getch();
	closegraph();
	return 0;
}

设置随机数方法
srand((unsigned)time(NULL));
rand();
当rand()%一个数字时—随机数取值为0~这个数字-1

播放音乐

#include 
#include
#include//包含多媒体设备接口头文件
#pragma comment(lib,"winmm.lib")//加载静态库
int main()
{
	initgraph(640, 480);
	setbkcolor(YELLOW);
	cleardevice();
	//alias 名字就是给文件起了一个别名 方便用
	mciSendString("open D:\\编程\\音频\\bgm.mp3 alias BGM ",0,0,0);
	mciSendString("play BGM repeat", 0, 0, 0);//repeat 重复播放
	Sleep(10000);
	mciSendString("close BGM", 0, 0, 0); //关闭音乐
	_getch();
	closegraph();
	return 0;
}

文件可以相对路径和绝对路径
alias 取别名下面操作方便

小球移动

#include 
#include
int main()
{
	int x = 20, y = 20;//小球初始化坐标
	initgraph(640, 480);
	setbkcolor(WHITE);
	cleardevice();
	setfillcolor(RED);//小球颜色
	
	while (true)
	{
		BeginBatchDraw();
		fillcircle(x, y, 20);
		EndBatchDraw();
		if (GetAsyncKeyState(0x57))
		{
			y -= 5;
			Sleep(1);
		}
		if (GetAsyncKeyState(0x53))
		{
			y += 5; Sleep(1);
		}
		if (GetAsyncKeyState(0x41))
		{
			x -= 5;	Sleep(1);
		}
		if (GetAsyncKeyState(0x44))
		{
			x += 5; Sleep(1);
		}
		cleardevice();

	}
	_getch();
	closegraph();
	return 0;
}

只是实现了最基本的移动,GetAsyncKeyState()函数参数是虚拟键码,加上if语句可以判断是否有键盘操作,图形的参数是变量可实现运动的效果

MessageBox()弹出模式对话框
修改窗口名称

// 获得窗口句柄
HWND hWnd = GetHWnd();
// 使用 Windows API 修改窗口名称
SetWindowText(hWnd, "Hello!");

终于写完了,只是说明了一些简单函数的使用,想着写的细一些当个笔记用一用,网上也有很多用这个图形库写游戏的例子大家可以借鉴一下,如有错误请及时指出,欢迎交流!

虚拟键码
EasyX的手册

你可能感兴趣的:(c++,c语言)