在Linux上使用ncurses的背景颜色

时间:2014-12-09 21:40:31

标签: c++ linux ncurses

首先在这里发帖,所以我为任何错误道歉。

基本上,当我运行代码时,除了更改背景颜色外,一切正常。出于某种原因,它总是灰色的。我试图将它改为黑色,但它不起作用,我不知道为什么。

我认为应该更改背景颜色的代码的主要部分是: 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 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

在调用 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) manual page 中找到它的文档。

对我帮助最大的 ncurses 教程是 here。我建议您阅读第 10 种颜色部分。