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

📄 00000002.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>寄信人:&nbsp;<A HREF="mailto:guest.bbs@hgluo.hust.edu.cn">guest.bbs@hgluo.hust.edu.cn</A>&nbsp;&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;◇&nbsp;UNIX&nbsp;萤幕导向程式的发展利器&nbsp;-&nbsp;curses&nbsp;(二)&nbsp;<BR>发信站:&nbsp;华南理工大学&nbsp;BBS木棉站&nbsp;<BR>日&nbsp;&nbsp;期:&nbsp;Thu&nbsp;Feb&nbsp;20&nbsp;14:15:38&nbsp;1997&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UNIX&nbsp;萤幕导向程式的发展利器&nbsp;-&nbsp;curses&nbsp;(二)&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;校园网路策进会&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;会长&nbsp;&nbsp;&nbsp;&nbsp;林建宏&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在上期为您介绍完了&nbsp;curses.h&nbsp;函式库的一些基本函式呼叫後在,&nbsp;在本期里&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;我们将继续为您介绍&nbsp;curses&nbsp;有关多视窗处理的函式.&nbsp;有了这些函式,&nbsp;我们&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;可以在程式里同时处理多个不同的视窗.&nbsp;&nbsp;如&nbsp;joe&nbsp;编辑器内我们可将萤幕切割&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;成好几个小萤幕,&nbsp;并且可以在这些不同的萤幕间做切换并编辑不同的档案,&nbsp;这&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;就是多视处理的应用.&nbsp;另外,&nbsp;有关&nbsp;POP-UP&nbsp;视窗的制作,&nbsp;以及视窗的卷动,&nbsp;在&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;本文里,&nbsp;我们将以简单的例子,&nbsp;告诉您这些功能是如何做到的.&nbsp;关於一些较基&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;本函式的用法,&nbsp;我们将不再特别介绍.&nbsp;如果您尚未熟悉&nbsp;curses&nbsp;基本函式使用&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;方法,&nbsp;请参阅上一期&nbsp;(80&nbsp;期&nbsp;)&nbsp;通讯.&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;■&nbsp;视窗的建立&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;视窗的建立,&nbsp;以&nbsp;newwin()&nbsp;这个函式来完成.&nbsp;&nbsp;同时,&nbsp;需宣告此视窗为&nbsp;WINDOW&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;结构变数.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;WINDOW&nbsp;*newwin(lines,colums,start_y,start_x);&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WINDOW&nbsp;*win;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win=newwin(10,20,0,0);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;如此,&nbsp;将以&nbsp;(0,0)&nbsp;为原点,&nbsp;取一个&nbsp;10&nbsp;列&nbsp;20&nbsp;行的矩形为一新的视窗.&nbsp;&nbsp;今後&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;我们只要呼叫&nbsp;win&nbsp;这个变数,&nbsp;就可以对这新视窗做处理.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如:&nbsp;wmove(win,3,2);&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;■&nbsp;多视窗处理函式的格式&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;这一类函式和一般的基本函式极为类似,&nbsp;几乎每一个基本函式都有一个对应的&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;视窗处理函式.&nbsp;&nbsp;一般将&nbsp;'w'&nbsp;加在函式的里头作为区别,&nbsp;'w'&nbsp;乃&nbsp;'window'&nbsp;之&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;意.&nbsp;另外,&nbsp;因为可同时处理多个视窗,&nbsp;在呼叫使用时,&nbsp;需特别指定欲处理的视&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;窗.&nbsp;当然,&nbsp;如果您指定对&nbsp;stdscr&nbsp;做处理,&nbsp;由於是对标准输出入萤幕处理,&nbsp;其&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;作用将相当於一般基本的函式.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wmove(win,y,x)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;即对&nbsp;win&nbsp;这个视窗做&nbsp;move()&nbsp;动作.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wmove(stdscr,y,x)&nbsp;&nbsp;相当於&nbsp;move(y,x)&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;介绍一些较重要的函式&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;wmove(win,y,x)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;touchwin(win)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;wrefresh(win)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;mvwaddstr(win,y,x,str)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;wattron(attr)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;delwin(win)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;subwin(win,ny,nx,y,x)&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;其他函式多和基本函式互为对应,&nbsp;故不全部列出,&nbsp;详细名称可参考&nbsp;curses&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;的&nbsp;online&nbsp;manual.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;■&nbsp;视窗内的座标系&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;视窗内的座标系,&nbsp;将以此视窗的起始点为新原点,&nbsp;并以其相对位置作为新的&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;座标.&nbsp;举例来说&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;win=newwin(10,20,5,5);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;wmove(win,2,3);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;将以&nbsp;(5,5)&nbsp;为新原点,&nbsp;&nbsp;y&nbsp;方向移动&nbsp;2&nbsp;单位,&nbsp;x&nbsp;方向移动&nbsp;3&nbsp;单位.&nbsp;因此实际&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;上,&nbsp;游标将移动至&nbsp;y=7&nbsp;x=8&nbsp;的位置上.&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;■&nbsp;POP-UP&nbsp;视窗的建立&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;利用&nbsp;curses&nbsp;所提供的视窗处理函式,&nbsp;我们可以做出像&nbsp;&nbsp;ONLINE&nbsp;HELP&nbsp;的&nbsp;POP&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;-UP&nbsp;画面.&nbsp;当按下某键後,&nbsp;一个新的视窗将像&nbsp;&quot;&nbsp;跳&nbsp;&quot;&nbsp;出来一般覆盖原来的画&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;面.&nbsp;当关掉此视窗後,&nbsp;又不会影响到原来被覆盖的画面.&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;下面的例子,&nbsp;我们及模拟&nbsp;ONLINE&nbsp;HELP&nbsp;的形式,&nbsp;当按下&nbsp;'h'&nbsp;键时,&nbsp;视窗即出现&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;#include&nbsp;&lt;curses.h&gt;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;main()&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;ch,x,y;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WINDOW&nbsp;*win;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initscr();&nbsp;&nbsp;&nbsp;←┐&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cbreak;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;启动&nbsp;curses&nbsp;模式&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;noecho();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nonl();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;←┘&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win=newwin(4,30,LINES/2-3,&nbsp;COLS/2-15);/*&nbsp;建立一个新视窗,&nbsp;其中LINES,COLS&nbsp;<BR>*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;box(win,'|','-');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;为&nbsp;curses&nbsp;内定值,&nbsp;<BR>即萤幕行/列数*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mvwaddstr(win,1,4,&quot;This&nbsp;is&nbsp;another&nbsp;screen&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mvwaddstr(win,2,2,&quot;Press&nbsp;anykey&nbsp;to&nbsp;continue..&quot;);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(y=0;y&lt;LINES;++y)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;以'@'填满萤幕&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(x=0;x&lt;COLS;++x)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mvprintw(y,x,&quot;@&quot;);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(;;)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refresh();&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ch=getch();&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(ch)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'q':&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;按&nbsp;'q'&nbsp;键离开&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endwin();&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(0);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'\t':&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;按&nbsp;[TAB]&nbsp;键&nbsp;呼叫另一视窗&nbsp;&nbsp;&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;touchwin(win);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;wrefresh()&nbsp;前需&nbsp;touchwin()&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wrefresh(win);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;按任意键关闭视窗&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;touchwin(stdscr);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;<BR>

⌨️ 快捷键说明

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