Как поместить подокно в подокно?

Я использую NCurses, чтобы попытаться получить желаемый результат:
Я пытаюсь поместить синюю коробку в пустое пространство

Однако со следующим кодом:

int main(void)
{
WINDOW *white_space,*red_space,*blue_box;
int maxx,maxy;

initscr();
start_color();
init_pair(1,COLOR_WHITE,COLOR_BLUE);
init_pair(2,COLOR_RED,COLOR_WHITE);
init_pair(3,COLOR_BLACK,COLOR_GREEN);
init_pair(4,COLOR_RED,COLOR_RED);white_space = subwin(stdscr,10,76,6,2);
red_space = subwin(stdscr,1,80,23,0);
getmaxyx(white_space,maxy,maxx);
blue_box = subwin(white_space,maxy-1,maxx-1,8,20);
if(white_space == NULL)
{
addstr("Unable to create subwindow\n");
endwin();
return 1;
}bkgd(COLOR_PAIR(1));
addstr("Master window");
wbkgd(white_space,COLOR_PAIR(2));
mvwprintw(white_space, 0, 0, "%46s", "White space");
wbkgd(blue_box,COLOR_PAIR(4));
wbkgd(red_space,COLOR_PAIR(3));
waddstr(red_space,"Alert area");
wrefresh(white_space);
wrefresh(stdscr);refresh();
getch();

endwin();
return 0;
}

Я получаю следующий вывод:
введите описание изображения здесь

Можно ли создать подокно внутри подокна?

Спасибо

0

Решение

ncurses (любая версия curses без ошибок) поддерживает подокна, как отмечено в руководство.

В данном примере замечено несколько проблем:

 white_space = subwin(stdscr,10,76,6,2);
red_space = subwin(stdscr,1,80,23,0);
getmaxyx(white_space,maxy,maxx);
blue_box = subwin(white_space,maxy-1,maxx-1,8,20);

Например:

  • начальный размер, данный white_space не учитывает фактический размер экрана (который может быть меньше 80 столбцов)
  • размер просил blue_box только немного меньше, чем white_space, но начинается достаточно далеко, чтобы окно не отображалось (в 80 столбцах). Если это так, окно не создается.

Есть несколько программ в ncurses-examples с помощью subwin и связанные derwin, что может быть полезно для сравнения.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector