ncurses界面库,为了测试,简单使用了一下,总结如下

ncurses界面库

  1. 概述

    这是一个终端的图形界面库,补充gui的啊,在terminal上做东东,就实用来说,这个比gui还多了,轻便而且功能强悍类似的库:termios.h 这个文件可以完全的控制终端,终端本质上只是一种流设备,termios.h这个,是针对这个流设备的,不只针对界面的,其中,比如于界面毫无关系的波特率等设置.而ncurses是专门的界面库.在ncurses.h 中可以找到跟本文介绍的相关函数.

  2. 缺点

    中文支持不是很好.

  3. 思想

    面向过程的想法,不断的向系统发送命令,开启,关闭模式,等,打到想要的效果.

  4. 依赖

    -lncurses 最好使用 pkg-config –cflags –libs ncurses

  5. 开启和结束

    开始ncurses模式,需要

    initscr();

    返回一个WINDOWS指针,默认会使用stdscr.也可以自己接收处理,用于有多个win的情况.

    endwin();

    结束ncurses对终端的控制,终端还是那个终端,只是运行initscr后,ncurses获得了对终端的控制,可以理解为ncureses释放了终端.

    注解

    ncurses控制的是当前终端,使用ncurses的程序退出后,ncurses对终端的影响还会起作用,因为不管那个程序,使用的是同一个终端,执行endwin,就避免了对下一个程序的影响,通常需要 atexit(func) 挂载一个退出钩子,执行这个函数.

  6. 基本的终端设置

    在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是默认窗口,也可以设置自定义的一块窗口区域可以滚动.或者不能滚动.

  7. 基本的输入

    int c = getch()

    等待用户输入一个字符,输入特殊键时,设置keypad后,c是转行后的数字,没有设置,

    就会返回几个转移字符.注意返回的是int型.

    int c = wgetch(stdscr)

    等待用户输入.在一个 窗口 等待,这个窗口是ncurses的虚拟概念.用第一个好了.

  8. 基本的输出

    printw(fmt, …)

    参数和printf是一样的,只是把f换成了w,格式化输出.这个默认是不会立刻显示的.只是写到

    了buff里,想想双缓冲的概念,显示一个,这里写的是另一个.

    refresh()

    刷新界面,交换两个缓冲区,立刻显示,让用户自己定义何时进行显示,给用户更大的自由度.

    mvprintw(int y, int x, fmt, …)

    这个也是输出,是一定光标的输入点后,在接收输入字符.y 是第几行,x 是第几列.使用的 x 和 y 和窗口坐标系是一致的,只是行数的参数第一个是 y 第二个是 x .

  9. 坐标的移动和确定

    move(y ,x)

    移动坐标到 y 行, x 列. 类似的还有 wmove(win, y, x) 移动一个win的光标.

    int getcurx(stdscr)

    得到一个窗口的内的当前光标所在的列数.多个窗口的话修改stdscr就好了.

    int getcury(stdscr)

    得到一个窗口的当前光标所在的行.

    类似的还有 int getmaxx(stdscr) int getmaxy(stdscr) 得到窗口的最大列数和行数.

  10. 颜色的简单控制

    概述

    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_YELLOWCOLOR_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))

    关闭一个颜色属性,之后,终端回复到默认状态,使用输出语句输出就正常了.

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值