1 curses開發包初接觸
~~~~~~~~~~~~~~~~~~~~~
1.1 curses包內容
=================
* curses.h
主要控制屏幕的輸入和輸出,光標的操作,窗口的創建和操作等
* panel.h
類似窗口堆棧,不同窗口可以存放其中,並且可以在其中進行移動
* menu.h
主要包括創建菜單並且與之交互的函數,主要用來接受用戶的選擇
* form
包括創建表單以及與之交互的函數,主要用來接受用戶數據輸入
1.2 開始使用curses包
=====================
1.2.1 curses初始化
-------------------
* 一般情況下在其余的cuses函數被調用前就必須先調用initscr().
* stdscr和curscr的不同在於
* stdscr代表的是邏輯屏幕
* curscr代表的是物理屏幕
* wfresh函數會根據stdscr和curscr之間的差異更新物理屏幕
* 如果程序使用多個終端
* 使用newterm()代替initscr()
* 對於每個希望與之交互的終端都調用一次newterm()
* newterm()返回一個SCREEN結構用來引用某個終端
* 在需要從某個終端接受輸入和輸出的時候,必須通過set_term(SCREEN)來將它設置成當前終端
1.2.2 終端模式設置
-------------------
* 終端模式實際上是一系列開關的屬性,它們直接影響著終端如何處理輸入以及輸出.
* keypad(stdscr,TRUE)
用來控制是否將鍵盤上的特殊字符轉換成curses包中的對應特殊鍵
* nonl()
用來控制程序將回車鍵不要轉換成換行符
* cbreak()
讀取除了DELETE或CTRL等特殊字符以外的所有字符
* noecho()
使鍵盤輸入的字符不需要直接在屏幕上顯示
1.2.3 顏色處理
---------------
* 使用函數has_colors()判斷終端是否支持彩色
* 使用init_pair(0,COLOR_GREEN,COLOR_BLACK)初始化顏色配對表,設置字符的前景色和背景色
* 使用attron(A_BLINK|COLOR_PAIR(2))設置要顯示的字符如何顯示
1.2.4 使用refresh和wrefresh進行屏幕更新
----------------------------------------
* refresh其實是wrefresh(stdscr)的宏定義
1.2.5 使用endwin()函數中斷curses程序
-------------------------------------
* endwin()是程序最後調用的一個函數,與initscr()相呼應
* endwin()執行後,光標移動到屏幕的左下方
1.3 編譯
=========
* 如果程序使用了panel,menu,form等庫,-lcurses選項必須在其余的選項之後
1.4 例子
=========
#include <curses.h> static void finish(int sig); int main() { initscr(); keypad(stdscr,TRUE); nonl(); cbreak(); noecho(); if(has_colors()) { start_color(); init_pair(0,COLOR_BLACK,COLOR_BLACK); init_pair(1,COLOR_GREEN,COLOR_BLACK); init_pair(2,COLOR_RED,COLOR_BLACK); init_pair(3,COLOR_CYAN,COLOR_BLACK); init_pair(4,COLOR_WHITE,COLOR_BLACK); init_pair(5,COLOR_MAGENTA,COLOR_BLACK); init_pair(6,COLOR_BLUE,COLOR_BLACK); init_pair(7,COLOR_YELLOW,COLOR_BLACK); } attron(A_BLINK|COLOR_PAIR(2)); move(LINES/2+1,COLS-4); addstr("Eye"); refresh(); sleep(2); move(LINES/2-3,COLS/2-3); addstr("Bulls"); refresh(); sleep(2); finish(0); } static void finish(int sig) { endwin(); exit(0); }
本文出自 “暗日” 博客,請務必保留此出處http://darksun.blog.51cto.com/3874064/1281711