面板庫(Panel Library)能方便得管理面板:
1. 使用newwin()函數創建一個窗口,它將添加到面板裡。
2. 創建面板(利用所創建的窗口)並將面板依據用戶指定的可見順序壓進棧。調用
new_panel()函數即可創建該面板。
3. 調用update_panels()函數就可將面板按正確的順序寫入虛擬屏幕,調用doupdate()函
數就能讓面板顯示出來。
4. show_panel(), hide_panel(), move_panel()等函數分別用來對面板進行顯示、隱藏、移
動等操作時,可以使用panel_hidden()和panel_window()這兩個輔助函數。你也可以
使用用戶指針來存儲面板的數據,set_panel_userptr() 和panel_userptr()函數分別用
來設置和取得一個面板的用戶指針。
5. 當一個面板使用完畢後,用del_panel()函數就可刪除指定的面板。
下面是一個例子
dp@dp:~/cursestest % cat x.c
#include
int main()
{
WINDOW *my_wins[3];
PANEL *my_panels[3];
int lines = 10, cols = 40, y = 2, x = 4, i;
initscr();
cbreak();
noecho();
/* 為每個面板創建窗口*/
my_wins[0] = newwin(lines, cols, y, x);
my_wins[1] = newwin(lines, cols, y + 1, x + 5);
my_wins[2] = newwin(lines, cols, y + 2, x + 10);
/* 為窗口添加創建邊框以便你能看到面板的效果*/
for(i = 0; i < 3; +++i)
box(my_wins[i], 0, 0);
/* 按自底向上的順序,為每一個面板關聯一個窗口*/
my_panels[0] = new_panel(my_wins[0]);
/* 把面板0 壓進棧, 疊放順序: stdscr0
*/
my_panels[1] = new_panel(my_wins[1]);
/* 把面板1 壓進棧, 疊放順序: stdscr01
*/
my_panels[2] = new_panel(my_wins[2]);
/* 把面板2 壓進棧, 疊放順序: stdscr012*/
/* 更新棧的順序。把面板2 置於棧頂*/
update_panels();
/* 在屏幕上顯示*/
doupdate();
getch();
endwin();
}
dp@dp:~/cursestest % gcc -lncursesw -lpanel x.c -o mytest
dp@dp:~/cursestest % ./mytest
屏幕上顯示了三個窗口,每個窗口都是一個面板,每個面板關聯一個窗口。如下圖所示: