颜色
最初,很少有哑终端可以支持颜色,所以大多数早期的curses版本并不会支持颜色。现在,颜色是大家所期望的,而且被ncurses以及大多数现在的curses实现所支持。不幸的,curses的哑屏幕的起源深深影响了API,所以curses使用一种特殊严格的方法来支持颜色,这也反映了早期颜色终端的能力不足。
屏幕上的每一个字符都可以使用许多不同的颜色显示在屏幕上,而不是使用各种不同的背景底色。例如,我们可以在红色的背景上使用绿色来显示文本。
curses中的颜色支持有一些不同,其原因在于每一个字符的颜色并不是独立于其底色而定义的。所以我们必须同时定义前景色与背景色,不要惊奇,这就是所谓的颜色对。
在我们可以使用curses中的颜色功能之间,我们必须检测当前的终端是否支持颜色,然后初始化curses的颜色例程。为了完成这个任务,我们可以使用一个函数对:has_colors与start_color。
#include <curses.h>
bool has_colors(void);
int start_color(void);
如果支持颜色,has_colors就会返回真。然后我们应调用start_color,如果颜色成功的进行了初始化就会返回OK。一旦调用了start_color进行了颜色的初始化,变量COLOR_PAIRS就会被设置为终端可以支持的最大颜色对。通常限制为64颜色对。变是COLORS定义了可用的最大的颜色数量,通常为8。由0开始的数字对于每一个可用的颜色而言起到了唯一ID的作用。
在我们可以将颜色作为属性使用之前,我们必须初始化我们希望使用的颜色对。我们可以使用init_pair函数来完成这个任务。颜色属性可以通过COLOR_PAIR函数来访问。
#include <curses.h>
int init_pair(short pair_number, short foreground, short background);
int COLOR_PAIR(int pair_number);
int pair_content(short pair_number, short *foreground, short *background);
curses.h通常定义了一些以COLOR_开头的基本颜色。另外一个函数,pair_content,可以允许我们取得前面定义的颜色对的信息。
要定义颜色对1,使其背景色为绿色而前景色为红色,我们可以用下面的函数语句:
init_pair(1, COLOR_RED, COLOR_GREEN);
我们可以使用COLOR_PAIR将这个颜色作为一个属性来进行访问:
wattron(window_ptr, COLOR_PAIR(1));
这样就可以将屏幕设置为绿色的背景色以及红色的前景色。
因为COLOR_PAIR是一个属性,所以我们可以将其与其他的属性进行组合。在PC上,我们经常可以通过使用位或操作符组合COLOR_PAIR属性与A_BOLD属性来获得屏幕的亮度:
wattron(window_ptr, COLOR_PAIR(1) | A_BOLD);
下面我们来看一下例子程序color.c中函数:
试验--颜色
1 首先,我们需要检测程序的显示终端是否支持颜色。如果支持,则开始颜色显示。
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <curses.h>
int main()
{
int i;
initscr();
if (!has_colors()) {
endwin();
fprintf(stderr, “Error - no color support on this terminal\n”);
exit(1);
}
if (start_color() != OK) {
endwin();
fprintf(stderr, “Error - could not initialize colors\n”);
exit(2);
}
2 现在我们可以打印出允许的颜色数与颜色对。我们创建七个颜色对并且同时显示。
clear();
mvprintw(5, 5, “There are %d COLORS, and %d COLOR_PAIRS available”,
COLORS, COLOR_PAIRS);
refresh();
init_pair(1, COLOR_RED, COLOR_BLACK);
init_pair(2, COLOR_RED, COLOR_GREEN);
init_pair(3, COLOR_GREEN, COLOR_RED);
init_pair(4, COLOR_YELLOW, COLOR_BLUE);
init_pair(5, COLOR_BLACK, COLOR_WHITE);
init_pair(6, COLOR_MAGENTA, COLOR_BLUE);
init_pair(7, COLOR_CYAN, COLOR_WHITE);
for (i = 1; i <= 7; i++) {
attroff(A_BOLD);
attrset(COLOR_PAIR(i));
mvprintw(5 + i, 5, “Color pair %d”, i);
attrset(COLOR_PAIR(i) | A_BOLD);
mvprintw(5 + i, 25, “Bold color pair %d”, i);
refresh();
sleep(1);
}
endwin();
exit(EXIT_SUCCESS);
}
重新定义颜色
早期的哑终端一次只可以很显示很少的颜色,但是却允许将激活的颜色设置为可配置的,curses允许使用init_color函数来重新定义颜色。
#include <curses.h>
int init_color(short color_number, short red, short green, short blue);
这允许一个已经存在的颜色可以使用0到1000之间的值进行重新定义。这与定义GIF格式图像文件的颜色有一些类似。
分享到:
相关推荐
matplotlib-3.6.3-cp39-cp39-linux_armv7l.whl
numpy-2.0.1-cp39-cp39-linux_armv7l.whl
基于springboot个人公务员考试管理系统源码数据库文档.zip
onnxruntime-1.13.1-cp310-cp310-win_amd64.whl
基于springboot的西山区家政服务网站源码数据库文档.zip
Linux环境下,关于C++静态库的封装和调用代码。 TestLib是库目录。 TestLibCall是调用库的目录。
基于springboot软件技术交流平台源码数据库文档.zip
numpy-1.20.1-cp39-cp39-linux_armv7l.whl
ASP.NET酒店管理系统源码(WPF) 一、源码特点 采用WPF进行开发的酒店管理系统源码,界面相当美观,功能齐全 二、菜单功能 1、预订登记:可选择入住时间、离店时间、所在城市、证件类型,保存、删除、查询、返回 2、住宿结算:新增入住、保存、删除、查询、返回 3、今日盘点:查询、返回 4、查询统计: 5、房间管理:增加房间类型、删除类型、增加房间、删除房间、保存、返回 6、用户管理:增加用户、删除用户、保存、返回 7、系统配置:基本功能 8、显示当前系统时间等功能的实现
坠落的天空小游戏图片和代码
论文描述:该论文研究了某一特定领域的问题,并提出了新的解决方案。论文首先对问题进行了详细的分析和理解,并对已有的研究成果进行了综述。然后,论文提出了一种全新的解决方案,包括算法、模型或方法。在整个研究过程中,论文使用了合适的实验设计和数据集,并进行了充分的实验验证。最后,论文对解决方案的性能进行了全面的评估和分析,并提出了进一步的研究方向。 源码内容描述:该源码实现了论文中提出的新的解决方案。源码中包含了算法、模型或方法的具体实现代码,以及相关的数据预处理、实验设计和性能评估代码。源码中还包括了合适的注释和文档,以方便其他研究者理解和使用。源码的实现应该具有可读性、可维护性和高效性,并能够复现论文中的实验结果。此外,源码还应该尽可能具有通用性,以便在其他类似问题上进行进一步的应用和扩展。
环境说明: 开发语言:python Python版本:3.6.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:pycharm
基于springboot高校学术交流平台源码数据库文档.zip
onnxruntime-1.16.2-cp310-cp310-win_amd64.whl
基于springboot+vue的实践性教学系统源码数据库文档.zip
基于springboot的校园二手物品交易系统源码数据库文档.zip
numpy-1.23.5-cp39-cp39-linux_armv7l.whl
bimdata_api_client-4.0.2-py3-none-any.whl
环境说明: 开发语言:PHP 框架:原生php/thinkphp5 服务器:Apache 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat 11 运行软件:小皮phpStudy
基于SpringBoot的中老年人文化活动平台源码数据库文档.zip