Curses 開發包核心組件
Curses 提供四大核心模組,分別處理不同層面的終端交互:
- curses.h:主控制頭文件,負責螢幕輸入輸出、光標操作、窗口創建管理
- panel.h:窗口堆棧管理,支援多窗口疊加、移動、顯示控制
- menu.h:選單系統,處理用戶選擇交互
- form.h:表單系統,處理用戶數據輸入驗證
初始化標準流程
單終端模式
initscr(); // 必須最先調用,初始化標準屏幕 stdscr
關鍵概念區別:
- stdscr:邏輯屏幕,程序操作的虛擬畫布
- curscr:物理屏幕,終端實際顯示內容
- wrefresh:根據兩者差異更新物理屏幕
多終端模式
SCREEN* term = newterm(type, outfd, infd); // 每終端調用一次
set_term(term); // 切換當前活動終端
終端模式配置
| 函數 | 作用 |
| keypad(stdscr, TRUE) | 啟用功能鍵(方向鍵、F鍵等)識別 |
| nonl() | 禁用回車自動轉換換行 |
| cbreak() | 立即讀取字符,不等待回車 |
| noecho() | 關閉輸入回顯 |
色彩處理
if (has_colors()) {
start_color();
init_pair(1, COLOR_GREEN, COLOR_BLACK); // 配對編號、前景、背景
attron(COLOR_PAIR(1) | A_BLINK); // 應用屬性
}
完整示例程序
#include <curses.h>
#include <unistd.h>
static void finish(int sig);
int main() {
initscr();
keypad(stdscr, TRUE);
nonl(); cbreak(); noecho();
if (has_colors()) {
start_color();
init_pair(1, COLOR_GREEN, COLOR_BLACK);
init_pair(2, COLOR_RED, 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);
}
編譯鏈接順序
gcc demo.c -lmenu -lform -lpanel -lcurses # -lcurses 必須最後
掌握以上核心流程,即可開始基於 Curses 的終端 UI 開發。
- 上一篇文章: 經典八大排序與三大查找算法圖解總結
- 下一篇文章: Curses 庫核心常量與函數命名規範詳解
Copyright ©
程式碼之家 All Rights Reserved