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

时间:2011-04-21 20:47:02

标签: c ncurses

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

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

2 个答案:

答案 0 :(得分:12)

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

尽管如此,我现在可以想到三种解决方案:

  • 不要覆盖边框字符(使用move()
  • 之后绘制框你绘制窗口内容,然后refresh()屏幕(你可能仍然覆盖了一些东西,但至少它不是边框字符)
  • 创建一个带有边框的“边框窗口”,里面有一个“内容窗口”,当然从(border_window_start_y + 1,border_window_start_x + 1)开始,并且比“边框窗口”小两行/列


只是为了说清楚:box()函数不会在窗口中添加属性“此窗口有可见边框”,它只是在窗口周围打印边框字符。

你是:

  • 可以自由覆盖这些边框字符
  • 如果你不想覆盖它们,应该保持谨慎

答案 1 :(得分: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");