Dynamic 使用ncurses在运行时创建动态窗口

Dynamic 使用ncurses在运行时创建动态窗口,dynamic,window,ncurses,creation,Dynamic,Window,Ncurses,Creation,不确定这在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[])

不确定这在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);
 }
#包括
窗口*创建新窗口(整数高度、整数宽度、整数起始点、整数起始点);
空星(整数x,整数y,整数r);
无效新箱(整数x,整数y,整数r);
int main(int argc,char*argv[])
{       
int startx、starty、宽度、高度;
int ch,sze;
initscr();/*开始诅咒模式*/
cbreak();/*线路缓冲已禁用,继续
*我的一切*/
//printf(“%s\n”,argv[1]);
sze=atoi(argv[1]);
starty=(LINES-sze)/2;/*计算中心位置*/
窗口的startx=(COLS-sze)/2;/**/
刷新();
star(startx、starty、sze);
endwin();/*结束诅咒模式*/
返回0;
}
窗口*创建新窗口(整数高度、整数宽度、整数起始点、整数起始点)
{WINDOW*本地_-win;
本地_-win=newwin(高度、宽度、星形、星形);
框(local_win,0,0);/*0,0提供默认字符
*用于垂直和水平方向
*线条*/
wrefresh(local_win);/*显示该框*/
回报当地的胜利;
}
空星(整数x,整数y,整数r)
{
如果(r>0)
{
星形(x-r,y+r,r/2);
星型(x+r,y+r,r/2);
星形(x-r、y-r、r/2);
星型(x+r,y-r,r/2);
新箱(x,y,r);
}
}
无效新框(整数x,整数y,整数r)
{
窗口*mywin;
mywin=创建新的win(2*r,2*r,y,x);
}
我想你会使用新的关键字和malloc。我期望的目标是生成一种具有重叠窗口的分形显示。函数star是一个递归函数,它将创建传递给newbox函数的参数。有人在运行时使用ncurses创建窗口吗?

(n)curses函数为
窗口
结构分配空间并返回该空间。
stdscr
curscr
窗口同样在或
newterm
中分配(使用
newwin
)。
stdscr
curscr
与其他窗口之间的主要区别在于,这些窗口以预定义的方式在整个库中使用,并且无法释放。可以使用释放其他窗口。这些都不是“静态的”

相应的手册页面包含此基本信息

ncurses显示如何创建代码中未明确的窗口,例如,提示用户移动光标开始创建窗口,然后移动以选择结束(在下面的菜单项
g
中,左上角与右下角)。类似地,也有一些使用递归,例如,绘制一系列嵌套的装箱窗口(下面的菜单项
a
a
,用于测试)。这些都是在主测试程序中完成的,其菜单如下所示:

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
> 

这正是我要找的。谢谢你的快速回答,还有一个问题。我尝试使用run:“make-f Makfile.in”,但它给出了一个错误“Makefile.in:40:**缺少分隔符.Stop”。有什么建议吗?您必须使用
配置
脚本来创建适当的
Makefile
,例如,“
/configure&&make
”,这就成功了!再次感谢。你能把这个说明写在我们新手的自述中吗?我会这样做(在我的待办事项清单上)。