2011-04-21 30 views
9

我正在尝试在curses窗口中写入内容,但它似乎也写在边框上。我如何修复下面的代码?在窗口内打印,而不是在边框

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

回答

11

在诅咒,通过box()产生的边界是内部边界。据我所知,没有办法简单地说“不要覆盖我的边界”。

不过,也有我能想到的,现在三种解决方案:

  • 没有覆盖的边界字符(使用move()
  • 画箱后绘制窗口的内容,然后(你可能仍然在覆盖东西,但至少它不是边框字符)
  • 创建一个带有边框和“内容窗口”的“边框窗口”,其中当然是从(border_window_start_y + 1,border_wind ow_start_x + 1),比“边窗”


只是为了更清楚更小的两行/列:box()功能不添加属性“窗口有明显的边界”的窗口,它只是在窗口周围打印边框字符。

您的位置:

  • 免费覆盖那些有边界字符
  • 应该是谨慎的,如果你不希望他们被覆盖
+1

我选择第三种解决方案作为临时黑客。现在看起来黑客是'生产代码'。 – Alexandru 2011-04-22 19:28:16

+1

是的,我认为这是最好的解决方案。 – Philip 2011-04-22 20:04:54

+1

第三个是一个好主意,我也是这样实现的。但是现在我遇到了多个重叠窗口和面板的问题。我将外部(边框)窗口分配给面板,但是当我关闭(隐藏)一个窗口时,下面的另一个窗口不会刷新,窗口不会被分配给下面的面板...是否有解决方案呢?也许还有其他面板 – aurora 2013-02-08 22:25:33

0

我想说的最简单的方法是创建窗口内的一个窗口边框并在该窗口中打印。

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");