首页 > 其他分享 >EasyX入门笔记

EasyX入门笔记

时间:2023-01-10 00:34:17浏览次数:60  
标签:窗口 入门 lib EasyX 笔记 填充 绘图 坐标

基于EasyX的C++图形化界面实现

什么是EasyX?

EasyX 是针对 C++ 的图形库,可以帮助 C/C++ 初学者快速上手图形和游戏编程。

比如,可以基于 EasyX 图形库很快的用几何图形画一个房子,或者一辆移动的小车,可以编写俄罗斯方块、贪吃蛇、黑白棋等小游戏,可以练习图形学的各种算法,等等。

EasyX将windows下的复杂程序进行封装,开发者无需调用底层的windows api即可实现各种图形功能。

安装EasyX

[官网地址](EasyX Graphics Library for C++)

[官网下载地址](下载 EasyX)

EasyX 安装程序是用 7-Zip 封装的自解压缩包程序。

EasyX原生支持windows系统下的Visual C++ 6.0以及Visual Studio 2008以上的版本

若使用上述ide,安装时只需要跟随安装程序的指引安装即可

若使用其他ide,可以将安装文件解压,再根据下面的文件列表说明,将解压后的相关文件分别拷贝到对应的 include 和 lib 文件夹内。

EasyX 安装程序
	├ include <folder>
	│	├ easyx.h 					// 头文件(提供了当前最新版本的接口)
	│	└ graphics.h				// 头文件(在 easyx.h 的基础上,保留了若干旧接口)
	├ lib <folder>
	│	├ VC6 <folder>
	│	│	└ x86 <folder>
	│	│		├ EasyXa.lib		// VC6 库文件(MBCS 版本)
	│	│		└ EasyXw.lib		// VC6 库文件(Unicode 版本)
	│	├ VC2008 <folder>
	│	│	├ x64 <folder>
	│	│	│	├ EasyXa.lib		// VC2008 ~ 2013 库文件(x64, MBCS 版本)
	│	│	│	└ EasyXw.lib		// VC2008 ~ 2013 库文件(x64, Unicode 版本)
	│	│	└ x86 <folder>
	│	│		├ EasyXa.lib		// VC2008 ~ 2013 库文件(x86, MBCS 版本)
	│	│		└ EasyXw.lib		// VC2008 ~ 2013 库文件(x86, Unicode 版本)
	│	└ VC2015 <folder>
	│		├ x64 <folder>
	│		│	├ EasyXa.lib		// VC2015 ~ 2022 库文件(x64, MBCS 版本)
	│		│	└ EasyXw.lib		// VC2015 ~ 2022 库文件(x64, Unicode 版本)
	│		└ x86 <folder>
	│			├ EasyXa.lib		// VC2015 ~ 2022 库文件(x86, MBCS 版本)
	│			└ EasyXw.lib		// VC2015 ~ 2022 库文件(x86, Unicode 版本)
	└ Setup.hta						// 安装程序

EasyX的基本概念

颜色

EasyX使用24bit真彩色表示颜色

16进制的颜色表示规则为0xbbggrr (bb=蓝,gg=绿,rr=红)

一些预定义的颜色如下

常量			值			颜色
--------		--------	--------
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	白

可以使用RGB宏来定义颜色

RGB(255, 255, 255)//等价于0xFFFFFF

设备

所谓“设备”,就是指当前操作的绘图界面。”设备“包括默认的绘图窗口以及IMAGE对象。

通过SetWorkingImage函数可以设置当前用于绘图的设备

void SetWorkingImage(IMAGE* pImg = NULL);

pImg为绘图设备指针。如果为 NULL,表示绘图设备为默认绘图窗口。

坐标

在 EasyX 中,坐标分两种:物理坐标和逻辑坐标。

物理坐标

物理坐标是描述设备的坐标体系。

坐标原点在设备的左上角,X 轴向右为正,Y 轴向下为正,度量单位是像素。

坐标原点、坐标轴方向、缩放比例都不能改变。

逻辑坐标

逻辑坐标是在程序中用于绘图的坐标体系。该体系的原点、坐标系方向、缩放比例可以自行修改

坐标默认的原点在窗口的左上角,X 轴向右为正,Y 轴向下为正,度量单位是点。

默认情况下,逻辑坐标与物理坐标是一一对应的,一个逻辑点等于一个物理像素。

凡是没有注明的坐标,均指逻辑坐标。

图形绘制原理

EasyX提供了大量图形绘制函数(见EasyX 文档 - 图形绘制相关函数),这些可以绘制的图形大致可以分为三类:

  1. 纯线条,如linecircle

  2. 纯填充,如solidcirclesolidrectangle

  3. 线条加填充,如fillcirclefillpolygon

