EasyX入门笔记

写在前面的话

这是刚学C的蒟蒻第一次挑战控制台程序以外的程序设计因为要做课设。第一次自己敲出黑框框之外程序的本蒟蒻肥肠兴奋,就根据视频自学(视频链接),总结视频内容和自己查阅的资料,写出了下面的笔记,希望它可以帮到大家。由于作者水平有限,难免有遗漏和不足之处,望神犇们多多包涵指正。

什么是EasyX

EasyX是一个适合像我这样的蒟蒻编程初学者操作的图形渲染库。
本质上,EasyX是将Windows繁琐的图形绘制操作封装在头文件中,从而实现用函数简单的调用。

使用EasyX

百度EasyX官网,从官网中即可下载安装程序。它可以将EasyX直接安装在VS中。
使用EasyX需要在程序中添加头文件 include<graphics.h>

EasyX帮助文档:EasyX在线文档

EasyX中的坐标和设备

坐标

和数学的坐标系不同,EasyX中坐标的y轴正方向应该是向下的。

在这里插入图片描述

设备

简单来讲,设备就是绘图表面;
在EasyX中,设备分两种:
1.默认的绘图窗口;
2.Image对象。
通过 SetWorkingImage() 函数可以设置当前用于绘图的设备。
设置当前用于绘图的设备后,所有的绘图函数都会绘制在该设备上。
默认是在绘图窗口绘图.

颜色

EasyX有四种表示颜色的方法:预定义常量,十六进制数字,RGB宏,使用HSLtoRGBHSVtoRGB颜色转换其他色彩模型到RGB颜色。

1.使用预定义常量:

常量			值			颜色
--------		--------	--------
BLACK			0			黑
BLUE			0xAA0000	蓝
GREEN			0x00AA00	绿
CYAN			0xAAAA00	青
RED				0x0000AA	红
MAGENTA			0xAA00AA	紫
BROWN			0x0055AA	棕
LIGHTGRAY		0xAAAAAA	浅灰
DARKGRAY		0x555555	深灰
LIGHTBLUE		0xFF5555	亮蓝
LIGHTGREEN		0x55FF55	亮绿
LIGHTCYAN		0xFFFF55	亮青
LIGHTRED		0x5555FF	亮红
LIGHTMAGENTA	0xFF55FF	亮紫
YELLOW			0x55FFFF	黄
WHITE			0xFFFFFF

2.使用16进制数表示颜色
表示规则为:0xbbggrr
bb=蓝 gg=绿 rr=红

3.用RGB宏合成颜色
EasyX文档——RGB

4.用HSLtoRGBHSVtoRGB转换其他色彩模型到RGB颜色
EasyX文档——HSLtoRGB
EasyX文档——HSVtoRGB

EasyX的函数

窗口函数

窗口函数用于对窗口的一些操作。

initgraph(int width,int height,[int flag=NULL]) 用于初始化绘图窗口(创建绘图窗口);
三个参数分别为:宽度,高度和窗口样式(默认为NULL,可以不写)

窗口样式的设定有:
SHOWCONSOLE 显示控制台;
NOCLOSE 没有右上角的关闭按钮;
NOMINIMIZE 没有右上角的最小化按钮。
如果需要同时使用他们中的多个,可以用按位或|间隔。

closegraph() 关闭绘图窗口;

cleardevice() 清空绘图设备。
(设置背景中 cleardevice() 要和 setbkcolor() 联用,先后者再前者)

样式设置函数

格式为 操作类型+ 对象 + 操作名称不管对不对但我是这么理解的
该函数针对的是当前的绘图设备。

操作类型

get 获取
set 设置

对象

所有的图形
背景 bk
填充 fill
画线 line
多边形(填充) poly(fill)

操作名称

模式 mode(背景和多边形)
样式 style(画线和填充)
颜色 color

setlinecolor(0xff0000);
setlinecolor(BLUE);
setlinecolor(RGB(0, 0, 255));
setlinecolor(HSLtoRGB(240, 1, 0.5));

图形绘制函数

图形绘制函数用于在窗口上绘制各种图形.

填充样式分类

从填充样式分类,绘图函数可分为无填充,有边框填充,无边框三种.
以画圆为例:

circle 无填充
fillcircle 有边框填充
solidcircle 无边框填充

主要区别就是形状的前缀。

形状分类

从形状分类,常用的有八种(以下均为无填充)
circle(int x,int y,int radius) 画圆
x,y分别为圆心的x,y坐标;
radiu 为圆的半径。

ellipse(int x1,int y1,int x2,int y2) 画椭圆
四个坐标是椭圆的左上端点和右下端点的坐标。

pie(int x1,int y1,int x2,int y2,int stangle,int endangle) 画扇形
四个坐标是扇形左上端点和右下端点的坐标。
stangle扇形起始角的弧度endangle扇形终止角的弧度
PS:起始角和终止角的定义
经过圆心画一条水平线和垂直线,水平线以圆心向右为0度,顺着圆逆时针转动.即水平线向右经过0度,垂直向上为90度,水平线向左为180度,垂直线向下为270度。

polygon(POINT points[],int num) 画多边形
points[] 存储多边形的各个顶点位置。函数会自动连接这些点。注意,不是int类型!
num 是顶点的数量。

