C語言控制台窗口圖形界面編程(三)


<知識分享>

在這里介紹一個設置文本屬性的函數,原型如下

[cpp]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
  1. BOOL SetConsoleTextAttribute(   // 設置WriteConsole等函數的字符屬性  
  2. HANDLE hConsoleOutput,          // 句柄  
  3. WORD wAttributes                // 文本屬性  
  4. );  

 

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

[cpp]  view plain copy 在CODE上查看代碼片 派生到我的代碼片
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <windows.h>  
  4. #include <conio.h>  
  5. /* 
  6. 基本文本屬性 
  7. FOREGROUND_BLUE 藍色 
  8. FOREGROUND_GREEN 綠色 
  9. FOREGROUND_RED 紅色 
  10. FOREGROUND_INTENSITY 加強 
  11. BACKGROUND_BLUE 藍色背景 
  12. BACKGROUND_GREEN 綠色背景 
  13. BACKGROUND_RED 紅色背景 
  14. BACKGROUND_INTENSITY 背景色加強 
  15. COMMON_LVB_REVERSE_VIDEO 反色 
  16. */  
  17.   
  18. const WORD FORE_BLUE   = FOREGROUND_BLUE;           //藍色文本屬性  
  19. const WORD FORE_GREEN  = FOREGROUND_GREEN;          //綠色文本屬性  
  20. const WORD FORE_RED    = FOREGROUND_RED;            //紅色文本屬性  
  21. const WORD FORE_PURPLE = FORE_BLUE | FORE_RED;      //紫色文本屬性  
  22. const WORD FORE_CYAN   = FORE_BLUE | FORE_GREEN;    //青色文本屬性  
  23. const WORD FORE_YELLOW = FORE_RED | FORE_GREEN;     //黃色文本屬性  
  24. const WORD FORE_GRAY   = FOREGROUND_INTENSITY;      //灰色文本屬性  
  25. const WORD BACK_BLUE   = BACKGROUND_BLUE;           //藍色背景屬性  
  26. const WORD BACK_GREEN  = BACKGROUND_GREEN;          //綠色背景屬性  
  27. const WORD BACK_RED    = BACKGROUND_RED;            //綠色背景屬性  
  28. const WORD BACK_PURPLE = BACK_BLUE | BACK_RED;      //紫色背景屬性  
  29. const WORD BACK_CYAN   = BACK_BLUE | BACK_GREEN;    //青色背景屬性  
  30. const WORD BACK_YELLOW = BACK_RED | BACK_GREEN;     //黃色背景屬性  
  31. const WORD BACK_GRAY   = BACKGROUND_INTENSITY;      //灰色背景屬性  
  32.   
  33. int main()  
  34. {  
  35.     HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE);    //獲得標准輸出設備句柄  
  36.     CONSOLE_SCREEN_BUFFER_INFO csbi;                        //定義窗口緩沖區信息結構體  
  37.     GetConsoleScreenBufferInfo(handle_out, &csbi);          //獲得窗口緩沖區信息  
  38.     SetConsoleTextAttribute(handle_out, FORE_BLUE);  
  39.     printf("藍色字符\n");  
  40.     SetConsoleTextAttribute(handle_out, FORE_RED);  
  41.     printf("紅色字符\n");  
  42.     SetConsoleTextAttribute(handle_out, FORE_GREEN);  
  43.     printf("綠色字符\n");  
  44.     SetConsoleTextAttribute(handle_out, FORE_PURPLE);  
  45.     printf("紫色字符\n");  
  46.     SetConsoleTextAttribute(handle_out, FORE_CYAN);  
  47.     printf("青色字符\n");  
  48.     SetConsoleTextAttribute(handle_out, FORE_YELLOW);  
  49.     printf("黃色字符\n");  
  50.     SetConsoleTextAttribute(handle_out, FORE_GRAY);  
  51.     printf("灰色字符\n");  
  52.     SetConsoleTextAttribute(handle_out, FORE_GREEN | FORE_BLUE | FORE_RED);  
  53.     printf("白色字符\n");  
  54.     SetConsoleTextAttribute(handle_out, BACK_BLUE);  
  55.     printf("藍色背景\n");  
  56.     SetConsoleTextAttribute(handle_out, BACK_RED);  
  57.     printf("紅色背景\n");  
  58.     SetConsoleTextAttribute(handle_out, BACK_GREEN);  
  59.     printf("綠色背景\n");  
  60.     SetConsoleTextAttribute(handle_out, BACK_PURPLE);  
  61.     printf("紫色背景\n");  
  62.     SetConsoleTextAttribute(handle_out, BACK_CYAN);  
  63.     printf("青色背景\n");  
  64.     SetConsoleTextAttribute(handle_out, BACK_YELLOW);  
  65.     printf("黃色背景\n");  
  66.     SetConsoleTextAttribute(handle_out, BACK_GRAY);  
  67.     printf("灰色背景\n");  
  68.     SetConsoleTextAttribute(handle_out, BACK_BLUE | BACK_RED | BACK_GREEN);  
  69.     printf("白色背景\n");  
  70.     SetConsoleTextAttribute(handle_out, BACK_GREEN | FORE_RED); //示例:綠色背景紅色字符  
  71.     printf("綠色背景與紅色字符的混合\n");  
  72.     SetConsoleTextAttribute(handle_out, FOREGROUND_INTENSITY | FORE_RED);   //示例:亮紅色字符  
  73.     printf("亮色的生成,與加強色融合\n");  
  74.     return 0;  
  75. }  

 

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

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM