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

我正在尝试在curses窗口中写一些东西,但它似乎也写在边框上。 我该如何修复下面的代码?

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

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

不过,我现在可以想到三种解决方案:

  • 不要覆盖边框字符(使用move()
  • 绘制窗口内容绘制框,然后refresh()屏幕(您可能仍在覆盖某些内容,但至少它不是边框字符)
  • 创建一个带有边框的“边框窗口”,里面有一个“内容窗口”,当然从(border_window_start_y + 1,border_window_start_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");