rectangle(int x1,int y1,int x2,int y2) 画矩形
四个坐标同样是矩形左上顶点和右下顶点的坐标。

roundrect(int x1,int y1,int x2,int y2,int ellipsewidth,int ellipseheight) 画圆角矩形
四个坐标值同样是左上顶点和右下顶点的坐标。
ellipsewidth 是构成圆角矩形的圆角的椭圆的宽度;
ellipseheight 是构成圆角矩形的圆角的椭圆的高度。

line(int x1,int y1,int x2,int y2) 画线
四个坐标是直线两个端点的坐标。

putpixel(int x,int y,COLORREF color) 画点
x和y是点的坐标, color 是点的颜色。

举个栗子

在这里插入图片描述

效果如图
在这里插入图片描述

……对不起我的长萌萌

如图可见,如果两个图案的位置有冲突,后绘制的图案会覆盖在先绘制的图案上。

文字绘制函数

文字绘制函数用于在窗口上绘制文字。

在指定位置输出字符串

outtextxy(int x,int y,LPCTSTR str)
x,y是待输出字符串头字母的x,y坐标值;str是待输出的字符串的指针。
由于字符集问题直接把字符串""进函数会报错,解决方法为:
1.在字符串前加上大写’L’;
2.用TEXT(str)/_T(str)形式;
3.进入“项目→属性→配置属性→常规”,将字符集改为“使用多字符字符集”。
最好用第三个。

设置当前文字颜色

settextcolor(COLORREF color)

settextstyle(int nHeight,int nWidth,LPCTSTR lpszFace)设置字体样式
nHeight 指定高度;
nWidth 字符的平均宽度;
lpszFace 字体名称。

设置背景模式

setbkmode
文字是有背景的!
setbkmode(TRANSPARENT) 把文字背景设置成透明;
setbkmode(OPAQUE) 设置成不透明。
(还有一个宏定义值一模一样的BKMODE_LAST也是不透明…)

设置文字居中显示

需要用到这两个函数:
textheight(LPCTSTR str) 获取字符串实际占用的像素高度;
textwidth(LPCTSTR str) 获取字符串实际占用的像素宽度。

居中的原理

先求出字符串的宽度和需要居中的窗口的左端坐标和宽度
再算出它们的一半
那么字符串输出函数应该填写的x轴坐标就是:

窗 口 左 端 坐 标 + 窗 口 长 度 的 一 半 − 字 符 串 长 度 的 一 半 窗口左端坐标+窗口长度的一半-字符串长度的一半 +

即左端窗口坐标+窗口和字符串之间的距离,但由于字符串的宽度是随着字符串内容的不同而变化的,所以不可以直接写常数。

宽度同理:

窗 口 上 端 坐 标 + 窗 口 宽 度 的 一 半 − 字 符 串 宽 度 的 一 半 窗口上端坐标+窗口宽度的一半-字符串宽度的一半

  • 115
    点赞
  • 625
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
您可以使用多个 `inputbox` 函数来创建多个输入框,以问两个问题。例如,您可以按照以下步骤来创建一个包含两个输入框的对话框: 1. 引入 EasyX 头文件:`#include <graphics.h>` 2. 创建一个窗口:`initgraph(width, height);` 3. 使用 `inputbox` 函数创建第一个输入框,例如:`inputbox(x1, y1, "请输入问题1:", str1, 20);`,其中: - `x1` 和 `y1` 为第一个输入框的左上角坐标; - `"请输入问题1:"` 是第一个输入框的提示信息; - `str1` 为第一个输入框输入的内容,也可以是一个字符数组,用于存储第一个问题的答案; - `20` 为第一个输入框的最大输入长度。 4. 使用 `inputbox` 函数创建第二个输入框,例如:`inputbox(x2, y2, "请输入问题2:", str2, 20);`,其中: - `x2` 和 `y2` 为第二个输入框的左上角坐标; - `"请输入问题2:"` 是第二个输入框的提示信息; - `str2` 为第二个输入框输入的内容,也可以是一个字符数组,用于存储第二个问题的答案; - `20` 为第二个输入框的最大输入长度。 5. 在窗口中显示两个输入框和输入的内容。 6. 关闭窗口:`closegraph();` 下面是一个简单的示例代码,演示如何创建一个包含两个输入框的对话框: ```c++ #include <graphics.h> int main() { initgraph(400, 300); // 创建一个窗口 char str1[20]; // 用于存储第一个问题的答案 char str2[20]; // 用于存储第二个问题的答案 inputbox(100, 100, "请输入问题1:", str1, 20); // 创建第一个输入框 inputbox(100, 150, "请输入问题2:", str2, 20); // 创建第二个输入框 outtextxy(100, 200, str1); // 在窗口中显示第一个问题的答案 outtextxy(100, 220, str2); // 在窗口中显示第二个问题的答案 getch(); // 等待用户按下任意键 closegraph(); // 关闭窗口 return 0; } ``` 在运行上述代码后,程序会在窗口中弹出一个对话框,提示用户回答两个问题。用户回答完成后,程序会在窗口中显示两个问题的答案,等待用户按下任意键后关闭窗口。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值