ncurses的初始化

我们现在知道在程序中调用initscr()函数,屏幕就会初始化并进入curses 模式。本章我们会
介绍其它的初始化函数,这些函数可以根据我们自己的要求在初始化后定制curses 会话
(curses session)的功能及模式。例如:终端模式(terminal mode)、彩色显示模式(color
mode)、鼠标操作模式(mouse mode)等。当然,我们还可以定制混合模式。这章就让我
们来讨论这些在initscr()函数之后调用的初始化函数。
1 raw()函数和cbreak()函数
通常情况下,终端驱动程序会缓冲用户输入的字符,直到遇到换行符或回车符后,这些字符
才可以被使用。但是大多数程序要求字符在输入时就可以被使用。raw()和cbreak()两个函
数都可以禁止行缓冲(line buffering)。区别是:在raw()函数模式下,处理挂起(CTRLZ)
中断或退出(CTRLC) 等控制字符时,将直接传送给程序去处理而不产生终端信号;而在
cbreak()模式下,控制字符将被终端驱动程序解释成其它字符。就我个人而言,比较喜欢使
用raw()函数,因为用它可以做一些一般用户无法进行的控制操作。
2 echo()函数和noecho()函数
这两个函数用来控制是否将从键盘输入的字符显示在终端上。调用noecho()函数禁止输入
的字符出现在屏幕上。也许程序员希望用户在进行控制操作时,需要屏蔽掉控制字符(如组
合键操作),或调用getch()函数读取键盘字符时,不想显示输入的字符(如在控制台输入登
陆密码)。大多数的交互式应用程序在初始化时会调用noecho()函数,用于在进行控制操作
时不显示输入的控制字符。这两个函数给予程序员很大的灵活性,使程序员可以在窗口中的
任意地方,实现输入字符的显示和屏蔽,而不需要刷新屏幕。
3 keypad()函数
这个函数允许使用功能键,例如:F1、F2、方向键等功能键。几乎所有的交互式程序都需
要使用功能键,因为绝大多数用户界面主要用方向键进行操作。使用keypad(stdscr,TURE)
就为“标准屏幕”(stdscr)激活了功能键。你将会在以后的章节中学习到如何使用功能键。
4 halfdelay()函数
halfdelay()函数会启用半延时模式(halfdelay  mode)。和cbreak()函数一样,当程序需要
用户输入字符时,输入的每个字符都是可用的。给halfdelay()传递一个整型参数(以0.1 秒
为单位),它就会在这个参数时间内等待输入。如果没有有效的输入,则返回ERR。
一般来说,这个函数在需要等待输入的程序中会用到。如果用户没有在规定时间内给出有效
输入,程序就可以去处理其它事情。最常见例子就是在输入密码时做出超时响应。
5 其它的初始化函数
上面提到的函数用来定制curses 在初始化后的行为,因此这些函数只能在整个curses 会话
的开始部分(即初始化时)调用,而不能在程序的其它地方调用。
让我们写一个程序用来说明这些函数的用法。
 初始化函数用法的示例:
#include <ncurses.h>
int main()
{
int ch;
initscr(); /* 开始curses 模式*/
raw(); /* 禁用行缓冲*/
keypad(stdscr, TRUE); /* 开启功能键响应模式*/
noecho(); /* 当执行getch()函数的时候关闭键盘回显*/
printw("Type any character to see it in bold/n");
ch = getch(); /* 如果没有调用raw()函数,
我们必须按下enter 键才可以将字符传递给程序*/
if(ch == KEY_F(1)) /* 如果没有调用keypad()初始化,将不会执行这条语句*/
printw("F1 Key pressed");
/* 如果没有使用noecho() 函数,一些控制字符将会被打印到屏幕上*/
else
{ printw("The pressed key is ");
attron(A_BOLD);
printw("%c", ch);
attroff(A_BOLD);
}
refresh(); /* 将缓冲区的内容打印到显示器上*/
getch(); /* 等待用户输入*/
endwin(); /* 结束curses 模式*/
return 0;
}
这个程序很简单,但还是有一些在前面的章节没有介绍的函数。getch()函数用来取得用户
输入的字符,它等价于通常的getchar()函数,只是我们在调用getchar()函数时要禁止行缓
冲以避免在输入完成后按enter 键。在后面的章节中我们将讨论到输入函数。attron()和
attroff()函数分别作为修饰的开头和结尾,修饰其间输出的字符。例如在本例中加粗(即使
用A_BOLD 作为函数参数)用户输入的字符。在后面的章节中我们也将会详细讨论这些函
数。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值