Ncurses學習經歷(十二)選單庫

2021-08-20 12:26:07 字數 2131 閱讀 5210

選單庫對cureses 基礎庫進行了很好的擴充套件。你可以通過這個庫所提供的函式方便的建立菜

單。如果你想讓它更美觀,可以定製它的顯示效果。下面我們就來看看這個庫。

選單是乙個用來幫助使用者選擇子選單項的螢幕。簡而言之,選單就是乙個選單項的集合,使

你可以方便的從中選擇相應的選單命令。curses 選單庫還提供編制多選選單的功能。有些

讀者可能不了解多選選單。這個我們稍後討論,我們先來了解一下選單庫的基礎知識。

17.1 基礎知識

要建立選單,你首先要建立選單項,然後傳送並顯示選單。接下來,所有處理使用者響應的工

作就交給功能強大的menu_driver()函式來完成。這個函式是整個選單庫的核心。

乙個選單程式大致的控制流程如下:

1. 初始化curses。

2. 用函式new_item()建立選單項,同時為選單項指定名稱並且描述其相應的功能。

3. 用函式new_menu()建立選單,同時指定要新增的選單項。

4. 用函式post_menu()遞送選單並重新整理螢幕

5. 用乙個迴圈處理使用者的選單請求。並用menu_driver()函式對選單做必要的更新。

6. 用unpost_menu()取消選單遞送。

7. 用free_menu()釋放分配給選單的記憶體

8. 用free_item()釋放分配給選單項的記憶體

9. 結束curses

現在我們看乙個簡單選單的示例程式,它是用方向鍵來更新當前選單項的。

例18 選單基礎知識示例

#include #include #define array_size(a) (sizeof(a) / sizeof(a[0]))

#define ctrld 4

ncurses programming howto 中文版(第二版)

64char *choices = ;

int main()

}free_item(my_items[0]);

free_item(my_items[1]);

free_menu(my_menu);

endwin();

}

這個程式演示了用選單庫建立選單的基本步驟。首先用new_item()函式建立選單項,然後

用new_menu()函式把這些選單項新增到選單。當遞送了選單並重新整理螢幕後,主迴圈就開始

處理。它讀取使用者的輸入並進行相應的操作。函式menu_driver()是選單系統的核心函式。

這個函式的第二個引數是相應選單操作巨集。menu_driver()函式根據引數執行相應的操作。

引數的值可以是選單的導航請求、乙個ascii 碼或與滑鼠事件相關的乙個特定

key_mouse 值。

menu_driver()函式可以接受以下導覽請求:(就是第二個引數)

req_left_item 左移乙個選單項。

req_right_item 右移乙個選單項。

req_up_item 上移乙個選單項。

req_down_item 下移乙個選單項。

req_scr_uline 向上滾動一行。

req_scr_dline 向下滾動一行。

req_scr_dpage 下翻一頁。

req_scr_upage 上翻一頁

req_first_item 跳到首項。

req_last_item 跳到最末一項。

req_next_item 跳到下一項。

req_prev_item 跳到上一項。

req_toggle_item 選擇/取消選擇一項。

req_clear_pattern 清空選單模式緩衝區。

req_back_pattern 刪除選單模式緩衝區的前面乙個字元。

req_next_match 跳到下乙個與模式匹配的項。

req_prev_match 跳到上乙個與模式匹配的項。

千萬不要被這麼多的操作請求嚇倒,稍後我們會乙個乙個地講解。在這個例子中,最有趣的

是req_up_item 和req_down_item。當這兩個選項傳給menu_driver()函式時,

menu_driver()函式將會通過重新重新整理螢幕上移或下移乙個選單項。

17.3 menu

Ncurses學習經歷(十三)選單系統的核心

如你在上面的例子中所看到的,menu driver 在更新選單時有著舉足輕重的作用。所以了解 它的各個選項和它們的作用就很有必要了。前面已經解釋過,menu driver 的第二個引數 可以是乙個導航請求。乙個可列印的字元 ascii 碼 或key mouse 鍵值。我們來剖析 一下各個導航請求 1...

tkinter中menu選單控制項(十二)

1 import tkinter 23 wuya tkinter.tk 4 wuya.title wuya 5 wuya.geometry 300x200 10 20 678 建立選單欄下方的選單條 9 mubar tkinter.menu wuya 10 wuya.config menu muba...

nandflash學習經歷

經過一段時間的奮鬥,終於對nandflash的框架有點了解!首先從 drivers mtd nand at91 nand.c開始分析 at91 nand probe 獲得nandflash 的型別 drivers mtd nand nand base.c nand scan 獲得真正nandflas...