文章目录

  • 前言
  • 一.安装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;}

效果:

总结

如果能认真看到这里,我坚信你能收获很多很多!也希望这篇文章能帮助到你,如果觉得不错,请点击一下不要钱的赞,如果有误请温柔的指出,在这里感谢大家了!