I want to make a menu with ncurses.h
and more than one color.
I mean something like this:
┌────────────────────┐
│░░░░░░░░░░░░░░░░░░░░│ <- color 1
│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│ <- color 2
└────────────────────┘
But if I use init_pair()
, attron()
and attroff()
the color of the whole screen is the same, and not like I've expected.
initscr();
init_pair(0, COLOR_BLACK, COLOR_RED);
init_pair(1, COLOR_BLACK, COLOR_GREEN);
attron(0);
printw("This should be printed in black with a red background!\n");
refresh();
attron(1);
printw("And this in a green background!\n");
refresh()
sleep(2);
endwin();
What's wrong with this code?
Thanks for every answer!
Why does ncurses support only eight colors? But why only eight colors, and why these particular colors? At least with the Linux console, if you're running on a PC, the color range's origins are with the PC hardware.
To establish a color pair, use init_pair() to define a foreground and background color, and associate it to an index number. The general syntax is: init_pair(index, foreground, background); Consoles support only eight basic colors: black, red, green, yellow, blue, magenta, cyan and white.
In ncurses, "windows" are a means to divide the screen into logical areas. Once you define a window, you don't need to track its location on the screen; you just draw to your window using a set of ncurses functions.
Here's a working version:
#include <curses.h>
int main(void) {
initscr();
start_color();
init_pair(1, COLOR_BLACK, COLOR_RED);
init_pair(2, COLOR_BLACK, COLOR_GREEN);
attron(COLOR_PAIR(1));
printw("This should be printed in black with a red background!\n");
attron(COLOR_PAIR(2));
printw("And this in a green background!\n");
refresh();
getch();
endwin();
}
Notes:
start_color()
after initscr()
to use color.COLOR_PAIR
macro to pass a color pair allocated with init_pair
to attron
et al.refresh()
once, and only if you want your output to be seen at that point, and you're not calling an input function like getch()
.This HOWTO is very helpful.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With