Печать внутри окна, а не на границах - PullRequest
10 голосов
/ 22 апреля 2011

Я пытаюсь что-то написать в окне проклятий, но кажется, что оно пишет и на границах.Как я могу исправить код ниже?

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

Ответы [ 2 ]

12 голосов
/ 22 апреля 2011

В проклятиях границы, сгенерированные box(), внутри границ.Насколько я могу судить, просто сказать «не перезаписывать мою границу» невозможно.

Тем не менее, есть три решения, о которых я могу подумать прямо сейчас:

  • не перезаписывайте символы границы (используйте move())
  • нарисуйте прямоугольник после вы рисуете содержимое окна, затем refresh() экран (вы, вероятно, все еще что-то перезаписываете,но, по крайней мере, это не символы границы)
  • создать «окно границы» с границами и «окном содержимого» внутри него, которое, конечно, начинается с (border_window_start_y + 1, border_window_start_x + 1) и равно двумстроки / столбцы меньше "окна границы"

Просто чтобы прояснить ситуацию: функция box() не добавляет к окну свойство «это окно имеет видимые границы», она просто печатает символы границ вокруг окна.

Вы:

  • свободно перезаписывать эти пограничные символы
  • должен быть осторожным, если вы не хотите, чтобы они перезаписывались
1 голос
/ 04 февраля 2017

Я бы сказал, что самый простой способ - создать окно внутри границ окна и напечатать в этом окне.

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