亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C指針原理教程之Ncurses介紹

2020-01-26 13:32:28
字體:
來源:轉載
供稿:網友

1、安裝Ncurses

Ncurses是一個能提供功能鍵定義(快捷鍵),屏幕繪制以及基于文本終端的圖形互動功能的動態庫。

Ncurses是一個能提供基于文本終端窗口功能的動態庫. Ncurses可以:

? 只要您喜歡,您可以使用整個屏幕

? 創建和管理一個窗口

? 使用8種不同的彩色

? 為您的程序提供鼠標支持

? 使用鍵盤上的功能鍵

Ubuntu下

mysea@mysea-desktop:~$ sudo apt-get install libncurses5-dbg libncurses5-devmysea@mysea-desktop:~/test$ gcc -lncurses -o cursestest cursestest.c

Freebsd下

cd /usr/ports/devel/ncurses-develmake install clean

2、hello,world

#include <curses.h>int main(void){  initscr();//初始化  box(stdscr,ACS_VLINE,ACS_HLINE);//畫邊框  mvaddstr(15,2,"hello,world");//在15,2顯示字符串  refresh();//刷新屏幕  getch();//等待按鍵  endwin();//結束  return 0;  }

編譯及運行

dp@dp:~/cursestest % gcc -lncurses 1.c -o mytestdp@dp:~/cursestest % ./mytest

 3、色彩

然后編寫下面代碼:

#include <ncurses.h>#include <locale.h>#include <stdio.h>int main(void){//init_pair(short index,short foreground,short background)初始化顏色索引//attron(COLOR_PAIR(索引號)|屬性)  setlocale(LC_ALL,"");  initscr();//初始化  box(stdscr,ACS_VLINE,ACS_HLINE);//畫邊框  if (!has_colors()||start_color()==ERR){    endwin();    printf("終端不支持顏色/n");    return 0;  }  init_pair(1,COLOR_GREEN,COLOR_BLACK);  init_pair(2,COLOR_RED,COLOR_BLACK);  init_pair(3,COLOR_WHITE,COLOR_BLUE);  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);  }  refresh();//刷新屏幕  getch();//等待按鍵  endwin();//結束  

執行

4、對中文的支持

dp@dp:~/cursestest % cat 1.c#include <ncurses.h>#include <locale.h>#include <stdio.h>int main(void){//init_pair(short index,short foreground,short background)初始化顏色索引//attron(COLOR_PAIR(索引號)|屬性)  setlocale(LC_ALL,"");  initscr();//初始化  box(stdscr,ACS_VLINE,ACS_HLINE);//畫邊框  if (!has_colors()||start_color()==ERR){    endwin();    printf("終端不支持顏色/n");    return 0;  }  init_pair(1,COLOR_GREEN,COLOR_BLACK);  init_pair(2,COLOR_RED,COLOR_BLACK);  init_pair(3,COLOR_WHITE,COLOR_BLUE);  int i=0;  for (i=1;i<=3;i++){     attron(COLOR_PAIR(i));     move(i,10);     printw("hello,世界%d",i);  }  for (i=1;i<=3;i++){     attron(COLOR_PAIR(i)|A_UNDERLINE);     move(i+5,10);     printw("hello,世界:%d",i);  }  refresh();//刷新屏幕  getch();//等待按鍵  endwin();//結束  return 0;  }

編譯時注意要使用ncursesw庫,不使用ncurses庫

dp@dp:~/cursestest % gcc -lncursesw 1.c -o mytestdp@dp:~/cursestest % ./mytest

5、窗口與子窗口

dp@dp:~/cursestest % cat 1.c

