CUI 字符界面
GUI:图形界面
使用一套封装库 libcruses.so
老版本 libcurses.so
新版本 libncruses.so
编译时需要-lcurses 或者-lncurses
如果头文件curses.h不存在 则尝试使用ncurses.h
printf /scanf标准IO
大部分标准IO重定向到 /dev/tty /det/pts/1
curses就是终端输出
为了防止printf重定向到终端破坏UI,禁止用printf输出
1 编程模型
初始化终端 WINDOW* initscr();返回一个被初始化的窗体
操作终端(输入/输出/定位/刷新)
释放终端 int endwin()
2 显示
2.1 图形输出
border 打印一个边框int border(chtype ls, chtype rs, chtype ts, chtype bs,
chtype tl, chtype tr, chtype bl, chtype br);
8个参数分别为 左 右 上 下 左上 右上 左下 右下 的字符
可以采用8个0来采用默认边框
border('a','b','c','e','f','g','h','g');
border(0,0,0,0,0,0,0,0);
wborder 在指定窗体画一个边框
box 打印一个边框
int box(WINDOW *win, chtype verch, chtype horch);
box需要窗体,只能设置水平和垂直的边框字符
标准屏幕除了在init_scr()的返回外 还可以使用全局变量stdscr
box(stdscr,0,0); 效果和border(0,0,0,0,0,0,0,0);是一样的
hline 画水平线
hline 在 标准窗体 光标位置 画水平线
whline 在 指定窗体 光标位置 画水平线
mvhline 在 标准窗体 指定位置 画水平线
mvwhline 在 指定窗体 指针位置 画水平线
vline 画垂直线(同hline)
属性字符:字节=属性字节+字符字节
注意:
box需要窗体
initscr返回被初始化的窗体:标准屏幕
curses定义了一个全局变量stdscr表示标准窗体
命名规则:
*** 某函数
w*** 在某窗体运行某函数
mv*** 在指定位置运行某函数
mvw*** 在指定窗体指定位置运行某函数
2.2刷屏
void refresh(); //将输出立刻显示出来 一般习惯来说是输出之后立刻refreshvoid wrefresh(WINDOW*);
从里到外刷屏
3 字符输出
int addch(const chtype ch);int waddch(WINDOW *win, const chtype ch);
int mvaddch(int y, int x, const chtype ch);
int mvwaddch(WINDOW *win, int y, int x, const chtype ch);