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