C語言控制台視窗圖形介面編程之三 設定文字屬性的函數

來源:互聯網
上載者:User

在這裡介紹一個設定文字屬性的函數,原型如下

BOOL SetConsoleTextAttribute(   // 設定WriteConsole等函數的字元屬性    HANDLE hConsoleOutput,          // 控制代碼    WORD wAttributes                // 文字屬性    );

本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/C/

順便提一下文字屬性,其實就是顏色屬性,有背景色和前景色彩(就是字元的顏色)兩類,每一類只提供三原色(紅,綠,藍)和加強色(灰色,可與其他顏色搭配使用,使顏色變亮,後面會提到)。最後還有一個反色(不太清楚這個到底怎麼用,很奇葩的東西)。樣本程式如下:

#include <stdio.h>    #include <stdlib.h>    #include <windows.h>    #include <conio.h>    /*   基本文字屬性   FOREGROUND_BLUE 藍色   FOREGROUND_GREEN 綠色   FOREGROUND_RED 紅色   FOREGROUND_INTENSITY 加強   BACKGROUND_BLUE 藍色背景   BACKGROUND_GREEN 綠色背景   BACKGROUND_RED 紅色背景   BACKGROUND_INTENSITY 背景色加強   COMMON_LVB_REVERSE_VIDEO 反色   */        const WORD FORE_BLUE   = FOREGROUND_BLUE;           //藍色文字屬性    const WORD FORE_GREEN  = FOREGROUND_GREEN;          //綠色文字屬性    const WORD FORE_RED    = FOREGROUND_RED;            //紅色文字屬性    const WORD FORE_PURPLE = FORE_BLUE | FORE_RED;      //紫色文字屬性    const WORD FORE_CYAN   = FORE_BLUE | FORE_GREEN;    //青色文字屬性    const WORD FORE_YELLOW = FORE_RED | FORE_GREEN;     //黃色文字屬性    const WORD FORE_GRAY   = FOREGROUND_INTENSITY;      //灰色文字屬性    const WORD BACK_BLUE   = BACKGROUND_BLUE;           //藍色背景屬性    const WORD BACK_GREEN  = BACKGROUND_GREEN;          //綠色背景屬性    const WORD BACK_RED    = BACKGROUND_RED;            //綠色背景屬性    const WORD BACK_PURPLE = BACK_BLUE | BACK_RED;      //紫色背景屬性    const WORD BACK_CYAN   = BACK_BLUE | BACK_GREEN;    //青色背景屬性    const WORD BACK_YELLOW = BACK_RED | BACK_GREEN;     //黃色背景屬性    const WORD BACK_GRAY   = BACKGROUND_INTENSITY;      //灰色背景屬性            int main()    {        HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE);    //獲得標準輸出裝置控制代碼        CONSOLE_SCREEN_BUFFER_INFO csbi;                        //定義視窗緩衝區資訊結構體        GetConsoleScreenBufferInfo(handle_out, &csbi);          //獲得視窗緩衝區資訊        SetConsoleTextAttribute(handle_out, FORE_BLUE);        printf("藍色字元\n");        SetConsoleTextAttribute(handle_out, FORE_RED);        printf("紅色字元\n");        SetConsoleTextAttribute(handle_out, FORE_GREEN);        printf("綠色字元\n");        SetConsoleTextAttribute(handle_out, FORE_PURPLE);        printf("紫色字元\n");        SetConsoleTextAttribute(handle_out, FORE_CYAN);        printf("青色字元\n");        SetConsoleTextAttribute(handle_out, FORE_YELLOW);        printf("黃色字元\n");        SetConsoleTextAttribute(handle_out, FORE_GRAY);        printf("灰色字元\n");        SetConsoleTextAttribute(handle_out, FORE_GREEN | FORE_BLUE | FORE_RED);        printf("白色字元\n");        SetConsoleTextAttribute(handle_out, BACK_BLUE);        printf("藍色背景\n");        SetConsoleTextAttribute(handle_out, BACK_RED);        printf("紅色背景\n");        SetConsoleTextAttribute(handle_out, BACK_GREEN);        printf("綠色背景\n");        SetConsoleTextAttribute(handle_out, BACK_PURPLE);        printf("紫色背景\n");        SetConsoleTextAttribute(handle_out, BACK_CYAN);        printf("青色背景\n");        SetConsoleTextAttribute(handle_out, BACK_YELLOW);        printf("黃色背景\n");        SetConsoleTextAttribute(handle_out, BACK_GRAY);        printf("灰色背景\n");        SetConsoleTextAttribute(handle_out, BACK_BLUE | BACK_RED | BACK_GREEN);        printf("白色背景\n");        SetConsoleTextAttribute(handle_out, BACK_GREEN | FORE_RED); //樣本:綠色背景紅色字元        printf("綠色背景與紅色字元的混合\n");        SetConsoleTextAttribute(handle_out, FOREGROUND_INTENSITY | FORE_RED);   //樣本:亮紅色字元        printf("亮色的產生,與加強色融合\n");        return 0;    }

上述樣本程式最好用C++來中編譯,因為有C語言的編譯器或者IDE不支援上述的定義常量的方式。需要從這個樣本中瞭解的是三原色的混合是用C語言位元運算中的按位或 | 運算子,背景顏色與字元顏色的同時定義也是使用這個運算子融合。另外,將任意顏色與對應的加強色(灰色,有前景和背景兩種,需要對應)融合後會成為對應顏色的高亮版,比如紅色字元與前景加強色的融合會結合成亮紅色。

至於反色,大家可以試試,當我設定了文字屬性為反色後,輸入字元都不顯示了,但是下標還在移動,我估計反色將白色字元變成了黑色字元,與黑色背景一樣,所以沒有顯示出來。至於反色與其他的組合以及其他的顏色組合,還需要大家一起探索、、、

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。