内容发布更新时间 : 2024/12/23 22:01:16星期一 下面是文章的全部内容请认真阅读。
NCURSES 函数简要参考 BenBear 目录 说明 简介 初始化与结束 基本输入、输出函数预览 函数命名、参数习惯 getch() 窗口 WINDOW 颜色 Panel、Menus 和 Forms 其它 参考资料 说明 在这里写下对 NCURSES 库使用的经验,希望对你有用。由于条件的不足, 我只是在 WMware Workstation 4.0.5 里安装的 Debian Linux 3.0 r2 下使用 过 NCURSES,所以这里所说的片面性在所难免,还请细查。如有问题,你可以给 我发邮件:cxj1024@etang.com。 简介 NCURSES 是 Linux 下进行终端界面开发的库,其功能相当强大。它以 WINDOW(窗口)为基本要素,在此基础上支持 Panel、Memus 及 Forms 等更加 强大的元素。更多的信息请参考资料。 初始化与结束 当然了,为了使用 NCURSES 库,你应该 #include
一般地,第一个函数调用必须是 initscr()。这个函数初始化终端,然后清 屏。它的参数为空,返回值一般也不用管。它会初始化一个叫 stdscr 的变量, stdscr 有点像 stdin 或 stdout 的地位,它是 NCURSES 默认的窗口。 紧接着 initscr() 的应该是其它初始化,下面一一介绍。
即时按键。raw() 和 cbreak() 两个函数都是用来关闭行缓冲以使按键可以 马上被程序处理的。只是 cbreak() 可以在按 Ctrl-C 的时候退出程序,我一般 用这个。两个函数都无参数。
使用功能键。keypad() 可以用来打开一个窗口的功能键,从来使程序可以 识别 F1、F2、Up、Down 等这样的按键。一般用 keypad (stdscr, TRUE) 来打 开 stdscr 的这项功能。
按键回显。echo() 和 noecho(),后者可以关闭按键回显,这在使用 getch() 时特别有用。在程序中间,二者可以交替使用。两个函数都无参数。 换行符。nl() 和 nonl(),用来设置换行是对应一个 '\\n' 还是 '\\r'\\n'。 一般使用默认的就要可以了,所以不需调用。两个函数都无参数。
启动颜色。has_colors() 返回一个 bool 值,用来表示终端是否支持颜色; 支持则返回真。如果支持颜色,那么就可以用 start_color() 来打开颜色功能。 终合这些,我的初始化代码一般是: initscr (); cbreak (); noecho ();
start_color ();
keypad (stdscr, TRUE);
结束很简单,只需调用 endwin(); 即可,但一定要记得调用。如下: endwin();
基本输入、输出函数预览
由于 NCURSES 已经接管了输入输出,所以
很高兴的是,NCURSES 中基本的输入输出设计得跟标准 I/O 十分相似,比 如输出有 printw(),输入有 scanw(),呵呵,只是把“f”换成了“w”,其它
定义完全一样。
基本的输出函数有 addch()、addstr()、printw(),分别为输出一个字符、 输出一个字符串和格式化输出。在这几个函数上会演化出很多函数。演化的两大 要素是:坐标和窗口。
坐标是相对于窗口的左上角的,从 (0, 0) 开始,但注意 NCURSES 里的下 标是 (y, x) 表示的,这个务必记住。move(y, x); 可以直接移动 stdscr 的光 标到某一位置。窗口 Window 是 NCURSES 的基本操作对象,事实上所有的的输 入输出都关联到窗口上,如果缺省的话,就是 stdscr。 当然,从 addstr() 到 addnstr() 也是一种演化。
例如 addch() 这一系列的函数有:addch()、mvaddch()、wadch() 和
mvwaddch() 四个。其中“mv”表示 move,也就是移动到某一坐标处再输出。而 “w”表示 Window,即向某一窗口输出。而 move() 也可以变化成 wmove()。 要注意的是,这些输出不是直接输出到屏幕上的,而是输出到某一窗口(当 然缺省的是 stdscr)。所以应该使用 refresh() 刷新 stdscr 的输出;对应的, 用 wrefresh() 可以刷新某一窗口的输出;wrefresh(stdscr) == refresh()。 基本的输入函数有 getch()、getstr()、scanw(),也可以演化出很多函数。 echo 的设置会对输入函数产生一定的影响,可能由于 noecho 而使输入时 没有回显。如果这样的话,可以先打开 echo 然后再关闭。按照我看的资料,像 scanw () 这样的函数,会自动打开 echo 的,但实际上确实出现了没有回显的 情况。
函数名命、参数习惯
这些输入输出函数都是很规范的,下面总结一下。
如果没有前缀,那就表示在 stdscr 的当前位置输入或输出。如果前缀是 “w”,表示向某一个窗口的当前位置上操作。如果前缀是“mv”,表示要在 stdscr 的某一位置上操作。如果前缀是“mvw”,表示在某一窗口的某一位置上 进行操作。
参数的排列是这样的:([WINDOW,] [y, x,] arg1, agr2, ...)。也就是如 果有窗口,那么窗口就是第一个参数;其次是如果有 (y, x),处于窗口后而在 其它参数前。如 addch() 系列是:addch(ch)、mvaddch(y, x, ch)、 waddch(win, ch)、mvwaddch (win, y, x, ch)。 知道这些规则,对于记忆众多的函数大有益处。