打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C语言开发linux下的图形界面程序

scounix下curses编程函数说明

#include 

-------------------------------------------------------- 

INDDW*curscr:当前屏幕

WINDOW *stdscr:标准屏幕

int LINES:终端上的行数

int COLS:终端上的列数

bool TRUE:真标志,1

bool FALSE:假标志,0

int ERR:错误标志,-1

int OK:OK标志,0

---------------------------------------------

win:WINDOW *

bf:bool

ch:chty pe

str:char *

chstr:chty pe*

fmt:char *

否则:int 

---------------------------------------------

初始化

WINDOW *initscr()

SCREEN*newterm(char *type, FILE *outfd, FILE *infd)

对用户访问的每个终端都应该调用newterm

t y p e是终端的名称,包括在$ T E R M中(如ansi, xterm, vt100等等)

SCREEN*set_term(SCREEN *new)

用户可以切换当前终端。所有的函数都将在设置的当前终端上起作用。

int endwin()

退出程序之前,关闭所有打开的窗口。

之后还可以调用refresh(),

int isendwin()

ifendwin()->refresh(),TRUE,|FALSE。

-----------------------

WINDOW *newwin(nlines,ncols,begy,begx)

begy和begx是窗口左上角的坐标。nlines是一个整数,

存放着行的数目,而ncols,存放着列的数目。

所有的参数设置为零,则打开的窗口的大小将与屏幕的大小相同。

int delwin(win)

它删除窗口win。如果存在子窗口,以前先要删除这些子窗口。这个函数将

释放win所占据的所有资源。在调用endwin()之前用户应该删除所有的窗口

int mvwin(win,by,bx)

它将把窗口移到坐标(by,bx)处。如果把窗口移出屏幕边界的范围,则ERR

WINDOW *subwin(origwin,nlines,ncols,begy,begx)

它返回一个位于origwin窗口中间的子窗口。如果用户改变这两个窗口

(origwin或者那个新窗口)中的一个,则这种改变将会同时反映到这两

个窗口上。在下一次调用refresh()之前,先要调用touchwin(origwin)

begx和begy是相对于屏幕的,而不是相对于origwin的。

WINDOW *derwin(origwin,nlines,ncols,begy,begx)

此函数与subwin(.)相同,只不过这里的begx和begy是相对于origwin的,而不是相对于屏幕的。

mvderwin(win,y,x)

此函数将把win移到父窗口内。(注意:此函数尚未实现)。

WINDOW *dupwin(win)

此函数复制窗口win。

int overlay(win1,win2)

将把win1中的所有文本拷贝到win2中,但是不拷贝空格。

int overwrite(win1,win2)

也是做文本拷贝工作的函数,但它拷贝空格。

int copywin(win1,win2,sminrow,smincol,dminrow,

dmincol,dmaxrow,dmaxcol,overlay)

它所做的工作与overlay(.)和overwrite(.)相似,但是该函数还可以让程序员选择拷贝窗口的哪个区域。

int addch(ch)

int waddch(win,ch)

int mvaddch(y,x,ch)

int mvwaddch(win,y,x,ch)

----------------

int addstr(str)

int addnstr(str,n)

int waddstr(win,str)

int waddnstr(win,str,n)

int mvaddstr(y,x,str)

int mvaddnstr(y,x,str,n)

int mvwaddstr(win,y,x,str)

int mvwaddnstr(win,y,x,str,n)

-----------------------------

int addchstr(chstr)

int addchnsrtr(chstr,n)

int waddchstr(win,chstr)

int waddchnstr(win,chstr,n)

int mvaddchstr(y,x,chstr)

int mvaddchnstr(y,x,chstr,n)

int mvwaddchstr(win,y,x,chstr)

int mvwaddchnstr(win,y,x,chstr,n)

*****chstr是指向ch type数组的一个指针。*****

---------------------------

int echochar (ch)

int wechochar (win,ch)

---------------------------

int printw(fmt,..)

int wprintw(win.fmt,....)

int mvprintw(y,x,fmt,...)

int mvwprntw(win,y,x,fmt,..)

---------------------------

int insch(c)

int winsch(win,c)

int mvinsch(y,x,c)

int mvwinsch9win,y,x,c)

这些函数把字符ch插入到光标的左边,

光标后面的所有字符则向右移动一个位置。

在这一行最右端的字符可能会丢失。

---------------------------

int insert()

int winsert(win)

