linux图形界面进程,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(0chty 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.)时,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值