zoukankan      html  css  js  c++  java
  • C语言控制台窗口图形界面编程(三):文本属性

           在这里介绍一个设置文本属性的函数,原型如下

    1 BOOL SetConsoleTextAttribute(   // 设置WriteConsole等函数的字符属性
    2 HANDLE hConsoleOutput,          // 句柄
    3 WORD wAttributes                // 文本属性
    4 );

           顺便提一下文本属性,其实就是颜色属性,有背景色和前景色(就是字符的颜色)两类,每一类只提供三原色(红,绿,蓝)和加强色(灰色,可与其他颜色搭配使用,使颜色变亮,后面会提到)。最后还有一个反色(不太清楚这个到底怎么用,很奇葩的东西)。示例程序如下:

     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("蓝色字符
    ");
    40     SetConsoleTextAttribute(handle_out, FORE_RED);
    41     printf("红色字符
    ");
    42     SetConsoleTextAttribute(handle_out, FORE_GREEN);
    43     printf("绿色字符
    ");
    44     SetConsoleTextAttribute(handle_out, FORE_PURPLE);
    45     printf("紫色字符
    ");
    46     SetConsoleTextAttribute(handle_out, FORE_CYAN);
    47     printf("青色字符
    ");
    48     SetConsoleTextAttribute(handle_out, FORE_YELLOW);
    49     printf("黄色字符
    ");
    50     SetConsoleTextAttribute(handle_out, FORE_GRAY);
    51     printf("灰色字符
    ");
    52     SetConsoleTextAttribute(handle_out, FORE_GREEN | FORE_BLUE | FORE_RED);
    53     printf("白色字符
    ");
    54     SetConsoleTextAttribute(handle_out, BACK_BLUE);
    55     printf("蓝色背景
    ");
    56     SetConsoleTextAttribute(handle_out, BACK_RED);
    57     printf("红色背景
    ");
    58     SetConsoleTextAttribute(handle_out, BACK_GREEN);
    59     printf("绿色背景
    ");
    60     SetConsoleTextAttribute(handle_out, BACK_PURPLE);
    61     printf("紫色背景
    ");
    62     SetConsoleTextAttribute(handle_out, BACK_CYAN);
    63     printf("青色背景
    ");
    64     SetConsoleTextAttribute(handle_out, BACK_YELLOW);
    65     printf("黄色背景
    ");
    66     SetConsoleTextAttribute(handle_out, BACK_GRAY);
    67     printf("灰色背景
    ");
    68     SetConsoleTextAttribute(handle_out, BACK_BLUE | BACK_RED | BACK_GREEN);
    69     printf("白色背景
    ");
    70     SetConsoleTextAttribute(handle_out, BACK_GREEN | FORE_RED); //示例:绿色背景红色字符
    71     printf("绿色背景与红色字符的混合
    ");
    72     SetConsoleTextAttribute(handle_out, FOREGROUND_INTENSITY | FORE_RED);   //示例:亮红色字符
    73     printf("亮色的生成,与加强色融合
    ");
    74     return 0;
    75 }

           上述示例程序最好用C++来中编译,因为有C语言的编译器或者IDE不支持上述的定义常量的方式。需要从这个示例中了解的是三原色的混合是用C语言位运算中的按位或 | 运算符,背景颜色与字符颜色的同时定义也是使用这个运算符融合。另外,将任意颜色与对应的加强色(灰色,有前景和背景两种,需要对应)融合后会成为对应颜色的高亮版,比如红色字符与前景加强色的融合会结合成亮红色。


           至于反色,大家可以试试,当我设置了文本属性为反色后,输入字符都不显示了,但是下标还在移动,我估计反色将白色字符变成了黑色字符,与黑色背景一样,所以没有显示出来。至于反色与其他的组合以及其他的颜色组合,还需要大家一起探索、、、

  • 相关阅读:
    JavaScript 为字符串添加样式 【每日一段代码80】
    JavaScript replace()方法 【每日一段代码83】
    JavaScript for in 遍历数组 【每日一段代码89】
    JavaScript 创建用于对象的模板【每日一段代码78】
    html5 css3 新元素简单页面布局
    JavaScript Array() 数组 【每日一段代码88】
    JavaScript toUTCString() 方法 【每日一段代码86】
    位运算
    POJ 3259 Wormholes
    POJ 3169 Layout
  • 原文地址:https://www.cnblogs.com/JZQT/p/3802438.html
Copyright © 2011-2022 走看看