概述ios
这是一个终端的图形界面库,补充gui的啊,在terminal上作东东,就实用来讲,这个比gui还多了,轻便并且功能强悍 相似的库:termios.h 这个文件能够彻底的控制终端,终端本质上只是一种流设备,termios.h这个,是针对这个流设备的, 不仅针对界面的,其中,好比于界面毫无关系的波特率等设置.而ncurses是专门的界面库. 在ncurses.h 中能够找到跟本文介绍的相关函数.函数
缺点ui
中文支持不是很好.spa
思想指针
面向过程的想法,不断的向系统发送命令,开启,关闭模式,等,打到想要的效果.进程
依赖terminal
-lncurses 最好使用 pkg-config –cflags –libs ncursesget
开启和结束it
开始ncurses模式,须要io
initscr();
返回一个WINDOWS指针,默认会使用stdscr.也能够本身接收处理,用于有多个win的状况.
endwin();
结束ncurses对终端的控制,终端仍是那个终端,只是运行initscr后,ncurses得到了对终端的控制,能够理解为ncureses释放了终端.
注解
ncurses控制的是当前终端,使用ncurses的程序退出后,ncurses对终端的影响还会起做用,由于无论那个程序,使用的是 同一个终端,执行endwin,就避免了对下一个程序的影响,一般须要 atexit(func) 挂载一个退出钩子,执行这个函数.
基本的终端设置
在initscr之后,ncurses得到了对终端的控制,若是不设置,就是默认的哪些设置,跟通常的终端没有什麽区别嘛,通常都会进行一些设置的,设置函数以下:
cbreak()
设置无buff模式,就是键入的字符马上被读取的意思,默认就是这样的.执不执行同样.
nocbreak()
设置为buff模式,在这个模式下,只有return或者newline(就是enter键啦)才会让getch返回,让ncurese获得输入.
noecho()
设置无会显模式,就是按下可显示字符时,不在默认输出了,让咱们能够自由的控制,好比输入密码的时候.
echo()
设置能够会显.
nl()
设置受到回车的时候换一行,并让getch获得这个输入.
nonl()
回车不让getch获得.只是换一行.
keypad(stdscr,TRUE)
设置把受到的特殊键好比箭头,转化为ncurses定义的以KEY开头的数字宏,
keypad(stdscr,FALSE)
设置接收到特殊键的时候以转化后的转义字符表示,这种表示是没法进行判断的.
其中stdscr是一个窗口.
scrollok(stdscr, TRUE)
设置是否能够滚东屏幕,stdscr是默认窗口,也能够设置自定义的一块窗口区域能够滚动.或者不能滚动.
基本的输入
int c = getch()
等待用户输入一个字符,输入特殊键时,设置keypad后,c是转行后的数字,没有设置,
就会返回几个转移字符. 注意返回的是int型.
int c = wgetch(stdscr)
等待用户输入.在一个 窗口 等待,这个窗口是ncurses的虚拟概念.用第一个好了.
基本的输出
printw(fmt, …)
参数和printf是同样的,只是把f换成了w,格式化输出.这个默认是不会马上显示的.只是写到
了buff里,想一想双缓冲的概念,显示一个,这里写的是另外一个.
refresh()
刷新界面,交换两个缓冲区,马上显示,让用户本身定义什么时候进行显示,给用户更大的自由度.
mvprintw(int y, int x, fmt, …)
这个也是输出,是必定光标的输入点后,在接收输入字符.y 是第几行,x 是第几列.使用的 x 和 y 和窗口坐标系 是一致的,只是行数的参数第一个是 y 第二个是 x .
坐标的移动和肯定
move(y ,x)
移动坐标到 y 行, x 列. 相似的还有 wmove(win, y, x) 移动一个win的光标.
int getcurx(stdscr)
获得一个窗口的内的当前光标所在的列数.多个窗口的话修改stdscr就行了.
int getcury(stdscr)
获得一个窗口的当前光标所在的行.
相似的还有 int getmaxx(stdscr) int getmaxy(stdscr) 获得窗口的最大列数和行数.
颜色的简单控制
概述
ncurses的颜色一样使用命令开关的模式,使用ncurses的进程无论如何设置,使用的都是同一个终端,即便进程结束了,终端给其余 进程使用了,这个终端也仍是一个终端.
ncurses开启颜色后,须要将两个颜色,前景色和背景绑定,生成一个颜色对,并给这个颜色对一个id,通个id来使用颜色对,能够绑定多个颜色对,使用开启关闭来控制.
bool has_colors()
判断是否当前终端支持颜色显示.
start_clolr()
开启颜色显示模式, 必须执行 执行之后才可使用颜色显示,不执行,默认并不开启颜色显示模式的.并无stop_color(), 在执行end_win的时候,统一将终端恢复到初始时的状态.
init_pair(int id, front_color, back_color)
绑定一个颜色对,并标记为id,这个绑定的颜色对,被记录在ncurses的内部,id只是一个键值.ncurses预约义了八种属性: COLOR_BLACK COLOR_RED COLOR_GREEN COLOR_YELLOW COLOR_BLUE COLOR_MAGENTA COLOR_CYAN COLOR_WHITE 若是这些颜色不满意,能够通个 init_color(COLOR_RED, 700, 0, 0) 自定义颜色(后面的参数是以1000为基数的RGB), 经过 color_content() 和 pair_content() 查看当前的颜色设置状况
attron(COLOR_PAIR(id))
开启id这个颜色对,attron表示让终端开启一个属性,COLOR_PAIR表示开启一个颜色属性,id是颜色属性的参数, 开启颜色属性后,在使用输出函数(printw, mvprintw等)时,就会打印对应的颜色. 一直有效,直到执行attroff
attroff(COLOR_PAIR(id))
关闭一个颜色属性,以后,终端回复到默认状态,使用输出语句输出就正常了.