📄 curses函数说明(sco).htm
字号:
</tr> <tr> <td colspan="2"><span class="postbody">一.全局变量
<br /> WINDDW* curscr:当前屏幕
<br /> WINDOW* stdscr:标准屏幕
<br /> int LINES:终端上的行数
<br /> int COLS:终端上的列数
<br /> bool TRUE:真标志,1
<br /> bool FALSE:假标志,0
<br /> int ERR:错误标志,-1
<br /> int OK:OK标志,0
<br /> ------------------------------------------------
<br />win:WINDOW *
<br />bf:bool
<br />ch:chty pe
<br />str:char *
<br />chstr:chty pe*
<br />fmt:char * 否则:int
<br />
<br />二.函数说明
<br />1.字符显示
<br /> WINDOW* initscr()
<br /> SCREEN* newterm(char *type, FILE *outfd, FILE *infd)
<br />初始化函数,对用户访问的每个终端都应该调用newterm,type是终端的名称,包括在$TERM中(如ansi, xterm, vt100等等) 。
<br />
<br /> SCREEN* set_term(SCREEN* new)
<br /> 用户可以切换当前终端。所有的函数都将在设置的当前终端上起作用。
<br />
<br /> int endwin()
<br /> 退出程序之前,关闭所有打开的窗口。之后还可以调用refresh()。
<br />
<br /> int isendwin()
<br /> if endwin()->refresh(),TRUE,|FALSE。
<br />
<br /> WINDOW* newwin(nlines,ncols,begy,begx)
<br /> begy和begx是窗口左上角的坐标。nlines是一个整数, 存放着行的数目,而ncols,存放着列的数目。
<br /> 所有的参数设置为零,则打开的窗口的大小将与屏幕的大小相同。
<br />
<br /> int delwin(win)
<br /> 它删除窗口win。如果存在子窗口,以前先要删除这些子窗口。这个函数将释放win所占据的所有资源。在调用endwin()之前用户应该删除所有的窗口。
<br />
<br /> int mvwin(win, by, bx)
<br /> 它将把窗口移到坐标(by,bx)处。如果把窗口移出屏幕边界的范围,则ERR
<br />
<br /> WINDOW *subwin(origwin,nlines, ncols, begy,begx)
<br /> 它返回一个位于origwin窗口中间的子窗口。如果用户改变这两个窗口 (origwin或者那个新窗口)中的一个,则这种改变将会同时反映到这两个窗口上。在下一次调用refresh()之前,先要调用touchwin(origwin) 。begx和begy是相对于屏幕的,而不是相对于origwin的。
<br />
<br /> WINDOW *derwin(origwin, nlines,ncols, begy, begx)
<br /> 此函数与subwin(.)相同,只不过这里的begx和begy是相对于origwin的,而不是相对于屏幕的。
<br />
<br /> mvderwin(win, y, x)
<br /> 此函数将把win移到父窗口内。(注意:此函数尚未实现)。
<br />
<br /> WINDOW *dupwin(win)
<br /> 此函数复制窗口win。
<br />
<br />int overlay(win1, win2)
<br />将把win1中的所有文本拷贝到win2中,但是不拷贝空格。
<br />
<br />int overwrite(win1, win2)
<br />也是做文本拷贝工作的函数,但它拷贝空格。
<br />
<br /> int copywin(win1, win2, sminrow, smincol, dminrow, dmincol, dmaxrow,
<br />dmaxcol, overlay)
<br />它所做的工作与overlay(.)和overwrite(.)相似,但是该函数还可以让程序员选择拷贝窗口的哪个区域。
<br />
<br /> 显示某个字元或字符串
<br /> int addch(ch)
<br /> int waddch(win, ch)
<br /> int mvaddch(y,x, ch)
<br /> int mvwaddch(win, y, x, ch)
<br />
<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 /> ------------------------------------------------
<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 /> ------------------------------------------------
<br /> int echochar (ch)
<br /> int wechochar(win, ch)
<br />
<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 /> ------------------------------------------------
<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 /> int insert()
<br /> int winsert(win)
<br /> 在当前行的上方插入一个空行(最底下的一行将被丢失)。
<br />
<br /> int insdelin(n)
<br /> int winsdelln(win, n)
<br /> 如果n为正数,则这些函数将在适当的窗口的当前光标上方插入n行 (这样一来最底下的n行将丢失);如果n为负数,则光标下面的n行将被删除, 余下的行将上升,顶替它们的位置。
<br />
<br /> int insstr(str)
<br /> int insnstr(str, n)
<br /> int winsstr(win, str)
<br /> int winsnstr(win, str, n)
<br /> int mvinsstr(y, 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 (字符的个数不能超过一行的限度)。在光标右边的字符将右移,如果到达行 尾,则字符将丢失,光标位置不变。y和x是指在插入str以前先要把光标移动到的坐标,n是要插入的字符的数目(如果n为0则插入整个字符串)。
<br />这些函数将在当前光标的左边插入str(字符的个数不能超过一行的限度)。
<br />
<br /> int delch()
<br /> int wdelch(win)
<br /> int mvdelch(y, x)
<br /> int mvwdelch(win, y, x)
<br /> 删除光标左边的字符,并把光标右边余下的字符向左移动一个位置。 y和x是在进行删除操作以前要把光标移动到的坐标。
<br />
<br /> int deleteln()
<br /> int wdeleteln(win)
<br /> 删除光标下面的一行,并把下面所有的其他行都向上移动一个位置。 此外,屏幕最底下的一行将被清除。
<br />
<br />2.方框和直线
<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的边界)画上方框。在下面的表格中,读者将可以看到字符,以及它们的默认值。当用零去调用box(.)时将会用到这些默认值。在下面的图中读者可以看到方框中字符的位置
<br />
<br /> int vline(ch,n)
<br /> int wvline(win,ch,n)
<br /> int hline(ch,n)
<br /> int whline(win,ch,n)
<br /> 这些函数将从当前光标位置开始画一条水平线或者垂直线。 ch是画线所使用的字符,n是要画的字符的个数,光标位置并不移动。
<br />
<br /> void bkgdset(ch)
<br /> void wbkgdset(win, ch)
<br /> 这两个函数设置窗口或者屏幕的背景字符和属性。ch的属性将和窗口中所有非空格的字符的属性进行OR操作。背景是窗口的一部分,将不会随着滚动、输入或输出而改变
<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()将从终端读取输入,读取的方式取决于是否设置了延迟模式。 如果设置了延迟模式,则getch()将一直等待,直到用户按下一个键为止;如果没有设置延迟模式,则它将返回输入缓冲区中的数据,如果输入缓冲区为空,则它将返回ERR。mvgetch(.)和mvwgetch(.)首先把光标移动到位置(y,x)上。名称中有w字母的函数将从与窗口win相关的终端读取输入, getch()和mvgetch(.)则从屏幕相关的终端读取。
<br />
<br /> 如果使能了keypad(.) 在用户按下某个功能键时,getch()将返回一个代码,该代码在.h头文件中被 定义为KEY_*宏。如果用户按下Esc键(它可能会是某个组合功能键的第
<br />一个键),则ncurses将启动一个否则就返回功能键的值。(如果需要的话,可以使用notimeout()来关闭第二个定时器
<br />
<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()进行一系列的调用,直到接收到一个新行。 行中的字符存放在str中(所以,在调用getstr(.)之前,不要忘记给字符指针分配内存)。如果打开了回送,则字符串将被显示出来(使用noecho()可以关闭回送),而用户的删除字符以及其他特殊字符也会被解释出来
<br />
<br /> chty peinch()
<br /> chty pewinch(win)
<br /> chty pemvinch(y,x)
<br /> chty pemvwinch(win,y,x)
<br /> 这些函数从屏幕或窗口返回一个字符,因为返回值的类型是chty pe, 所以还包括了属性信息。这一信息可以使用常量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 />3.输出选项
<br /> int idlok(win, bf)
<br /> void fdcok(win, bf)
<br /> 这两个函数为窗口使能或者关闭终端的insert/delete特征(idlok(.)针对一行,而fdcok(.)则针对字符)。(注:idcok(.)尚未实现)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -