linux终端 图形库,linux下图形编程库curses.h

和 一并 include 进

来.另外, 在 System V 版本中, 这个函数库也将一并

include进来.

#include

main()

{

: :

: :

}

当然, 您的系统内必须放有 curses.h 这个函数库.

■ 如何编译(compile)

当您编辑好您的程序, 在 UNIX 提示符号下键入:

% /usr/5bin/cc [file.c] -lcurses

^^^^^^^

引进 curses.h 这个 library

或 % /usr/5bin/cc [file.c] -lcurses -ltermlib

(*注二)

■ 如何开始我的第一个 curses 程序?

在开始使用 curses 的一切命令之前, 您必须先利用 initscr()这个函数

来开启 curses 模式.

相对的, 在结束 curses 模式前 ( 通常在您结束程序前 ) 也必须以

endwin()来关闭 curses 模式.

#include

main()

{

initscr();

: :

: :

: :

endwin();

}

这是一般 curses 程序标准的模式.

此外, 您可以就您程序所须, 而做不同的设定. 当然, 您可以不做设定,而

只是呼叫 initscr().

您可以自己写一个函数来存放所有您所须要的设定. 平常使用时, 只要呼

叫这个函数即可启动 curses 并完成一切设定.

下面的例子, 即是笔者将平常较常用的一些设定放在一个叫 initial()的函

式内.

void initial()

{

initscr();

cbreak();

nonl();

noecho();

intrflush(stdscr,FALSE);

keypad(stdscr,TRUE);

refresh();

}

各函数分别介绍如下:

□ initscr()

initscr() 是一般 curses 程序必须先呼叫的函数, 一但这个函数

被呼叫之後, 系统将根据终端的形态并启动 curses 模式.

□ endwin()

curses 通常以呼叫 endwin() 来结束程序. endwin() 可用来关闭

curses 模式, 或是暂时的跳离 curses 模式.如果您在程序中须要

call shell ( 如呼叫 system() 函数 ) 或是需要做 system call,

就必须先以 endwin() 暂时跳离 curses 模式. 最後再以

wrefresh() doupdate() 来重返 curses 模式.

□ cbreak()

nocbreak()

当 cbreak 模式被开启後, 除了 DELETE 或 CTRL 等仍被视为特殊

控制字元外一切输入的字元将立刻被一一读取.当处於 nocbreak 模

式时, 从键盘输入的字元将被储存在 buffer 里直到输入 RETURN

或 NEWLINE.在较旧版的 curses 须呼叫 crmode(),nocrmode() 来

取代 cbreak(),nocbreak()

□ nl()

nonl()

用来决定当输入资料时, 按下 RETURN 键是否被对应为 NEWLINE 字

元 ( 如 ).

而输出资料时, NEWLINE 字元是否被对应为 RETURN 和 LINDFEED

系统预设是开启的.

□ echo()

noecho()

此函数用来控制从键盘输入字元时是否将字元显示在终端上.系统

预设是开启的.

□ intrflush(win,bf)

呼叫 intrflush 时须传入两个值:

win 为一 WINDOW 型态指标, 通常传入标准输出入屏幕 stdscr

bf 为 TRUE 或 FALSE

当 bf 为 true 时, 当输入中断字元 ( 如 break) 时, 中断的反应

将较为快速.但可能会造成屏幕的错乱.

□ keypad(win,bf)

呼叫 keypad 时须传入两个值:

win 为一 WINDOW 型态指标, 通常传入标准输出入屏幕 stdscr

bf 为 TRUE 或 FALSE

当开启 keypad 後, 可以使用键盘上的一些特殊字元, 如上下左右

等方向键, curses 会将这些特殊字元转换成 curses.h 内定义的一

些特殊键. 这些定义的特殊键通常以 KEY_ 开头.

□ refresh()

refresh() 为 curses 最常呼叫的一个函数.

curses 为了使屏幕输出入达最佳化, 当您呼叫屏幕输出函数企图改

变屏幕上的画面时, curses 并不会立刻对屏幕做改变, 而是等到

refresh() 呼叫後, 才将刚才所做的变动一次完成. 其馀的资料将

维持不变. 以尽可能送最少的字元至屏幕上. 减少屏幕重绘的时间.

如果是 initscr() 後第一次呼叫 refresh(), curses 将做清除萤

幕的工作.

■ 光标的控制

move(y,x) 将光标移动至 x,y 的位置

getyx(win,y,x) 得到目前光标的位置

(请注意! 是 y,x 而不是 &y,&x )

■ 有关清除屏幕的函数

clear()

erase() 将整个屏幕清除

(请注意配合refresh() 使用)

■ 如何在屏幕上显示字元

echochar(ch) 显示某个字元

addch(ch) 显示某个字元

mvaddch(y,x,ch) 在(x,y) 上显示某个字元

相当於呼叫 move(y,x);addch(ch);

addstr(str) 显示一串字串

mvaddstr(y,x,str) 在(x,y) 上显示一串字串

相当於呼叫 move(y,x);addstr(str);

printw(format,str) 类似 printf() , 以一定的格式输出至屏幕

mvprintw(y,x,format,str) 在(x,y) 位置上做 printw 的工作.

相当於呼叫 move(y,x);printw(format,str);

■ 如何从键盘上读取字元

getch() 从键盘读取一个字元 (注意! 传回的是整数值)

getstr() 从键盘读取一串字元

scanw(format,&arg1,&arg2...) 如同

scanf, 从键盘读取一串字元

□例:

int ch;

char string1[80];

char string2[80];

echo();

ch=getch();

string1=getstr();

scanw("%s",string2);

mvprintw(10,10,"String1=%s",string1);

mvprintw(11,10,"String2=%s",string2);

■ 如何利用方向键

curses 将一些如方向键等特殊控制字元, 以 KEY_ 为开头定义在 curses.h

这个档案里头, 如 KEY_UP 即代表方向键的 " ↑ ". 但, 如果您想使用

curses.h 所为您定义的这些特殊键的话, 您就必须将 keypad 设定为

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值