9、Ncurses的初始化相关工作
(1)raw()和cbreak()
禁止行缓冲,在raw()函数模式下,处理挂起(CTRLZ)、中断或退出(CTRLC)等控制字符时,将直接传送给程序去处理而不产生终端信号,而cbreak()将产生终端信号。
(2)cho()函数和noecho()函数
控制是否将从键盘输入的字符回显在终端上。
(3)keypad()函数
允许使用功能键。
(4)initscr()函数
屏幕初始化并进入curses 模式
(5)printw()与refresh()函数
printw()函数的作用是不断将一些显示标记和相关的数据结构写在虚拟显示器上,并将这些数据写入stdscr 的缓冲区内。须使用refresh()函数告诉curses系统将缓冲区的内容输出到屏幕上。
下面例子演示了相关用法
(6)endwin()
函数释放了curses 子系统和相关数据结构占用的内存,使你能够正常返回控制台模式。
(7)addch()、printw()、addstr()
在curses 函数中有三类输出函数,它们分别是:
addch():将单一的字符打印到屏幕上,可以附加加字符修饰参数的一类函数。
printw():和printf()一样的具有格式化输出的一类函数。
addstr():打印字符串的一类函数,用于在指定窗口输出字符串
(8)mvprintw()
函数将光标移动到指定的位置,然后打印内容。
代码如下:
dp@dp:~/cursestest % cat 1.c
#include <ncurses.h>
#include <locale.h>
int main()
{
int ch;
setlocale(LC_ALL,"");
initscr(); /* 开始curses 模式*/
raw(); /* 禁用行缓冲*/
keypad(stdscr, TRUE); /* 开启功能键响应模式*/
noecho(); /* 当执行getch()函数的时候关闭键盘回显*/
printw("请按键!");
ch = getch(); /* 如果没有调用raw()函数,
我们必须按下enter 键才可以将字符传递给程序*/
if(ch == KEY_F(2)) /* 如果没有调用keypad()初始化,将不会执行这条语句*/
printw("F2键按下!");
/* 如果没有使用noecho() 函数,一些控制字符将会被打印到屏幕上*/
else
{
printw("按键是:");
attron(A_BOLD);
printw("%c", ch);
attroff(A_BOLD);
}
refresh(); /* 将缓冲区的内容打印到显示器上*/
getch(); /* 等待用户输入*/
endwin(); /* 结束curses 模式*/
return 0;
}
编译并执行程序:
dp@dp:~/cursestest % gcc -lncursesw 1.c -o mytest
dp@dp:~/cursestest % ./mytest