【C语言新手】EasyX图形库使用

一、环境搭建:

1、官网下载库文件:

在这里插入图片描述
在这里插入图片描述
随便点击一个下载即可,一般我们会选择最新的。

2、点击【打开文件】安装即可

请注意:一般配合VS或者VC使用。所以你的电脑应该先下VS或者VC。
在这里插入图片描述

二、在VS2019中使用:

1、引用头文件

完成了上面的【环境搭建】以后,EasyX库就包含在你的VS中了。你只需要引用头文件即可。

#include<graphics.h>

2、查看库函数:

1、按住【Ctrl】键
2、点击头文件#include<graphics.h>,进入这个文件
3、进入头文件#include<graphics.h>以后,找到应一个头文件#include <easyx.h>
同样按住【Ctrl】键,点击进入。画图函数就在这个文件中,往下翻阅即可。

3、一般使用步骤:

1、添加头文件
#include<graphics.h>
2、编写main函数:
int main(){
	
	return 0;
}
3、在main函数里面添加打开和关闭窗口的两个函数:
	//1.初始化一个easyx窗口
	initgraph(800, 500,SHOWCONSOLE);/*  ,SHOWCONSOLE  显示控制台,用于测试程序,可以删掉这个参数,则不显示控制台*/

	closegraph();// 关闭图形窗口

最终效果:

#pragma once
#include<graphics.h>
#include<stdio.h> //使用getchar()函数
//
int main()
{
	//1.初始化一个easyx窗口:800x500大小
	initgraph(800, 500,SHOWCONSOLE);/*  ,SHOWCONSOLE  显示控制台,用于测试程序,可以删掉这个参数,则不显示*/




	//其他代码请在这里完成




	getchar();//防止闪退
	closegraph();// 关闭图形窗口
	return 0;
}

三、附录:#include <easyx.h>头文件的函数:

// 一、绘图模式相关函数

HWND initgraph(int width, int height, int flag = NULL);	// 初始化图形环境
void closegraph();										// 关闭图形环境
// 二、绘图环境设置

void cleardevice();					// 清屏
void setcliprgn(HRGN hrgn);			// 设置当前绘图设备的裁剪区
void clearcliprgn();				// 清除裁剪区的屏幕内容

void getlinestyle(LINESTYLE* pstyle);						// 获取当前画线样式
void setlinestyle(const LINESTYLE* pstyle);					// 设置当前画线样式
void setlinestyle(int style, int thickness = 1, const DWORD *puserstyle = NULL, DWORD userstylecount = 0);	// 设置当前画线样式
void getfillstyle(FILLSTYLE* pstyle);						// 获取当前填充样式
void setfillstyle(const FILLSTYLE* pstyle);					// 设置当前填充样式
void setfillstyle(int style, long hatch = NULL, IMAGE* ppattern = NULL);		// 设置当前填充样式
void setfillstyle(BYTE* ppattern8x8);						// 设置当前填充样式

void setorigin(int x, int y);							// 设置坐标原点
void getaspectratio(float *pxasp, float *pyasp);		// 获取当前缩放因子
void setaspectratio(float xasp, float yasp);			// 设置当前缩放因子

int  getrop2();						// 获取前景的二元光栅操作模式
void setrop2(int mode);				// 设置前景的二元光栅操作模式
int  getpolyfillmode();				// 获取多边形填充模式
void setpolyfillmode(int mode);		// 设置多边形填充模式

void graphdefaults();				// 重置所有绘图设置为默认值

COLORREF getlinecolor();			// 获取当前线条颜色
void setlinecolor(COLORREF color);	// 设置当前线条颜色
COLORREF gettextcolor();			// 获取当前文字颜色
void settextcolor(COLORREF color);	// 设置当前文字颜色
COLORREF getfillcolor();			// 获取当前填充颜色
void setfillcolor(COLORREF color);	// 设置当前填充颜色
COLORREF getbkcolor();				// 获取当前绘图背景色
void setbkcolor(COLORREF color);	// 设置当前绘图背景色
int  getbkmode();					// 获取背景混合模式
void setbkmode(int mode);			// 设置背景混合模式

// 三、颜色模型转换函数
COLORREF RGBtoGRAY(COLORREF rgb);
void RGBtoHSL(COLORREF rgb, float *H, float *S, float *L);
void RGBtoHSV(COLORREF rgb, float *H, float *S, float *V);
COLORREF HSLtoRGB(float H, float S, float L);
COLORREF HSVtoRGB(float H, float S, float V);

// 四、绘图函数

COLORREF getpixel(int x, int y);				// 获取点的颜色
void putpixel(int x, int y, COLORREF color);	// 画点

void line(int x1, int y1, int x2, int y2);		// 画线

void rectangle	   (int left, int top, int right, int bottom);	// 画矩形
void fillrectangle (int left, int top, int right, int bottom);	// 画填充矩形(有边框)
void solidrectangle(int left, int top, int right, int bottom);	// 画填充矩形(无边框)
void clearrectangle(int left, int top, int right, int bottom);	// 清空矩形区域

void circle		(int x, int y, int radius);		// 画圆
void fillcircle (int x, int y, int radius);		// 画填充圆(有边框)
void solidcircle(int x, int y, int radius);		// 画填充圆(无边框)
void clearcircle(int x, int y, int radius);		// 清空圆形区域

void ellipse	 (int left, int top, int right, int bottom);	// 画椭圆
void fillellipse (int left, int top, int right, int bottom);	// 画填充椭圆(有边框)
void solidellipse(int left, int top, int right, int bottom);	// 画填充椭圆(无边框)
void clearellipse(int left, int top, int right, int bottom);	// 清空椭圆形区域

void roundrect	   (int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight);		// 画圆角矩形
void fillroundrect (int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight);		// 画填充圆角矩形(有边框)
void solidroundrect(int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight);		// 画填充圆角矩形(无边框)
void clearroundrect(int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight);		// 清空圆角矩形区域

void arc	 (int left, int top, int right, int bottom, double stangle, double endangle);	// 画椭圆弧(起始角度和终止角度为弧度制)
void pie	 (int left, int top, int right, int bottom, double stangle, double endangle);	// 画椭圆扇形(起始角度和终止角度为弧度制)
void fillpie (int left, int top, int right, int bottom, double stangle, double endangle);	// 画填充椭圆扇形(有边框)
void solidpie(int left, int top, int right, int bottom, double stangle, double endangle);	// 画填充椭圆扇形(无边框)
void clearpie(int left, int top, int right, int bottom, double stangle, double endangle);	// 清空椭圆扇形区域

void polyline	 (const POINT *points, int num);								// 画多条连续的线
void polygon	 (const POINT *points, int num);								// 画多边形
void fillpolygon (const POINT *points, int num);								// 画填充的多边形(有边框)
void solidpolygon(const POINT *points, int num);								// 画填充的多边形(无边框)
void clearpolygon(const POINT *points, int num);								// 清空多边形区域

void polybezier(const POINT *points, int num);									// 画贝塞尔曲线
void floodfill(int x, int y, COLORREF color, int filltype = FLOODFILLBORDER);	// 填充区域


// 五、文字相关函数
void outtextxy(int x, int y, LPCTSTR str);	// 在指定位置输出字符串
void outtextxy(int x, int y, TCHAR c);		// 在指定位置输出字符
int textwidth(LPCTSTR str);					// 获取字符串占用的像素宽
int textwidth(TCHAR c);						// 获取字符占用的像素宽
int textheight(LPCTSTR str);				// 获取字符串占用的像素高
int textheight(TCHAR c);					// 获取字符占用的像素高
int drawtext(LPCTSTR str, RECT* pRect, UINT uFormat);	// 在指定区域内以指定格式输出字符串
int drawtext(TCHAR c, RECT* pRect, UINT uFormat);		// 在指定区域内以指定格式输出字符

