文章目录
- 前言
- 一.安装EasyX
- 二.创建与关闭窗口
- 1.包含头文件
- 2.创建窗口与关闭窗口的函数
- 3.窗口的坐标原理
- 4.设置背景颜色
- 三.基本图形的绘制
- 1.圆形(空心)
- 2.有边框的实心圆
- 3.无边框的实心圆
- 四.文字的打印
- 1.准备事项
- 2.打印文字
- 3.设置文字格式
- 3.设置当前字体的颜色
- 4.设置字体的背景
- 5.文字在图形的居中显示
- 五.键盘信息
- 1.获取键盘信息
- 2.输出键盘信息
- 3.移动一个球
- 六.鼠标信息
- 1.判断有无鼠标信息
- 2.读取鼠标信息
- 3.消息处理
- 七.插入图片
- 1.定义图片变量
- 2.读取图片
- 3.加载图片
- 八.播放音乐
- 1.读取音乐
- 2.播放与关闭音乐
- 九.窗口的设置
- 1.设置图形窗口
- 2.设置提示窗口
- 总结
前言
话不多说,来看一下我们都要了解什么吧!
一.安装EasyX
官网:请点击我进入
注意:EasyX 是针对 Visual C++ 的免费绘图库,支持 VC6.0 ~ VC2022
下载:
安装后:
注意:安装的会自动识别你已经安装的版本,点击安装即可,EasyX文档可以下也可以不下(区别是离线和在线),安装时最好退出你的vs。
安装好后我们就可以创建一个新项目了。
二.创建与关闭窗口
1.包含头文件
注意:设置的源文件为后缀.cpp
头文件:#include
2.创建窗口与关闭窗口的函数
创建窗口函数:initgraph();
参数:
1.宽度
2.高度
关闭窗口函数:closegraph();
参数:无
注意:这里是函数执行后会立马关闭窗口,因此需要有个缓冲函数:getchar()让窗口得以持续显示。
代码实现:
#define _CRT_SECURE_NO_WARNINGS 1#include#include//getchar的头文件int main(){initgraph(520, 520);//宽520,高520.getchar();closegraph();return 0;}
效果
这时我们就创建好一个窗口了!不过现在有点单调,需要再添加一些元素,慢慢来。
3.窗口的坐标原理
我们应该都学过建立平面直角坐标系,那这里的坐标系是如何建立的呢?
看下图:
注意:请记住这里的坐标原点在窗口名字的正下方。
4.设置背景颜色
看着这一团黑色,不利于画图这里就要借助于设置背景的函数。
函数:setbkcolor();
参数:颜色
这里白色适合画图我们就用白色吧!但是上次默认的黑色还在我们要清除一下,要用到一个函数。
函数:cleardevice();
参数:无
功能:使用当前背景色清空绘图设备
代码:
#define _CRT_SECURE_NO_WARNINGS 1#include#includeint main(){initgraph(520, 520);setbkcolor(WHITE);cleardevice();getchar();closegraph();return 0;}
效果:
这白不白?
三.基本图形的绘制
1.圆形(空心)
函数:circle();
参数:
1.圆心的横坐标
2.圆心的纵坐标
3.圆的半径
代码实现:
#define _CRT_SECURE_NO_WARNINGS 1#include#includeint main(){initgraph(520, 520);setbkcolor(WHITE);cleardevice();//画一个圆circle(50, 50, 50);getchar();closegraph();return 0;}
效果:
这是为啥?难道是因为颜色相同覆盖了?
我们论证一下:
代码:
#define _CRT_SECURE_NO_WARNINGS 1#include#includeint main(){initgraph(520, 520);setbkcolor(BLACK);//设置背景为黑色cleardevice();//画一个圆circle(50, 50, 50);getchar();closegraph();return 0;}
效果:
还真是,那如果我们要在白色背景下,画一个圆该咋办呢?
这就用到设置线条的函数了。
函数:setfillcolor()
参数:颜色
代码:
#define _CRT_SECURE_NO_WARNINGS 1#include#includeint main(){initgraph(520, 520);setbkcolor(WHITE);cleardevice();setlinecolor(BLACK);//画一个圆circle(50, 50, 50);getchar();closegraph();return 0;}
效果:
2.有边框的实心圆
函数:fillcircle();
参数:
1.圆心的横坐标
2.圆心的纵坐标
3.圆的半径
写一下代码:
#define _CRT_SECURE_NO_WARNINGS 1#include#includeint main(){initgraph(520, 520);setbkcolor(WHITE);cleardevice();setlinecolor(BLACK);//画一个圆circle(50, 50, 50);fillcircle(50, 150, 50);//有边框getchar();closegraph();return 0;}
效果:
这里因为圆的背景色是白色,所以看起来没有填充,so我们来设计一下。
函数:setfillcolor()
参数:颜色
代码:
#define _CRT_SECURE_NO_WARNINGS 1#include#includeint main(){initgraph(520, 520);setbkcolor(WHITE);cleardevice();setlinecolor(BLACK);setfillcolor(BLUE);//画一个圆circle(50, 50, 50);fillcircle(50, 150, 50);//有边框getchar();closegraph();return 0;}
效果:
3.无边框的实心圆
函数:solidcircle();
参数:
1.圆心的横坐标
2.圆心的纵坐标
3.圆的半径
代码:
#define _CRT_SECURE_NO_WARNINGS 1#include#includeint main(){initgraph(520, 520);//设置一个窗口setbkcolor(WHITE);//设置背景色cleardevice();//用背景色覆盖窗口setlinecolor(BLACK);//设置图形线条颜色setfillcolor(BLUE);//设置图形填充颜色//画一个圆circle(50, 50, 50);fillcircle(50, 150, 50);//有边框solidcircle(50, 250, 50);//无边框getchar();//缓冲closegraph();//关闭窗口return 0;}
效果:
四.文字的打印
1.准备事项
准备完成!这里是为了更好的使用打印文字的函数。
2.打印文字
函数:outtextxy();
参数:
1.文字的横坐标
2.文字的纵坐标
3.文字的内容
代码:
#define _CRT_SECURE_NO_WARNINGS 1#include#includeint main(){initgraph(520, 520);setbkcolor(WHITE);cleardevice();outtextxy(100, 100, "谢谢观众老爷,赏脸看shun_hua的博客");getchar();closegraph();return 0;}
效果:
还是刚才那个问题,文字的颜色默认为白色,因此我们需设置字体颜色。
函数:settextcolor()
参数:颜色
代码:
#define _CRT_SECURE_NO_WARNINGS 1#include#includeint main(){initgraph(520, 520);setbkcolor(WHITE);cleardevice();settextcolor(RED);//文字格式为红色outtextxy(100, 100, "谢谢观众老爷,赏脸看shun_hua的博客");getchar();closegraph();return 0;}
效果:
3.设置文字格式
函数:settextstyle()
参数:
1.字符的大小
2.字符的字宽,如果为0则自动匹配
3.字符的形式,比如楷体,宋体
代码:
#define _CRT_SECURE_NO_WARNINGS 1#include#includeint main(){initgraph(520, 520);setbkcolor(WHITE);cleardevice();settextcolor(RED);//文字格式为红色settextstyle(20, 0, "楷体");//文字的大小,紧凑程度,字体的样式outtextxy(100, 100, "谢谢观众老爷,赏脸看shun_hua的博客");getchar();closegraph();return 0;}
效果:
这样是不是好看多了?
3.设置当前字体的颜色
函数:setcolor()
参数:颜色
代码:
#define _CRT_SECURE_NO_WARNINGS 1#include#includeint main(){initgraph(520, 520);setbkcolor(WHITE);cleardevice();settextcolor(RED);//文字格式为红色settextstyle(20, 0, "楷体");//文字的大小,紧凑程度,字体的样式setcolor(GREEN);//setcolor(RGB(70, 127, 50));outtextxy(100, 100, "谢谢观众老爷,赏脸看shun_hua的博客");getchar();closegraph();return 0;}
效果:
注意:RGB()里面的三个参数为色素点。
4.设置字体的背景
因为字体的背景默认为白色会掩盖其他物体,所以我们为了不掩盖,可以改变字体的背景为透明色。
函数:setbkmode()
参数:颜色
代码:
#define _CRT_SECURE_NO_WARNINGS 1#include#includeint main(){initgraph(520, 520);setbkcolor(WHITE);cleardevice();settextcolor(RED);//文字格式为红色settextstyle(20, 0, "楷体");//文字的大小,紧凑程度,字体的样式setcolor(GREEN);setbkmode(TRANSPARENT);outtextxy(100, 100, "谢谢观众老爷,赏脸看shun_hua的博客");getchar();closegraph();return 0;}
效果:
前:
后:
5.文字在图形的居中显示
我们需要一个长方形,以便更好地显示。
函数:fillrectangle()
参数:
1.矩形左部 x 坐标
2.矩形顶部 y 坐标
3.矩形右部 x 坐标
4.矩形底部 y 坐标
代码:
#define _CRT_SECURE_NO_WARNINGS 1#include#includeint main(){initgraph(520, 520);setbkcolor(WHITE);cleardevice();settextcolor(RED);//文字格式为红色settextstyle(20, 0, "楷体");//文字的大小,紧凑程度,字体的样式setcolor(GREEN);setbkmode(TRANSPARENT);fillrectangle(100, 100, 500, 500);outtextxy(100, 100, "谢谢观众老爷,赏脸看shun_hua的博客");getchar();closegraph();return 0;}
效果:
居中显示的原理:
cdceaa85.png)
注意:这里矩形的高为底部y坐标减去顶部y坐标,矩形的宽为右边x坐标减去左边x坐标。
代码:
#define _CRT_SECURE_NO_WARNINGS 1#include#includeint main(){initgraph(520, 520);setbkcolor(WHITE);cleardevice();settextcolor(RED);//文字格式为红色settextstyle(20, 0, "楷体");//文字的大小,紧凑程度,字体的样式setcolor(GREEN);setbkmode(TRANSPARENT);fillrectangle(100, 100, 500, 500);//求字体的宽度与高度char arr[] = "谢谢观众老爷,赏脸看shun_hua的博客";int width = textwidth(arr);int height = textheight(arr);//求所加坐标的值//所加x坐标的值int x = (500 - 100) / 2 - width / 2;//所加y坐标的值int y = (500 - 100) / 2 - height / 2;outtextxy(100+x, 100+y, "谢谢观众老爷,赏脸看shun_hua的博客");getchar();closegraph();return 0;}
效果:
五.键盘信息
1.获取键盘信息
函数:_kbhit()——布尔类型
头文件:conio.h
参数:无
2.输出键盘信息
函数:_getch()
头文件:conio.h
3.移动一个球
代码:
#define _CRT_SECURE_NO_WARNINGS 1#include#include#includeint main(){initgraph(520, 520,SHOWCONSOLE);//这里的第三个参数为显示控制台窗口setbkcolor(WHITE);int x = 200, y = 300;while (1){cleardevice();setfillcolor(RED);solidcircle(x, y, 50);if (_kbhit()){char key = _getch();printf("%d %c\n", key, key);//可以获取键的ASCII值switch (key){case 72://上键的ASCII值y -= 5;break;case 80://下键的ASCII值y += 5;break;case 75://左键的ASCII值x -= 5;break;case 77://右键的ASCII值x += 5;break;}}}getchar();closegraph();return 0;}
效果:
缺点:会出现闪屏的现象,并且由于switch的性质,无法斜着进行移动。
解决方法;
#define _CRT_SECURE_NO_WARNINGS 1#include#include#includeint main(){initgraph(520, 520,SHOWCONSOLE);setbkcolor(WHITE);int x = 200, y = 300;BeginBatchDraw();//这个函数用于开始批量绘图。执行后,任何绘图操作都将暂时不输出//到绘图窗口上,直到执行 FlushBatchDraw 或 EndBatchDraw 才将之前的绘图输出。void BeginBatchDraw();while (1){cleardevice();setfillcolor(RED);solidcircle(x, y, 50);FlushBatchDraw();//这个函数用于执行未完成的绘制任务。比EndBatchDraw更稳定//四个if为四个接口,可以斜向上移动,并且更加丝滑。if (GetAsyncKeyState(VK_UP)){y--;}if (GetAsyncKeyState(VK_DOWN)){y++;}if (GetAsyncKeyState(VK_LEFT)){x--;}if (GetAsyncKeyState(VK_RIGHT)){x++;}}getchar();closegraph();return 0;}
效果:
六.鼠标信息
1.判断有无鼠标信息
函数:MouseHit()——布尔类型
参数:无参
2.读取鼠标信息
鼠标信息的类型:MOUSEMSG
定义变量(举例):MOUSEMSG msg;
读取鼠标信息的函数:GetMouseMsg()
3.消息处理
msg.uMsg将变量进行处理转变为常变量(猜测)
WM_LBUTTONDOWN——鼠标左键
WM_RBUTTONDOWN——鼠标右键
msg.x获取鼠标的横坐标
msg.y获取鼠标的纵坐标
代码:
#define _CRT_SECURE_NO_WARNINGS 1#include#include#includeint main(){initgraph(520, 520,SHOWCONSOLE);setbkcolor(BLACK);cleardevice();while (1){if (MouseHit()){MOUSEMSG msg = GetMouseMsg();switch (msg.uMsg){ case WM_LBUTTONDOWN:outtextxy(200, 200, "鼠标左键");printf("坐标(%d,%d)", msg.x, msg.y);break; case WM_RBUTTONDOWN:outtextxy(100, 100, "鼠标右键");printf("坐标(%d,%d)", msg.x, msg.y);break;}}}getchar();closegraph();return 0;}
效果:
七.插入图片
1.定义图片变量
图片类型:IMAGE
定义:IMAGE mage;
2.读取图片
函数:loadimage()
参数:
1.图片地址
2.图片文件夹——./为当前文件目录。
3.加载图片
函数:putimage()
参数:
1.图片的横坐标
2.图片的纵坐标
3.图片地址
代码
#define _CRT_SECURE_NO_WARNINGS 1#include#include#includeint main(){initgraph(2000, 2000,SHOWCONSOLE);setbkcolor(WHITE);cleardevice();IMAGE mage;loadimage(&mage, "2.jpg");putimage(0, 0, &mage);getchar();closegraph();return 0;}
注意:要看一下自己图片与窗口的大小,以达到自己预期的效果。
效果:
八.播放音乐
1.读取音乐
函数:mciSendString()
头文件:mmsystem.h
预处理指令:#pragma comment(lib,“winmm.lib”)
2.播放与关闭音乐
#define _CRT_SECURE_NO_WARNINGS 1#include#include#include#include//包含多媒体接口#pragma comment(lib,"winmm.lib")//处理接口void BGM(){ //文件为.mp3为后缀才可播放,要把音乐拷贝到项目所在文件夹里mciSendString("open ./ww.mp3", 0, 0, 0);//0,0,0为默认输出控制台mciSendString("play ./ww.mp3", 0, 0, 0);if (0){mciSendString("close ./ww.mp3",0, 0, 0);}}int main(){initgraph(500, 500,SHOWCONSOLE);setbkcolor(WHITE); cleardevice();BGM();getchar();closegraph();return 0;}
效果是一段音乐。
九.窗口的设置
1.设置图形窗口
窗口类型:HWND
窗口定义:HWND hand;
函数:GetHWnd()
功能:获取窗口信息
函数:SetWindowTex
功能:设置窗口内容
参数:1.类型变量名 2.修改内容
2.设置提示窗口
函数:MessageBox
功能:设置窗口内容
参数:1.类型变量名 2.修改内容
代码:
#include#include//包含多媒体接口#pragma comment(lib,"winmm.lib")void BGM(){mciSendString("open ./ww.mp3", 0, 0, 0);//默认输出控制台mciSendString("play ./ww.mp3", 0, 0, 0);if (0){mciSendString("close ./ww.mp3",0, 0, 0);}}void change(){HWND hand = GetHWnd();SetWindowText(hand, "欢迎来到我的博客");int i = MessageBox(hand, "请留下你的三连", "提示",MB_OKCANCEL);if (IDOK == i){printf("谢谢大佬!");}else if (IDCANCEL == i){printf("感谢您的观看!");}}int main(){initgraph(500, 500,SHOWCONSOLE);setbkcolor(WHITE);cleardevice();change();getchar();closegraph();return 0;}
效果:
总结
如果能认真看到这里,我坚信你能收获很多很多!也希望这篇文章能帮助到你,如果觉得不错,请点击一下不要钱的赞,如果有误请温柔的指出,在这里感谢大家了!