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

📄 corses笔记.txt

📁 curses界面编程
💻 TXT
📖 第 1 页 / 共 4 页
字号:
个 color pair 
char cascii = 'A'; 
chtype cascii_color = cascii | another_color_pair; 

再把 cascii_color 印出来就是一个你想要颜色的 A 了. 

==========================
============================
============================
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
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 
type是终端的名称,包括在$TERM中(如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 vline(ch,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.)时, 
所有的输出将会刷新到tty驱动程序队列中。 

终端属性 
int baudrate()此函数返回终端的速度,以bps为单位。 
char erasechar()此函数返回当前删除的字符。 
char killchar()此函数返回当前杀死的字符。 
int has_ic() 
int has_il()如果终端具有插入/删除字符的能力,则has_rc()将返回TRUE如果终端具有插入/删除行的能力,则has_il()将返回TRUE, 
否则这两个函数将返回ERR。(注:尚未实现) 
char *longname()此函数所返回的指针允许用户访问当前终端的描述符。 
chty petermattrs()(注:此函数尚未实现) 
char *termname()这个函数从用户环境中返回TERM的内容。(尚未实现) 
-------------------------------- 
更新终端 
int refresh() 
int wrefresh(win) 
refersh()将把窗口映像拷贝到终端,而wrefresh(win)将把窗口映像 
拷贝到win,并使它看起来象原来的样子。 
int wnoutrefresh(win) 
int doupdate() 
wnoutrefresh(win)将会只拷贝到窗口win,这意味着在终端上将不进行任何输出,但是虚拟屏幕实际上看起来象程序员所希望的那样。doupdate()将输 
出到终端上。程序可以改变许多窗口,对每个窗口都调用一次 
wnoutrefresh(win),然后再调用一次doupdate()来更新物理屏幕。 
int redrawln(win) 
int wredrawln(win,bline,blines) 
如果在往屏幕上输出新内容时需要清除一些行或者整个屏幕,可以使用这两 
个函数。(可能这些行已经被破坏了或者由于其他的原因。) 
int touchwin(win) 
int touchline(win,start,count) 
int wtouchln(win,y,n,changed) 
int untouchwln(win) 
这些函数通知ncurses整个win窗口已经被改动过了,或者从start直到 
start+count的这些行已经被改动过了。例如,如果用户有一些重叠的窗口 

⌨️ 快捷键说明

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