// 设置当前字体样式(详见帮助)
//		nHeight: 字符的平均高度;
//		nWidth: 字符的平均宽度(0 表示自适应);
//		lpszFace: 字体名称;
//		nEscapement: 字符串的书写角度(单位 0.1 度);
//		nOrientation: 每个字符的书写角度(单位 0.1 度);
//		nWeight: 字符的笔画粗细(0 表示默认粗细);
//		bItalic: 是否斜体;
//		bUnderline: 是否下划线;
//		bStrikeOut: 是否删除线;
//		fbCharSet: 指定字符集;
//		fbOutPrecision: 指定文字的输出精度;
//		fbClipPrecision: 指定文字的剪辑精度;
//		fbQuality: 指定文字的输出质量;
//		fbPitchAndFamily: 指定以常规方式描述字体的字体系列。
void settextstyle(int nHeight, int nWidth, LPCTSTR lpszFace);
void settextstyle(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut);
void settextstyle(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut, BYTE fbCharSet, BYTE fbOutPrecision, BYTE fbClipPrecision, BYTE fbQuality, BYTE fbPitchAndFamily);
void settextstyle(const LOGFONT *font);	// 设置当前字体样式
void gettextstyle(LOGFONT *font);		// 获取当前字体样式


// 六、图像处理函数
void loadimage(IMAGE *pDstImg, LPCTSTR pImgFile, int nWidth = 0, int nHeight = 0, bool bResize = false);					// 从图片文件获取图像(bmp/gif/jpg/png/tif/emf/wmf/ico)
void loadimage(IMAGE *pDstImg, LPCTSTR pResType, LPCTSTR pResName, int nWidth = 0, int nHeight = 0, bool bResize = false);	// 从资源文件获取图像(bmp/gif/jpg/png/tif/emf/wmf/ico)
void saveimage(LPCTSTR pImgFile, IMAGE* pImg = NULL);																		// 保存图像(bmp/gif/jpg/png/tif)
void getimage(IMAGE *pDstImg, int srcX, int srcY, int srcWidth, int srcHeight);												// 从当前绘图设备获取图像
void putimage(int dstX, int dstY, const IMAGE *pSrcImg, DWORD dwRop = SRCCOPY);												// 绘制图像到屏幕
void putimage(int dstX, int dstY, int dstWidth, int dstHeight, const IMAGE *pSrcImg, int srcX, int srcY, DWORD dwRop = SRCCOPY);		// 绘制图像到屏幕(指定宽高)
void rotateimage(IMAGE *dstimg, IMAGE *srcimg, double radian, COLORREF bkcolor = BLACK, bool autosize = false, bool highquality = true);// 旋转图像
void Resize(IMAGE* pImg, int width, int height);	// 调整绘图设备的大小
DWORD* GetImageBuffer(IMAGE* pImg = NULL);			// 获取绘图设备的显存指针
IMAGE* GetWorkingImage();							// 获取当前绘图设备
void SetWorkingImage(IMAGE* pImg = NULL);			// 设置当前绘图设备
HDC GetImageHDC(IMAGE* pImg = NULL);				// 获取绘图设备句柄(HDC)

// 七、其它函数

int	getwidth();			// 获取绘图区宽度
int	getheight();		// 获取绘图区高度

void BeginBatchDraw();	// 开始批量绘制
void FlushBatchDraw();	// 执行未完成的绘制任务
void FlushBatchDraw(int left, int top, int right, int bottom);	// 执行指定区域内未完成的绘制任务
void EndBatchDraw();	// 结束批量绘制,并执行未完成的绘制任务
void EndBatchDraw(int left, int top, int right, int bottom);	// 结束批量绘制,并执行指定区域内未完成的绘制任务

HWND GetHWnd();								// 获取绘图窗口句柄(HWND)
TCHAR* GetEasyXVer();						// 获取 EasyX 当前版本

// 八、获取用户输入
bool InputBox(LPTSTR pString, int nMaxCount, LPCTSTR pPrompt = NULL, LPCTSTR pTitle = NULL, LPCTSTR pDefault = NULL, int width = 0, int height = 0, bool bOnlyOK = true);
// 鼠标消息
// 支持如下消息:
//		WM_MOUSEMOVE		鼠标移动
//		WM_MOUSEWHEEL		鼠标滚轮拨动
//		WM_LBUTTONDOWN		左键按下
//		WM_LBUTTONUP		左键弹起
//		WM_LBUTTONDBLCLK	左键双击
//		WM_MBUTTONDOWN		中键按下
//		WM_MBUTTONUP		中键弹起
//		WM_MBUTTONDBLCLK	中键双击
//		WM_RBUTTONDOWN		右键按下
//		WM_RBUTTONUP		右键弹起
//		WM_RBUTTONDBLCLK	右键双击
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 的倍数)
};

