Я использую 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;
}
Я получаю следующий вывод:
Можно ли создать подокно внутри подокна?
Спасибо
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
, что может быть полезно для сравнения.