图形的线条和填充的样式及颜色需要在绘制前分别设置

EasyX的常用函数

绘图设备相关函数

initgraph 初始化绘图窗口

HWND initgraph(
	int width,
	int height,
	int flag = NULL
);
参数

width

绘图窗口的宽度。

height

绘图窗口的高度。

flag

绘图窗口的样式,默认为 NULL。可为以下值:

含义
EX_DBLCLKS 在绘图窗口中支持鼠标双击事件。
EX_NOCLOSE 禁用绘图窗口的关闭按钮。
EX_NOMINIMIZE 禁用绘图窗口的最小化按钮。
EX_SHOWCONSOLE 显示控制台窗口。
initgraph(640, 480);//创建一个尺寸为 640x480 的绘图窗口

cleardevice 清空绘图

这个函数使用当前背景色清空绘图设备。

void cleardevice();

closegraph关闭绘图

这个函数用于关闭绘图窗口。

void closegraph();

颜色设置相关函数

setbkmode

设置背景模式为透明还是填充

[setbkcolor 设置当前设备绘图背景色](EasyX 文档 - setbkcolor)

注意设置完之后不会立即生效,需要cleardevice()之后才会改变背景颜色

[setlinecolor 设置当前设备画线颜色](EasyX 文档 - setlinecolor)

setlinestyle 设置当前设备画线样式

setfillcolor 设置当前设备填充颜色

setfillstyle 设置当前设备填充样式

setpolyfillmode 设置当前设备多边形填充模式

该设置影响 fillpolygonsolidpolygonclearpolygon 三个绘制多边形函数的执行效果。慎用这三个函数。

图形绘制相关函数

详见EasyX 文档 - 图形绘制相关函数

  1. 纯线条类

line 画直线

circle 画无填充圆

rectangle 画无填充矩形

  1. 纯填充类

solidrectangle 画无边框的填充矩形

solidcircle 画无边框的填充圆

  1. 混合类

fillcircle 画有边框的填充圆

fillrectangle 画有边框的填充矩形

标签:窗口,入门,lib,EasyX,笔记,填充,绘图,坐标
From: https://www.cnblogs.com/leason-lyx/p/17038938.html

相关文章

  • SpringBoot笔记--自动配置(高级内容)(中集)
    @Enable*注解使用该注解,需要导入相应的依赖坐标,其中的groupId标签里面写入Bean的Java文件所在的包的路径下面spring-enable-other还需要在SpringBoot的执行文件那里加......
  • Spring IOC官方文档学习笔记(八)之容器扩展点
    1.通过BeanPostProcessor来自定义bean(1)BeanPostProcessor用于在容器完成了对bean的实例化,配置及初始化后来实现一些自定义逻辑,它是用于操纵由容器创建的每个bean实例的......
  • GTK 学习笔记
    初创建于:2022-08-1317:57GTKNOTESGeneratecompile_commands.json在编写gtk程序时,需要使用到:#include<gtk/gtk.h>///...但实际上,这个库的路径是/usr/......
  • Linux入门笔记
    Linux命令command[-options][parameter]options可选选项,控制命令的行为细节parameter可选参数,控制命令的指向目标ls命令ls[-a-l-h][Linux路径]在命令行中,以......
  • HTML 入门
    01.html的历史1982年,TimBerners-Lee建立HTML1993年6月,HTML由IETF工作小組发布草案1994年10月,W3C成立,网络应用发展的标准规范交由W3C协会制定及推广1995年11......
  • SpringBoot笔记--自动配置(高级内容)(上集)
    原理分析自动配置Condition--增加的条件判断功能来一个案例说明:具体实现:没有要求的话,就是这样的:Config.javaUser.javaSpringLearnApplication.java结果:加上......
  • 入门2年的ctf新手自述--web方向
    为什么想写这篇博客,为什么要要跟大家分享?因为我的确入门费了非常多的时间,有很多坎。首先是自己的精力因为很多事情,确实分散了很多,有创新创业项目、学生工作、学业等等,没有......
  • JavaScript学习笔记—常量、标志符
    1.常量使用const声明常量,常量只能赋值一次,重复赋值会报错除了常规的常量外(如PI),有一些对象类型的数据也会生命为常量constPI=3.1415926;console.log(PI);//3.14......
  • 区块链入门 ③ - 交易
    区块链入门③-交易交易概述比特币交易本质上包含交易参与者价值转移的相关信息数据结构。比特币区块链是一本全球复式记账总账簿,每笔交易都是在比特币区块链上的一个......
  • GPU笔记
    图形流水线内存里面专门开了一块空间用来存储即将显示到显示器上的【像素】们。用你家显示器分辨率乘积的结果就可以算出你家的显示器可以显示多少个像素。每个像素用RGB2......