在当前行的上方插入一个空行(最底下的一行将被丢失)。

---------------------------

int insdelin(n)

int winsdelln(win,n)

如果n为正数,则这些函数将在适当的窗口的当前光标上方插入n行

(这样一来最底下的n行将丢失);如果n为负数,则光标下面的n行将被删除,

余下的行将上升,顶替它们的位置。这些函数将在当前光标的左边插入str

(字符的个数不能超过一行的限度)。在光标右边的字符将右移,如果到达行

尾,则字符将丢失,光标位置不变。y和x是指在插入str以前先要把光标移动

到的坐标,n是要插入的字符的数目(如果n为0则插入整个字符串)。

---------------------------

int insstr(str)

int insnstr(str,n)

int winsstr(win,str)

int winsnstr(win,str,n)

int mvinsstr9y,x,str)

int mvinsnstr(y,x,str,n)

int mvwinsstr(win,y,x,str)

int mvwinsnstr(win,y,x,str,n)

这些函数将在当前光标的左边插入str(字符的个数不能超过一行的限度)。

在光标右边的字符将右移,如果到达行尾,则字符将丢失,光标位置不变。

y和x是指在插入str以前先要把光标移动到的坐标,n是要插入的字符的数目

(如果n为0则插入整个字符串)。

---------------------------

int delch()

int wdelch(win)

int mvdelch(y,x)

int mvwdelch(win,y,x)

删除光标左边的字符,并把光标右边余下的字符向左移动一个位置。

y和x是在进行删除操作以前要把光标移动到的坐标。

int deleteln()

int wdeleteln(win)

删除光标下面的一行,并把下面所有的其他行都向上移动一个位置。

此外,屏幕最底下的一行将被清除。

-----------------------------

方框和直线

int border(ls,rs,ts,bs,tl,tr,bl,br)

int wborder(win,ls,rs,ts,bs,tl,tr,bl,br)

int box(win,vert,hor)

这些函数在窗口的边界(或者win的边界)画上方框。在下面的表格中,

读者将可以看到字符,以及它们的默认值。当用零去调用box(.)时将

会用到这些默认值。在下面的图中读者可以看到方框中字符的位置

-------------

int vline9ch,n)

int wvline(win,ch,n)

int hline(ch,n)

int whline(win,ch,n)

这些函数将从当前光标位置开始画一条水平线或者垂直线。

ch是画线所使用的字符,n是要画的字符的个数,光标位置并不移动。

--------------------------

void bkgdset(ch)

void wbkgdset(win,ch)

这两个函数设置窗口或者屏幕的背景字符和属性。ch的属性将和窗口中

所有非空格的字符的属性进行OR操作。背景是窗口的一部分,

将不会随着滚动、输入或输出而改变

int bkgd(ch)

int wbkgd(win,ch)

---------------------------------

int getch()

int wgetch()

int mvgetch(y,x)

int mvwgetch(win,y,x)

getch()将从终端读取输入,读取的方式取决于是否设置了延迟模式。

如果设置了延迟模式,则getch()将一直等待,直到用户按下一个键为止;

如果没有设置延迟模式,则它将返回输入缓冲区中的数据,如果输入缓冲区

为空,则它将返回ERR。mvgetch(.)和mvwgetch(.)首先把光标移动到位置

(y,x)上。名称中有w字母的函数将从与窗口win相关的终端读取输入,

getch()和mvgetch(.)则从屏幕相关的终端读取。如果使能了keypad(.)

在用户按下某个功能键时,getch()将返回一个代码,该代码在.h头文件中被

