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语言位运算中的按位或 | 运算符,背景颜色与字符颜色的同时定义也是使用这个运算符融合。另外,将任意颜色与对应的加强色(灰色,有前景和背景两种,需要对应)融合后会成为对应颜色的高亮版,比如红色字符与前景加强色的融合会结合成亮红色。


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

  • 相关阅读:
    Ratchet(WebSockets for PHP)的官方TUTORIALS 的实践
    TCP_Wrappers访问控制
    PAM认证机制
    AIDE入侵检测系统
    使用gpg来加密数据
    openssl数据加密
    搭建私有CA
    进程概念
    进程管理命令
    Linux的信号管理
  • 原文地址:https://www.cnblogs.com/JZQT/p/3802438.html
Copyright © 2011-2022 走看看