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

📄 curses函数说明(sco).htm

📁 curses界面编程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<br />
<br />  void immedok(win, bf) 
<br />  bf设置为TRUE,则对窗口win的每一次改变都将导致物理屏幕的一次刷新。 这将使程序的性能降低,所以默认的值是FALSE。(注:此函数尚未实现) 
<br />
<br />  int clearok(win, bf) 
<br />  如果bf值为TRUE,则下一次调用wrefresh(win)时将会清除屏幕, 并完全地把它重新画一遍(就像用户在编辑器vi中按下Ctrl+L一样)。 
<br />
<br />  int leaveok(win, bf) 
<br />  默认的行为是,ncurses让物理光标停留在上次刷新窗口时的同一个位置上。 不使用光标的程序可以把leaveok(.)设置为TRUE,这样一般可以节省光标移动所需要的时间。此外,ncurses将试图使终端光标不可见。 
<br />
<br />  int nl() 
<br />  int nonl() 
<br />  这两个函数控制新行的平移。使用nl()可以打开平移,这样在回车时就会 平移到新的一行,在输出时就会走行。而nonl()可以把平移关上。 关上平移之后,ncurses做光标移动操作时速度就会快一些。 
<br />
<br />   
<br />4.输入选项 
<br />   
<br />  int keypad(win, bf) 
<br />  bf为TRUE,函数在等待输入时会使能用户终端的键盘上的小键盘。 ncurses将返回一个键代码,该代码在.h头文件中被定义为KEY_*宏,它是针对小键盘上的功能键和方向键的。对于PC键盘来说,这一点是非常有帮助的,因为这样用户就可以使能数字键和光标键。 
<br />
<br />  int meta(win.bf) 
<br />  bf为TRUE,从getch()返回的键代码将是完整的8位(最高位将不会被去掉) 
<br />
<br />  int cbreak() 
<br />  int nocbreak() 
<br />  int crmode() 
<br />  int nocrmode() 
<br />  cbreak()和nocbreak()将把终端的CBREAK模式打开或关闭。如果CBREAK打开则程序就可以立刻使用读取的输入信息。如果CBREAK关闭,则输入将被缓存起来,直到产生新的一行(注意:crmode()和nocrmode()只是为了提供向上兼容性,不要使用它们) 
<br />
<br />  int raw() 
<br />  int noraw() 
<br />  这两个函数将把RAW模式打开或关闭。RAW与CBREAK相同, 它们的区别在于RAW模式不处理特殊字符。 
<br />
<br />  int echo() 
<br />  int noecho() 
<br />  如果把echo()设置为TRUE,则用户所敲的输入将会回送并显示出来, 而noecho()则对此保持沉默。 
<br />
<br />  int halfdelay(t) 
<br />  此函数与cbreak()相似,但它要延迟t秒钟。 
<br />
<br />  int nodelay(win, bf) 
<br />  终端将被设置为非阻塞模式。如果没有任何输入则getch()将返回ERR, 否则如果设置为FALSE,则getch()将等待,直到用户按下某个键为止。 
<br />
<br />  int timeout(t) 
<br />  int wtimeout(win, t) 
<br />  笔者提倡大家使用这两个函数,而不要使用halfdelay(t)和nodelay(win,bf)。getch()的结果取决于t的值。如果t是正数,则读操作将被阻塞t毫秒; 如果t为零,则不发生任何阻塞;如果t是负数,则程序将阻塞,直到有输入为止。 
<br />
<br />  int notimeout(win,bf) 
<br />  如果bf为TRUE,则getch()将使用一个特殊的定时器(一秒钟长)。到时间以后再对以Esc等键打头的输入序列进行解释。 
<br />
<br />  int typeahead(fd) 
<br />  如果fd是-1,则不检查超前键击,否则ncurses将使用文件描述符fd来进行这些检查 
<br />
<br />  int intrflush(win, bf) 
<br />  当bf为TRUE时使能该函数。在终端上按下任意中断键(quit、break.)时, 所有的输出将会刷新到tty驱动程序队列中。 
<br />   
<br />   
<br />三.终端属性 
<br />  int baudrate() 
<br />  此函数返回终端的速度,以bps为单位。 
<br />
<br />  char erasechar() 
<br />  此函数返回当前删除的字符。 
<br />
<br />  char killchar() 
<br />  此函数返回当前杀死的字符。 
<br />
<br />  int has_ic() 
<br />  int has_il() 
<br />  如果终端具有插入/删除字符的能力,则has_rc()将返回TRUE,如果终端具有插入/删除行的能力,则has_il()将返回TRUE,否则这两个函数将返回ERR。(注:尚未实现) 
<br />
<br />  char* longname() 
<br />  此函数所返回的指针允许用户访问当前终端的描述符。 
<br />
<br />  chty petermattrs()(注:此函数尚未实现) 
<br />  char* termname() 
<br />  这个函数从用户环境中返回TERM的内容。(注:此函数尚未实现)  
<br />  
<br />四.更新终端 
<br />  int refresh() 
<br />  int wrefresh(win) 
<br />  refersh()将把窗口映像拷贝到终端,而wrefresh(win)将把窗口映像拷贝到win,并使它看起来象原来的样子。 
<br />
<br />  int wnoutrefresh(win) 
<br />  int doupdate() 
<br />  wnoutrefresh(win)将会只拷贝到窗口win,这意味着在终端上将不进行任何输出,但是虚拟屏幕实际上看起来象程序员所希望的那样。doupdate()将输出到终端上。程序可以改变许多窗口,对每个窗口都调用一次 wnoutrefresh(win),然后再调用一次doupdate()来更新物理屏幕。 
<br />
<br />  int redrawln(win) 
<br />  int wredrawln(win,bline,blines) 
<br />  如果在往屏幕上输出新内容时需要清除一些行或者整个屏幕,可以使用这两 个函数。(可能这些行已经被破坏了或者由于其他的原因。) 
<br />
<br />  int touchwin(win) 
<br />  int touchline(win, start, count) 
<br />  int wtouchln(win, y, n, changed) 
<br />  int untouchwln(win) 
<br />  这些函数通知ncurses整个win窗口已经被改动过了,或者从start直到 start+count的这些行已经被改动过了。例如,如果用户有一些重叠的窗口 (正如在example.c中一样),对某个窗口的改动不会影响其他窗口的映像。 
<br />  wtouchln(.) 将按掀从y开始的n行。如果change的值是TRUE,则这些行被按掀过了,否则就还未被按掀过(改变或未改变)。 
<br />  untouchwin(win)将把窗口win标记为自上次调用refresh()以来还未被按掀。 
<br />
<br />  int ls_linetouched(win, line) 
<br />  int ls_wint ouched(win) 
<br />  通过使用这两个函数,用户可以检查自从上次调用refresh()以来, 
<br />  第line行或者窗口win是否已被按掀过。 
<br />
<br />
<br />五.视频属性与颜色 
<br />  ncurses定义了八种颜色,在带有彩色支持的终端上用户可以使用这些颜色。 首先,调用start_color()初始化颜色数据结构,然后使用has_colors()检查终端权能。 
<br />  start_color()将初始化COLORS和COLOR_PAIR。 前者是终端所支持的最多的颜色数目,而后者是用户可以定义的色彩对的最大数目。两个属性可以使用OR操作组合起来。“COLORPAIRS_1COLORS_1” 
<br />   
<br />  int color_content(color,t,g,b)    
<br />  此函数获取color的颜色成份r,g和b。 
<br />  首先,函数checkColor调用start_color()初始化颜色,如果当前终端有彩色的话, 
<br />则函数has_colors()将返回TRUE。我们检查了这一点以后,调用init_pair(.) 把前景色和背景色组合起来,再调用wattrset(.)为特定的窗口设置这些颜色对。 
<br />
<br />  此外,如果我们使用的是黑白终端,还可以单独使用wattrset(.)来设置属性。 如果要在xterm中获取颜色,我认为最佳方法是使用ansi_xterm, 以及来自MidnightCommander的terminfo项目。用户可以获取ansi_xterm 和MidnightCommander的源代码(mc_x.x.tar.gz),然后编译ansi_xterm, 并对mc_x.x.tar.gz文档中的xterm.ti和vt100.ti使用tic命令。 执行ansi_xterm,把它试验出来 
<br />   
<br />六.光标和屏幕坐标 
<br />   
<br />  int move(y, x) 
<br />  int wmove(win, y, x) 
<br />  move()将移动光标,而wmove(win)则从窗口win中移动光标。对输入/输出函数来说,还定义了其他的一些宏,在调用特定函数之前,这些宏可以移动光标。 
<br />   
<br />  int curs_set(bf) 
<br />  这个函数将把光标置为可见或者不可见,如果终端有这个功能 
<br />
<br />  void getyx(win, y, x) 
<br />  getyx(.)将返回当前光标位置。(注意:这是一个宏) 
<br />
<br />  void getparyx(win, y, x) 
<br />  如果win是个子窗口,getparyx(.)将把该窗口对应父窗口的坐标存储在y和x,否则y和x都将为-1。(注:此函数尚未实现) 
<br />   
<br />  void getbegyx(win,y,x) 
<br />  void getmaxyx(win,y,x) 
<br />  int  getmaxx(win) 
<br />  int  getmaxy(win) 
<br />  这些函数把窗口win的开始坐标和大小坐标存放在y和x中。 
<br />
<br />  int getsyx(int y, int x) 
<br />  int setsyx(int y, int x) 
<br />  getsyx(.)把虚拟屏幕光标存放在y和x中,而setsyx(.)则设置这个坐标。 
<br />  如果y和x是-1, 用户调用getsyx(.)将会设置leaveok。 
<br />   
<br />
<br />七.滚动 
<br />   
<br />  int tscrollok(win, bf) 
<br />  当光标在屏幕的右下角并且输入了一个字符(或者新的一行)时,如bf为TRUE则窗口win中的文本将上滚一行。如果bf为FALSE,则鼠标留在原来的位置上。当滚动特征打开时,使用下面的函数可以滚动窗口中的内容。 
<br />  (注意:当用户在窗口的最后一行输入一个新行时,也应该发生相应的滚动操作, 所以在使用scrollok(.)时要十分小心, 否则可能会得到出乎意料的结果。) 
<br />
<br />  int scrol(win) 
<br />  此函数将使窗口向上滚动一行(数据结构中的行也向上滚动)。 
<br />
<br />  int acrl(n) 
<br />  int wscrl(win, n) 
<br />  这两个函数将使屏幕或者窗口win向上向下滚动,滚动方向取决于整数n的值:如果n是正数,则窗口向上滚动n行;如果n是负数,则窗口向下滚动n行 
<br />
<br />  int setscrreg(t, b) 
<br />  int wsetscrreg(win, t, b) 
<br />  这两个函数设置一个软滚动区。 
<br />
<br />  小键盘   
<br />  WINDOW* newpad(nlines,ncols) 
<br />  WINDOW* subpad(orlg,nlines,ncols,begy,begx) 
<br />  int prefresh(pad,pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol) 
<br />  int pnoutrefresh(pad,pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol) 
<br />  int pechochar (pad,ch) 
<br />
<br />
<br />  软标签    
<br />  int slk_init(int fmt) 
<br />  int slk_set(int labnum, char* label,int fmt) 
<br />  int slk_refresh() 
<br />  int slk_noutrefresh() 
<br />  char* slk_label(int labnum) 
<br />  int slk_clear() 
<br />  int slk_restore() 
<br />  int slk_touch() 
<br />  int slk_attron(chty peattr) 
<br />  int slk_attrset(chty peattr) 
<br />  int slk_attroff(chty peattr) 
<br />  这些函数是与attron(attr)、attrset(attr)和attroft(attr)相对应的, 但它们尚未实现。 
<br />
<br />  int beep() 
<br />  int flash() 
<br />  char* unctrl(chty pec) 
<br />  char* keyname(int c) 
<br />  int filter() 
<br />  (注:以上函数尚未实现。) 
<br />  void use_env(bf) 
<br />  int putwin(WINDOW* win,FILE* filep) 
<br />  (注:以上函数尚未实现。) 
<br />  WINDOW* getwin(FILE* filep) 
<br />

⌨️ 快捷键说明

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