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