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

NCURSES 面板庫實戰:多窗口疊加、刷新與編譯指南

     編輯:關於C

面板庫核心概念

NCURSES 面板庫(Panel Library)在窗口基礎上引入疊放順序(Z-order)管理,解決多窗口重疊時的顯示遮擋問題。每個面板關聯一個窗口,面板棧決定繪製順序:棧底最先繪製,棧頂最後繪製(顯示在最上層)。

五步構建面板應用

  1. 創建窗口:newwin(lines, cols, y, x) 創建指定大小位置的窗口。
  2. 創建面板並入棧:new_panel(win) 關聯窗口並自動壓入棧頂,順序決定疊放層級。
  3. 更新虛擬屏幕:update_panels() 根據棧順序將所有面板內容寫入虛擬屏幕緩衝區。
  4. 刷新物理屏幕:doupdate() 將虛擬屏幕內容輸出到終端。
  5. 操作面板:show_panel()/hide_panel()/move_panel() 動態控制可見性與位置;panel_hidden()/panel_window() 查詢狀態;set_panel_userptr()/panel_userptr() 綁定用戶數據。

完整示例:三個重疊面板

#include \
\
int main() {\
    WINDOW *my_wins[3];\
    PANEL  *my_panels[3];\
    int lines = 10, cols = 40, y = 2, x = 4, i;\
\
    initscr();\
    cbreak();\
    noecho();\
\
    for (i = 0; i < 3; ++i) {\
        my_wins[i] = newwin(lines, cols, y + i, x + i * 5);\
        box(my_wins[i], 0, 0);  // 繪製邊框\
    }\
\
    // 依次創建面板,疊放順序:stdscr → 0 → 1 → 2(2在最上層)\
    my_panels[0] = new_panel(my_wins[0]);\
    my_panels[1] = new_panel(my_wins[1]);\
    my_panels[2] = new_panel(my_wins[2]);\
\
    update_panels();\
    doupdate();\
\
    getch();  // 等待按鍵查看效果\
    endwin();\
    return 0;\
}

編譯與運行

gcc -lncursesw -lpanel panel_demo.c -o panel_demo\
./panel_demo
  • -lncursesw:寬字符版 NCURSES 庫(支持中文)。
  • -lpanel:面板庫,必須在 -lncursesw 之後。

運行效果

終端顯示三個帶邊框的窗口,位置錯開,面板 2(最後創建)位於最上層,部分遮蓋面板 1 與 0,直觀展示 Z-order 效果。
三個重疊面板截圖

進階操作預告

  • 動態顯示/隱藏面板(show_panel/hide_panel)。
  • 移動面板位置(move_panel)。
  • 用戶指針綁定應用數據(set_panel_userptr)。
  • 面板銷毀與資源釋放(del_panel)。

面板庫將窗口管理從二維平面提升到三維疊放空間,是構建文本界面(TUI)複雜佈局的關鍵工具。下一篇將演示面板的動態顯示/隱藏交互。

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