Hey there, if you haven't read Part-2 yet, I would suggest you read it first.
Ncurses provide one main window known as Standard Screen by default, defined as stdscr
. It also allows you to make windows that divide the stdscr i.e Main Window.
A window may be as large as entire stdscr or as small as a single character
To declare a window you will have to use WINDOW
typed object defined in ncurses.h. and newwin(int height, int width, int starty, int starty)
function to initialize
For example,
WINDOW *win = newwin(10, 20, 1,10);
refresh(); // this will refresh "all" the screens
In the real world, you would be working with different windows. So if we want or refresh a specific window, we will be using wrefresh(WINDOW *)
function of ncurses.h that takes a window and refresh memory contents related to that window only.
Like mvprintw()
(in part 2) is for stdscr
, you will have to use window specific function to print in particular window mvwprintw(WINDOW *, int y, int x, “String”, ….);
Ok now everything is done, except one, and that is borders. To add borders to screen there are two functions
-
box(WINDOW*, int v, int h)
: Function to add borders to window-
v
is the value for vertical borders. Default is 0 -
h
is the value for horizontal borders. Default is 0
-
-
wborder(WINDOW*, int leftChar, int rightChar, int topChar, int bottomChar, int topLeftCorner, int topRightCorner, int bottomLeftCorner, int bottomRightCorner)
: The most precise function to add borders to a window
#include <ncurses.h>
using namespace std;
int main(int argc, char **argv)
{
initscr();
// creating a window;
// with height = 15 and width = 10
// also with start x axis 10 and start y axis = 20
WINDOW *win = newwin(15, 17, 2, 10);
refresh();
// making box border with default border styles
box(win, 0, 0);
// move and print in window
mvwprintw(win, 0, 1, "Greeter");
mvwprintw(win, 1, 1, "Hello");
// refreshing the window
wrefresh(win);
getch();
endwin();
return 0;
}
Top comments (3)
Ahh, I remember my days in ncurses. I've tried and failed multiple times to write a decent wrapper around it in C++. My problem was always efficiently managing a custom WINDOW stack and allowing global keybindings.
Maybe FINAL CUT would be something for you?
Oh wow, I've never seen that before. That looks awesome and just what I had been looking for. Thanks for sharing!