#include <ncurses.h>#include <locale.h>int main(){//init_pair(short index,short foreground,short background)初始化顏色索引//attron(COLOR_PAIR(索引號)|屬性)//newwin建立窗口,derwin建立窗口的子窗口(相對于父窗口相對位置),subwin建立窗口的子窗口(相對于根窗口絕對位置)  setlocale(LC_ALL,"");  WINDOW *win1,*win2,*subwin;  initscr();//初始化  win1=newwin(15,50,1,1);//新窗口(行,列,begin_y,begin_x)  box(win1,ACS_VLINE,ACS_HLINE);  mvwprintw(win1,1,1,"WIN1");  mvwprintw(win1,2,1,"您好,很高興認識您");  win2=newwin(10,40,10,30);//新窗口(行,列,begin_y,begin_x)  box(win2,ACS_VLINE,ACS_HLINE);  mvwprintw(win2,1,1,"WIN2");  mvwprintw(win2,2,1,"您好,很高興認識您");  subwin=derwin(win2,3,20,3,5); //子窗口  box(subwin,ACS_VLINE,ACS_HLINE);  mvwprintw(subwin,1,5,"按任意鍵退出");//(窗口,y,x,字符串)  refresh();//刷新整個大窗口stdscr  wrefresh(win1);  wrefresh(win2);  touchwin(win1);//轉換當前窗口為win1  wrefresh(win1);  getch();//win1顯示完,等待按鍵顯示win2  touchwin(win2);//轉換當前窗口為win2   //使用doupdate,可以事先定義要刷新的部分,然后刷新  wnoutrefresh(win2);   wnoutrefresh(subwin);  doupdate();  getch();//等待按鍵  delwin(win1);  delwin(subwin);  delwin(win2);  endwin();//結束  return 0;  }

dp@dp:~/cursestest % gcc -lncursesw 1.c -o mytest
dp@dp:~/cursestest % ./mytest

6、自動滾屏

dp@dp:~/cursestest % cat 2.c

#include <ncurses.h> #include <locale.h> int main(void){   int y,x,i,j,h,w;  setlocale(LC_ALL,"");   WINDOW *pad;   initscr();//初始化     getmaxyx(stdscr,h,w);//獲得屏幕尺寸   //畫背景  for(i=0;i<h;i++){     for(j=0;j<w;j++){       mvaddch(i,j,ACS_CKBOARD);     }  }  refresh();    //建立窗口  pad=newpad(80,90);  for (i=0;i<80;i++){    char line[90];    sprintf(line,"line %d/n",i);    mvwprintw(pad,i,1,line);  }  refresh();  prefresh(pad,0,1,5,10,20,25);//刷新pad。0,1 為基墊需要顯示區域的左上角置(行列對,以下同此)。5,10,20,45為屏幕顯示區域的左上角和右下角位置   for(i=0;i<65;i++){    prefresh(pad,i+1,1,5,10,20,25);//刷新pad,實現流屏;    usleep(30000);   }  getch();//等待按鍵  delwin(pad);   endwin();//結束   return 0;  }

dp@dp:~/cursestest % gcc -lncursesw 2.c -o mytest

dp@dp:~/cursestest % ./mytest

7、在窗口中移動光標

dp@dp:~/cursestest % cat 2.c

#include <ncurses.h> #include <locale.h> int main(void){ //init_pair(short index,short foreground,short background)初始化顏色索引 //attron(COLOR_PAIR(索引號)|屬性) //newwin建立窗口,derwin建立窗口的子窗口(相對于父窗口相對位置),subwin建立窗的子窗口(相對于根窗口絕對位置)   int x,y;  setlocale(LC_ALL,"");   WINDOW *win1,*win2,*subwin;   initscr();//初始化   win1=newwin(15,50,1,1);//新窗口(行,列,begin_y,begin_x)   box(win1,ACS_VLINE,ACS_HLINE);   mvwprintw(win1,1,1,"WIN1");   mvwprintw(win1,2,1,"myhaspl@myhaspl.com");   win2=newwin(10,40,10,30);//新窗口(行,列,begin_y,begin_x)   box(win2,ACS_VLINE,ACS_HLINE);   wmove(win2,1,1);//移動某窗口的光標  printw("WIN2");  wmove(win2,2,1);//移動某窗口的光標。(窗口,y,x)  printw("myhaspl@myhaspl.com");   subwin=derwin(win2,3,20,4,5); //子窗口   box(subwin,ACS_VLINE,ACS_HLINE);   mvwprintw(subwin,1,5,"按任意鍵退出");//(窗口,y,x,字符串)       refresh();//刷新整個大窗口stdscr   wrefresh(win1);   wrefresh(win2);     move(5,60);//在stdscr移動光標  printw("hello.........");  touchwin(win1);//轉換當前窗口為win1   wrefresh(win1);   getch();//win1顯示完,等待按鍵顯示win2   touchwin(win2);//轉換當前窗口為win2   //使用doupdate,可以事先定義要刷新的部分,然后刷新   wnoutrefresh(win2);    wnoutrefresh(subwin);   doupdate();   getyx(subwin,y,x);//獲得當前邏輯光標位置  mvwprintw(subwin,y+1,x,"................");//在“按任意鍵退出"下一行輸出"..............."  getch();//等待按鍵   delwin(win1);   delwin(subwin);   delwin(win2);   endwin();//結束   return 0;  } 

