NCurses窗口中颜色文本/背景不显示的原因及实现方法
NCurses自定义窗口颜色不显示的原因及解决方法
问题根源
你用attrset()设置颜色属性,但这个函数只对ncurses默认的stdscr窗口生效,你创建的是自定义窗口win,所以设置的颜色不会应用到这个窗口上,自然看不到彩色效果。
修正方案
把针对全局窗口的属性函数换成自定义窗口专属的带w前缀的函数,同时补充必要的终端清理和窗口停留逻辑,避免程序直接退出看不到效果:
#include <ncurses.h> int main() { initscr(); int lines = 20; int cols = 30; int y = 1; int x = 1; WINDOW* win = newwin(lines, cols, y, x); start_color(); init_pair(1, COLOR_WHITE, COLOR_RED); // 给自定义窗口win设置颜色属性 wattrset(win, COLOR_PAIR(1)); mvwprintw(win, 2, 2, "Some words...\n\n"); // 可选:取消窗口的颜色属性(如果后续还有其他输出需要恢复默认) wattroff(win, COLOR_PAIR(1)); wrefresh(win); getch(); // 等待用户输入,防止窗口一闪而过 endwin(); // 正确关闭ncurses环境,恢复终端正常状态 return 0; }
核心要点
- ncurses的函数分两类:不带前缀的作用于默认
stdscr,带w前缀的作用于指定的自定义窗口 - 常用的自定义窗口属性操作函数:
wattrset(win, attr):直接设置窗口的属性(会覆盖原有属性)wattron(win, attr):叠加开启某个属性wattroff(win, attr):关闭某个属性
- 必须调用
endwin()清理ncurses资源,否则可能导致终端显示异常 - 加
getch()是为了让窗口保持显示,否则程序执行完会立刻退出,看不到结果
内容的提问来源于stack exchange,提问作者Hector Aurelio
相关产品推荐
相关产品推荐

