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

NCurses 庫窗口編程完全指南:創建、操作、刷新與屬性控制

     編輯:關於C語言

核心概念

  • 窗口:屏幕上可獨立操作的矩形區域,可重疊、可嵌套子窗口
  • 標準屏幕:stdscr,佔據整個終端的默認窗口
  • 虛擬屏幕:內存中的顯示緩衝區,wnoutrefresh 寫入,doupdate 刷新到物理屏幕

3.1 窗口創建與銷毀

函數原型關鍵參數說明
newwinWINDOW* newwin(int lines, int cols, int begin_y, int begin_x)行數、列數、左上角座標創建主窗口,0 表示最大可用尺寸
delwinint delwin(WINDOW* win)窗口指針刪除窗口並釋放內存,必須先刪子窗口
subwinWINDOW* subwin(WINDOW* win, int lines, int cols, int begin_y, int begin_x)父窗口、尺寸、相對標準屏幕座標創建子窗口,共享父窗口內存區域
derwinWINDOW* derwin(WINDOW* win, int lines, int cols, int begin_y, int begin_x)父窗口、尺寸、相對父窗口座標創建派生窗口,邏輯上屬於父窗口

清屏 vs 釋放:werase()/wclear() 僅清內容,delwin() 才釋放內存。

3.2 窗口輸入輸出操作

光標與字符輸出

函數功能合併版
wmove移動光標到窗口相對座標-
waddch當前位置輸出單字符mvwaddch(win, y, x, ch)
waddstr當前位置輸出字符串mvwaddstr(win, y, x, str)
wprintw格式化輸出-

輸入操作

函數功能合併版
wgetch獲取單字符輸入mvwgetch(win, y, x)
wgetstr獲取字符串輸入mvwgetstr(win, y, x, str)
wscanw格式化掃描輸入mvwscanw(win, y, x, fmt, ...)

編輯操作

函數功能
winsch/mvwinsch插入字符
winsertln插入一行
wdelch/mvwdelch刪除字符
wdeleteln刪除一行

清屏與屬性

函數功能
wclear清窗口並移動光標到 (0,0)
werase清窗口內容,光標不動
wclrtoeol清除到行尾
wclrtobot清除到窗口底部
wstandout/wstandend高亮開/關
wattrset/wattroff/wattron屬性設置/關閉/開啟

窗口間復制

函數特性空字符處理
overlay非破壞性不復制空字符,目標原字符保留
overwrite破壞性復制所有內容含空字符
copywin區域復制可控制是否破壞性

3.3 窗口刷新機制

// 雙緩衝刷新:高性能、無閃爍
wnoutrefresh(win1);  // 將窗口1寫入虛擬屏幕
wnoutrefresh(win2);  // 將窗口2寫入虛擬屏幕
doupdate();          // 統一刷新到物理屏幕

// 等價單步
wrefresh(win);       // wnoutrefresh + doupdate

// 重繪
redrawwin(win);      // 重繪整個窗口
wredrawln(win, beg, num); // 重繪指定行範圍

3.4 窗口屬性與裝飾

函數功能
mvwin移動窗口位置(需後續 wrefresh)
touchwin激活窗口獲取焦點(重疊時)
box繪製簡易邊框(ACS_VLINE, ACS_HLINE)
border繪製完整邊框(8 個方向字符可控)
hline/whline繪製橫線
vline/wvline繪製豎線
leaveok/scrollok/clearok設置窗口標誌位

3.5 屏幕轉存/恢復

函數功能
putwin窗口數據寫入 FILE*
getwin從 FILE* 恢復窗口
scr_dump標準屏幕存檔
scr_restore標準屏幕恢復

本文整理自「暗日」博客,原文地址:https://darksun.blog.51cto.com/3874064/1297283

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