curses颜色操作
curses顏色操作
start_color,
init_pair,
init_color,
has_colors,
can_change_color,
color_content,
pair_content,
COLOR_PAIR
Synopsis
# include <curses.h> int start_color(void); int init_pair(short pair, short f, short b); int init_color(short color, short r, short g, short b); bool has_colors(void); bool can_change_color(void); int color_content(short color, short *r, short *g, short *b); int pair_content(short pair, short *f, short *b);概觀
curses支持具有該功能的終端上的顏色屬性。
要使用這些例程,必須在initscr之后調用start_color。
顏色總是成對使用(稱為顏色對)。
顏色對由前景色(用于字符)和背景色(用于顯示字符的空白字段)組成。
程序員使用例程init_pair初始化顏色對。
初始化之后,COLOR_PAIR(n)(在<curses.h>中定義的宏)可以用作新的視頻屬性。
如果終端能夠重新定義顏色,程序員可以使用例程init_color來更改顏色的定義。
例程 has_colors和can_change_color返回TRUE或FALSE,具體取決于終端是否具有顏色功能以及程序員是否可以更改顏色。
例程color_content允許程序員以初始化顏色提取紅色,綠色和藍色分量。
例程pair_content允許程序員找出當前如何定義給定顏色對。
常規描述
該start_color程序不需要參數。
如果程序員想要使用顏色,并且在調用任何其他顏色操作例程之前,必須調用它。
在initscr之后立即調用此例程是一種好習慣。
start_color初始化八種基本顏色(黑色,紅色,綠色,黃色,藍色,洋紅色,青色和白色)和兩個全局變量COLORS和COLOR_PAIRS(分別定義終端可以支持的最大顏色數和顏色對)。
它還將終端上的顏色恢復為剛剛打開終端時的值。
所述init_pair例程改變顏色對的定義中。
它需要三個參數:要更改的顏色對的編號,前景顏色編號和背景顏色編號。
第一個參數的值必須介于1和COLOR_PAIRS-1之間,除非使用默認顏色,調整上限以允許在前景和/或背景中使用默認顏色的額外對。
第二個和第三個參數的值必須介于0和COLORS之間。
假設顏色對0在黑色上是白色的,但實際上是在初始化顏色之前終端實現的任何東西。
它不能被應用程序修改。
如果先前已初始化顏色對,則刷新屏幕并將所有出現的顏色對更改為新定義。
作為擴展,ncurses的允許用戶通過所述設置的顏色對0 assume_default_colors例程,或指定使用的默認顏色(顏色數 -1)如果首先調用use_default_colors例程。
該init_color常規改變顏色的定義。
它需要四個參數:要更改的顏色數,后跟三個RGB值(紅色,綠色和藍色組件的數量)。
第一個參數的值必須介于0和COLORS之間。
最后三個參數中的每一個必須是介于0和1000之間的值。
使用init_color時,屏幕上所有出現的顏色都會立即更改為新定義。
該has_colors程序不需要參數。
如果終端可以操作顏色,則返回TRUE ; 否則,它返回FALSE。
該例程有助于編寫與終端無關的程序。
例如,程序員可以使用它來決定是使用顏色還是其他視頻屬性。
該can_change_color程序不需要參數。
如果終端支持顏色并且可以更改其定義,則返回TRUE ; 另外,它返回FALSE。
該例程有助于編寫與終端無關的程序。
該color_content例行為程序員提供了一種方法來找到一個顏色的紅,綠,藍(RGB)分量的強度。
它需要四個參數:顏色編號和short的三個地址,用于存儲有關給定顏色中紅色,綠色和藍色分量的信息。
第一個參數的值必須介于0和COLORS之間。
存儲在最后三個參數指向的地址處的值介于0(無組件)和1000(組件的最大數量)之間。
該pair_content程序允許程序員找出給定的顏色對包括什么顏色。
它需要三個參數:顏色對數,以及用于存儲前景和背景顏色數的兩個短地址。
第一個參數的值必須介于1和 COLOR_PAIRS-1之間。
存儲在第二個和第三個參數指向的地址處的值介于0和COLORS之間。
顏色
在<curses.h>中定義了以下宏。這些是默認顏色。curses還假設COLOR_BLACK是所有終端的默認背景顏色。
COLOR_BLACK
COLOR_RED
COLOR_GREEN
COLOR_YELLOW
COLOR_BLUE
COLOR_MAGENTA
COLOR_CYAN
COLOR_WHITE
回報價值
例程can_change_color()和has_colors()返回TRUE或FALSE。
所有其他例程在失敗時返回整數ERR,并且成功完成后,OK(SVr4僅指定“除ERR之外的整數值”)。
X / Open定義沒有錯誤條件。
此實現將在嘗試使用0到COLORS-1范圍之外的顏色值時返回ERR(默認顏色擴展名除外),或使用0到COLOR_PAIR-1范圍之外的顏色對。
init_color中使用的顏色值必須在0到1000的范圍內。
如果終端尚未初始化,則會從所有函數返回錯誤。
如果未調用start_color,則會從init_pair等輔助函數返回錯誤。
init_color
如果終端不支持此功能,則返回錯誤,例如,如果終端描述中不存在initialize_color功能。
start_color
返回錯誤如果無法分配顏色表。
筆記
在ncurses實現中,每個屏幕都有一個單獨的顏色激活標記,調色板,顏色對表以及相關的COLORS和COLOR_PAIRS計數; 該start_color功能只影響當前屏幕。
SVr4 / XSI接口并沒有真正考慮到這一點,歷史實現可能使用單個共享調色板。
請注意,通過顏色對設置隱式背景顏色僅影響字符寫入操作明確觸摸的字符單元格。
要更改通過擦除或滾動操作消除窗口部分時使用的背景顏色。
有關VGA兼容圖形的386和486機器有幾個注意事項:
COLOR_YELLOW實際上是棕色的。要變黃,請使用COLOR_YELLOW并結合A_BOLD屬性。
理論上,A_BLINK屬性應該使背景變亮。
這通常無法工作,甚至一些它主要工作的卡(如天堂和兼容機)在你試圖設置明亮的“黃色”背景時會做錯事(你會得到一個閃爍的黃色前景)。
顏色RGB值無法設置。
可移植性
此實現滿足XSI Curses的COLORS和COLOR_PAIRS的最小最大值。
該init_pair例程接受前景色和背景色,支持的負值use_default_colors擴展名,但只有當程序被調用第一。
可以使用assume_default_colors擴展來修改COLOR_BLACK是所有終端的默認背景顏色的假設。
此實現檢查指針,例如,color_content和pair_content返回的值,并在null時將它們視為可選參數。
總結
以上是生活随笔為你收集整理的curses颜色操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS curses 中文乱码问题
- 下一篇: CentOS7开机启动图形界面的开启与关