程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 1 curses開發包初接觸

1 curses開發包初接觸

編輯:關於C語言

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved