如何在屏幕中间打印文本并使框形窗口消失

时间:2018-12-22 12:57:33

标签: c ncurses

我想在屏幕(我的窗口)中一行一行地打印文本,当我选择一个选项时,我想使用ncurses.h使该窗口消失。

int height = 6;
int width = 24;

WINDOW* menuwin = newwin(height, width, (LINES - height)/2, (COLS - width)/2);
box(menuwin, 0, 0);
refresh();
wrefresh(menuwin);

keypad(menuwin, TRUE);

char* choices[3] = {"something", "something", "something"};
int choice;
int highlight = 0;

while(TRUE)
{
    for(int i = 0; i < 3; ++i)
    {
        if(i == highlight)
        {
            wattron(menuwin, A_REVERSE);
        }
        mvwprintw(menuwin, i + 1, 1, choices[i]);
        wattroff(menuwin, A_REVERSE);
    }
    choice = wgetch(menuwin);
    switch(choice)
    {
        case KEY_UP:
            highlight--;
            if(highlight == -1) highlight = 2;
            break;
        case KEY_DOWN:
            highlight++;
            if(highlight == 3) highlight = 0;
            break;
        default:
            break;
    }

    if(choice == 10) 
    {
        wrefresh(menuwin);
        delwin(menuwin);
        refresh();
        getch();
    }
}

好吧,这样做是什么,我在屏幕中间创建了一个菜单,但框内的文本在左上方,我希望它在该窗口的中间,当我选择说选项1我希望该窗口是“隐藏的”或某种东西,以便我可以在任何时候看到它,只有Ncurses和C可见。

更新: 我在框的中间通过将mvwprintw(menuwin, i + 1, 1, choices[i]);更改为mvwprintw(menuwin, i + 1, 6, choices[i]);来进行选择,它可以工作,但是有更通用的方法吗?

1 个答案:

答案 0 :(得分:0)

如果您对stdscr进行更改并刷新,它将遮盖其他窗口(直到您修改/刷新这些窗口)。