📄 scounix下curses编程函数说明11.htm
字号:
<br />退出程序之前,关闭所有打开的窗口。<br />之后还可以调用refresh(),<br />int isendwin()<br />ifendwin()-&gt;refresh(),TRUE,|FALSE。<br />-----------------------<br />WINDOW *newwin(nlines,ncols,begy,begx)<br />begy和begx是窗口左上角的坐标。nlines是一个整数,<br />存放着行的数目,而ncols,存放着列的数目。<br />所有的参数设置为零,则打开的窗口的大小将与屏幕的大小相同。<br />int delwin(win)<br />它删除窗口win。如果存在子窗口,以前先要删除这些子窗口。这个函数将<br />释放win所占据的所有资源。在调用endwin()之前用户应该删除所有的窗口<br />int mvwin(win,by,bx)<br />它将把窗口移到坐标(by,bx)处。如果把窗口移出屏幕边界的范围,则ERR<br />WINDOW *subwin(origwin,nlines,ncols,begy,begx)<br />它返回一个位于origwin窗口中间的子窗口。如果用户改变这两个窗口<br />(origwin或者那个新窗口)中的一个,则这种改变将会同时反映到这两<br />个窗口上。在下一次调用refresh()之前,先要调用touchwin(origwin)<br />begx和begy是相对于屏幕的,而不是相对于origwin的。<br />WINDOW *derwin(origwin,nlines,ncols,begy,begx)<br />此函数与subwin(.)相同,只不过这里的begx和begy是相对于origwin的,而不是相对于屏幕的。<br />mvderwin(win,y,x)<br />此函数将把win移到父窗口内。(注意:此函数尚未实现)。<br />WINDOW *dupwin(win)<br />此函数复制窗口win。<br />int overlay(win1,win2)<br />将把win1中的所有文本拷贝到win2中,但是不拷贝空格。<br />int overwrite(win1,win2)<br />也是做文本拷贝工作的函数,但它拷贝空格。<br />int copywin(win1,win2,sminrow,smincol,dminrow,<br />dmincol,dmaxrow,dmaxcol,overlay)<br />它所做的工作与overlay(.)和overwrite(.)相似,但是该函数还可以让程序员选择拷贝窗口的哪个区域。<br />int addch(ch)<br />int waddch(win,ch)<br />int mvaddch(y,x,ch)<br />int mvwaddch(win,y,x,ch)<br />----------------<br />int addstr(str)<br />int addnstr(str,n)<br />int waddstr(win,str)<br />int waddnstr(win,str,n)<br />int mvaddstr(y,x,str)<br />int mvaddnstr(y,x,str,n)<br />int mvwaddstr(win,y,x,str)<br />int mvwaddnstr(win,y,x,str,n)<br />-----------------------------<br />int addchstr(chstr)<br />int addchnsrtr(chstr,n)<br />int waddchstr(win,chstr)<br />int waddchnstr(win,chstr,n)<br />int mvaddchstr(y,x,chstr)<br />int mvaddchnstr(y,x,chstr,n)<br />int mvwaddchstr(win,y,x,chstr)<br />int mvwaddchnstr(win,y,x,chstr,n)<br />*****chstr是指向ch type数组的一个指针。*****<br />---------------------------<br />int echochar (ch)<br />int wechochar (win,ch)<br />---------------------------<br />int printw(fmt,..)<br />int wprintw(win.fmt,....)<br />int mvprintw(y,x,fmt,...)<br />int mvwprntw(win,y,x,fmt,..)<br />---------------------------<br />int insch(c)<br />int winsch(win,c)<br />int mvinsch(y,x,c)<br />int mvwinsch9win,y,x,c)<br />这些函数把字符ch插入到光标的左边,<br />光标后面的所有字符则向右移动一个位置。<br />在这一行最右端的字符可能会丢失。<br />---------------------------<br />int insert()<br />int winsert(win)<br />在当前行的上方插入一个空行(最底下的一行将被丢失)。<br />---------------------------<br />int insdelin(n)<br />int winsdelln(win,n)<br />如果n为正数,则这些函数将在适当的窗口的当前光标上方插入n行<br />(这样一来最底下的n行将丢失);如果n为负数,则光标下面的n行将被删除,<br />余下的行将上升,顶替它们的位置。这些函数将在当前光标的左边插入str<br />(字符的个数不能超过一行的限度)。在光标右边的字符将右移,如果到达行<br />尾,则字符将丢失,光标位置不变。y和x是指在插入str以前先要把光标移动<br />到的坐标,n是要插入的字符的数目(如果n为0则插入整个字符串)。<br />---------------------------<br />int insstr(str)<br />int insnstr(str,n)<br />int winsstr(win,str)<br />int winsnstr(win,str,n)<br />int mvinsstr9y,x,str)<br />int mvinsnstr(y,x,str,n)<br />int mvwinsstr(win,y,x,str)<br />int mvwinsnstr(win,y,x,str,n)<br />这些函数将在当前光标的左边插入str(字符的个数不能超过一行的限度)。<br />在光标右边的字符将右移,如果到达行尾,则字符将丢失,光标位置不变。<br />y和x是指在插入str以前先要把光标移动到的坐标,n是要插入的字符的数目<br />(如果n为0则插入整个字符串)。<br />---------------------------<br />int delch()<br />int wdelch(win)<br />int mvdelch(y,x)<br />int mvwdelch(win,y,x)<br />删除光标左边的字符,并把光标右边余下的字符向左移动一个位置。<br />y和x是在进行删除操作以前要把光标移动到的坐标。<br />int deleteln()<br />int wdeleteln(win)<br />删除光标下面的一行,并把下面所有的其他行都向上移动一个位置。<br />此外,屏幕最底下的一行将被清除。<br />-----------------------------<br />方框和直线<br /><br />int border(ls,rs,ts,bs,tl,tr,bl,br)<br />int wborder(win,ls,rs,ts,bs,tl,tr,bl,br)<br />int box(win,vert,hor)<br />这些函数在窗口的边界(或者win的边界)画上方框。在下面的表格中,<br />读者将可以看到字符,以及它们的默认值。当用零去调用box(.)时将<br />会用到这些默认值。在下面的图中读者可以看到方框中字符的位置<br />-------------<br />int vline9ch,n)<br />int wvline(win,ch,n)<br />int hline(ch,n)<br />int whline(win,ch,n)<br />这些函数将从当前光标位置开始画一条水平线或者垂直线。<br />ch是画线所使用的字符,n是要画的字符的个数,光标位置并不移动。<br />--------------------------<br />void bkgdset(ch)<br />void wbkgdset(win,ch)<br />这两个函数设置窗口或者屏幕的背景字符和属性。ch的属性将和窗口中<br />所有非空格的字符的属性进行OR操作。背景是窗口的一部分,<br />将不会随着滚动、输入或输出而改变<br />int bkgd(ch)<br />int wbkgd(win,ch)<br />---------------------------------<br />int getch()<br />int wgetch()<br />int mvgetch(y,x)<br />int mvwgetch(win,y,x)<br />getch()将从终端读取输入,读取的方式取决于是否设置了延迟模式。<br />如果设置了延迟模式,则getch()将一直等待,直到用户按下一个键为止;<br />如果没有设置延迟模式,则它将返回输入缓冲区中的数据,如果输入缓冲区<br />为空,则它将返回ERR。mvgetch(.)和mvwgetch(.)首先把光标移动到位置<br />(y,x)上。名称中有w字母的函数将从与窗口win相关的终端读取输入,<br />getch()和mvgetch(.)则从屏幕相关的终端读取。如果使能了keypad(.)<br />在用户按下某个功能键时,getch()将返回一个代码,该代码在.h头文件中被<br />定义为KEY_*宏。如果用户按下Esc键(它可能会是某个组合功能键的第<br />一个键),则ncurses将启动一个否则就返回功能键的值。(如果需要的话,<br />可以使用notimeout()来关闭第二个定时器<br />int ungetch()<br />这个函数将把字符ch送回输入缓冲区。<br />---------------------<br />int getstr(str)<br />int wgetstr(win,str)<br />int mvgetstr(y,x,str)<br />int mvwgetstr(win,y,x,str)<br />int wgetnstr(win,str,n)<br />这些函数的作用相当于对getch()进行一系列的调用,直到接收到一个新行。<br />行中的字符存放在str中(所以,在调用getstr(.)之前,不要忘记给字符指针<br />分配内存)。如果打开了回送,则字符串将被显示出来(使用noecho()可以关<br />闭回送)而用户的删除字符以及其他特殊字符也会被解释出来<br />-----------------<br />chty peinch(0<br />chty pewinch(win)<br />chty pemvinch(y,x)<br />chty pemvwinch(win,y,x)<br />这些函数从屏幕或窗口返回一个字符,因为返回值的类型是chty pe,<br />所以还包括了属性信息。这一信息可以使用常量A_*从字符中扩展得到。<br />-------------------<br />int scanw(fmt,...)<br />int wscanw(win,fmt,...)<br />int mvscanw(y,x,fmt,...)<br />int mvwscanw(win,y,x,fmt,...)<br />int vwscanw(win,fmt,va_list.)<br />----------------------------<br />输出选项<br />int idlok9win,bf)<br />void fdcok(win.bf)<br />这两个函数为窗口使能或者关闭终端的insert/delete特征(idlok(.)针对一<br />行,而idcok(.)则针对字符)。(注:idcok(.)尚未实现)<br />void immedok(win,bf)<br />bf设置为TRUE,则对窗口win的每一次改变都将导致物理屏幕的一次刷新。<br />这将使程序的性能降低,所以默认的值是FALSE。(注:此函数尚未实现)<br />int clearok(win,bf)<br />如果bf值为TRUE,则下一次调用wrefresh(win)时将会清除屏幕,<br />并完全地把它重新画一遍(就像用户在编辑器vi中按下Ctrl+L一样)。<br />int leaveok(win,bf)<br />默认的行为是,ncurses让物理光标停留在上次刷新窗口时的同一个位置上。<br />不使用光标的程序可以把leaveok(.)设置为TRUE,这样一般可以节省光标<br />移动所需要的时间。此外,ncurses将试图使终端光标不可见。<br />int nl()<br />int nonl()<br />这两个函数控制新行的平移。使用nl()可以打开平移,这样在回车时就会<br />平移到新的一行,在输出时就会走行。而nonl()可以把平移关上。<br />关上平移之后,ncurses做光标移动操作时速度就会快一些。<br />------------------------------<br />输入选项<br /><br />int keypad(win,bf)<br />bf为TRUE,函数在等待输入时会使能用户终端的键盘上的小键盘。<br />ncurses将返回一个键代码,该代码在.h头文件中被定义为KEY_*宏,<br />它是针对小键盘上的功能键和方向键的。对于PC键盘来说,<br />这一点是非常有帮助的,因为这样用户就可以使能数字键和光标键。<br />int meta(win.bf)<br />bf为TRUE,从getch()返回的键代码将是完整的8位(最高位将不会被去掉)<br />int cbreak()<br />int nocbreak()<br />int crmode()<br />int nocrmode()<br />cbreak()和nocbreak()将把终端的CBREAK模式打开或关闭。如果CBREAK打开则程序就可以立刻使用读取的输入信息。如果CBREAK关闭,则输入将被缓存<br />起来,直到产生新的一行(注意:crmode()和nocrmode()只是为了提供向上兼容性,不要使用它们)<br />int raw()<br />int noraw()<br />这两个函数将把RAW模式打开或关闭。RAW与CBREAK相同,<br />它们的区别在于RAW模式不处理特殊字符。<br />int echo()<br />int noecho()<br />如果把echo()设置为TRUE,则用户所敲的输入将会回送并显示出来,<br />而noecho()则对此保持沉默。<br />int halfdelay(t)<br />此函数与cbreak()相似,但它要延迟t秒钟。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -