如何在code :: blocks中更改文本颜色和控制台颜色?

时间:2015-04-11 06:25:35

标签: c++ c gcc colors codeblocks

我正在用C编写程序。我想在控制台中更改文本颜色和背景颜色。我的示例程序是 -

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <dos.h>
#include <dir.h>

int main(int argc,char *argv[])
{
 textcolor(25);
 printf("\n \n \t This is dummy program for text color ");
 getch();

 return 0;
}

当我编译这个程序代码时:: blocks会给我一个错误 - textcolor未定义。为什么会这样?我在GNU GCC编译器和Windows Vista中工作。如果它不起作用什么是textcolor的副本。就像我想要改变控制台的背景颜色。编译器给出了相同的错误,只是函数的名称不同。如何更改控制台和文本的颜色。请帮忙。

即使答案是在C ++中,我也没关系。

8 个答案:

答案 0 :(得分:9)

textcolor 等函数在旧编译器中工作,如 turbo C Dev C 。 在今天的编译器中,这些功能不起作用。我将提供两个函数 SetColor ChangeConsoleToColors 。您将这些函数代码复制粘贴到程序中并执行以下步骤。我给出的代码在某些编译器中不起作用。

SetColor 的代码是 -

 void SetColor(int ForgC)
 {
     WORD wColor;

      HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
      CONSOLE_SCREEN_BUFFER_INFO csbi;

                       //We use csbi for the wAttributes word.
     if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
     {
                 //Mask out all but the background attribute, and add in the forgournd     color
          wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
          SetConsoleTextAttribute(hStdOut, wColor);
     }
     return;
 }

要使用此功能,您需要从程序中调用它。例如,我正在参加您的示例程序 -

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <dos.h>
#include <dir.h>

int main(void)
{
  SetColor(4);
  printf("\n \n \t This text is written in Red Color \n ");
  getch();
  return 0;
}

void SetColor(int ForgC)
 {
 WORD wColor;

  HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
  CONSOLE_SCREEN_BUFFER_INFO csbi;

                       //We use csbi for the wAttributes word.
 if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
 {
                 //Mask out all but the background attribute, and add in the forgournd color
      wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
      SetConsoleTextAttribute(hStdOut, wColor);
 }
 return;
}

运行程序时,您将获得红色的文本颜色。现在我要给你每种颜色的代码 -

Name         | Value
             |
Black        |   0
Blue         |   1
Green        |   2
Cyan         |   3
Red          |   4
Magenta      |   5
Brown        |   6
Light Gray   |   7
Dark Gray    |   8
Light Blue   |   9
Light Green  |   10
Light Cyan   |   11
Light Red    |   12
Light Magenta|   13
Yellow       |   14
White        |   15

现在我将提供 ChangeConsoleToColors 的代码。代码是 -

void ClearConsoleToColors(int ForgC, int BackC)
 {
 WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
               //Get the handle to the current output buffer...
 HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
                     //This is used to reset the carat/cursor to the top left.
 COORD coord = {0, 0};
                  //A return value... indicating how many chars were written
                    //   not used but we need to capture this since it will be
                      //   written anyway (passing NULL causes an access violation).
  DWORD count;

                               //This is a structure containing all of the console info
                      // it is used here to find the size of the console.
 CONSOLE_SCREEN_BUFFER_INFO csbi;
                 //Here we will set the current color
 SetConsoleTextAttribute(hStdOut, wColor);
 if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
 {
                          //This fills the buffer with a given character (in this case 32=space).
      FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);

      FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count );
                          //This will set our cursor position for the next print statement.
      SetConsoleCursorPosition(hStdOut, coord);
 }
 return;
}

在此功能中,您传递两个数字。如果你想要正常颜色,只需将第一个数字设为零,将第二个数字设为颜色即可。我的例子是 -

#include <windows.h>          //header file for windows
#include <stdio.h>

void ClearConsoleToColors(int ForgC, int BackC);

int main()
{
ClearConsoleToColors(0,15);
Sleep(1000);
return 0;
}
void ClearConsoleToColors(int ForgC, int BackC)
{
 WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
               //Get the handle to the current output buffer...
 HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
                     //This is used to reset the carat/cursor to the top left.
 COORD coord = {0, 0};
                  //A return value... indicating how many chars were written
                    //   not used but we need to capture this since it will be
                      //   written anyway (passing NULL causes an access violation).
 DWORD count;

                               //This is a structure containing all of the console info
                      // it is used here to find the size of the console.
 CONSOLE_SCREEN_BUFFER_INFO csbi;
                 //Here we will set the current color
 SetConsoleTextAttribute(hStdOut, wColor);
 if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
 {
                          //This fills the buffer with a given character (in this case 32=space).
      FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);

      FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count );
                          //This will set our cursor position for the next print statement.
      SetConsoleCursorPosition(hStdOut, coord);
 }
 return;
} 

