Как напечатать текст в середине экрана и заставить окно окна исчезать Ncurses - PullRequest
0 голосов
/ 22 декабря 2018

Я хочу напечатать текст посередине экрана (мое окно) со строкой, и когда я выбираю опцию, я хочу, чтобы это окно исчезало с помощью 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 голосов
/ 22 декабря 2018

Если вы внесете изменения в stdscr и , обновите , то они будут закрывать другие окна (пока вы не измените / не обновите их).

...