如何替换ncurses&C中的字符串菜单项

我试图找出如何从ncurses菜单中替换item_name 。 从手册页中 ,我找不到任何set_item_name或类似的东西。 任何想法,如果有一个解决方案吗?

例如,在KEY_ENTER上替换"Choice 1" w / "String 1"

 #include  #include  char *choices[] = { "Choice 1", "Choice 2", "Choice 3", "Choice 4", "Exit", }; int main() { ITEM **my_items, *cur_item; int c, i; MENU *my_menu; initscr(); cbreak(); noecho(); keypad(stdscr, TRUE); my_items = (ITEM **) calloc(6, sizeof(ITEM * )); for (i = 0; i < 5; ++i) my_items[i] = new_item(choices[i], choices[i]); my_items[5] = (ITEM*) NULL; my_menu = new_menu((ITEM **) my_items); post_menu(my_menu); refresh(); while ((c = getch()) != KEY_F(1)) { switch (c) { case KEY_ENTER: // eg replace "Choice 1" w/ "String 1" break; case KEY_DOWN: menu_driver(my_menu, REQ_DOWN_ITEM); break; case KEY_UP: menu_driver(my_menu, REQ_UP_ITEM); break; } } free_item(my_items[0]); free_item(my_items[1]); free_menu(my_menu); endwin(); } 

看起来再次调用set_menu_items()是预期的方法。

是的,缺少set_item_name()的解决方法是你可以编写set_item_name();

首先,查看包含file menu.h ,您可以在其中找到ITEM结构的结构定义。 在那里你看到你可以写一个像这样的函数:

 void set_item_name (ITEM *itm, const char* name) { int len = strlen(name); char* n; if (itm->name.str!=NULL) free((void*)(itm->name).str); n=strdup(name); itm->name.length=len; itm->name.str=n; } 

关于论点:

  • itm是指向要更改的菜单项的指针

  • name是要用作菜单名称的字符串。

我使用此例程在下拉菜单中创建一个“复选框”项,它似乎工作(在linux debian 6.0libncurses5 (5.7) )。