Panel 庫提供 show_panel()、hide_panel()、move_panel() 等函數動態控制面板可見性與位置。配合 panel_hidden() 檢測狀態、panel_window() 獲取關聯窗口、set_panel_userptr()/panel_userptr() 綁定用戶數據,構成完整的面板生命周期管理體系。
WINDOW *my_wins[3];
PANEL *my_panels[3];
int lines = 10, cols = 40, y = 2, x = 4;
initscr(); cbreak(); noecho();
for (int i = 0; i < 3; ++i) {
my_wins[i] = newwin(lines, cols, y + i, x + i * 5);
box(my_wins[i], 0, 0); // 繪製邊框
my_panels[i] = new_panel(my_wins[i]); // 依次壓入棧底到棧頂
}
update_panels();
doupdate();
int isshow[3] = {1, 1, 1}; // 初始均顯示
int ch;
while ((ch = getch()) != 'q') {
switch (ch) {
case '1':
if ((++isshow[0]) % 2) show_panel(my_panels[0]);
else hide_panel(my_panels[0]);
break;
case '2':
if ((++isshow[1]) % 2) show_panel(my_panels[1]);
else hide_panel(my_panels[1]);
break;
case '3':
if ((++isshow[2]) % 2) show_panel(my_panels[2]);
else hide_panel(my_panels[2]);
break;
}
update_panels();
doupdate();
}

| 函數 | 作用 |
|---|---|
show_panel(PANEL*) | 將面板標記為可見,下次 update_panels 生效 |
hide_panel(PANEL*) | 將面板標記為隱藏,從虛擬屏幕移除 |
move_panel(PANEL*, y, x) | 移動面板關聯窗口位置 |
panel_hidden(PANEL*) | 檢測面板是否隱藏 |
panel_window(PANEL*) | 獲取面板關聯的 WINDOW 指針 |
del_panel(PANEL*) | 銷毀面板(不銷毀關聯窗口) |
動態顯示/隱藏面板適用於工具面板、幫助信息、彈出菜單等場景。注意隱藏後需調用 update_panels() 和 doupdate() 刷新顯示。