Цвет фона с помощью 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 ответа

Решение

Вам нужно позвонить wbkgd(WINDOW *win, chtype ch)

В вызове 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-й раздел «Цвета».

Другие вопросы по тегам