Ncurses - Panel
当你需要创建许多窗口时,你很快就会发现它们会变得难以管理。Panel library提供了很好的解决方案。
Panel 实际上是一个窗口,通过容器 - 栈 来管理,栈顶的 panel 是完全可见的,其它 panel 的位置决定了是否可见。
创建 panel 的基本流程如下:
1. 使用 newwin 函数创建一个窗口
2. 调用 new_panel 创建一个 panel
3. 调用 update_panels 将 panel 按顺序写入虚拟屏幕,调用 doupdate 让 panel 显示
4. show_panel、hide_panel、move_panel 用来显示、隐藏、移动 panel
5. 调用 del_panel 删除 panel
示例:
1 #include <ncurses.h> 2 #include <panel.h> 3 4 #define MAX 3 5 6 int main() 7 { 8 WINDOW* my_wins[MAX]; 9 PANEL *my_panels[MAX]; 10 int lines = 10, cols = 40, y = 2, x = 4, i = 0; 11 12 initscr(); 13 cbreak(); 14 noecho(); 15 16 int y_offset = 0; 17 int x_offset = 0; 18 for (; i < MAX; ++i) { 19 my_wins[i] = newwin(lines, cols, y + y_offset, x + x_offset); 20 box(my_wins[i], 0, 0); 21 y_offset++; 22 x_offset += 5; 23 24 my_panels[i] = new_panel(my_wins[i]); 25 } 26 27 update_panels(); 28 doupdate(); 29 30 getch(); 31 32 for (; i < MAX; ++i) { 33 del_panel(my_panels[i]); 34 delwin(my_wins[i]); 35 } 36 endwin(); 37 38 return 0; 39 }
编译 : gcc hello.c -lncurses -lpanel