在这种情况下,我将第一个数字设置为零,将第二个数字设置为15,因此控制台颜色将为白色,因为白色的代码为15.这对我来说是代码:: blocks。希望它也适合你。

答案 1 :(得分:7)

您还可以使用rlutil

  • 跨平台,
  • 仅限标题(rlutil.h),
  • 适用于C和C ++,
  • 实施setColor()cls()getch()gotoxy()等。
  • 许可证:WTFPL

您的代码会变成这样:

#include <stdio.h>

#include "rlutil.h"

int main(int argc, char* argv[])
{
    setColor(BLUE);
    printf("\n \n \t This is dummy program for text color ");
    getch();

    return 0;
}

对于C和C ++示例,请查看example.ctest.cpp

答案 2 :(得分:2)

我知道,我来晚了,但也许我的回答可以帮助某人。 基本上,这很简单。 这是我的代码。

#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
    HANDLE colors=GetStdHandle(STD_OUTPUT_HANDLE);

    string text;
    int k;
    cout<<" Enter your Text : ";
    getline(cin,text);
    for(int i=0;i<text.length();i++)
    {
        k>9 ? k=0 : k++;

        if(k==0)
        {
            SetConsoleTextAttribute(colors,1);
        }else
        {
            SetConsoleTextAttribute(colors,k);
        }
        cout<<text.at(i);
    }
}

输出

This Image will show you how it works

如果您想要完整的教程,请在这里观看我的视频:How to change Text color in C++

答案 3 :(得分:1)

这是一个在线功能,我用它创建了一个头文件,我使用Setcolor();代替,我希望这有帮助!您可以通过选择0-256范围内的任何颜色来更改颜色。 :)可悲的是,我相信CodeBlocks后来构建了window.h库...

#include <windows.h>            //This is the header file for windows.
#include <stdio.h>              //C standard library header file

void SetColor(int ForgC);

int main()
{
    printf("Test color");       //Here the text color is white
    SetColor(30);               //Function call to change the text color
    printf("Test color");       //Now the text color is green
    return 0;
}

void SetColor(int ForgC)
{
     WORD wColor;
     //This handle is needed to get the current background attribute

     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
     CONSOLE_SCREEN_BUFFER_INFO csbi;
     //csbi is used for wAttributes word

     if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
     {
          //To mask out all but the background attribute, and to add the color
          wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
          SetConsoleTextAttribute(hStdOut, wColor);
     }
     return;
}

答案 4 :(得分:1)

最新的编译器不再支持

textcolor函数。

这是更改代码块中文本颜色的最简单方法。 您可以使用system函数。

更改文本颜色:

#include<stdio.h> 
#include<stdlib.h> //as system function is in the standard library

int main()        
        {
          system("color 1"); //here 1 represents the text color
          printf("This is dummy program for text color");
          return 0;
        }

如果要同时更改文本颜色和控制台颜色,只需在system函数中添加其他颜色代码

更改文本颜色和控制台颜色:

system("color 41"); //here 4 represents the console color and 1 represents the text color

N.B:请勿在这样的颜色代码之间使用空格

system("color 4 1");

尽管如此,“代码块”将显示所有颜色代码。您可以使用此技巧来了解所有受支持的颜色代码。

答案 5 :(得分:0)

一种简单的方法......

system("Color F0");

Letter代表背景颜色,而数字代表文字颜色。

0 =黑色

1 =蓝色

2 =绿色

3 = Aqua

4 =红色

5 =紫色

6 =黄色

7 =白色

8 =灰色

9 =淡蓝色

A =浅绿色

B = Light Aqua

C =浅红色

D =浅紫色

E =浅黄色

F =亮白色

答案 6 :(得分:0)

system("COLOR 0A");

其中0A是背景和字体颜色的组合 0

答案 7 :(得分:-1)

您应该先定义函数textcolor。因为textcolor不是C中的标准函数。

void textcolor(unsigned short color) {
    HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hcon,color);
}