C/C++ 控制台演示彩色输出进度

时间:2023-03-09 06:30:50
C/C++   控制台演示彩色输出进度

    

#include <stdio.h>
#include <windows.h> BOOL SetConsoleColor(WORD wAttributes); int main()
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY); const int NUM = ;//任务完成总量 for (int i = ; i < NUM; i++)
{
//用Sleep()来代替一些费时的操作,如读写文件,大量的运算。
Sleep(); //some work to do
//输出百分比
printf("%.2lf%%\r", i * 100.0/ NUM);
}
return ;
} BOOL SetConsoleColor(WORD wAttributes)
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
return FALSE; return SetConsoleTextAttribute(hConsole, wAttributes);
}

  C/C++   控制台演示彩色输出进度

  

  知识点:

  1) \r   它是转义字符中的回车符,准确的讲应该是回到本行开始处。

  2) HANDLE GetStdHandle(DWORD nStdHandle);

   参数有:STD_INPUT_HANDLE,STD_OUTPUT_HANDLE及STD_ERROR_HANDLE。传入STD_OUTPUT_HANDLE就可以得到控制台输出设备的句柄。

    BOOL SetConsoleTextAttribute( HANDLE hConsoleOutput,WORD wAttributes);

   第一个参数为控制台standard input, standard output, or standard error的设备句柄,第二个参数用来设备设备的属性,这里详细介绍下表示颜色的参数。

    

   文字颜色使用如下组合:

  FOREGROUND_BLUE        0x0001 // text color contains blue.

  FOREGROUND_GREEN       0x0002 // text color contains green.

  FOREGROUND_RED         0x0004 // text color contains red.

  FOREGROUND_INTENSITY   0x0008 // text color is intensified.高亮颜色

   背景颜色使用如下组合:

   BACKGROUND_BLUE           0x0010 // background color contains blue.

  BACKGROUND_GREEN         0x0020 // background color contains green.

  BACKGROUND_RED             0x0040 // background color contains red.

BACKGROUND_INTENSITY   0x0080 // background color is intensified.

上面的颜色可以任意组合,如知道黄色可以由红色和绿色组成,所以可以用FOREGROUND_GREEN | FOREGROUND_RED来表示黄色的文字。

默认情况下控制台的文字颜色是白色即用FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE也可以直接用7表示,背景颜色为黑色即用0表示。