Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Printing inside window, not on borders

Tags:

c

ncurses

I'm trying to write something inside a curses window, but it seems to write on borders too. How can I fix the code below?

win_self = newwin(LINES / 2, COLS, 0, 0);
box(win_self, 0, 0);
wrefresh(win_self);
wprintw(win_self, "foobar");
like image 543
Alexandru Avatar asked Apr 21 '11 20:04

Alexandru


People also ask

Why are my border not printing in Word?

If the borders are still not showing when you print, adjust the margins to give more space between the borders and the edge of the page on the document. Go to Layout > Margins, and select Custom Margins. Increase the border that corresponds with the one that's missing when you print.

Why does my printer cut off the bottom border?

The most common cause of this problem is that the bottom margin, footer margin, or page border is outside the printable area of the page. All printers have an irreducible unprintable area necessitated by the mechanical requirements of paper handling.

Why is my printer only printing borders?

That's usually because the printer driver itself has default borders set for each document, and until they're changed your document will print with a border or your program will tell you that you're trying to print a document that's too large for the page.


2 Answers

I'd say the easiest way is to create a window inside of the window borders and print in that window.

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");
like image 114
Klas. S Avatar answered Nov 15 '22 22:11

Klas. S


In curses, the borders generated by box() are inside borders. As far as I can tell, there's no way to simply say "don't overwrite my border".

Nevertheless, there are three solutions that I can think of right now:

  • don't overwrite the border characters (use move())
  • draw the box after you draw window contents, then refresh() the screen (you're probably still overwriting something, but at least it's not the border characters)
  • create a "border window" with borders and a "content window" inside of it, which of course starts at (border_window_start_y + 1, border_window_start_x + 1) and is two lines/columns smaller than the "border window"


Just to make it more clear: the box() function doesn't add the property "this window has visible borders" to the window, it just prints border characters around the window.

You are:

  • free to overwrite those border characters
  • supposed to be cautious if you don't want them overwritten
like image 33
Philip Avatar answered Nov 15 '22 20:11

Philip