13

ncurses.h複数の色でメニューを作りたいです。私はこのようなものを意味します:

┌────────────────────┐
│░░░░░░░░░░░░░░░░░░░░│ <- color 1
│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│ <- color 2
└────────────────────┘

しかし、を使用するinit_pair()attron()attroff()画面全体の色が同じになり、予想とは異なります。

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();

このコードの何が問題になっていますか?

すべての答えをありがとう!

4

2 に答える 2

25

動作するバージョンは次のとおりです。

#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();
}

ノート:

  • 色を使用するにはstart_color()、後で電話する必要があります。initscr()
  • マクロを使用して、etalCOLOR_PAIRに割り当てられたカラーペアを渡す必要があります。init_pairattron
  • カラーペア0は使用できません。
  • 一度だけ呼び出す必要refresh()があり、その時点で出力を表示したい場合にのみ、 。のような入力関数を呼び出さないgetch()ください。

このHOWTOはとても役に立ちます。

于 2012-05-07T19:06:44.897 に答える
2

色を初期化し、COLOR_PAIRマクロを使用する必要があります。

色のペアはデフォルトの色0用に予約されているため、でインデックス作成を開始する必要があります。1

....

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");

....
于 2012-05-07T19:06:20.403 に答える