文章目录
前言
话不多说,来看一下我们都要了解什么吧!
一.安装EasyX
官网:请点击我进入
注意:EasyX 是针对 Visual C++ 的免费绘图库,支持 VC6.0 ~ VC2022
下载:
安装后:
注意:安装的会自动识别你已经安装的版本,点击安装即可,EasyX文档可以下也可以不下(区别是离线和在线),安装时最好退出你的vs。
安装好后我们就可以创建一个新项目了。
二.创建与关闭窗口
1.包含头文件
注意:设置的源文件为后缀.cpp
头文件:#include<graphics.h>
2.创建窗口与关闭窗口的函数
创建窗口函数:initgraph();
参数:
1.宽度
2.高度
关闭窗口函数:closegraph();
参数:无
注意:这里是函数执行后会立马关闭窗口,因此需要有个缓冲函数:getchar()让窗口得以持续显示。
代码实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>//getchar的头文件
int main()
{
initgraph(520, 520);//宽520,高520.
getchar();
closegraph();
return 0;
}
效果
这时我们就创建好一个窗口了!不过现在有点单调,需要再添加一些元素,慢慢来。
3.窗口的坐标原理
我们应该都学过建立平面直角坐标系,那这里的坐标系是如何建立的呢?
看下图:
注意:请记住这里的坐标原点在窗口名字的正下方。
4.设置背景颜色
看着这一团黑色,不利于画图这里就要借助于设置背景的函数。
函数:setbkcolor();
参数:颜色
这里白色适合画图我们就用白色吧!但是上次默认的黑色还在我们要清除一下,要用到一个函数。
函数:cleardevice();
参数:无
功能:使用当前背景色清空绘图设备
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(WHITE);
cleardevice();
getchar();
closegraph();
return 0;
}
效果:
这白不白?
三.基本图形的绘制
1.圆形(空心)
函数:circle();
参数:
1.圆心的横坐标
2.圆心的纵坐标
3.圆的半径
代码实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(WHITE);
cleardevice();
//画一个圆
circle(50, 50, 50);
getchar();
closegraph();
return 0;
}
效果:
这是为啥?难道是因为颜色相同覆盖了?
我们论证一下:
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(BLACK);//设置背景为黑色
cleardevice();
//画一个圆
circle(50, 50, 50);
getchar();
closegraph();
return 0;
}
效果:
还真是,那如果我们要在白色背景下,画一个圆该咋办呢?
这就用到设置线条的函数了。
函数:setlinecolor()
参数:颜色
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int 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<graphics.h>
#include<stdio.h>
int 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<graphics.h>
#include<stdio.h>
int 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<graphics.h>
#include<stdio.h>
int 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<graphics.h>
#include<stdio.h>
int main()
{
initgraph(520, 520);
setbkcolor(WHITE);
cleardevice();
outtextxy(100, 100, "谢谢观众老爷,赏脸看shun_hua的博客");
getchar();
closegraph();
return 0;
}
效果:
还是刚才那个问题,文字的颜色默认为白色,因此我们需设置字体颜色。
函数:settextcolor()
参数:颜色
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<graphics.h>
#include<stdio.h>
int 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<graphics.h>
#include<stdio.h>
int 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<graphics.h>
#include<stdio.h>
int 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<graphics.h>
#include<stdio.h>
int 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<graphics.h>
#include<stdio.h>
int 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<graphics.h>
#include<stdio.h>
int 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<graphics.h>
#include<stdio.h>
#include<conio.h>
int 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<graphics.h>
#include<stdio.h>
#include<conio.h>
int 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<graphics.h>
#include<stdio.h>
#include<conio.h>
int 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<graphics.h>
#include<stdio.h>
#include<conio.h>
int 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<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<mmsystem.h>//包含多媒体接口
#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<conio.h>
#include<mmsystem.h>//包含多媒体接口
#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;
}
效果:
十、实战篇
扫雷(进阶版——图形化界面,递归展开,播放音乐与音效,标记取消雷,记录雷的个数,鼠标点击,文末附有完整代码)
看很多小伙伴,也在看这篇文章,刚好和这篇有关系,就放在这里了~
总结
如果能认真看到这里,我坚信你能收获很多很多!也希望这篇文章能帮助到你,如果觉得不错,请点击一下不要钱的赞,如果有误请温柔的指出,在这里感谢大家了!