定义为KEY_*宏。如果用户按下Esc键(它可能会是某个组合功能键的第

一个键),则ncurses将启动一个否则就返回功能键的值。(如果需要的话,

可以使用notimeout()来关闭第二个定时器int ungetch()这个函数将把字符ch送回输入缓冲区。

---------------------

int getstr(str)

int wgetstr(win,str)

int mvgetstr(y,x,str)

int mvwgetstr(win,y,x,str)

int wgetnstr(win,str,n)

这些函数的作用相当于对getch()进行一系列的调用,直到接收到一个新行。

行中的字符存放在str中(所以,在调用getstr(.)之前,不要忘记给字符指针

分配内存)。如果打开了回送,则字符串将被显示出来(使用noecho()可以关

闭回送)而用户的删除字符以及其他特殊字符也会被解释出来

-----------------

chty peinch(0

chty pewinch(win)

chty pemvinch(y,x)

chty pemvwinch(win,y,x)

这些函数从屏幕或窗口返回一个字符,因为返回值的类型是chty pe,

所以还包括了属性信息。这一信息可以使用常量A_*从字符中扩展得到。

-------------------

int scanw(fmt,...)

int wscanw(win,fmt,...)

int mvscanw(y,x,fmt,...)

int mvwscanw(win,y,x,fmt,...)

int vwscanw(win,fmt,va_list.)

----------------------------

输出选项

int idlok9win,bf)

void fdcok(win.bf)

这两个函数为窗口使能或者关闭终端的insert/delete特征(idlok(.)针对一

行,而idcok(.)则针对字符)。(注:idcok(.)尚未实现)

void immedok(win,bf)

bf设置为TRUE,则对窗口win的每一次改变都将导致物理屏幕的一次刷新。

这将使程序的性能降低,所以默认的值是FALSE。(注:此函数尚未实现)

int clearok(win,bf)

如果bf值为TRUE,则下一次调用wrefresh(win)时将会清除屏幕,

并完全地把它重新画一遍(就像用户在编辑器vi中按下Ctrl+L一样)。

int leaveok(win,bf)

默认的行为是,ncurses让物理光标停留在上次刷新窗口时的同一个位置上。

不使用光标的程序可以把leaveok(.)设置为TRUE,这样一般可以节省光标

移动所需要的时间。此外,ncurses将试图使终端光标不可见。

int nl()

int nonl()

这两个函数控制新行的平移。使用nl()可以打开平移,这样在回车时就会

平移到新的一行,在输出时就会走行。而nonl()可以把平移关上。

关上平移之后,ncurses做光标移动操作时速度就会快一些。

------------------------------

输入选项

int keypad(win,bf)

bf为TRUE,函数在等待输入时会使能用户终端的键盘上的小键盘。

ncurses将返回一个键代码,该代码在.h头文件中被定义为KEY_*宏,

它是针对小键盘上的功能键和方向键的。对于PC键盘来说,

这一点是非常有帮助的,因为这样用户就可以使能数字键和光标键。

int meta(win.bf)

bf为TRUE,从getch()返回的键代码将是完整的8位(最高位将不会被去掉)

int cbreak()

int nocbreak()

int crmode()

int nocrmode()

cbreak()和nocbreak()将把终端的CBREAK模式打开或关闭。如果CBREAK打开则程序就可以立刻使用读取的输入信息。如果CBREAK关闭,则输入将被缓存

起来,直到产生新的一行(注意:crmode()和nocrmode()只是为了提供向上兼容性,不要使用它们)

int raw()

int noraw()

这两个函数将把RAW模式打开或关闭。RAW与CBREAK相同,

它们的区别在于RAW模式不处理特殊字符。

int echo()

int noecho()

如果把echo()设置为TRUE,则用户所敲的输入将会回送并显示出来,

而noecho()则对此保持沉默。

int halfdelay(t)

此函数与cbreak()相似,但它要延迟t秒钟。

int nodelay(win,bf)

终端将被设置为非阻塞模式。如果没有任何输入则getch()将返回ERR,

否则如果设置为FALSE,则getch()将等待,直到用户按下某个键为止。

int timeout(t)

int wtimeout(win,t)

笔者提倡大家使用这两个函数,而不要使用halfdelay(t)和nodelay(win,bf)getch()的结果取决于t的值。如果t是正数,则读操作将被阻塞t毫秒;

如果t为零,则不发生任何阻塞;如果t是负数,则程序将阻塞,直到有输入为止

int notimeout(win,bf)

如果bf为TRUE,则getch()将使用一个特殊的定时器(一秒钟长)。到时间以后

再对以Esc等键打头的输入序列进行解释。

int typeahead(fd)

如果fd是-1,则不检查超前键击,否则ncurses将使用文件描述符fd来进行这些检查

int int rflush(win,bf)

当bf为TRUE时使能该函数。在终端上按下任意中断键(quit、break.)时,

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
curses编程(一)初识
C程序上机考试设计题(附源代码)-ッ志远ヴ自留屋
第1套上机考试真题
浅析C语言中关于字符串的操作 - C/C++ - 课堂 - 话题 - 张剑 - CSDN学...
CString类_自我救赎的空间
C语言标准库所包含的函数功能介绍(1)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服