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

📄 4第四章:初始化(initialization).htm

📁 curses界面编程
💻 HTM
📖 第 1 页 / 共 3 页
字号:
 table.MsoNormalTable	{mso-style-name:普通表格;	mso-tstyle-rowband-size:0;	mso-tstyle-colband-size:0;	mso-style-noshow:yes;	mso-style-parent:"";	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;	mso-para-margin:0cm;	mso-para-margin-bottom:.0001pt;	mso-pagination:widow-orphan;	font-size:10.0pt;	font-family:"Times New Roman";	mso-ansi-language:#0400;	mso-fareast-language:#0400;	mso-bidi-language:#0400;}</style><![endif]--></head><body lang=ZH-CN style='tab-interval:21.0pt;text-justify-trim:punctuation'><div class=Section1 style='layout-grid:15.6pt'><h3>第四章:初始化<span style='mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman";mso-bidi-font-family:"Times New Roman"'>(</span><spanlang=EN-US style='font-family:"Times New Roman"'>Initialization</span><spanstyle='mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman";mso-bidi-font-family:"Times New Roman"'>)</span></h3><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>现在我们知道了:在程序中调用</span><spanlang=EN-US style='font-family:Tahoma'>initscr()</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数,会使屏幕初始化从而进入</span><span lang=EN-US style='font-family:Tahoma'>CURSES</span><spanstyle='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>模式。还有一些其它的函数可以通过初始化定制我们的</span><span lang=EN-USstyle='font-family:Tahoma'>CURSES</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>会话模式。我们可以通过不同的函数将屏幕设置成不同的模式。比如:终端模式(</span><spanlang=EN-US style='font-family:Tahoma'>terminal mode</span><spanstyle='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>)、彩色模式(</span><span lang=EN-US style='font-family:Tahoma'>color mode</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>)、鼠标模式(</span><spanlang=EN-US style='font-family:Tahoma'>mouse mode</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>)等等……当然,我们还可以将这些模式混合起来……那么,让我们马上来看看这些经常使用的初始化函数:</span><spanlang=EN-US style='font-family:Tahoma'><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:Tahoma'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal style='layout-grid-mode:char'><b><span lang=EN-USstyle='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'>4.1 raw()</span></b><b><spanstyle='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>和</span></b><b><spanlang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'>cbreak()</span></b><b><spanstyle='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数</span></b><b><spanlang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'>(raw()and cbreak())<o:p></o:p></span></b></p><p class=MsoNormal style='layout-grid-mode:char'><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>在通常情况下,用户输入的字符将被终端程序送入终端的缓冲区,但当用户输入新行符换行符或者回车时,终端程序将会中断并输出当前的缓冲区内容并启动新行的输入缓冲。</span></p><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>但是大多数程序需要当用户输入单个字符时,却希望这些字符能够立即显示在屏幕上。这两个函数用来禁用行缓冲(</span><spanlang=EN-US style='font-family:Tahoma'>line buffering</span><spanstyle='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>)。这两个函数同样可以用来传送控制字符给程序,比如:挂起(</span><spanlang=EN-US style='font-family:Tahoma'>CTRL-Z</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>)、中断或退出(</span><span lang=EN-US style='font-family:Tahoma'>CTRL-C</span><spanstyle='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>)。区别在于,在</span><span lang=EN-US style='font-family:Tahoma'>raw()</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数模式下,这些字符将传送给程序去处理而不作为终端程序处理的信号。在</span><spanlang=EN-US style='font-family:Tahoma'>cbreak()</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>模式下,这些控制字符将被认为是终端驱动程序中的控制字符,因而将这些字符传送给终端程序。我比较喜欢使用</span><spanlang=EN-US style='font-family:Tahoma'>raw()</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>,那样可以进行更多的控制操作。</span><span lang=EN-US style='font-family:Tahoma'><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:Tahoma'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><b><span lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'>4.2 echo()</span></b><b><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>和</span></b><b><spanlang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'>noecho()</span></b><b><spanstyle='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数(</span></b><b><spanlang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'>echo()and noecho()</span></b><b><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>)</span></b><b><span lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'><o:p></o:p></span></b></p><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>这两个函数控制用户输入字符的键盘回显。就是在运行程序的时候是否将输入的字符出现在屏幕上。比如你的程序在运行时你需要使用控制字符,但是你不想让控制字符出现在屏幕上,就可以使用这两个函数。也就是说用户调用</span><spanlang=EN-US style='font-family:Tahoma'>getch()</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数向程序输入数据时,你不想让他输入的字符出现在屏幕上。</span><span lang=EN-US style='font-family:Tahoma'>noecho()</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数就可以关闭回显不会让控制字符(比如</span><spanlang=EN-US style='font-family:Tahoma'>CTRL-C</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>)出现在屏幕上。大多数的交互式程序要进入控制方式的时候,一般都使用</span><span lang=EN-USstyle='font-family:Tahoma'>echo()</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>、</span><spanlang=EN-US style='font-family:Tahoma'>noecho()</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数初始化、关闭键盘回显。这样给了程序员更大的灵活性。</span><span lang=EN-US style='font-family:Tahoma'><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:Tahoma'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><b><span lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'>4.3 keypad()</span></b><b><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数</span></b><b><spanlang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'>(keypad())<o:p></o:p></span></b></p><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>这个函数允许使用功能键:</span><spanlang=EN-US style='font-family:Tahoma'>F1</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>、</span><span lang=EN-US style='font-family:Tahoma'>F2</span><spanstyle='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>、方向键等等……几乎所有的交互式程序都使用这个函数。令用户使用方向键控制整个用户界面。使用</span><spanlang=EN-US style='font-family:Tahoma'>keypad(stdscr,TURE)</span><spanstyle='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>就可以在“标准显示设备”(</span><span lang=EN-USstyle='font-family:Tahoma'>stdscr</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>)上使用这些功能。在以后的章节中将详细的讨论如何使用功能键。</span><spanlang=EN-US style='font-family:Tahoma'><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:Tahoma'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><b><span lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'>4.4 halfdelay()</span></b><b><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数(</span></b><b><spanlang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'>halfdelay()</span></b><b><spanstyle='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>)</span></b><b><spanlang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'><o:p></o:p></span></b></p><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>这个函数,虽然不经常使用。但有时却非常有用。</span><b><spanstyle='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'> </span></b><spanlang=EN-US style='font-family:Tahoma'>halfdelay()</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数会启用<b>半延时模式</b>(</span><span lang=EN-US style='font-family:Tahoma'>half-delaymode</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>)。和</span><span lang=EN-USstyle='font-family:Tahoma'>cbreak()</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数一样,当程序需要当用户输入这些字符时,它们能够立即显示在屏幕上。但是它要停滞一段时间以等待输入数据,如果没有有效的输入,返回</span><spanlang=EN-US style='font-family:Tahoma'>ERR</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>。给</span><span lang=EN-US style='font-family:Tahoma'>halfdelay()</span><spanstyle='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>一个参数(以</span><span lang=EN-US style='font-family:Tahoma'>0.1</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>秒为单位)。它就会按照参数中的时间等待用户的输入。一般来说,这个函数在等待用户输入的程序中可以被用到,如果用户没有及时做出响应,程序就可以处理其它的事情了了。最常见到的例子是在用户输入密码时做出超时的响应。</span><spanlang=EN-US style='font-family:Tahoma'><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:Tahoma'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><b><span lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'>4.5</span></b><b><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>各种初始化函数</span></b><spanstyle='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>(</span><spanlang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'>MiscellaneousInitialization functions</span><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>)</span><b><span lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'><o:p></o:p></span></b></p><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>上面的提到的这些函数可以定制</span><spanlang=EN-US style='font-family:Tahoma'>CURSES</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>在初始化时的行为。这些函数不能被广泛使用在程序的各个部分。所以,这些函数的调用要处在整个</span><span lang=EN-USstyle='font-family:Tahoma'>CURSES</span><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>会话的开始部分。</span><spanlang=EN-US style='font-family:Tahoma'><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-family:Tahoma'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><b><span lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'>4.6 </span></b><b><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>一个例子(</span></b><b><spanlang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'>AnExample</span></b><b><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>)</span></b><b><span lang=EN-US style='font-size:14.0pt;mso-bidi-font-size:12.0pt;font-family:Tahoma'><o:p></o:p></span></b></p><p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>让我们写一个程序用来阐明这些函数的用法。</span><spanlang=EN-US style='font-family:Tahoma'><o:p></o:p></span></p><p class=MsoNormal><b><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>例</span></b><b><spanlang=EN-US style='font-family:Tahoma'>2. </span></b><b><span style='font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>初始化函数用法的示例:</span></b><b><span lang=EN-US style='font-family:Tahoma'><o:p></o:p></span></b></p>

⌨️ 快捷键说明

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