`
winzenghua
  • 浏览: 1370089 次
  • 性别: Icon_minigender_2
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

使用curses管理基于文本的屏幕--(六)

阅读更多

颜色

最初,很少有哑终端可以支持颜色,所以大多数早期的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格式图像文件的颜色有一些类似。
分享到:
评论

相关推荐

    使用curses管理基于文本的屏幕

    ### 使用curses管理基于文本的屏幕 #### 一、curses简介 curses是一个用于创建基于文本的用户界面的库,它在Linux和类UNIX环境中非常流行。curses的重要性在于它提供了一个介于简单的基于行的程序和复杂的图形界面...

    Linux程序设计 第6章 使用curses函数库管理基于文本的屏幕

    即使是编写基于字符的全屏幕程序,使用curses函数库的方案也更简明,而程序本身也更独立于具体的终端。在编写这类程序时,使用curses函数库更比直接使用escape转义序列容易得多。curses函数库还可以对键盘进行管理,...

    python的curses库, win平台的各种whl包

    - 它提供了高级的文本输出和输入功能,比如分割屏幕、创建窗口、接受用户输入等,适合创建基于命令行的图形化界面。 - 在Windows系统上,curses库通常通过pdcurses或win32curses这样的移植版本来实现。 2. **whl...

    python_curses-2.2.2-cp312-cp312-win32.whl.zip

    **Python Curses**库是Python对原始C语言的`curses`库的封装,它提供了一套API,使得在基于文本的终端上创建图形用户界面成为可能。`curses`库可以处理键盘输入、屏幕输出和窗口管理,常用于控制台应用,如命令行...

    C语言学生成绩管理系统:使用curses函数库--源码

    curses库是用于处理文本模式用户界面的工具,特别是在没有图形窗口系统的情况下,它能够方便地在终端上进行屏幕管理和输入处理。通过使用curses,开发者可以更容易地控制屏幕输出和键盘输入,使得在命令行环境下也能...

    curses-2.2.1+utf8-cp37,py学习2048所需模块

    在Python编程领域,curses库是一个至关重要的工具,尤其在开发基于终端的用户界面时。curses库源于C语言,但在Python中被广泛使用,因为它允许开发者创建全屏交互式的应用程序,使得在命令行界面下的用户体验得以...

    Python-使用pythoncurses库创建的基于文本的多人游戏

    通过对这些文件的分析和学习,我们可以更深入地理解如何使用`curses`库来开发一个基于文本的多人游戏。这个项目可能包括了游戏规则、角色移动、碰撞检测、用户输入处理以及网络通信等方面的具体实现,这些都是游戏...

    python_curses-2.2.2-cp311-cp311-win_amd64.whl.zip

    在实际应用中,Python的curses库提供了许多函数和类,如`initscr()`用于初始化屏幕,`getch()`用于接收用户输入,`printw()`用于在屏幕上打印文本,以及`color_pair()`和`attron()`等用于设置颜色和文本属性。...

    python_curses-2.2.2-cp39-cp39-win32.whl.zip

    Python的curses库是用于创建基于终端的交互式应用程序的模块,它允许程序员在文本模式下处理用户输入和显示复杂的屏幕布局。`python_curses-2.2.2-cp39-cp39-win32.whl` 是一个专门为Python 3.9版本编译的curses库的...

    python_curses-2.2.2-cp311-cp311-win_arm64.whl.zip

    它能够管理屏幕上的窗口,处理键盘输入,以及更新屏幕内容,使得开发基于终端的应用程序变得更加简单。`curses`库的使用主要分为以下几个核心概念: 1. **窗口管理**:curses将屏幕划分为多个窗口,每个窗口可以...

    python_curses-2.2.2-cp39-cp39-win_amd64.whl.zip

    Python的curses库是一个在控制台上提供彩色和光标移动功能的模块,它使得开发者能够创建基于文本的用户界面。`python_curses-2.2.2-cp39-cp39-win_amd64.whl` 文件是这个库的一个预编译版本,专为Python 3.9构建,...

    PyCurses-使用python编写curses.pdf

    调试PyCurses程序通常涉及输出日志、使用调试器或专门的curses调试工具,以便跟踪屏幕更新和键盘事件。 总之,PyCurses为Python开发者提供了一个强大且灵活的工具,用于创建功能丰富的控制台应用程序,无论是在历史...

    817-0693-pdfOracle Solaris 9 - man pages section 3: Curses Libra

    curses.h 头文件定义了 Curses 库的 API,提供了各种函数和宏,用于创建和管理基于文本的用户界面。curses 库是 Curses 库的核心部分,提供了各种函数,用于创建和管理基于文本的用户界面。form 库是 Curses 库的一...

    Unix Curses 库导论-翻译版

    Curses 提供了一系列 API 来处理文本屏幕的操作: - `initscr`: 初始化 curses 模式 - `printw`: 在屏幕指定位置打印字符串 - `getch`: 获取用户按键 - `endwin`: 结束 curses 模式 ##### 6.3 属性 除了 API 外,...

    基于curses的简单弹球游戏

    1. **curses**:curses库是此项目的核心,它提供了一系列函数,用于管理屏幕上的文本布局、颜色、键盘输入处理等功能。在curses模式下,程序可以动态地更新屏幕,创建窗口、面板,并响应用户的按键事件,使得在字符...

    Curses-1.28.tgz

    Curses 是一个在文本模式下运行的库,用于创建基于终端的应用程序。它提供了一组高级函数,使得程序员可以方便地处理终端的显示、输入和颜色等特性,而无需关心底层的终端控制代码。Curses-1.28.tgz 是这个库的一个...

    Linux命令行终端图形界面编程库curses介绍

    - **文本编辑器**:如vim、nano等命令行编辑器,这些编辑器的界面都是基于curses构建的。 - **游戏开发**:如经典的《roguelike》游戏,这类游戏通常需要在有限的空间内展示大量信息。 - **脚本自动化**:编写用于...

    linux下使用curses库实现滚屏、彩色打印等个性化屏幕输出

    【curses库】是UNIX环境下用于处理终端交互的高级库,尤其适合开发基于文本界面的程序。它使得程序员能够方便地控制光标移动、屏幕显示和键盘输入,从而实现滚屏、彩色打印等功能,适用于各种不同类型的终端。curses...

    linux curses编程小游戏 源码

    Linux下的curses编程是一种在基于文本的终端上创建交互式用户界面的技术,它允许程序员创建动态更新的屏幕,类似于简单的图形界面。在这个“魔岛寻宝”游戏中,curses库被用来控制屏幕上的字符输出、读取用户输入,...

    Tutorial on Python Curses Programming

    尽管现在图形用户界面已经成为主流,但基于文本的用户界面仍然有着广泛的应用场景。在服务器管理、控制台应用开发等领域,curses 提供了一个强大的工具集来创建复杂的文本界面。此外,学习 curses 也有助于深入理解...

Global site tag (gtag.js) - Google Analytics