linux下文本界面开发 - HeavyYuan/A-CD-Record-Management-System GitHub Wiki
curses函数库
curses函数库提供了相对于termios和terminfo的更高层的,对键盘键入和程序输出进行控制的接口。 屏蔽对底层转移序列的直接处理。
一、屏幕控制
- 输出屏幕:
addict(), prints(), refresh(), box(), delch(), insch()
- 从屏幕读取:
inch(), instr()
- 清楚屏幕:
erase(), clear(), clrtoeol
- 移动光标:
move, leaveok
- 字符属性:
attain, attroff
- 彩色模式: curse定义了8种颜色,都以COLOR_为前缀来命名,一个前景色和一个背景色构成一个颜色组合(color pair);用户可以在8种颜色范围内自定义 color pair, 通过函数init_pair来初始化,并制定组合序号。见:others/curses/color.c
stdscr是上述大部分函数的默认参数
二、键盘控制
- 键盘模式
回显:echo/noecho
输入模式:cbreak/nocbreak
,分别对应non-canonical和canonical模式
特殊字符处理: raw/noraw
- 键盘输入:
getch(), getstr(), getnstr(), scanw()
- keypad模式:curses关闭转移序列与逻辑键之间的转换功能;并接管按键转移序列的处理。可以用来监控键盘按键输入(others/curses/keypad.c),从而实现up/down键选择菜单选项(见项目methods.c的getchoice函数)
三、窗口控制
-
屏幕上可创建多个窗口,由WINDOW结构标识,stdscr也是一个WINDOW结构
-
创建窗口函数为newwin,其返回一个WINDOW结构
-
在“屏幕控制”一节中,大部分函数其实都有一个默认省去了的参数stdscr, 而这些函数都有通用的版本,如:
addch
的通用版本函数是waddch, mvaddch, mvwaddch
,前缀w意为窗口,mv用于光标移动,mvw意味在窗口中移动光标 -
对于需要更新内容(重绘)的窗口,在调用
wrefresh()
前应当先调用touchwin()
,用以通知curses函数库该窗口内容已经变化,需要重绘 如果在wrefresh()
没有调用touchwin()
,即使窗口真有内容变化,也不会重绘。 -
自窗口创建函数为
subwin()
,与其父窗口共用字符存储空间;删除subwin之后,其内容字符不会删除。见:others/curses/subsc.c
#include <curses.h>
...
int main()
{
initscr();
......
endwin();
exit(0);
}
others下的代码来源《Beginning Linux Programming》 4th Edition