編譯后運行

dp@dp:~/cursestest % gcc -lncursesw 2.c -o mytest

dp@dp:~/cursestest % ./mytest

8、菜單

dp@dp:~/cursestest % cat 2.c

#include <locale.h>#include <menu.h> #include <stdio.h>#include <ctype.h>//定義菜單項static 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 ch;  int mrows,mcols;  WINDOW *win,*subwin;  MENU *mymenu;    //初始化屏幕  initscr();  //不用等待回車鍵  cbreak();  //不回顯  noecho();  //可以處理功能鍵   keypad(stdscr,TRUE);     //建立菜單項  for(i=0;i<CITEM;i++){    items[i]=new_item(menus[i],menus[i]);//第二個參數為菜單項的描述  }   //建立菜單  mymenu=new_menu(items);  set_menu_format(mymenu,CITEM,1);  //設置CITEM行1列的菜單  set_menu_mark(mymenu,">");//菜單選中的MARK  //獲得菜單的行列數  scale_menu(mymenu,&mrows,&mcols);  //建立窗口和子窗口  win=newwin(mrows+2,mcols+2,3,30);  keypad(win,TRUE);  box(win,0,0);  subwin=derwin(win,0,0,1,1);  //設置菜單的窗口  set_menu_sub(mymenu,subwin);    //在子窗口上放置菜單  post_menu(mymenu);    refresh();  wrefresh(win);  //獲得輸入,并移動選擇到相應的菜單項   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(LINES-2,0,"you select the item :%s/n",item_name(current_item(mymenu)));  refresh();  unpost_menu(mymenu);  getch();  //釋放內存  free_menu(mymenu);  for(i=0;i<CITEM;i++) free_item(items[i]);  endwin();  return 1;}

編譯并運行

dp@dp:~/cursestest % gcc -lncursesw -lmenu 2.c -o mytest

