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

问题描述 投票:0回答:2

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

win_self = newwin(LINES / 2, COLS, 0, 0);
box(win_self, 0, 0);
wrefresh(win_self);
wprintw(win_self, "foobar");
c ncurses
2个回答
17
投票

在curses中,由

box()
生成的边界是inside边界。据我所知,没有办法简单地说“不要覆盖我的边框”。

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

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

只是为了更清楚地说明:
box()

函数不会向窗口添加“此窗口具有可见边框”属性,它只是在窗口周围打印边框字符。

你是:

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

5
投票
我想说最简单的方法是在(边框)窗口内创建一个(内容)窗口并在该内部窗口中打印。

WINDOW *win_self = newwin(LINES / 2, COLS, 0, 0); box(win_self, 0, 0); WINDOW *derwin_self = derwin(win_self, LINES / 2 - 2, COLS - 2, 0, 0); wprintw(derwin_self, "foobar");
    
© www.soinside.com 2019 - 2024. All rights reserved.