Linux环境下非GUI制作图形界面方法
如题,即就是仅仅使用ANSI转义字符实现Linux环境的页面效果,如字体颜色、背景颜色、高亮、固定位置光标、将光标放到指定位置、隐藏字符串等等。
具体实现方法在如下代码中,使用方法在注释里可以看到。
//
#ifndef __PRINT_H__
#define __PRINT_H__
#include
/**
* Readme: This Header file is used for set special display characters of screen such as
* background color and Font color etc.
*/
/*
颜色代码: QUOTE:
字背景颜色范围: 40--49 字颜色: 30—39
40: 黑 30: 黑
41: 红 31: 红
42: 绿 32: 绿
43: 黄 33: 黄
44: 蓝 34: 蓝
45: 紫 35: 紫
46: 深绿 36: 深绿
47: 白色 37: 白色
ANSI控制码:
QUOTE:
33[0m 关闭所有属性
33[1m 设置高亮度
33[4m 下划线
33[5m 闪烁
33[7m 反显
33[8m 消隐
33[30m -- 33[37m 设置前景色
33[40m -- 33[47m 设置背景色
33[nA 光标上移n行
33[nB 光标下移n行
33[nC 光标右移n行,从0开始就是移动第一个字符。 eg:printf("33[0CHello World!----n");
33[nD 光标左移n行,从0开始就是移动第一个字符。
33[y;xH设置光标位置
33[2J 清屏
33[K 清除从光标到行尾的内容
33[s 保存光标位置
33[u 恢复光标位置
33[?25l 隐藏光标
33[?25h 显示光标
* */
/* 用法:以清屏功能举例,printf("%sHahan",CLRSCREEN); 或 printf(CLRSCREEN "Hahan"); 均可 */
//以下设置字体颜色
#define BLACK "e[0;30m" //黑色
#define L_BLACK "e[1;30m" //亮暗黑
#define RED "e[0;31m" //红色
#define L_RED "e[1;31m" //亮红
#define GREEN "e[0;32m" //绿色
#define L_GREEN "e[1;32m" //亮绿
#define BROWN "e[0;33m" //棕色
#define YELLOW "e[1;33m" //黄色
#define BLUE "e[0;34m" //蓝色
#define L_BLUE "e[1;34m" //亮蓝
#define PURPLE "e[0;35m" //紫色
#define L_PURPLE "e[1;35m" //亮紫
#define CYAN "e[0;36m" //青色
#define L_CYAN "e[1;36m" //亮青
#define GRAY "e[0;37m" //灰色
#define WHITE "e[1;37m" //亮白色
//以下设置背景色
#define B_BLACK "e[0;40m" //背景黑色
#define B_RED "e[0;41m" //背景红色
#define B_GREEN "e[0;42m" //背景绿色
#define B_BROWN "e[0;43m" //背景棕色
#define B_YELLOW "e[1;43m" //背景黄色
#define B_BLUE "e[0;44m" //背景蓝色
#define B_PURPLE "e[0;45m" //背景紫色
#define B_CYAN "e[0;46m" //背景青色
#define B_GRAY "e[0;47m" //背景灰色
#define B_WHITE "e[1;47m" //背景白色
//以下设置属性
#define NONE "e[0m" //关闭所有属性
#define BOLD "e[1m" //加粗
#define UNDERLINE "e[4m" //下划线
#define BLINK "e[5m" //闪烁
#define REVERSE "e[7m" //反显
#define HIDE "e[8m" //消隐
#define CLEAR "e[2J" //清屏
#define CLRLINE "re[K" //清除从光标到行尾的内容
#define rdgn "e[1;0;33;1m" //加粗+关闭所有属性+棕色+加粗。[从该行开始文字加粗加棕色]
/*
* rdgn功能不必这么使用。可以直接例如:printf(BOLD NONE BROWN BOLD "Hello_World!n");这样简单明了
* 也可以这样写简单一点:printf(BROWN BOLD "Hello_World!n"); 也就是先写颜色再写加粗。
* ------------------------------------分------割------线------------------------------------
* 在大多数编程和脚本环境中,e 并不是一个标准的转义序列来表示 "Escape" 字符(ASCII 27).
* 33 是一个标准的八进制转义序列
* 区别就是这些。用哪个看你。
*/
#define CLR_LINE "33[k" //清除从光标到行尾的内容
#define CLR_SCREEN "33[2J" //清屏
#define POS(x,y) "33["#y";"#x"H" //设置xyy位置
#define TWINKLE "33[5m" //闪烁
#define CURSOR_HIDE "33[?25l" //隐藏光标
#define CURSOR_SHOW "33[?25h" //显示光标
#define CURSOR_UP(n) "33["#n"A" //光标上移
#define CURSOR_DOWN(n) "33["#n"B" //光标下移
#define CURSOR_RIGHT(n) "33["#n"C" //光标右移
#define CURSOR_LEFT(n) "33["#n"D" //光标左移
#define CURSOR_SAVE "33[s" //保存光标位置
#define CUUSOR_RESTORE "33[u" //恢复光标位置
/**
* @brief :清空一定范围的矩形区域
* @param row:行号
* @param start_col:起始列号
* @param end_col:终止列号
*/
#define CLEAR_RANGE(row, start_col, end_col) printf("33[%d;%dH33[K", row, start_col)
#endif
//