Цвет фона с помощью ncurses в Linux
Первый пост здесь, поэтому я прошу прощения за любые ошибки.
В основном, когда я запускаю свой код, все работает правильно, за исключением изменения цвета фона. По какой-то причине он всегда серый. Я пытаюсь изменить его на черный, но он не работает, и я не уверен, почему.
Основная часть моего кода, которая, по моему мнению, должна изменить цвет фона, такова: wattron(mainWindow, COLOR_BLACK);
Любая помощь, чтобы выяснить, как изменить свой фон на черный, будет принята с благодарностью. Спасибо, парни!
Вот что у меня есть на тот случай, если это поможет дать некоторый контекст для моей проблемы:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <curses.h>
#include <time.h>
// Variables
int nlines;
int ncols;
int x;
int y;
int y0;
int x0;
int input;
// Constants
const int MAX_LINES = 10;
const int MAX_COLUMNS = 10;
// Main function
int main(void) {
WINDOW * mainWindow;
// Initialize ncurses
if ( (mainWindow = initscr()) == NULL) {
fprintf(stderr, "Could not initialize ncurses!\n");
exit(EXIT_FAILURE);
}
// Call function to use color
start_color();
// Create my own color pairs
init_pair(1, COLOR_CYAN, COLOR_BLACK);
init_pair(2, COLOR_BLUE, COLOR_RED);
// First clear off the screen
clear();
// Move the cursor
y = 8;
x = 30;
move(y, x);
// Refresh
refresh();
// Test output - working
// printw("Testing...");
waddch(mainWindow, 'T' | A_UNDERLINE | COLOR_PAIR(1));
waddch(mainWindow, 'E' | A_UNDERLINE | COLOR_PAIR(2));
waddch(mainWindow, 'S' | A_UNDERLINE | COLOR_PAIR(1));
waddch(mainWindow, 'T' | A_UNDERLINE | COLOR_PAIR(2));
waddch(mainWindow, 'I' | A_UNDERLINE | COLOR_PAIR(1));
waddch(mainWindow, 'N' | A_UNDERLINE | COLOR_PAIR(2));
waddch(mainWindow, 'G' | A_UNDERLINE | COLOR_PAIR(1));
waddch(mainWindow, '.' | A_UNDERLINE | COLOR_PAIR(2));
waddch(mainWindow, '.' | A_UNDERLINE | COLOR_PAIR(1));
waddch(mainWindow, '.' | A_UNDERLINE | COLOR_PAIR(1));
waddch(mainWindow, '.' | A_UNDERLINE | COLOR_PAIR(2));
// Make background a different color
wattron(mainWindow, COLOR_BLACK);
// Hold until user inputs a character
input = getch();
// Clean up
delwin(mainWindow);
endwin();
refresh();
return EXIT_SUCCESS;
}
2 ответа
В вызове
wattron(WINDOW* win, chtype ch)
вы не можете использовать COLOR_BLACK как
ch
потому что COLOR_BLACK является целым числом, а не атрибутом (значение
chtype
). Вы должны вызвать эту функцию, используя
COLOR_PAIR
:
wattron(mainWindow, COLOR_PAIR(0)); // The pair number 0 is the terminal's default pair (white foreground, black background).
Обратите внимание, что
wattron
включает только указанные атрибуты. Если вы хотите установить фон (это атрибуты сброса каждой ячейки) окна, вам лучше использовать
wbkgd(WINDOW *win, chtype ch)
. Документацию по нему вы можете найти на странице руководства wbkgd(3ncurses) .
Учебник ncurses, который помог мне больше всего, находится здесь . Я рекомендую вам прочитать 10-й раздел «Цвета».