그래서, 내 콘솔 응용 프로그램에 몇 가지 색상을 추가하는 데 pdcurses를 사용하고 있지만 문제가 있습니다. 두 번째 창을 만들고 출력 결과를 색칠하려고하면 정상적으로 작동하지만 출력을 stdscr로 출력하려고하면 아무 일도 일어나지 않습니다.stdscr에서 색상이 작동하지 않는 이유는 무엇입니까? (PDCurses)
stdscr이 정상적으로 stdout에 보내는 출력을 받아서 콘솔에 C++ 스타일 인터페이스를 사용할 수 있기 때문에 계속 다른 창으로 덮어두기보다는 stdscr을 계속 사용하고 싶습니다. 출력을 cout으로 보내면 stdscr로 가고, 현재로서는 C++ 인터페이스를 사용하여 pdcurses를 사용하는 유일한 방법입니다. 또한, 다른 라이브러리는 때로 stdout으로 출력을 보내고 stdscr을 사용하면 출력을 잃어 버리지는 않을 것입니다. (lua의 print
기능을 들었습니다.)
// Open the output log which will mimic stdout. //
if (userPath)
{
string filename = string(userPath) + LOG_FILENAME;
log.open(filename.c_str());
}
// Initialize the pdCurses screen. //
initscr();
// Resize the stdout screen and create a line for input. //
resize_window(stdscr, LINES - 1, COLS);
inputLine = newwin(1, COLS, LINES - 1, 0);
// Initialize colors. //
if (has_colors())
{
start_color();
for (int i = 1; i <= COLOR_WHITE; ++i)
{
init_pair(i, i, COLOR_BLACK);
}
}
else
{
cout << "Terminal cannot print colors.\n";
if (log.is_open())
log << "Terminal cannot print colors.\n";
}
scrollok(stdscr, true);
scrollok(inputLine, true);
leaveok(stdscr, true);
leaveok(inputLine, true);
nodelay(inputLine, true);
cbreak();
noecho();
keypad(inputLine, true);
내가 잘못 뭐하는 거지 : 여기
// This prints a red '>' in the inputLine window properly. //
wattron(inputLine, A_BOLD | COLOR_PAIR(COLOR_RED));
wprintw(inputLine, "\n> ");
wattroff(inputLine, A_BOLD | COLOR_PAIR(COLOR_RED));
// This prints a light grey "Le Testing." to stdscr. Why isn't it red? //
wattron(stdscr, A_BOLD | COLOR_PAIR(COLOR_RED));
cout << "\nLe Testing.\n";
wattroff(stdscr, A_BOLD | COLOR_PAIR(COLOR_RED));
// This does nothing. I have no idea why. //
wattron(stdscr, A_BOLD | COLOR_PAIR(COLOR_RED));
wprintw(stdscr, "\nLe Testing.\n");
wattroff(stdscr, A_BOLD | COLOR_PAIR(COLOR_RED));
내가 pdcurses를 초기화하는 방법입니다
여기에 몇 가지 예제 코드는?
정말로 오타였습니다. 감사합니다. printw 및 wprintw를 사용하면 컬러 텍스트가 예상대로 인쇄됩니다. 한 가지 분명한 것은'printw'가 코드의 뒷부분에 오더라도'printw'의 결과가'cout'의 위에 나타난다는 것입니다. 나는 이것이 당신이 말하는 것처럼 단순한 stdout 혼란스러운 pdcurses라고 생각합니다. pdcurses api로 순전히 작동하도록 코드를 수정할 수 있습니다 (최소한이 단계에서). 지금 나는'std :: ostringstream stream; 스트림 << 데이터; printw (stream.str(). c_str());'. –