C指针原理(31)-Ncurses-文本终端的图形
9、Ncurses的初始化相關(guān)工作
(1)raw()和cbreak()
禁止行緩沖,在raw()函數(shù)模式下,處理掛起(CTRLZ)、中斷或退出(CTRLC)等控制字符時,將直接傳送給程序去處理而不產(chǎn)生終端信號,而cbreak()將產(chǎn)生終端信號。
(2)cho()函數(shù)和noecho()函數(shù)
控制是否將從鍵盤輸入的字符回顯在終端上。
(3)keypad()函數(shù)
允許使用功能鍵。
(4)initscr()函數(shù)
屏幕初始化并進入curses 模式
(5)printw()與refresh()函數(shù)
printw()函數(shù)的作用是不斷將一些顯示標記和相關(guān)的數(shù)據(jù)結(jié)構(gòu)寫在虛擬顯示器上,并將這些數(shù)據(jù)寫入stdscr 的緩沖區(qū)內(nèi)。須使用refresh()函數(shù)告訴curses系統(tǒng)將緩沖區(qū)的內(nèi)容輸出到屏幕上。
下面例子演示了相關(guān)用法
(6)endwin()
函數(shù)釋放了curses 子系統(tǒng)和相關(guān)數(shù)據(jù)結(jié)構(gòu)占用的內(nèi)存,使你能夠正常返回控制臺模式。
(7)addch()、printw()、addstr()
在curses 函數(shù)中有三類輸出函數(shù),它們分別是:
addch():將單一的字符打印到屏幕上,可以附加加字符修飾參數(shù)的一類函數(shù)。
printw():和printf()一樣的具有格式化輸出的一類函數(shù)。
addstr():打印字符串的一類函數(shù),用于在指定窗口輸出字符串
(8)mvprintw()
函數(shù)將光標移動到指定的位置,然后打印內(nèi)容。
代碼如下:
dp@dp:~/cursestest % cat 1.c
#include <ncurses.h>
#include <locale.h>
int main()
{
int ch;
setlocale(LC_ALL,"");
initscr(); / 開始curses 模式/
raw(); / 禁用行緩沖/
keypad(stdscr, TRUE); / 開啟功能鍵響應(yīng)模式/
noecho(); / 當(dāng)執(zhí)行g(shù)etch()函數(shù)的時候關(guān)閉鍵盤回顯/
printw(“請按鍵!”);
ch = getch(); /* 如果沒有調(diào)用raw()函數(shù),
我們必須按下enter 鍵才可以將字符傳遞給程序*/
if(ch == KEY_F(2)) / 如果沒有調(diào)用keypad()初始化,將不會執(zhí)行這條語句/
printw(“F2鍵按下!”);
/ 如果沒有使用noecho() 函數(shù),一些控制字符將會被打印到屏幕上/
else
{
printw(“按鍵是:”);
attron(A_BOLD);
printw("%c", ch);
attroff(A_BOLD);
}
refresh(); / 將緩沖區(qū)的內(nèi)容打印到顯示器上/
getch(); / 等待用戶輸入/
endwin(); / 結(jié)束curses 模式/
return 0;
}
編譯并執(zhí)行程序:
dp@dp:~/cursestest % gcc -lncursesw 1.c -o mytest
dp@dp:~/cursestest % ./mytest
(10)scanw()函數(shù)
能夠在屏幕的任意位置讀入格式化字符串。
(11)wscanw()函數(shù)和mvwscanw()函數(shù)
從一個窗口中讀取數(shù)據(jù)
getstr()系列函數(shù)
這些函數(shù)用于從終端讀取字符串。本質(zhì)上,這個函數(shù)執(zhí)行的任務(wù)和連續(xù)用getch()函數(shù)讀取
字符的功能相同:在遇到回車符、新行符和文末符時將用戶指針指向該字符串。
示例如下:
dp@dp:~/cursestest % cat 1.c
#include <locale.h>
#include <ncurses.h>
#include <string.h>
int main()
{
char mess[]=“您的性別:”; / 將要被打印的字符串信息/
char mesg[]=“您的名字:”; / 將要被打印的字符串信息/
char name[80];
char sex[10];
int row,col; / 存儲行號和列號的變量,用于指定光標位置/
setlocale(LC_ALL,"");
initscr(); / 進入curses 模式/
getmaxyx(stdscr,row,col); / 取得stdscr 的行數(shù)和列數(shù)/
mvprintw(row/2,col/2-strlen(mesg),"%s",mesg); / 在屏幕的正中打印字符串mesg /
getstr(name); / 將指針name 指向讀取的字符串/
mvprintw(row/3,col/2-strlen(mess),"%s",mess); / 在屏幕的正中打印字符串mesg /
getstr(sex); / 將指針sex向讀取的字符串/
char man[]=“man”;
if (strcmp(sex,man)==0) {
mvprintw(LINES-2,0, “%s先生好,很高興認識您”, name);//LINES為當(dāng)前行數(shù)
}
else
{
mvprintw(LINES-2,0, “%s女士好,很高興認識您”, name);//LINES為當(dāng)前行數(shù)
}
refresh();
getch();
endwin();
return 0;
}
編譯并執(zhí)行程序:
dp@dp:~/cursestest % gcc -lncursesw 1.c -o mytest
dp@dp:~/cursestest % ./mytest
(11)窗口輸入與輸出
wprintw() 函數(shù)和mvwprintw 函數(shù)為輸出函數(shù),將在指定的窗口輸出。
wscanw()函數(shù)和mvwscanw()函數(shù)從一個窗口中讀取數(shù)據(jù)。
#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,"");char mesg[]="您的名字:"; / 將要被打印的字符串信息/char name[80];WINDOW *win1;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,"您好");mvwprintw(win1,3,1,"%s",mesg);wscanw(win1,"%s",name);mvwprintw(win1,5,1,"%s好,很高興認識您", name);wrefresh(win1);endwin();//結(jié)束return 0;}
dp@dp:~/cursestest % gcc -lncursesw 2.c -o mytest
dp@dp:~/cursestest % ./mytest
(11)窗口輸入與輸出
wprintw() 函數(shù)和mvwprintw 函數(shù)為輸出函數(shù),將在指定的窗口輸出。
wscanw()函數(shù)和mvwscanw()函數(shù)從一個窗口中讀取數(shù)據(jù)。
#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,"");char mesg[]="您的名字:"; / 將要被打印的字符串信息/char name[80];WINDOW *win1;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,"您好");mvwprintw(win1,3,1,"%s",mesg);wscanw(win1,"%s",name);mvwprintw(win1,5,1,"%s好,很高興認識您", name);wrefresh(win1);endwin();//結(jié)束return 0;}
dp@dp:~/cursestest % gcc -lncursesw 2.c -o mytest
dp@dp:~/cursestest % ./mytest
總結(jié)
以上是生活随笔為你收集整理的C指针原理(31)-Ncurses-文本终端的图形的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos的glibc升级方案 'GL
- 下一篇: java截取指定字符串中的某段字符