linux下文本界面开发 - HeavyYuan/A-CD-Record-Management-System GitHub Wiki

开发工具

curses函数库

curses函数库提供了相对于termios和terminfo的更高层的,对键盘键入和程序输出进行控制的接口。 屏蔽对底层转移序列的直接处理。

具体的能力控制

一、屏幕控制

  1. 输出屏幕:addict(), prints(), refresh(), box(), delch(), insch()
  2. 从屏幕读取:inch(), instr()
  3. 清楚屏幕:erase(), clear(), clrtoeol
  4. 移动光标:move, leaveok
  5. 字符属性:attain, attroff
  6. 彩色模式: curse定义了8种颜色,都以COLOR_为前缀来命名,一个前景色和一个背景色构成一个颜色组合(color pair);用户可以在8种颜色范围内自定义 color pair, 通过函数init_pair来初始化,并制定组合序号。见:others/curses/color.c

stdscr是上述大部分函数的默认参数

二、键盘控制

  1. 键盘模式

回显:echo/noecho

输入模式:cbreak/nocbreak,分别对应non-canonical和canonical模式

特殊字符处理: raw/noraw

  1. 键盘输入:getch(), getstr(), getnstr(), scanw()
  2. keypad模式:curses关闭转移序列与逻辑键之间的转换功能;并接管按键转移序列的处理。可以用来监控键盘按键输入(others/curses/keypad.c),从而实现up/down键选择菜单选项(见项目methods.c的getchoice函数)

三、窗口控制

  1. 屏幕上可创建多个窗口,由WINDOW结构标识,stdscr也是一个WINDOW结构

  2. 创建窗口函数为newwin,其返回一个WINDOW结构

  3. 在“屏幕控制”一节中,大部分函数其实都有一个默认省去了的参数stdscr, 而这些函数都有通用的版本,如: addch的通用版本函数是waddch, mvaddch, mvwaddch,前缀w意为窗口,mv用于光标移动,mvw意味在窗口中移动光标

  4. 对于需要更新内容(重绘)的窗口,在调用wrefresh()前应当先调用touchwin(),用以通知curses函数库该窗口内容已经变化,需要重绘 如果在wrefresh()没有调用touchwin(),即使窗口真有内容变化,也不会重绘。

  5. 自窗口创建函数为subwin(),与其父窗口共用字符存储空间;删除subwin之后,其内容字符不会删除。见:others/curses/subsc.c

编码模型

#include <curses.h>
...

int main()
{
    initscr();
    
    ......

    endwin();
    exit(0);
}

others下的代码来源《Beginning Linux Programming》 4th Edition

⚠️ **GitHub.com Fallback** ⚠️