首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

NCurses 程式設計:光標控制、屬性修飾與中文支援實戰

     編輯:關於C

核心函數介紹

getyx() 宏:獲取光標位置

getyx() 定義於 ncurses.h,用於取得目前光標的座標。注意:不能傳遞指標作為參數,必須傳遞一對整型變數:

int y, x;
getyx(stdscr, y, x); // y=行, x=列

move():移動光標

將邏輯光標移動到指定位置:

move(y, x); // 移動到第 y 行、第 x 列

attron() / attroff():文字屬性開啟與關閉

呼叫 attron() 啟動文字修飾,遇到註解結束標記 */ 時呼叫 attroff() 停止修飾:

attron(A_REVERSE);      // 開啟反白顯示
printw("*********************");
attroff(A_REVERSE);     // 關閉反白顯示

常用顯示屬性常數

常數效果
A_NORMAL普通字元輸出(不加亮)
A_STANDOUT終端最亮顯示
A_UNDERLINE底線
A_REVERSE反白顯示
A_BLINK閃爍顯示
A_DIM半亮顯示
A_BOLD加亮加粗
A_PROTECT保護模式
A_INVIS空白顯示模式
A_ALTCHARSET字元交替
A_CHARTEXT字元遮罩
COLOR_PAIR(n)前景/背景色配對

屬性可組合使用,以 | 運算子串接:attron(A_BOLD | A_BLINK)

完整範例:互動式輸入與顯示

#include 
#include 

int main() {
    setlocale(LC_ALL, "");
    char mesg[] = "您的名字:";
    char name[80];
    int y, x;

    initscr();                    // 初始化
    mvprintw(1, 1, "WIN1");
    mvprintw(2, 1, "您好");
    mvprintw(3, 1, "%s", mesg);
    
    getyx(stdscr, y, x);          // 取得目前光標位置
    move(y + 2, 2);               // 移動光標
    
    attron(A_REVERSE);
    printw("*********************");
    refresh();
    attroff(A_REVERSE);
    
    getyx(stdscr, y, x);
    move(y - 1, 1);
    scanw("%s", name);            // 格式化讀入
    
    mvprintw(6, 1, "%s好,很高興認識您", name);
    refresh();
    endwin();                     // 結束
    return 0;
}

編譯與執行

gcc -lncursesw 2.c -o mytest
./mytest

程式執行畫面

關鍵點:支援中文必須連結 ncursesw(寬字元版本)而非 ncurses,並呼叫 setlocale(LC_ALL, "") 設定區域。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved