2015-04-27 3 views
1

Не уверен, что это возможно даже при ncurses. Вся документация и примеры показывают, что создание множества окон известно во время компиляции. Я хотел бы сделать что-то вроде этого.Создание динамического окна во время выполнения с использованием ncurses

#include <ncurses.h> 

WINDOW *create_newwin(int height, int width, int starty, int startx); 
void star(int x,int y,int r); 
void newbox(int x,int y,int r); 

int main(int argc, char *argv[]) 
{  
    int startx, starty, width, height; 
    int ch,sze; 

    initscr();      /* Start curses mode   */ 
    cbreak();      /* Line buffering disabled, Pass on 
            * everty thing to me   */ 
    //printf("%s\n",argv[1]); 
    sze = atoi(argv[1]); 
    starty = (LINES - sze)/2; /* Calculating for a center placement */ 
    startx = (COLS - sze)/2; /* of the window    */ 

    refresh(); 
    star(startx,starty,sze); 

    endwin();      /* End curses mode    */ 
    return 0; 
} 

WINDOW *create_newwin(int height, int width, int starty, int startx) 
{  WINDOW *local_win; 

    local_win = newwin(height, width, starty, startx); 
    box(local_win, 0 , 0);   /* 0, 0 gives default characters 
            * for the vertical and horizontal 
            * lines      */ 
    wrefresh(local_win);   /* Show that box    */ 

    return local_win; 
} 


void star(int x,int y,int r) 
{ 
if(r>0) 
{ 
star(x-r,y+r,r/2); 
star(x+r,y+r,r/2); 
star(x-r,y-r,r/2); 
star(x+r,y-r,r/2); 
newbox(x,y,r); 
} 
} 

void newbox(int x,int y,int r) 
{ 
    WINDOW *mywin; 
    mywin = create_newwin(2*r, 2*r, y, x); 
} 

Я думаю, что вы бы использовали новое ключевое слово и malloc. Моя желаемая цель - создать тип фрактального дисплея с перекрывающимися окнами. Функциональная звезда является рекурсивной, которая создаст параметры для перехода к функции newbox. Кто-нибудь там использовал ncurses для создания окон во время выполнения?

ответ

1

Функция (n) curses newwin выделяет пространство для структуры WINDOW и возвращает это. Окнами stdscr и curscr также являются выделено в initscr или newterm (с использованием newwin). Основное различие между stdscr и curscr по сравнению с другими окнами заключается в том, что они используются по всей библиотеке в предопределенном виде и не могут быть освобождены. Остальные окна можно освободить, используя delwin. Ничто из этого не является «статическим».

Соответствующие справочные страницы имеют эту основную информацию.

ncurses example programs показать, как могут быть созданы окна, которые не являются явными в коде, например, чтобы пользователь мог переместить курсор, чтобы начать создание окна, а затем перейти к выбору конца (вверху слева или внизу) справа, в пункте меню g ниже). Аналогичным образом, несколько используют рекурсию, например, для рисования серии вложенных окон в коробке (пункт меню a или A ниже, используемый для тестирования resizeterm). Это делается в основной тестовой программе, меню которой показано здесь:

Welcome to ncurses 5.9.20150502. Press ? for help. 
This is the ncurses main menu 
a = keyboard and mouse input test 
A = wide-character keyboard and mouse input test 
b = character attribute test 
B = wide-character attribute test 
c = color test pattern 
C = color test pattern using wide-character calls 
d = edit RGB color values 
e = exercise soft keys 
E = exercise soft keys using wide-characters 
f = display ACS characters 
F = display Wide-ACS characters 
g = display windows and scrolling 
i = test of flushinp() 
k = display character attributes 
m = menu code test 
o = exercise panels library 
O = exercise panels with wide-characters 
p = exercise pad features 
q = quit 
r = exercise forms code 
s = overlapping-refresh test 
t = set trace level 
? = repeat this command summary 
> 
+0

Это именно то, что я ищу. Спасибо за быстрый ответ – vbmrupp

+0

Еще один вопрос. Я попытался использовать run: «make -f Makfile.in», но он дал ошибку «Makefile.in:40: *** missing separator. Stop.» Любые предложения? – vbmrupp

+0

Вы должны использовать скрипт 'configure' для создания соответствующего' Makefile', например, '' ./configure && make' ' –

Смежные вопросы