,,C指针原理教程之Ncurses介绍

,,C指针原理教程之Ncurses介绍

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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: