C 在窗口内打印,而不是在边框上打印

C 在窗口内打印,而不是在边框上打印,c,ncurses,C,Ncurses,我试图在诅咒窗口中写些东西,但它似乎也写在边框上。如何修复下面的代码 win_self = newwin(LINES / 2, COLS, 0, 0); box(win_self, 0, 0); wrefresh(win_self); wprintw(win_self, "foobar"); 在诅咒中,box()生成的边框位于边框内。就我所知,没有办法简单地说“不要覆盖我的边界” 然而,我现在可以想到三种解决办法: 不要覆盖边框字符(使用move()) 在绘制窗口内容后绘制框,然后刷新()屏

我试图在诅咒窗口中写些东西,但它似乎也写在边框上。如何修复下面的代码

win_self = newwin(LINES / 2, COLS, 0, 0);
box(win_self, 0, 0);
wrefresh(win_self);
wprintw(win_self, "foobar");

在诅咒中,
box()
生成的边框位于边框内。就我所知,没有办法简单地说“不要覆盖我的边界”

然而,我现在可以想到三种解决办法:

  • 不要覆盖边框字符(使用
    move()
  • 在绘制窗口内容后绘制框,然后
    刷新()
    屏幕(您可能仍在覆盖某些内容,但至少不是边框字符)
  • 创建一个带有边框的“边框窗口”和一个内部的“内容窗口”,当然,它从(边框窗口开始开始开始,y+1,边框窗口开始,x+1)开始,比“边框窗口”小两行/列

更清楚地说:
box()
函数没有将属性“此窗口具有可见边框”添加到窗口中,它只是在窗口周围打印边框字符

你是:

  • 可以自由覆盖那些边框字符
  • 如果你不想让它们被覆盖,就应该小心

    • 我认为最简单的方法是在窗口边框内创建一个窗口,然后在该窗口中打印

      win_self = newwin(LINES / 2, COLS, 0, 0);
      box(win_self, 0, 0);
      derwin_self = derwin(win_self, LINES / 2 - 2, COLS - 2, 0, 0);
      wprintw(derwin_self, "foobar");
      

      我选择了第三种解决方案作为临时破解。现在看来,黑客是“生产代码”。是的,我认为这是最好的解决方案。第三个是一个好主意,我也实现了它。但现在我遇到了多个重叠窗口和面板的问题。我将外部(边框)窗口指定给面板,但当我关闭(隐藏)一个窗口时,get下面的另一个窗口不会因未指定给下面面板的窗口而刷新。。。这也有解决办法吗?也许是额外的面板?回答我自己的问题:是的,当我使用两个面板(一个用于边框,一个用于内容)时,它似乎起作用。我花了3天时间思考如何绕过这个问题,“创建一个带边框的“边框窗口”和“内容窗口”是完美的解决方案!!!谢谢!