2012-04-20 1 views
3

ncurses 메뉴에서 item_name을 어떻게 대체 할 수 있는지 알아 내려고하고 있습니다. man pages에서 나는 set_item_name 또는 비슷한 것을 찾을 수 없습니다. 이 문제를 해결하기위한 아이디어가 있습니까? ncurses 및 C에서 문자열 메뉴 항목을 바꾸는 방법

KEY_ENTER

#include <curses.h> 
#include <menu.h> 

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: 
      // e.g. 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(); 
} 

답변

1

"Choice 1" w/"String 1" 교체하여 다시 예상 방법 set_menu_items() 호출처럼 보인다.

+0

감사합니다. 더 의미가 있습니다! – user1024718

1

예, 당신은 당신이 ITEM 구조에 대한 구조 정의를 찾을 수 file menu.h을 포함 보면, set_item_name();

먼저 쓸 수없는 set_item_name()에 대한 해결 방법이 있습니다.

  • ITM 당신이

  • 이름이 변경하려면 메뉴 항목에 대한 포인터입니다 : 인수에 대한

    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; 
    } 
    

    : 당신이 같은 기능을 쓸 수있는 것을 알 수있다 찾고 메뉴 명으로서 사용하는 캐릭터 라인

나는 드롭 다운 메뉴에서 '확인란'항목을 만들려면이 루틴을 사용하고는 ( linux debian 6.0libncurses5 (5.7) A의 테스트) 작동하는 것 같다.

관련 문제