bool MouseHit();			// 检查是否存在鼠标消息
MOUSEMSG GetMouseMsg();		// 获取一个鼠标消息。如果没有,就等待
bool PeekMouseMsg(MOUSEMSG *pMsg, bool bRemoveMsg = true);	// 获取一个鼠标消息,并立即返回
void FlushMouseMsgBuffer();	// 清空鼠标消息缓冲区

四、实例Demo:

点击此处:C++完成一个消消乐

  • 66
    点赞
  • 492
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,我们可以用EasyX图形库来制作一个简单的可视化菜单,然后实现两个游戏的选择。首先,我们需要在C语言中引入EasyX图形库的头文件和链接库。头文件如下: ```c #include <graphics.h> ``` 链接库需要在编译时加入 `-lgraphics` 参数,例如: ```bash gcc -o menu.exe menu.c -lgraphics ``` 接下来,我们需要在程序中初始化图形模式,创建窗口,并设置菜单的背景和按钮的位置。代码如下: ```c #include <graphics.h> int main() { // 初始化图形模式 initgraph(640, 480); // 创建窗口 setbkcolor(WHITE); cleardevice(); // 设置菜单背景 setfillcolor(BLUE); fillrectangle(100, 100, 540, 380); // 设置按钮位置 setfillcolor(GREEN); fillrectangle(180, 200, 460, 260); // 第一个按钮 fillrectangle(180, 300, 460, 360); // 第二个按钮 // 绘制按钮文字 setbkmode(TRANSPARENT); settextcolor(WHITE); settextstyle(30, 0, "微软雅黑"); outtextxy(220, 210, "游戏一"); outtextxy(220, 310, "游戏二"); // 关闭图形模式 getch(); closegraph(); return 0; } ``` 上面的代码中,我们使用 `initgraph` 函数初始化图形模式,创建了一个大小为640x480的窗口。然后,我们使用 `setbkcolor` 和 `cleardevice` 函数设置了窗口的背景颜色,并使用 `setfillcolor` 函数设置了菜单的背景和按钮的颜色。接下来,我们使用 `fillrectangle` 函数绘制了两个按钮,并使用 `outtextxy` 函数在按钮上方绘制了文字。 最后,我们使用 `getch` 函数等待用户按下任意键,然后使用 `closegraph` 函数关闭图形模式。 以上代码只是一个简单的菜单界面,接下来我们需要实现按钮的功能,即用户点击按钮后进入对应的游戏。为了简化示例,我们假设游戏一和游戏二分别是两个独立的exe文件,我们可以使用 `system` 函数来启动这两个游戏。代码如下: ```c #include <graphics.h> #include <stdlib.h> int main() { // 初始化图形模式 initgraph(640, 480); // 创建窗口 setbkcolor(WHITE); cleardevice(); // 设置菜单背景 setfillcolor(BLUE); fillrectangle(100, 100, 540, 380); // 设置按钮位置 setfillcolor(GREEN); fillrectangle(180, 200, 460, 260); // 第一个按钮 fillrectangle(180, 300, 460, 360); // 第二个按钮 // 绘制按钮文字 setbkmode(TRANSPARENT); settextcolor(WHITE); settextstyle(30, 0, "微软雅黑"); outtextxy(220, 210, "游戏一"); outtextxy(220, 310, "游戏二"); // 等待用户点击按钮 int x, y; while (true) { // 获取鼠标状态 if (MouseHit()) { MOUSEMSG msg = GetMouseMsg(); // 点击第一个按钮启动游戏一 if (msg.uMsg == WM_LBUTTONDOWN && msg.x >= 180 && msg.x <= 460 && msg.y >= 200 && msg.y <= 260) { system("game1.exe"); break; } // 点击第二个按钮启动游戏二 if (msg.uMsg == WM_LBUTTONDOWN && msg.x >= 180 && msg.x <= 460 && msg.y >= 300 && msg.y <= 360) { system("game2.exe"); break; } } } // 关闭图形模式 closegraph(); return 0; } ``` 在上面的代码中,我们添加了一个 `while` 循环来等待用户点击按钮。使用 `MouseHit` 函数获取鼠标状态,如果用户点击了按钮,则使用 `system` 函数启动对应的游戏exe文件。 这样,我们就实现了一个简单的可视化菜单,用户可以通过点击按钮来选择不同的游戏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值