Dynamic 使用ncurses在运行时创建动态窗口
不确定这在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[])
#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
”,这就成功了!再次感谢。你能把这个说明写在我们新手的自述中吗?我会这样做(在我的待办事项清单上)。