- 注册时间
- 2013-1-16
- 最后登录
- 2013-6-29
⑤进阶
GNU传教士
- 积分
- 759
|
发表于 2013-5-4 06:45:43
|
显示全部楼层
OK,950楼取得。
好吧,这段代码为毛不行:
# gcc cfile1.c -o test -std=c11 -lncurses
#include <stdio.h>
#include <ncurses.h>
#define WIDTH 30    //窗口宽度 30
#define HEIGHT 10    //窗口高度 10
int startx = 0,    starty = 0;    //窗口起点坐标
char * choices[] =     //菜单内容
{
    "Choice 1",
    "Choice 2",
    "Choice 3",
    "Choice 4",
    "Exit",
};
void PrintMenu(WINDOW *menu_win, int highlight);    //打印窗口
int main()
{
    WINDOW *menu_win;
    bool highlight = 1;    //高亮选项
    int choice = 0;        //选项的索引
    int c;            //存储字符编码
    initscr();        //初始化
    clear();        //清屏
    noecho();    cbreak();    //取消行缓冲
   
    int x = 0, y = 0;
    getyx(stdscr, y, x);    //取得屏幕大小
    startx = (x - WIDTH) / 2;
    starty = (y - HEIGHT) / 2;
    menu_win = newwin(HEIGHT, WIDTH, starty, startx);
    keypad(menu_win, TRUE);    //开启键盘映射
    mvprintw(0, 0, "Use arrow keys to go up and down, Press enter to select a choice");
    refresh();
    PrintMenu(menu_win, highlight);    //打印菜单
    while(1)
    {
        //取得输入
        switch (c = getch())
        {
            case KEY_UP:
                if (highlight == 1)
                {
                    highlight = 5;
                }
                else
                {
                    --highlight;
                }
                break;
            case KEY_DOWN:
                if (highlight == 5)
                {
                    highlight = 1;
                }
                else
                {
                    ++highlight;
                }
                break;
            case 10:
                choice = highlight;
                break;
            default:
                mvprintw(24, 0, "Charcter pressed if %3d Hopefully it can be printed as %c", c, c);
                refresh();
                break;
        }
        PrintMenu(menu_win, highlight);
        if (choice != 0)
        {
            break;
        }
    }
    mvprintw(10, 0, "You chose choice %d with choice string %s\\n", choice, choices[choice - 1]);
    clrtoeol();
    refresh();
    getch();
    endwin();
    return 0;
}
void PrintMenu(WINDOW *menu_win, int hl)
{
    int x = 2, y = 2;
    box(menu_win, 0, 0);
    for (int i = 0; i <= 5; ++i)
    {
        if (hl == 1)
        {
            wattron(menu_win, A_REVERSE);
            mvwprintw(menu_win, y, x, "%s", choices);
            wattron(menu_win, A_REVERSE);
        }
        else
        {
            mvwprintw(menu_win, y, x, "%s", choices);
        }
        y++;
    }
    wrefresh(menu_win);
}
PrintMenu的for循环似乎挂了。 |
|