Ncurses提供字符终端处理库,包括面板和菜单。为了能够使用ncurses库,您必须在您的源程序中将诅咒。h包括(包括)进来,而且在编译的需要与它连接起来。在(同地面控制中心)地面控制中心中您可以使用参数-课程进行编译。
1、安装Ncurses
Ncurses是一个能提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能的动态库。
Ncurses是一个能提供基于文本终端窗口功能的动态库100 . Ncurses可以:
只要您喜欢,您可以使用整个屏幕
创建和管理一个窗口
使用8种不同的彩色
为您的程序提供鼠标支持
使用键盘上的功能键
人的本质下
mysea @ mysea-desktop:~ $ sudo apt-get install libncurses 5-dbg libncurses 5-dev
mysea @ mysea-desktop:~/test $ gcc-ln curses-o curses test curses test。c
Freebsd下
CD/usr/ports/devel/ncurses-devel
使安装干净
你好,世界
#包含诅咒。h
int main(void){
init SCR();//初始化
box(stdscr,ACS_VLINE,ACS _ HLINE);//画边框
mvaddstr(15,2,你好,世界');//在15,2显示字符串
刷新();//刷新屏幕
getch();//等待按键
endwin();//结束
返回0;
}
编译及运行
DP @ DP:~/cursestest % gcc-ln诅咒1。c-o mytest
DP @ DP:~/curse test % ./mytest
3、色彩
然后编写下面代码:
#包含ncurses.h
#包含区域设置。h
#包含标准视频
int main(void){
//初始化对(短索引、短前景、短背景)初始化颜色索引
//attron(COLOR_PAIR(索引号)|属性)
setlocale(LC_ALL,' ');
init SCR();//初始化
box(stdscr,ACS_VLINE,ACS _ HLINE);//画边框
如果(!has _ colors()| | start _ color()==ERR){
endwin();
printf('终端不支持颜色\ n’);
返回0;
}
init_pair(1,COLOR_GREEN,COLOR _ BLACK);
init_pair(2,COLOR_RED,COLOR _ BLACK);
初始化对(3,颜色_白色,颜色_蓝色);
int I=0;
for(I=1;I=3;i ){
attron(COLOR _ PAIR(I));
move(i,10);
printw('hello,world:%d ',I);
}
for(I=1;I=3;i ){
attron(COLOR _ PAIR(I)| A _ UNDERLINE);
move(i 5,10);
printw('hello,world:%d ',I);
}
刷新();//刷新屏幕
getch();//等待按键
endwin();//结束
执行
4、对中文的支持
dp@dp:~/cursestest % cat 1.c
#包含ncurses.h
#包含区域设置。h
#包含标准视频
int main(void){
//初始化对(短索引、短前景、短背景)初始化颜色索引
//attron(COLOR_PAIR(索引号)|属性)
setlocale(LC_ALL,' ');
init SCR();//初始化
box(stdscr,ACS_VLINE,ACS _ HLINE);//画边框
如果(!has _ colors()| | start _ color()==ERR){
endwin();
printf('终端不支持颜色\ n’);
返回0;
}
init_pair(1,COLOR_GREEN,COLOR _ BLACK);
init_pair(2,COLOR_RED,COLOR _ BLACK);
初始化对(3,颜色_白色,颜色_蓝色);
int I=0;
for(I=1;I=3;i ){
attron(COLOR _ PAIR(I));
move(i,10);
printw('你好,世界%d ',I);
}
for(I=1;I=3;i ){
attron(COLOR _ PAIR(I)| A _ UNDERLINE);
move(i 5,10);
printw('你好,世界:%d ',I);
}
刷新();//刷新屏幕
getch();//等待按键
endwin();//结束
返回0;
}
编译时注意要使用ncursesw库,不使用ncurses库
DP @ DP:~/cursestest % gcc-lncursesw 1。c-o mytest
DP @ DP:~/curse test % ./mytest
5、窗口与子窗口
dp@dp:~/cursestest % cat 1.c
#包含ncurses.h
#包含区域设置。h
int main(){
//初始化对(短索引、短前景、短背景)初始化颜色索引
//attron(COLOR_PAIR(索引号)|属性)
//newwin建立窗口,德文建立窗口的子窗口(相对于父窗口相对位置),子温建立窗口的子窗口(相对于根窗口绝对位置)
setlocale(LC_ALL,' ');
窗口*win1,*win2,*子win
init SCR();//初始化
win1=newwin(15,50,1,1);//新窗口(行,列,begin_y,begin_x)
box(win1,ACS_VLINE,ACS _ HLINE);
mvwprintw(win1,1,1,' win 1 ');
mvwprintw(win1,2,1,’您好,很高兴认识您');
win2=newwin(10,40,10,30);//新窗口(行,列,begin_y,begin_x)
box(win2,ACS_VLINE,ACS _ HLINE);
mvwprintw(win2,1,1,' win 2 ');
mvwprintw(win2,2,1,’您好,很高兴认识您');
subwin=derwin(win2,3,20,3,5);//子窗口
box(subwin,ACS_VLINE,ACS _ HLINE);
mvwprintw(subwin,1,5,’按任意键退出');//(窗口,y,x,字符串)
刷新();//刷新整个大窗口stdscr
wre fresh(赢1);
wre鲜(win 2);
触摸win(win 1);//转换当前窗口为win1
wre fresh(赢1);
getch();//win1显示完,等待按键显示win2
触摸win(win 2);//转换当前窗口为win2
//使用doupdate,可以事先定义要刷新的部分,然后刷新
wnoutrefresh(win 2);
wnoutrefresh(subwin);
doupdate();
getch();//等待按键
德尔温(win 1);
德尔温(亚温);
德尔温(win 2);
endwin();//结束
返回0;
}
DP @ DP:~/cursestest % gcc-lncursesw 1。c-o mytest
DP @ DP:~/curse test % ./mytest
6、自动滚屏
dp@dp:~/cursestest % cat 2.c
#包含ncurses.h
#包含区域设置。h
int main(void){
int y,x,I,j,h,w;
setlocale(LC_ALL,' ');
窗口* pad
init SCR();//初始化
getmaxyx(stdscr,h,w);//获得屏幕尺寸
//画背景
for(I=0;ih;i ){
for(j=0;jw;j ){
mvaddch(i,j,ACS _ CK董事会);
}
}
刷新();
//建立窗口
pad=newpad(80,90);
for(I=0;i80i ){
充电线[90];
sprintf(line,' line %d\n ',I);
mvwprintw(pad,I,1,line);
}
刷新();
预刷新(填充,0,1,5,10,20,25);//刷新填充0.1为基垫需要显示区域的左上角置(行列对,以下同此)。5,10,20,45为屏幕显示区域的左上角和右下角位置
for(I=0;i65i ){
预刷新(pad,i 1,1,5,10,20,25);//刷新垫,实现流屏;
美国LEEP(30000);
}
getch();//等待按键
德尔温(pad);
endwin();//结束
返回0;
}
DP @ DP:~/cursestest % gcc-lncursesw 2。c-o mytest
DP @ DP:~/curse test % ./mytest
7、在窗口中移动光标
dp@dp:~/cursestest % cat 2.c
#包含ncurses.h
#包含区域设置。h
int main(void){
//初始化对(短索引、短前景、短背景)初始化颜色索引
//attron(COLOR_PAIR(索引号)|属性)
//newwin建立窗口,德文建立窗口的子窗口(相对于父窗口相对位置),子温建立窗的子窗口(相对于根窗口绝对位置)
int x,y;
setlocale(LC_ALL,' ');
窗口*win1,*win2,*子win
init SCR();//初始化
win1=newwin(15,50,1,1);//新窗口(行,列,begin_y,begin_x)
box(win1,ACS_VLINE,ACS _ HLINE);
mvwprintw(win1,1,1,' win 1 ');
mvwprintw(win1,2,1,' my haspl @ my haspl。com’);
win2=newwin(10,40,10,30);//新窗口(行,列,begin_y,begin_x)
box(win2,ACS_VLINE,ACS _ HLINE);
wmove(win2,1,1);//移动某窗口的光标
printw(' win 2 ');
wmove(win2,2,1);//移动某窗口的光标。(窗口y,x)
printw(' my haspl @ my haspl。com’);
subwin=derwin(win2,3,20,4,5);//子窗口
box(subwin,ACS_VLINE,ACS _ HLINE);
mvwprintw(subwin,1,5,’按任意键退出');//(窗口,y,x,字符串)
刷新();//刷新整个大窗口stdscr
wre fresh(赢1);
wre鲜(win 2);
移动(5,60);//在stdscr移动光标
printw('你好.');
触摸win(win 1);//转换当前窗口为win1
wre fresh(赢1);
getch();//win1显示完,等待按键显示win2
触摸win(win 2);//转换当前窗口为win2
//使用doupdate,可以事先定义要刷新的部分,然后刷新
wnoutrefresh(win 2);
wnoutrefresh(subwin);
doupdate();
getyx(subwin,y,x);//获得当前逻辑光标位置
mvwprintw(subwin,y 1,x,'………………');//在"按任意键退出'下一行输出'..'
getch();//等待按键
德尔温(win 1);
德尔温(亚温);
德尔温(win 2);
endwin();//结束
返回0;
}
编译后运行
DP @ DP:~/cursestest % gcc-lncursesw 2。c-o mytest
DP @ DP:~/curse test % ./mytest
8、菜单
dp@dp:~/cursestest % cat 2.c
#包含区域设置。h
#包含菜单。h
#包含标准视频
#包含ctype.h
//定义菜单项
静态const char *menus[]={
'1-1','1-2','1-3','2-1','2-2','2-3'
};
# define CITEM sizeof(menus)/sizeof(menus[0])//菜单项数
ITEM * items[CITEM];
int main(int argc,char *argv[]){
int I;
内部通道
int mrows,mcols
窗口*win,*子窗口
菜单*我的菜单
//初始化屏幕
init SCR();
//不用等待回车键
c break();
//不回显
无回声();
//可以处理功能键
小键盘(stdscr,TRUE);
//建立菜单项
for(I=0;iCITEMi ){
items[i]=new_item(menus[i],menus[I]);//第二个参数为菜单项的描述
}
//建立菜单
我的菜单=新建_菜单(项目);
set_menu_format(mymenu,CITEM,1);//设置CITEM行一列的菜单
set_menu_mark(mymenu,' ');//菜单选中的标记
//获得菜单的行列数
scale_menu(mymenu,mrows,mcols);
//建立窗口和子窗口
win=newwin(mrows 2,mcols 2,3,30);
键盘(赢,真);
box(win,0,0);
subwin=derwin(win,0,0,1,1);
//设置菜单的窗口
set_menu_sub(mymenu,sub win);
//在子窗口上放置菜单
post_menu(我的菜单);
刷新();
新鲜的(赢);
//获得输入,并移动选择到相应的菜单项
while(toupper(ch=wgetch(win))!='\n'){
if(ch==KEY_DOWN)
menu_driver(mymenu,REQ _ DOWN _ ITEM);//移动菜单选择
else if(ch==KEY_RIGHT)
menu_driver(mymenu,REQ _ RIGHT _ ITEM);
else if (ch==KEY_UP)
menu_driver(mymenu,REQ _ UP _ ITEM);
else if (ch==KEY_LEFT)
menu_driver(mymenu,REQ _ LEFT _ ITEM);
}
//输出当前项
mvprintw(第2,0行,’您选择的项目:%s\n ',item _ name(current _ item(我的菜单)));
刷新();
un post _ menu(我的菜单);
getch();
//释放内存
免费菜单(我的菜单);
for(I=0;iCITEMI)free _ item(items[I]);
endwin();
返回1;
}
编译并运行
DP @ DP:~/cursestest % gcc-lncursesw-lmenu 2。c-o mytest
DP @ DP:~/curse test % ./mytest
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。