创建交互式UI

时间:2016-05-15 15:10:08

标签: c++ menu menuitem ncurses

我想使用ncourses和menu.h创建一个交互式菜单 我想打印当前目录的内容,然后从中创建菜单。我目前正在进行this教程

并尝试了代码

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
#define CTRLD   4

但是当我运行程序时,它不会打印它应该的文件列表。但是在工作中使用静态数组。

我做错了什么?我忽略了一些错误吗?

vector<char *> choices;

    DIR *dir;
    dirent *pdir;
    dir=opendir(".");

    while((pdir=readdir(dir)))
    {
        choices.push_back( pdir->d_name );
    }
    closedir(dir);

ITEM **my_items;
    int c;              
    MENU *my_menu;
    int n_choices, i;
    ITEM *cur_item;


    initscr();
    cbreak();
    noecho();
    keypad(stdscr, TRUE);


    n_choices = ARRAY_SIZE(choices);
    my_items = (ITEM **)calloc(n_choices + 1, sizeof(ITEM *));

    for(i = 0; i < n_choices; ++i)
            my_items[i] = new_item(choices[i], choices[i]);
    my_items[n_choices] = (ITEM *)NULL;

    my_menu = new_menu((ITEM **)my_items);
    mvprintw(LINES - 2, 0, "F1 to Exit");
    post_menu(my_menu);
    refresh();

    while((c = getch()) != KEY_F(1))
    {   switch(c)
        {   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 个答案:

答案 0 :(得分:0)

ARRAY_SIZE宏仅适用于数组。它使用sizeof,但矢量对象的大小不依赖于元素的数量。对于每个向量,它是一个恒定值。元素是动态分配的。如果你想要std::vector中的元素数量,那么它就是一个成员函数。

n_choices = choices.size();