-
Notifications
You must be signed in to change notification settings - Fork 1
CLI GUI Rendering
MemoryShadow edited this page Sep 12, 2022
·
1 revision
此项正在编辑
在此处展示这个头文件的相关函数与相关类型
这个头文件中包含了以下几个类型
类型名 | 原始类型 | 作用 |
---|---|---|
Paint_layer | struct | 中文称谓(在注释中):绘制层 其中储存了有关于本层的绘制信息,可以在相关控制函数的帮助下移动或者绘制新的信息 |
Window_layer | struct | 中文称谓(在注释中):窗口层 其中标记了一个"界面",不可储存数据,但是可以拥有多个绘制层 |
Event | struct | 中文称谓(在注释中):事件结构 在事件中会传入回调函数的结构 |
_Layer_Flag | enum | 中文称谓(在注释中):层选项 创建新的层时可用于配置, 不同值可以用|符号进行隔开同时提交 |
EventTypes | enum | 中文称谓(在注释中):事件类型 当发生事件时会包含在事件类型当中 |
声明结构
struct Paint_layer
{
// 层的宽
unsigned width;
// 层的高
unsigned height;
// 记录每个点的内容
CHAR **Data;
// 为链表做的准备
Paint_layer *Next;
};
声明结构
typedef struct Paint_layer Window_layer;
声明结构
typedef struct
{
// 事件类型
EventTypes type;
// 事件触发的层
struct _Layer *layer;
unsigned layer_index;
// 事件触发的位置
COORD position;
// 事件触发的值
struct {
// 碰撞事件的值
CHAR *old;
CHAR *new;
} P_value;
} Event;
声明结构
typedef enum
{
// 用于标识此层的属性,1为窗口层,0为绘制层
Attributes = 1, // (0000 0001)
// "不再更新" 选项,设置为1将预渲染此层数据,并置于底层用于加快渲染,设置为0将渲染此层,默认为0
NotUpdate = 2, // (0000 0010)
// "不要渲染" 选项,设置为1将不渲染此层数据,用于加快渲染,设置为0将渲染此层,默认为0
NotRender = 4, // (0000 0100)
} _Layer_Flag;
声明结构
typedef enum
{
// 碰撞事件
Collision = 1, // (0000 0001)
} EventTypes;
这个头文件中包含了以下几个函数
函数名 | 参数列表 | 返回类型 | 具体作用 | 使用示例 |
---|---|---|---|---|
new_Window_layer |
unsigned width unsigned height
|
Window_layer * | 创建一个Window_layer结构,返回新建的指针您可以理解为面向对象语言中的new操作符
|
Window_layer *main_layer = new_Window_layer(20, 15); |
new_Paint_layer | Window_layer *Window |
Paint_layer * | 在指定窗口的顶层创建一个绘制层您可以理解为面向对象语言中的new操作符
|
Paint_layer *edge_layer = new_Paint_layer(main_layer); |
layer_length | const Window_layer *Window |
unsigned | 计算某个窗口层的绘制层数量 | 示例代码见详解 |
Remove_layer |
Window_layer *Window unsigned index
|
Paint_layer * | 将某个绘制层从所属的窗口层中剥离出来(会拒绝剥离0) | Remove_layer(main_layer,1) |
delete_Paint_layer | Paint_layer *layer |
Paint_layer * | 释放某个窗口层的内容,您可以理解为面向对象语言中的delete操作符 (别忘记先将其从窗口层中剥离) |
delete_Paint_layer(Window) |
delete_Window_layer | Window_layer *Window |
void | 释放某个窗口层(会删除其所有绘制层)您可以理解为面向对象语言中的delete操作符
|
delete_Window_layer(main_layer) |
layer_index |
Window_layer *Window unsigned index
|
Paint_layer * | 取得某个窗口层中指定索引的绘制层指针 | layer_index(main_layer,1) |
Write_Point |
Paint_layer *layer unsigned x unsigned y CHAR Char
|
Paint_layer * | 在指定的层中指定的位置,填充指定的字符(成功返回此层指针,失败返回NULL) | 示例代码见详解 |
Get_Point |
Paint_layer *layer unsigned x unsigned y
|
CHAR | 在指定的层中获取指定位置的字符(成功返回此字符,失败..就返回\0好了) | 示例代码见详解 |
WindowDraw |
Window_layer *Window int Convert = 0
|
void | 绘制指定的窗口,参数Convert控制是否对于特定的半角字符转换为全角进行渲染 | WindowDraw(main_layer) |
layer_Move |
Paint_layer *layer unsigned Direction unsigned length
|
Paint_layer * | 将一个绘制层按照指定的方向移动指定的步长 | layer_Move(layer_length(main_layer,1),Up,1) |
函数原型:
Window_layer *new_Window_layer(unsigned width, unsigned height);
对于它的两个参数:
unsigned width
:标记了这个窗口层的最大宽度
unsigned height
:标记了这个窗口层的最大高度
创建一个Window_layer结构,返回新建的指针
您可以理解为面向对象语言中的new操作符
示例代码:
Window_layer *main_layer = new_Window_layer(20, 15);
它看起来像极了C++中的new语法对吗,是的,这就是沿用了C++的语法,但是这个工具目标是在C下运行的,所以千万不要忽略了new后面的下划线
参考资料:C++中的new语法
上面所提到的,沿用了C++的语法,此处是参考,对于尚未接触面向对象语言,或者接触过但是尚未接触C++语言的开发者,可能这部分资料会对你有一些帮助.
Window_layer *main_layer = new Window_layer(20, 15);
这段代码将会调用类型Window_layer的构造器Window_layer::Window_layer(unsigned,unsigned)
新增一个Window_layer类型的实例,这个实例的指针会被Window_layer的构造器
返回
并且放到Window_layer *main_layer
所声明的Window_layer类型指针main_layer中去.
如果想要了解更多,请参阅C++文档