dp@dp:~/cursestest % ./mytest

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
黄色一区二区在线| 久久久999国产精品| 欧美亚洲在线视频| 久久人人爽人人爽人人片av高清| 国产精品久久一| 亚洲综合av影视| 一区二区三区四区精品| 亚洲视频在线观看网站| 国产精品偷伦免费视频观看的| 国产成人精品av在线| xxxx性欧美| 日韩精品高清在线观看| 国产精品久久久久久搜索| 国产精品毛片a∨一区二区三区|国| 国产精品电影在线观看| 国产精品久久久久久久av大片| 日韩av在线网站| 欧美日韩在线看| 欧美老妇交乱视频| 伊人久久久久久久久久久久久| 亚洲bt天天射| 欧美亚洲日本黄色| 91产国在线观看动作片喷水| 国产亚洲xxx| 欧美三级欧美成人高清www| 亚洲a级在线观看| 国产亚洲福利一区| 亚洲va男人天堂| 97国产一区二区精品久久呦| 国产精品香蕉国产| 亚洲欧美日韩国产中文| xvideos亚洲人网站| 91在线高清视频| 国产在线观看一区二区三区| 日韩欧美aⅴ综合网站发布| 国产精品自产拍在线观看| 久久艳片www.17c.com| 亚洲精品午夜精品| 久久精品99久久香蕉国产色戒| 亚洲成人三级在线| 亚洲午夜色婷婷在线| 中文字幕亚洲精品| 亚洲激情在线视频| 在线国产精品视频| 亚洲最大成人网色| 美女性感视频久久久| 欧美日韩国产在线看| 国产精品入口日韩视频大尺度| 欧美一级片一区| 亚洲第一福利在线观看| 久久91亚洲精品中文字幕| 日韩电影中文字幕av| 97国产suv精品一区二区62| 成人看片人aa| 日韩免费看的电影电视剧大全| 久久99精品久久久久久青青91| 亚洲一区www| 亚洲爱爱爱爱爱| 中国china体内裑精亚洲片| 亚洲天堂视频在线观看| 久久夜色精品国产欧美乱| 91亚洲国产成人久久精品网站| 亚洲美女在线观看| 日韩经典中文字幕在线观看| 性欧美暴力猛交69hd| 国内精品模特av私拍在线观看| 日本人成精品视频在线| 热久久这里只有精品| 秋霞成人午夜鲁丝一区二区三区| 亚洲最新在线视频| 成人欧美一区二区三区黑人| 国产精品久久久久久av福利| 国产精品一区二区三区成人| 日韩大片免费观看视频播放| 精品福利樱桃av导航| 日韩女优在线播放| 亚洲欧美国产视频| 国产盗摄xxxx视频xxx69| 精品国产依人香蕉在线精品| 国产视频欧美视频| 欧美一区亚洲一区| 91探花福利精品国产自产在线| 1769国内精品视频在线播放| 欧美放荡办公室videos4k| 国产免费一区二区三区香蕉精| 亚洲第一精品电影| 不卡在线观看电视剧完整版| 亚洲国产精品yw在线观看| 久久久国产精品x99av| 久热99视频在线观看| 欧美午夜精品伦理| 国语自产偷拍精品视频偷| 欧美亚洲成人免费| 亚洲美女喷白浆| 亚洲国产精品女人久久久| 精品视频在线播放色网色视频| 国产精品999999| 中文字幕日韩欧美精品在线观看| 欧美理论电影在线观看| 8090理伦午夜在线电影| 欧美日本在线视频中文字字幕| 国产在线不卡精品| 亚洲成色777777在线观看影院| 久久久久999| 日韩av电影免费观看高清| 亚洲男人7777| 国产91精品青草社区| 日韩av成人在线| 一区二区亚洲欧洲国产日韩| 国内精品久久久久影院优| 中文字幕亚洲欧美日韩2019| 欧美日韩国产综合新一区| 色狠狠av一区二区三区香蕉蜜桃| 亚洲精品免费av| 日韩在线视频观看正片免费网站| 日韩大陆毛片av| 欧美激情videoshd| 欧美成人精品激情在线观看| 欧美另类在线播放| 国产精品亚洲美女av网站| 国产成人小视频在线观看| 国产一区二区黄| 精品少妇一区二区30p| 隔壁老王国产在线精品| 亚洲欧美综合另类中字| 久久久国产一区二区三区| 久久国产精品网站| 欧美一级淫片播放口| 国产精品久久久久久久久久东京| 欧美激情亚洲另类| 亚洲国产精品成人一区二区| 免费不卡欧美自拍视频| 久久偷看各类女兵18女厕嘘嘘| 亚洲国产日韩精品在线| 亚洲男人天堂2023| 91精品国产91久久久久久不卡| 91av在线视频观看| 日本成人在线视频网址| 日韩精品在线免费观看| 亚洲精品国产精品自产a区红杏吧| 欧美性色视频在线| 亚洲精品av在线播放| 国产裸体写真av一区二区| 国产精品久久久久久久久久久新郎| 在线播放国产一区二区三区| 国产日韩精品电影| 91在线免费视频| 国产欧美日韩高清| 日韩精品丝袜在线| 亚洲国产精品免费| 国产成人精品综合久久久| 久久亚洲私人国产精品va| 亚洲黄色av网站| 久久久久女教师免费一区| 欧美日韩爱爱视频| 国产精品一区二区性色av| 色偷偷综合社区| 亚洲欧美日韩在线一区| 欧美性极品少妇精品网站| 日本免费在线精品| 97国产真实伦对白精彩视频8| 欧美性xxxxx极品| 国色天香2019中文字幕在线观看| 国产成人精品国内自产拍免费看|