⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch4.htm

📁 ncurses中文说明
💻 HTM
字号:

<html>
<head>
<title>第四章:初始化</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="keywords" content="ncurses,initilization">
</head>

<body leftmargin=40 bgcolor="#DAFFFF" text="black" link="#0000ff" alink="blue" vlink="#940084">
<div align="center"><a href="index.htm"><font size="5">
    <strong>
    回  目  录
    </strong>
  </font></a></div>
  <div align="right">
  <font size="5">
  <a href="ch3.htm">
  <strong>
  上 一 章
  </strong>
  </a>
  <a href="ch5.htm">
    <strong>
    下 一 章
	</strong>
	</a>
	</font>
	</div>
	<br>
<br>
<br>
<h1 align="center">
第四章:初始化
</h1>
<br>
<br>
<div align="left">
<font size="4">
<p>
<dd>
我们现在知道了:在程序中调用initscr()函数,会让屏幕初始化并进入CURSES模式。还有一些其它的函数可以根据我们自己的方案初始化CURSES。不同的初始化函数可以让屏幕进入不同的显示模式。比如:终端模式(terminal mode)、彩色模式(color mode)、鼠标模式(mouse mode)等等……当然,我们还可以将这些模式混合起来……那么,让我们马上来看看一些经常使用的初始化函数:
</dd>
</p>
<h3 align="left">
<a name="#raw">
4.1 raw()和cbreak()函数
</a>
</h3>
<br>
<p>
<dd>
通常情况下,用户输入的字符将被终端程序送入终端的缓冲区。但当用户输入换行符时,终端程序将会中断,同时输出当前的缓冲区内容并启用新行的输出缓冲。但是大多数程序需要当用户输入单个字符时,却希望这些字符能够立即显示在屏幕上。这两个函数就是用来禁用行缓冲(line buffering)。这两个函数所初始化的的模式同样可以用来给程序传送控制字符,比如:挂起(CTRL-Z)、中断或退出(CTRL-C)。区别在于,在raw()函数模式下,这些字符将传送给程序去处理而不作为终端程序处理的信号。在cbreak()模式下,这些控制字符将被认为是终端驱动程序中的控制字符,因而将这些字符传送给终端程序。我比较喜欢使用raw(),那样可以进行更多的控制操作。
</dd>
</p>
<h3 align="left">
<a name="echo">
4.2 echo()和noecho()函数
</a>
</h3>
<p>
<dd>
这两个函数控制用户输入的键盘回显。就是在运行程序的时候是否将输入的字符出现在屏幕上。比如你的程序在运行时你需要使用控制字符,但是你不想让控制字符出现在屏幕上,就可以使用这两个函数。也就是说当用户调用getch()函数向程序输入数据时,你不想让他输入的字符出现在屏幕上。noecho()函数就可以不让控制字符(比如CTRL-C)出现在屏幕上。大多数的交互式程序要进入控制模式的时候,一般都使用echo()、noecho()函数初始化、关闭键盘回显。这样给了程序员更大的灵活性。
</dd>
</p>
<h3 align="left">
<a name="#keypad">
4.3 keypad()函数
</a>
</h3>
<p>
<dd>
这个函数允许使用功能键:F1、F2、方向键等等……几乎所有的交互式程序都使用这个函数。令用户使用方向键控制整个用户界面。使用keypad(stdscr,TURE)就可以在“标准显示设备”(stdscr)上使用这些功能。在以后的章节中将详细讨论如何使用功能键。
</dd>
</p>
<h3 align="left">
<a name="#halfdelay">
4.4 halfdelay()函数
</a>
</h3>
<p>
<dd>
这个函数虽然不经常使用。但有时却非常有用。halfdelay()函数会启用半延时模式(half-delay mode)。和cbreak()函数一样,当程序需要当用户输入这些字符时,它们能够立即显示在屏幕上。但是它要停滞一段限定时间(以0.1秒为单位)等待输入,如果没有有效的输入,返回ERR。给halfdelay()传递一个整型参数(以0.1秒为单位)。它就会按照参数中的时间等待用户输入。一般来说,这个函数在需要等待的输入的程序中可以被用到,如果用户没有及时做出响应,程序就可以去处理其它的事情了。最常见到的应用例子是在输入密码的出超时响应。
</dd>
</p>
<h3 align="left">
<a name="#others">
4.5各种初始化函数
</a>
</h3>
<p>
<dd>
上面的提到的这些函数可以定制CURSES在初始化后的行为。这些函数不能被广泛使用在程序的各个部分。所以,这些函数的调用要处在整个CURSES会话的开始部分。
</dd>
</p>
<h3 align="left">
<a name="#example">
4.6 一个例子
</a>
</h3>
<p>
</font><dd><font size="4">
让我们写一个程序用来说明这些函数的用法。
</font></dd>
<font size="4"></p>
<p>
<strong>
例2. 初始化函数用法的示例:
</strong>
</p>
<font color="Maroon">
<xmp>

#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;
}

</xmp>
</font>
<p>
</font>
<dd><font size="4">
这个程序很简单,不需要太多的说明。但还是有一些前面没有提到的函数。getch()函数用来取得用户输入的信息。它和通常的getchar()函数相似。但是getch()可以让我们在禁用行缓冲时避免在输入完成后还要按enter键麻烦。在后面的章节中我们也将讨论到这些输入函数。attron()和attroff()函数作为切换开关用来开启和关闭给字符增加一些修饰效果。在这个例子中,它们使显示的字符字体加粗。在后面的部分中我们也将讨论到这些函数。
</font></dd>
<font size="4"></p>
<br>
<br>
<br>
</font>
</div>
<div align="center"><a href="index.htm"><font size="5">
    <strong>
    回  目  录
    </strong>
  </font></a></div>
  <div align="right">
  <font size="5">
  <a href="ch3.htm">
  <strong>
  上 一 章
  </strong>
  </a>
  <a href="ch5.htm">
    <strong>
    下 一 章
	</strong>
	</a>
	</font>
	</div>
	<br>
<br>
<br>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -